1. Xpath的相对路径与绝对路径
<AAA>
<BBB>
<CCC id="password", title="input">
</CCC>
</BBB>
</AAA>
在Xpath中,以“/”开始表示从根路径开始查找;以“//”开始表示从任意位置开始查找。 那么要定位如上CCC控件,可以使用/AAA/BBB/CCC定位,也可以使用//CCC定位。
2.通过控件唯一属性定位
<AAA>
<BBB>
<CCC id="password", title="input">
</CCC>
</BBB>
</AAA>
定位CCC可以通过CCC的属性来定位,可以写成//CCC[@id="password"]或者//CCC[@title="input"]来定位。
3.通过上一级的唯一属性来定位
<AAA>
<BBB>
<CCC id="password", title="input">
<DDD>
</DDD>
</CCC>
</BBB>
</AAA>
定位DDD,可以先找到DDD上一级控件再定位DDD,可以写成//CCC[@id="password"]/DDD。
4.布尔逻辑运算
<AAA>
<BBB>
<CCC>
<DDD id="password", title="first">
</DDD>
</CCC>
<DDD title="password">
</DDD>
</BBB>
</AAA>
Xpath中可以使用的逻辑运算符:and、or
定位两个DDD,可以使用//DDD[@id="password" or title="password"]
定位第一个DDD可以使用//DDD[@id="password" and title="first"]
5.双条件判断
<AAA>
<BBB>
<CCC>
<DDD id="password", title="first">
</DDD>
</CCC>
<DDD title="password">
</DDD>
</BBB>
</AAA>
定位第一个DDD可以使用//DDD[@id="password"][@title="first"]
6.模糊定位
<AAA>
<BBB>
<CCC>
<DDD id="account", title="first">
</DDD>
<DDD id="password", title="sencond">
</DDD>
</CCC>
</BBB>
</AAA>
模糊定位通常可以使用下面三个方法:
contains: 定位第一个DDD可以使用//DDD[contains(@id,"cc")],
starts-with: 定位第一个DDD可以使用//DDD[starts-with(@id,"acc")]
ends-with: 定位第一个DDD可以使用//DDD[ends-with(@id,"unt")],但是你的浏览器可能并不支持ends-with方法,这个是Xpath2.0的语法,反正在下的QQ浏览器不支持这个方法
7.通过控件索引定位
<AAA>
<BBB>
<CCC>
<DDD id="account", title="first">
</DDD>
<DDD id="password", title="sencond">
</DDD>
</CCC>
</BBB>
</AAA>
例如想要定位第二个DDD,可以使用//CCC/DDD[2]
8.Xpath中的轴--child
<AAA>
<BBB>
<CCC>
<DDD id="account", title="first">
</DDD>
<DDD id="password", title="sencond">
</DDD>
</CCC>
</BBB>
</AAA>
child是Xpath的默认轴,可以忽略不写,例如/AAA/child::BBB等价于/AAA/BBB
9.Xpath中的轴--parent
<AAA>
<BBB>
<CCC>
<DDD id="account", title="first">
</DDD>
</CCC>
</BBB>
<EEE>
<DDD>
</DDD>
</EEE>
</AAA>
parent返回当前控件的父控件,想要获取所有DDD控件的所有父控件可以使用//DDD/parent::*
10.Xpath中的轴--descendant
<AAA>
<BBB>
<CCC>
<DDD id="account", title="first">
</DDD>
</CCC>
</BBB>
<EEE>
<DDD>
</DDD>
</EEE>
</AAA>
descendant返回当前控件的子孙控件,例如想要获取AAA控件所有子孙控件中的DDD控件可以使用/AAA/descendant::DDD
11.Xpath中的轴--ancestor
<AAA>
<BBB>
<CCC>
<DDD id="account", title="first">
</DDD>
</CCC>
</BBB>
<EEE>
<DDD>
</DDD>
</EEE>
</AAA>
ancestor返回当前控件的父、祖父控件,若想获得第一个DDD控件的所有父、祖父控件可以使用//DDD[@id="account"]/ancestor::*
12.Xpath中的轴--descendant-or-self
<AAA>
<BBB>
<CCC>
<DDD id="account", title="first">
</DDD>
</CCC>
</BBB>
<EEE>
<DDD>
</DDD>
</EEE>
</AAA>
descendant-or-self返回当前控件以及当前控件的子孙控件,例如想要获取AAA控件以及AAA控件所有子孙控件可以使用/AAA/descendant-or-self::*
13.Xpath中的轴--ancestor-or-self
<AAA>
<BBB>
<CCC>
<DDD id="account", title="first">
</DDD>
</CCC>
</BBB>
<EEE>
<DDD>
</DDD>
</EEE>
</AAA>
ancestor-or-self返回当前控件以及当前控件的父、祖父控件,若想获得第一个DDD控件以及其所有父、祖父控件可以使用//DDD[@id="account"]/ancestor-or-self::*
14.Xpath中的轴--preceding-sibling
<AAA>
<BBB>
<CCC>
</CCC>
<ZZZ>
<DDD id="account"/>
</ZZZ>
</BBB>
<EEE>
<DDD id="password">
</DDD>
</EEE>
</AAA>
preceding-sibling返回当前控件之前的于当前控件同级的控件,例如想要获取EEE控件的所有同级控件(当前示例获取到的是BBB控件)可以使用//EEE/preceding-sibling::*
15.Xpath中的轴--preceding
<AAA>
<BBB>
<CCC>
</CCC>
<ZZZ>
<DDD id="account"/>
</ZZZ>
</BBB>
<EEE>
<DDD id="password">
</DDD>
</EEE>
</AAA>
preceding返回当前控件开始标签之前的所有控件,但不会返回祖先控件,例如//DDD[@id="password"]/preceding::*返回的控件是BBB、CCC、ZZZ和id为account的DDD控件,不会返回AAA控件和EEE控件
16.Xpath中的轴--following-sibling
<AAA>
<BBB>
<CCC>
</CCC>
<ZZZ>
<DDD id="account"/>
</ZZZ>
</BBB>
<EEE>
<DDD id="password">
</DDD>
</EEE>
</AAA>
following-sibling返回当前控件时候的与当前控件同级的控件,例如//BBB/following-sibling::*返回的是EEE控件
17.Xpath中的轴--following
<AAA>
<BBB>
<CCC>
</CCC>
<ZZZ>
<DDD id="account"/>
</ZZZ>
</BBB>
<EEE>
<DDD id="password">
</DDD>
</EEE>
</AAA>
following返回当前控件结束标签之后的所有控件,同样也不会返回祖先控件,例如//CCC/following::*返回的是ZZZ、EEE和两个DDD控件,但不会返回BBB控件和AAA控件
18.Xpath中的轴--self
self返回当前控件,单独使用无任何意义,一般与ancestor\descendant一起使用
19.Xpath中的轴--attribute
<AAA>
<BBB>
<CCC>
<DDD id="account", title="first">
</DDD>
<DDD id="password", title="sencond">
</DDD>
</CCC>
</BBB>
</AAA>
attribute返回当前控件的属性,例如获取第一个DDD的所有属性,可以使用//CCC/DDD[1]/attribute::*
20.Xpath中的轴--namespace
namespace返回的是当前节点的命名空间节点