selenium之如何使用xpath定位页面元素
一.概述
xpath是一种选择器,是一种xml路径语言,在自动化测试过程中能够准确的定位页面的元素,可以说xpath
能解决99%的元素定位的问题;
二.xpath常用符号说明
/ 表示绝对路径,绝对路径是指从根目录开始
//表示相对路径
.表示当前层
..表示上一层
*表示通配符
@表示属性
[]属性的判断条件表达式
三.常用的xpath的写法
/html/div
/html//div 表示选择根目录下的所有的子孙后代节点中的div节点,//表示相对路径
//div 表示选择所有的div节点
//div/div 表示选择所有的div节点的子节点中含有div的节点
//div/div/. 表示选择//div/div节点的当前层的节点,与//div/div的结果相同
//div/div/.. 表示选择//div/div节点的上一层节点,也就是选择一个div节点,该div节点的子节点有div节点
//div/div/* ,表示选择//div/div的所有子节点,//div/div会有两个匹配出来的节点
//div[@id='input'] 表示选择一个id为’input’的div节点
//div[@id='input']/input 表示选择一个id为’input’的div节点的input子节点
//table//input[@id='user'] 表示选择table的子孙后代中id为user的input节点
//input[@name='identity' and @class='Volvo'] 选择一个name为identity并且class为Volvo的input节点
//input[@name='identity' or @class='Volvo'] 选择一个name为identity,或者class为Volvo的节点
//input[@name='identity' or @class='Volvo'][1] 选择第一个name为identity,或者class为Volvo的节点
//input[@name='identity' or @class='Volvo'][last()] 选择最后一个name为identity,或者class为Volvo的节点
四.xpath的几个常用函数
1.contains()://div[contains(@id,'in')] ,表示选择id中包含有’in’的div节点
2.text()://a[text()='baidu']表示文本值
3.last()
4.starts-with()://div[starts-with(@id,'in')] ,表示选择以’in’开头的id属性的div节点
5.not():表示否定,//input[@name=‘identity’ and not(contains(@class,‘a’))],表示匹配出name为identity并且class的值中不包含a的input节点。
五.xpath的轴的概念
ancestor 选取当前节点的所有先辈(父,祖父等)
ancestor-or-self 选取当前节点的所有先辈(父,祖父等)以及当前节点本身
attribute 选取当前节点的所有属性
child 选取当前节点的所有子元素
descendant 选取当前节点的所有后代元素(子,孙等)
descendant-or-self 选取当前节点的所有后代元素(子,孙等)及当前节点本身
following 选取当前节点的结束标签时候的所有节点
following-sibling 选取当前节点之后的所有同级节点
namespace 选取当前节点的所有命名空间节点
parent 选取当前节点的父节点
preceding 选取当前节点开始标签之前的所有节点
priceding-sibling 选取当前节点之前的所有同级节点
self 选取当前节点
六.xpath轴的用法
//div[@id='radio']//label[text()='Saab']/preceding-sibling::input[1] 选择label的text为Saab的节点之前的同级节点中为input节点的第一个
用xpath轴时应注意的几个问题:
1.调用轴时最好用'/';
2.轴后面要加上符号"::"
3.“::”后面可以接节点名称,也可以接”*”
轴的另一种写法:
//input[following-sibling::label[1][text()=‘Saab’]], 这个的作用与//div[@id='radio']//label[text()='Saab']/preceding-sibling::input[1]的作用是一样的!