细节拿捏xpath定位
- 6.xpath定位方式:表示的由xml(extend markup language)可扩展标记语言,也是由一系列标签所构成,主要是实现数据文件(用于做配置文件))+path,以xml格式的树状结构形式进行递归逐级定位
- xpath的定位方式两种方式:绝对路径定位、相对路径定位
- 绝对路径:从顶级父标签到当前标签的整个结构过程称之为绝对路径;
-
- 在使用绝对路径时,如果同级中存在多个相同的标签的话,则通过索引进行具体选择(其索引的初始值是从1开始);但是在实际脚本开发过程中,一般不用,因为如果使用绝对路径则跨度较大,只需要页面稍微修改结构则整个定位失败;(稳定性极差)
-
- 相对路径:表示的是相当于当前标签而言;
-
- i.属性定位语法://标签名[@属性名=属性值]
-
- 注意:1.标签名可以具体,也可以使用*(表示的任意标签,定义的范围会比具体的标签更广,可能定位多个对象) 2.属性值如果是字符串的话则需要使用引号;
-
value='//*[@id="uname"]'
-
- ii.使用逻辑运算符进行实现多个属性的定位:and or
-
- 例子:
//input[@id="uname" and @class="text"]
- 但是一般组合的属性不会超过2个,因为设定属性过多其脚本的依赖性越高;
- 例子:
-
- iii.嵌入函数完成xpath定位:
-
- 1.文本函数定位://标签名[text()=对应标签的文本内容]2.包含函数定位:
- 文本内容中是否嵌入标签、文本内容表示的完整文本;
- 例子:
# 如果定位得到其中的一个元素,则该对象可以获取所有的其他属性信息
get_element=driver.find_element(by=By.XPATH,value='//label[text()="请输入密码"]')
print(get_element.get_attribute("class"))
- 2.包含函数定位://标签名[contains(@属性名,对应属性值的部分值)]
- 例子:
#3.通过属性值中的部分值进行定位
driver.find_element(by=By.XPATH,value='//input[contains(@id,"na")]').send_keys("admin")
- 例子:
- 3.以指定字符开头定位://标签名[starts-with(@属性名,对应属性名的前面部分值)]
- 例子:
-
#4.以指定字符开头定位
driver.find_element(by=By.XPATH,value='//input[starts-with(@id,"un")]').send_keys("admin") - 4.以指定字符结尾定位://标签名[ends-with(@属性名,对应属性名的前面部分值)]
- 说明:一般starts-with,ends-with都可以使用contains完成;
- 1.文本函数定位://标签名[text()=对应标签的文本内容]2.包含函数定位:
-
- i.属性定位语法://标签名[@属性名=属性值]
-