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

WebDriver 提供了8种元素的定位方法,分别是:

id 定位:find_element(By.ID, "kw")

name 定位: find_element(By.NAME, "")

tag 定位: find_element(By.TAG, "")

class 定位: find_element(By.CLASS_NAME, "")

link text 定位: find_element(By.LINK_TEXT, "")

partial link 定位: find_element(By.PARTIAL_LINK_TEXT, "")

XPath 定位: find_element(By.XPATH, "")

CSS_selector 定位: find_element(By.CSS_SELECTOR, "")

要使用这些定位方法,首先要了解页面元素的定位

了解html结构

打开一个页面,进入开发者模式,可以看到页面代码,这些html结构有下面这些特征:

1)它们由标签对组成

<html></html>

<body></body>

<div></div>

html、div是标签的标签名

2)标签有各种属性:id、name等

3)标签对之间可以有文本数据

4)标签有层级关系

<html>

<body>

</body>

</html>

<div>

<form>

<input />

</form>

<div>

如果把input看做子标签,那么form 就是它的父标签

如何定位元素

如果把页面上的元素看做人,那么在现实世界如何找人对应的人呢?

1)首先,可以通过人本身的属性进行查找,例如他的姓名、身份证号等;对应到页面元素上就是,id、name、class name、tag name。

2)其次,可以通过他的位置进行查找,例如,xx国、xx市、xx区、xx路、xx号;对应页面元素,可以使用XPath和css通过标签层级关系的方式进行查找。

3)最后,还可以借助相关人的属性来查找某人,例如,我可以通过小明爸爸联系到小明;XPath和css同样提供了相似的定位策略来查找元素

1、id定位

HTML规定,id在HTML文档中必须是唯一的,这类似与身份证号,具有唯一性。

2、name定位

HTML规定,name用来指定元素的名称,就像人名一样

3、class定位

HTML规定,calss 用来指元素的类名,用法跟id、name一样

4、tag定位

HTML用tag来定义不同页面的元素,例如,input一般用来定义输入框,a标签用来定义超链接等

标签往往用来定义一类功能,所以一个页面中一个标签就会有很多,所以通常不会用tag来定位元素

5、link定位

link专门用来定位文本链接

6、partial link定位

partial link是link定位的一个补充,有时候文本链接比较长,就可以取部分文本进行定位,只要这个文本可以唯一标识即可

7、XPath 定位

1)绝对路径

就是参考开发者工具所展示的代码层级结构,通过标签名的层级关系来定位元素的绝对路径;如果一个层级下有多个相同的标签名,那么就按照上下顺序确定是第几个,eg div[2]表示当前层级下第2个div标签

2)利用元素属性定位

eg,//input[@id='kw'] //input表示当前某个input标签,[@id='kw'] 表示这个元素的id是kw。也可以使用name 或者 class来定位

如果不想指定具体的标签名,可以使用*代替,eg,//*[@name='wd']

当然,使用的属性也不局限于这些,元素的任意属性都可以使用,只要它能唯一标识这个元素。

3)层级与属性结合定位

如果一个元素本身没有可以唯一标识的属性值,但是它的上一级元素可以唯一标识,,那就可以通过上一级 从而找到 改元素

eg,//span[@id='s_ipt_wr']/input 含义是,找到id是s_ipt_wr的span标签,从而找到它的子标签input

4)使用逻辑运算符定位

如果一个属性无法唯一区分元素,name可以使用逻辑运算符连接多个属性条件来查找元素

eg,//input[@id='kw' and @class='s_ipt']

5)使用contains方法

contains 方法用于匹配一个属性中包含的字符串,eg,//span[contains(@class, 's_ipt_wr')]/input

6)使用text()方法

用于匹配显示文本信息,eg,通过link text 定位文字链接://a[text(),'新闻']

该方法也可以跟contains方法配合使用

8、CSS定位

css是一种语言,用来描述HTML和XML文档的表现。css使用选择器为页面元素绑定属性。css选择器可以比较灵活的选择控件的任意属性,一般情况下,css的定位速度比XPath的定位速度快。

css的常见语法:

|---------------------|-------------------|-----------------------------|
| 选择器 | 例子 | 描述 |
| .class | .intro | class选择器,选择class为intro的所有元素 |
| #id | #firstname | id选择器,选择id为firstname的所有元素 |
| * | * | 选择所有元素 |
| element | p | 选择所有标签p的元素 |
| element>element | div>input | 选择所有父元素为div的所有input元素 |
| element+element | div+input | 选择同一级紧接在div元素后的所有input元素 |
| [attribute=value] | [target=_blank] | 选择所有target属性为_blank的元素 |

使用例如,find_element(By.CSS_SELECTOR,'.s_ipt')

也可以进行组合使用:find_element(By.CSS_SELECTOR,'form#form>span>input#kw')

相关推荐
小白学大数据5 小时前
正则表达式在Kotlin中的应用:提取图片链接
开发语言·python·selenium·正则表达式·kotlin
awonw14 小时前
[java][框架]springMVC(1/2)
测试工具·postman
迃幵chen19 小时前
wireshark-网络分析工具
网络·测试工具·wireshark
孤蓬&听雨20 小时前
RabbitMQ自动发送消息工具(自动化测试RabbitMQ)
分布式·测试工具·自动化·rabbitmq·自动发送消息
土小帽软件测试20 小时前
jmeter基础01-2_环境准备-Mac系统安装jdk
java·测试工具·jmeter·macos·软件测试学习
qq_433716951 天前
测试分层:减少对全链路回归依赖的探索!
自动化测试·软件测试·功能测试·测试工具·回归·pytest·postman
qq_433716951 天前
Postman断言与依赖接口测试详解!
自动化测试·软件测试·功能测试·测试工具·mysql·接口测试·postman
如光照1 天前
Linux与Windows中的流量抓取工具:wireshark与tcpdump
linux·windows·测试工具·网络安全
土小帽软件测试1 天前
jmeter基础03_汉化jmeter界面
测试工具·jmeter·软件测试学习
小白~小黑1 天前
软件测试基础十二(python变量进阶)
python·功能测试·测试工具·自动化