Python自动化测试——元素定位

1.selenium简介

Selenium是一个用于Web应用程序测试的工具。Selenium是直接运行在浏览器中,模拟用户操作web界面。支持多平台:windows、linux、MAC ,支持多浏览器:ie、firefox、chrome等浏览器。

2. 启动浏览器

# 导入webdriver模块
from selenium import webdriver
# 创建driver对象,指定Chrome浏览器
driver = webdriver.Chrome()
# 创建driver对象,指定Firefox浏览器
driver = webdriver.Firefox()
# 创建driver对象,指定ie浏览器
driver = webdriver.Ie()

3. 元素定位

为了方便我们查找到相应的元素位置,selenium中的webdriver提供了几种元素定位方式。常用的有以下8种元素定位方式:

find_element_by_id()
find_element_by_name()
find_element_by_class_name()
find_element_by_tag_name()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_xpath()
find_element_by_css_selector()
​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

3.1 id和name定位

id和name是我们常用的元素定位方法,在大多数情况下,开发人员为了区分不同的控件,使其取的名称有意义,一般都会使用id和name这两个属性。

比如这两个html代码:

<input type="text" id="username" user="用户名" class="center_font"> 
<input type="password" name="password" size="19" pass="密码"> 

利用html代码中的id和name属性对元素进行定位:

通过id=”username”来定位: driver.find_element_by_id("username") 
通过name=”password”来定位: find_element_by_name("password") 

3.1.1 tag name和class name定位

开发人员除了用id和name两个元素外,还会使用class name和tag name 这样的属性

<div id="search" class="search" style="margin-top:2px"> 
<form id="t" onsubmit=" returnname="s" method="GET"  action="/search"> 
<input id="kw" class="kw" type="text" name="word" autocomplete="off"> 

(1)通过元素中带的class属性对元素进行定位:

通过class=”search”来定位: find_element_by_class_name("search")
通过class=”kw”来定位: find_element_by_class_name("kw") 

(2)通过tag标签名对元素进行定位:

通过<div>来定位: find_element_by_tag_name("div") 
通过<form>来定位: find_element_by_tag_name("form") 
通过<input>来定位: find_element_by_tag_name("input") 

tag name由于出现的次数太多了,所以一般不用这个来定位元素。

3.1.2 link text与partial link text定位

有时候需要操作的元素是一个文字链接,那么我们可以通过link text或partial link text进行元素定位。

<ahref="http://news.rich.com" name="ts_news">新闻</a> 
<ahref="http://tieba.rich.com"name="ts_tieba">贴吧</a> 
<ahref="http://zhidao.rich.com"name="ts_zhidao">知道</a> 

(1)通过link text定位元素:

find_element_by_link_text("新闻")
find_element_by_link_text("贴吧")
find_element_by_link_text("知道") 

(2)通过partial link text来定位:

find_element_by_partial_link_text("新") 
find_element_by_partial_link_text("吧") 
find_element_by_partial_link_text("知") 

对比:这两种定位方式都是通过文字链接来获取所需的元素位置,一般页面上是不会出现两个相同的链接,这种方式也是一种比较简单的定位方式。

3.1.3 XPath定位

XPath是一种在XML文档中定位元素的语言。xpath定位可分为绝对路径定位和相对路径定位。

以一个层级关系页面定位为例:

<html xmlns="http://www.zn.com/xhtml" lang="zh-cn">
<body><div id="operate_zn" class="zn" style="width: 64px;" title=""><a href="javascript:void(0)" class="zn-single" tabindex="-1"><span>or</span></a><div class="zn-drop" style="left: -9000px; width: 62px; top: 0px;"><div class="zn-search" style=""><input id="input" type="text" name="operate_zn" autocomplete="off" style="width: 27px;"></div></div></div>
</body>
</html>

比如我们要定位输入框input中的元素:

(1)通过绝对路径来定位:

find_element_by_xpath("/html/body/div/div/div/input") 

(2)通过相对路径来定位:

通过自身的id属性定位: find_element_by_xpath("//input[@id=’input’]") 
通过上级目录的id属性定位: find_element_by_xpath("//div[@id=’operate_zn’]/div/div/input") 

对比:当我们很难定位到一个元素时,就可以选择绝对路径和相对路径的方式进行定位,但是绝对路径有一个缺点,就是当元素在很多级目录下时,我们要写很长的路径,而且一旦路径变化,就要修改代码,不利于代码的维护。

3.1.4 CSS定位

CSS定位是一种比较灵活获取控件位置的方式,一般情况下定位速度要比XPath快。CSS使用选择器来为页面元素绑定属性,这些选择器可以被selenium用作另外的定位策略。

CSS选择器常见语法:

 以这个html代码为例:

<input id="kw" class="s_ipt" type="text" autocomplete="off" maxlength="100" name="wd"/> 
(1)以#号表示id的属性: find_element_by_css_selector("#kw") 
(2)以.号表示class的属性: find_element_by_css_selector(".s_ipt")
(3)以层级关系来定位属性: find_element_by_css_selector("form#form>span>input") 

这里就举了三个类型,css定位方式比较多,如果有需要的话,可以继续深入学习

总结:

自动化测试中比较重要的其实就是元素定位,也是比较难的。我们可以根据不同的情况,选择比较合适的元素定位方式。虽然XPath和CSS可以定位到复杂的元素,但相对于id/name元素定位来说代码的维护成本要高一点。相对来说,id/name的定位方式是比较容易上手的,很适合新手。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/187598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaWeb服务器详解和后端分层解耦

JavaWeb HTTP协议请求数据格式响应数据格式协议解析 Web服务器请求响应请求参数的接收响应 分层解耦IOC&DI入门IOC详解 HTTP协议 超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则 特点&#xff1a; 基于TCP协议&#xff1a;面向连接&#xff0c;安全 …

【Android知识笔记】架构专题(二)

分层架构概论 分层的依据是什么? 关注点分离:自下而上,从机器到用户,从抽象到具体,从通用到业务,每一层,各自关注各自的抽象层次。修改与影响:不同层之间的代码或技术方案修改,彼此互不影响。例如 UI 界面从 xml 布局改成 Jetpack Compose 之后,不应该影响数据层。换…

kafka中的常见问题处理

文章目录 1. 如何防⽌消息丢失2. 如何防⽌重复消费3. 如何做到消息的顺序消费4. 如何解决消息积压问题4.1 消息积压问题的出现4.2 消息积压的解决⽅案 5. 实现延时队列的效果5.1 应用场景5.2 具体方案 1. 如何防⽌消息丢失 ⽣产者&#xff1a;1&#xff09;使⽤同步发送 2&…

Maya 2024(3D建模、动画和渲染软件)

Maya 2024是一款非常强大的3D建模、动画和渲染软件&#xff0c;它提供了许多新功能和改进&#xff0c;以帮助建模师、动画师和渲染师更加高效地进行创作。 在建模方面&#xff0c;Maya 2024引入了Symmetry&#xff08;对称&#xff09;功能&#xff0c;可以在网格两侧生成均匀…

学习笔记三十六:通过Ingress-nginx实现灰度发布

通过Ingress-nginx实现灰度发布 灰度发布原理将新版本灰度给部分用户切一定比例的流量给新版本 部署两个版本的服务以 nginx 为例&#xff0c;先部署一个 v1 版本:部署一个 v2 版本再创建一个 Ingress&#xff0c;对外暴露服务&#xff0c;指向 v1 版本的服务:访问验证 基于 He…

智能井盖位移报警器效果一览,感知井盖异常

井盖位移是指井盖在受到外力作用下产生的位置移动。这种现象通常发生在道路颠簸、车流量较大或地下管道受压较大的区域&#xff0c;当然也不排除会出现在一些角落内。当井盖发生位移或倾斜时&#xff0c;不仅会影响城市内道路的通行&#xff0c;还会给行人和车辆带来安全隐患。…

web:catcat-new(文件包含漏洞、flask_session伪造)

前提知识 /etc/passwd 该文件储存了该Linux系统中所有用户的一些基本信息&#xff0c;只有root权限才可以修改。其具体格式为 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell&#xff08;以冒号作为分隔符&#xff09; /proc/self proc是一个伪文件系统…

【前缀和]LeetCode1862:向下取整数对和

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 作者推荐 动态规划LeetCode2552&#xff1a;优化了6版的1324模式 题目 给你一个整数数组 nums &#xff0c;请你返回所有下标对 0 < i, j < nums.length 的 …

LangChain的函数,工具和代理(二):LangChain的表达式语言(LCEL)

LangChain Expression Language (LCEL) 是 LangChain 工具包的重要补充&#xff0c;旨在提高文本处理任务的效率和灵活性。LCEL 允许用户采用声明式方法来组合链&#xff0c;便于进行流处理、批处理和异步任务。其模块化架构还允许轻松定制和修改链组件。LCEL 的优势之一是它使…

知识图谱最简单的demo实现——基于pyvis

1、前言 我们在上篇文章中介绍了知识图谱的简单实现&#xff0c;最后使用neo4j进行了展示&#xff0c;对于有些情况我们可能并不想为了查看知识图的结果再去安装一个软件去实现&#xff0c;那么我们能不能直接将三元组画出来呢/ 接下来我们就介绍一个可视化的工具pyvis&#…

STM32/GD32_分散加载

Q&#xff1a;如何将一个变量、某个源文件的函数在编译阶段就存储在用户指定的区域&#xff1f; KEIL环境&#xff1a;.map后缀文件、.sct后缀文件 IAR环境&#xff1a;.map后缀文件、.icf后缀文件 【map文件】 对固件里面的变量、函数、常量等元素的存储空间进行分配的说明…

ffmpeg开发 环境配置

ffmpeg开发简图 1 下载ffmpeg开发包 https://ffmpeg.org/download.html 包含三个版本&#xff1a;Static、Shared以及Dev Static --- 包含3个应用程序&#xff1a;ffmpeg.exe , ffplay.exe , ffprobe.exe&#xff0c;体积都很大&#xff0c;相关的DLL已经被编译到exe里面去…

VS2022使用Vim按键

VS2022使用Vim按键 在插件管理里面搜索VsVim 点击安装&#xff0c;重启VS 工具->选项->VsVim 配置按键由谁处理&#xff0c;建议Ctrl C之类常用的使用VS处理&#xff0c;其它使用Vim处理

golang WaitGroup的使用与底层实现

使用的go版本为 go1.21.2 首先我们写一个简单的WaitGroup的使用代码 package mainimport ("fmt""sync" )func main() {var wg sync.WaitGroupwg.Add(1)go func() {defer wg.Done()fmt.Println("xiaochuan")}()wg.Wait() }WaitGroup的基本使用场…

力扣202题 快乐数 双指针算法

快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1&#…

在ubuntu虚拟机上安装不同版本的交叉编译工具链

在之前的章节中&#xff0c;学习了如何安装了4.8.3的交叉编译工具链&#xff1a; 交叉编译 和 软硬链接 的初识&#xff08;面试重点&#xff09;-CSDN博客 但是&#xff0c;在之后学习内核编译时&#xff0c;由于我的树莓派内核版本较高&#xff0c;为6.1&#xff0c;所以在…

【android开发-01】android中toast的用法介绍

1&#xff0c;android中toast的作用 在Android开发中&#xff0c;Toast是一种用于向用户显示简短消息的轻量级对话框。它通常用于向用户提供一些即时的反馈信息&#xff0c;例如操作结果、提示或警告。 Toast的主要作用如下&#xff1a; 提供反馈&#xff1a;Toast可以在用户…

chrome vue devTools安装

安装好后如下图所示&#xff1a; 一&#xff1a;下载vue devTools 下载链接https://download.csdn.net/download/weixin_44659458/13192207?spm1001.2101.3001.6661.1&utm_mediumdistribute.pc_relevant_t0.none-task-download-2%7Edefault%7ECTRLIST%7EPaid-1-13192207…

知乎禁止转载的回答怎么复制做笔记?

问题 对于“禁止转载”的回答&#xff0c;右键复制是不行的&#xff0c;ctrl-c也不行&#xff0c;粘贴之后都是当前回答的标题。稍微看了代码&#xff0c;应该是对copy事件进行了处理。不过这样真的有用吗&#xff0c;真是防君子不防小人&#xff0c;只是给收集资料增加了许多…

sso单点登录

一&#xff1a;业务需求 客户要求在门户网站上实现一次登录能访问所以信任的系统 二&#xff1a; 处理方式 实现sso单点登录需要前后端配合处理 1. 通过网页授权登录获取当前用户的openid&#xff0c;userid 2.设置单点登录过滤器并进行参数配置 3.另外写一个登录接口&…