文章目录
-
-
- xpath介绍和基本语法
-
- 基本语法
- 绝对定位和相对定位
- 谓语条件
-
- 1.索引取值
- 2.有某个属性:[@属性]
- 3.属性为某个特定值[@属性=值]
- 4.子元素中属性为某个特定值:[//子元素/@属性=值]
- 文本 [text()=‘’]
- 通配符和逻辑运算 and or
- 函数
- 轴定位
- xpath使用的注意点
- css和xpath比较
-
xpath介绍和基本语法
基本语法
表达式 | 描述 |
---|---|
nodename | 选取此节点的所有子节点 |
/ | 从根节点选取,绝对路径 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
. | 选取当前节点 |
… | 选取当前节点的父节点。 |
@ | 选取属性。 |
绝对定位和相对定位
- 绝对路径:每次从根节点html开始
- 相对路径:每次只需从第一个已经找到的节点开始
- 绝对定位的劣势:
- 前端经常变化,加div之类的,下次就不能用了
- 表达更加繁琐
谓语条件
谓语被嵌在方括号中,用来查找某个特定的节点或者包含某个指定的值的节点,也就是额外的条件。文本也可以定位。
1.索引取值
注意点:
-
索引的顺序是从1开始的,不是0
-
索引的优先顺序比//高,建议使用索引的时候,前面的部分使用括号包起来
(//input[@class='s_ipt'])[1](//input)[1] 和 //input[1]是有区别的
2.有某个属性:[@属性]
driver.find_element_by_xpath("//input[@id]")
3.属性为某个特定值[@属性=值]
driver.find_element_by_xpath("//input[@id=‘kw’]")
4.子元素中属性为某个特定值:[//子元素/@属性=值]
# span标签卡下有一个input子标签,id=kw
driver.find_element_by_xpath("//span[input/@id=‘kw’]")
文本 [text()=‘’]
//a[text()='百度一下']
通配符和逻辑运算 and or
# 逻辑运算 and。要满足所有的条件才可以
driver.find_element_by_xpath("//span[@class='nav-text-content' and text()='xxxx']")# 逻辑运算 or.满足任何一个条件都可以
driver.find_element_by_xpath("//a[text()='新闻' or text()='地图']")
注意点:
- find_element_by_class_name进行定位,只能取一个且不能有空格
- xpath通过class属性定位的时候,class属性值可以有空格,且必须将class中的内容全部写上才能够定位到
函数
函数名 | 说明 |
---|---|
text() | 获取该标签的文本 |
contains(str1,str2) | str1是否包含str2 |
starts-with(str1,str2) | str1是否以str2开头 |
driver.find_element_by_xpath("//span[contains(@title,'设置')]")
driver.find_element_by_xpath("//span[starts-with(@title,'设置')]")
轴定位
# /轴名称(元素关系)::节点名称
例://input/ancestor::span
- 轴定位包含了路径寻找,如果需要多层往上,轴定位更加方便
- 兄弟姐妹都可以
轴名称 | 结果 |
---|---|
ancestor | 选取当前节点的所有先辈(父、祖父等)。 |
ancestor-or-self | 选取当前节点的所有先辈(父、祖父等)以及当前节点本身。 |
attribute | 选取当前节点的所有属性。 |
child | 选取当前节点的所有子元素。 |
descendant | 选取当前节点的所有后代元素(子、孙等)。 |
descendant-or-self | 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。 |
following | 选取文档中当前节点的结束标签之后的所有节点。 |
namespace | 选取当前节点的所有命名空间节点。 |
parent | 选取当前节点的父节点。 |
preceding | 选取文档中当前节点的开始标签之前的所有节点。 |
preceding-sibling | 选取当前节点之前的所有同级节点。 |
self | 选取当前节点。 |
可参考以下博客:https://www.cnblogs.com/hanmk/p/9015502.html
xpath使用的注意点
- 什么时候用xpath
没有明显特征的元素,使用其他的方法不好定位
- 写好的xpath要先到浏览器去验证
css和xpath比较
CSS完全与HTML一起使用,XPATH必须能够使用遍历DOM树。
- css用途更少,xpath的效率更低
也就是说 ,css是与HTML绑定在一起的,你换成XML其他的标记语言,就不行了。Xpath是和DOM绑定在一起的,DOM是什么?是HTML和JS的中介,所以还需要时间去生成DOM对象,但是只要有DOIM,你就可以用Xpath,也就是说说xpath的用途更广,手机也可以用,其他客户端也可以用。
- css的效率更快
xpath在找到一个元素是可以上下移动的,而css只能进行横向。xpath在IE中效率会高,其他谷歌和火狐浏览器都会差一些。
- css选择表达更加简洁,通常非常短,但是与Xpath相比,功能相对较弱。
最后总结一下:
如果你对此文有任何疑问,如果你也需要接口项目实战,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入:软件测试技术群:593462778,群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。
作者:暗潮汹涌
原创不易,欢迎转载,但未经作者同意请保留此段声明,并在文章页面明显位置给出原文链接。