Xpath用法详解

730 阅读3分钟

背景

不论在移动或web自动化时,通常情况下,使用id、name、class、text等元素定位方式一般可以满足日常80%左右的元素定位,但是假如没有id等属性,或者标签属性,文本信息特征不明显怎么办?还有一种定位方法---xpath。

Xpath简介

Path,路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似;基于XML的树状结构,可以用来在整个树中来寻找指定的节点,因此它的返回值可能是节点,节点集合,原子值,以及节点和原子值的混合。 所以,xpath是:

  • 是一个W3C的标准
  • 是一种表达式语言
  • 是一种用来确定XML文档中某部分位置的语言

Xpath定位方法

1. Xpath主要是通过路径查找元素

  • 绝对路径
  • 相对路径

image.png 绝对路径是从根节点开始往下,一层层的表示出来直到需要的节点为止。这种做法不太明智,因此了解以下即可,不用往心里去。相比绝对路径,Xpath中更常用的方式是相对路径定位方法

2. 基本定位语法

image.png

3. 元素属性定位

属性定位是通过 @ 符号指定需要使用的属性

  1. 选取包含resource-id属性的所有节点 如://*[@resource-id="android:id/button1"]
  2. 选取属性 role 的属性值为 img 的所有节点 如://span[@role=‘img’]

Note:属性值必须要加引号,单双引号都可以

4. 层级属性结合定位

遇到某些元素无法精确定位的时候,可以查找其父级及其祖先节点, 找到有确定的祖先节点后通过层级依次向下定位

  • 根据层级向下找 如:找“搜索”的路径,//form[@id=“form”]/span/span

image.png

  • 查找某元素内部的所有元素,选取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

image.png

  • 查找最后一个子元素,选取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”]

image.png 还有其他,如or、|同时查询多个路径

7. 使用文本定位

使用文本定位,是Xpath中的一大特色,可以使代码的可读性更高,如:

//*[@text="跳过"]

image.png

8. 使用部分函数匹配

image.png

获取xpath

  1. 开发者工具的Elements中搜索框(Ctrl+F)中输入Xpath
  2. 在开发中工具的Console中使用$x(),记得加引号
  3. Weditor
  4. Lazyuiautomatorviewer

更多参考:

www.w3.org/TR/xpath20/

www.w3school.com.cn/xpath/xpath…