Xpath基本定位语法
表达式 | 说明 |
/ | 绝对定位,从根节点选取 |
// | 相对定位 从匹配选择的当前结点选择文档中的节点,而不考虑它们的位置 |
. | 选取的当前节点 |
.. | 选取当前节点的父节点 |
@ | 选取属性,@class=”XXX” @id=”XXX”,属性放在中括号[]中 |
* | 通配符。匹配所有. // * |
@* | 通配符。匹配所有属性. // * [@*=“hello”] |
绝对定位
1:以单斜杠(/)开头
2:从页面根元素(html标签)开始,严格按照元素在html页面中的位置和顺序向下查找
3:单斜杠(/)左边的元素为父元素,右边的元素为直系子元素
缺陷:
1:页面元素一旦发生变化,绝对路径就会失效
2:绝对路径需要一层一层的检索,速度会慢点
相对定位
1:两个斜杠(//)开头表示相对路径
2:不考虑元素在当前页面中的绝对路径和位置
3:考虑页面是否存在符合表达式的元素即可
在xpath的相对定位中,不考虑元素的路径和位置,考虑的是如何能够唯一找到这个元素。
所以,需通过元素本身的特征,比如标签名、属性值等,来进行定位,或者考虑元素周边的关系(轴定位表达式)
使用标签名+节点属性定位
语法:
//标签名[@属性名=”值”]
举例:
//a[@name="tj_login" ]
组合元素索引(下标)定位
举例:
//li[@class=”1”][2]//img
意思是:
1:先在页面中找到标签名为li的,并且其class属性为1的元素
2:取1中所有的元素中的第二个元素
3:在2中元素的后代元素中,找到标签名为img的元素
//li[@class=”course-card-item”][2]//img
也就是说,可以将相对定位的元素并在一起用
通过部分属性值匹配
语法:
//标签名[contains(@属性名,部分属性值)]
举例:
//img[contains(@src,”28551_NVSc_1182.jpg”)]
使用文本内容匹配
函数:text()
文本全部匹配:text()=文本内容
文本部分匹配:contains(text(),部分文本内容)
举例:
文本全部匹配://h2[text()=”文本内容”]
文本部分匹配://h2[contains(text(),”部分文本内容”)]
使用轴定位表达式
轴运算名称
Ancestor:祖先结点,包括父
Parent:父节点
Preceding:当前元素节点标签之前的所有节点(html页面先后顺序)
Preceding-sibling:当前元素节点标签之前的所有兄弟结点(同级)
Following:当前元素节点标签之后的所有结点(html页面先后顺序)
Following-sibling:当前元素节点标签之后的所有兄弟结点(同级)
使用语法:
轴名称::结点名称
举例:
//a[text()="软件测试之常用工具大集合/Fiddler/httpwatch/saopui/testsoap"]/parent::h4/preceding-sibling::div//span
使用小技巧
如何检测你的定位表达式是否正确
谷歌浏览器,按F12键后,在Elements区域,按下ctrl+F,就会弹出一个输入框,在输入框区域中,输入你的定位表达式,按下enter键。在输入框的末尾处,会显示a of n(n:表示当前页面中,匹配此表达式的,一共有多少个元素;a:表示html中黄色背景所在的元素为第几个)
比如:1 of 1,表示一共找到了1个元素,就是当前这个
1 of 5,表示一共找到了5个元素,当前黄色背景的元素为第一个。