背景
不论在移动或web自动化时,通常情况下,使用id、name、class、text等元素定位方式一般可以满足日常80%左右的元素定位,但是假如没有id等属性,或者标签属性,文本信息特征不明显怎么办?还有一种定位方法---xpath。
Xpath简介
Path,路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似;基于XML的树状结构,可以用来在整个树中来寻找指定的节点,因此它的返回值可能是节点,节点集合,原子值,以及节点和原子值的混合。 所以,xpath是:
- 是一个W3C的标准
- 是一种表达式语言
- 是一种用来确定XML文档中某部分位置的语言
Xpath定位方法
1. Xpath主要是通过路径查找元素
- 绝对路径
- 相对路径
绝对路径是从根节点开始往下,一层层的表示出来直到需要的节点为止。这种做法不太明智,因此了解以下即可,不用往心里去。相比绝对路径,Xpath中更常用的方式是相对路径定位方法
2. 基本定位语法
3. 元素属性定位
属性定位是通过 @ 符号指定需要使用的属性
- 选取包含resource-id属性的所有节点 如://*[@resource-id="android:id/button1"]
- 选取属性 role 的属性值为 img 的所有节点 如://span[@role=‘img’]
Note:属性值必须要加引号,单双引号都可以
4. 层级属性结合定位
遇到某些元素无法精确定位的时候,可以查找其父级及其祖先节点, 找到有确定的祖先节点后通过层级依次向下定位
- 根据层级向下找 如:找“搜索”的路径,//form[@id=“form”]/span/span
- 查找某元素内部的所有元素,选取form元素内部的所有span
//form[@id="form"]//span
- 使用星号找不到特定的元素
//*[@id="form"]//*[@type="text"]
- 使用..从下往上找,根据input查找其父节点span
//input[@name="key"]/..
- 找同级节点
//span[@class="bg"]/../div
5. 使用谓语定位
谓语是Xpath中用于描述元素位置。主要有数字下标、最后一个子元素last()、元素下标函数position()
- 使用下标的方式,从form找到input,如:
//form[@id=“form”]/span[2]/input
- 查找最后一个子元素,选取form下的最后一个span
//form[@id="form"]/span[last()]
- 使用position()函数,选取form下的第二个span
//form[@id="form"]/span[position()=2]
6. 使用逻辑运算符
如果元素的某个属性无法精确定位到这个元素,还可以用逻辑运算符and连接多个属性进行定位
- 使用 and,查找name属性为key且id属性为su的任意元素,如:
//*[@name=“key” and @id=“su”]
还有其他,如or、|同时查询多个路径
7. 使用文本定位
使用文本定位,是Xpath中的一大特色,可以使代码的可读性更高,如:
//*[@text="跳过"]
8. 使用部分函数匹配
获取xpath
- 开发者工具的Elements中搜索框(Ctrl+F)中输入Xpath
- 在开发中工具的Console中使用$x(),记得加引号
- Weditor
- Lazyuiautomatorviewer
更多参考: