一.概述
xpath是一种选择器,是一种xml路径语言,在自动化测试过程中能够准确的定位页面的元素,可以说xpath能解决99%的元素定位的问题。
二.Xpath常用符号说明
/ 表示绝对路径,绝对路径是指从根目录开始
//表示相对路径
.表示当前层
..表示上一层
*表示通配符
@表示属性
[]属性的判断条件表达式
三.常用的Xpath的写法
/html//div 表示选择根目录下的所有的子孙后代节点中的div节点,//表示相对路径
//div 表示选择所有的div节点
//div/div 表示选择所有的div节点的子节点中含有div的节点
//div[@id='input'] 表示选择一个id为’input’的div节点
//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()='百度搜索'] 或者//a[contains(text(),"百度搜索")]
3.last():div[last()-1]:倒数第二个
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节点的第一个
ancestor:选取当前节点的所有先辈(父、祖父等)。
//input[@id=''kw]/ancestor::form[属性或索引] ##input[@id=''kw]唯一
//input[ancestor::form[@id='form'] and @name='wd'][1] ##form[@id='form']唯一,后面加属性[1]来限制
preceding-sibling:选取当前节点之前的所有同级节点。
//input[preceding-sibling::input[@id='kw'] and @name='rsv_spt'] ##input[@id='kw']唯一找其同级input
等于//input[@id='kw']/follow-sibling::input[@name='rsv_spt']
//div[preceding-sibling::div/div/a[contains(text(),'三星')]]/a[text()='删除']
descendent:选取当前节点的所有后代元素(子、孙等)。
//div[@id='dvContainer']/descendent::span[text(),'删 除'] ##id='dvContainer'唯一
following-sibling(当前节点结束后的所有兄弟姐妹):
//input[@id='kw']/following-sibling::input ##选取input[@id='kw']节点结束后的所有input兄弟姐妹(同级)
child:选取当前节点的所有子元素。
//span[child::input[@id='su1']] ##input[@id='su1']明确
ancestor: //input[@id='su1']/ancestor::span ##效果等于上面