app自动化——XPATH高级定位技巧

一、xpath 函数

1.1、包含-contains()

  • Xpath 表达式中的一个函数
  • contains()函数匹配==属性值==中包含的==字符串==
  • contains() 函数定位的元素很容易为 list
  • contains() 函数内的属性名需要用 @开始
//*[contains(@属性,"属性值")]

二、xpath 轴

2.1、父子

当前节点的父节点

//*[@text="HK"]/..
//*[@text="HK"]/parent::*

当前节点的儿子

//*[@resource-id="com.xueqiu.android:id/stock_layout"]/child

2.2、爷孙

当前节点的父级的父级

//*[@text="HK"]/../..

//*[@text="HK"]/parent::*/parent::

当前节点的儿子的儿子

//*[@resource-id="com.xueqiu.android:id/stock_layout"]/child::*/child::*

2.3、祖先

  • 返回当前节点的所有祖先
//*[@text="HK"]/ancestor::android.widget.RelativeLayout
  • 显式指定要返回的祖先
//*[@text="HK"]/ancestor::android.widget.RelativeLayout[1]

2.4、兄弟姐妹

following-sibling

  • 选择当前节点之后的所有兄弟节点
  • 节点后有一个兄弟节点
//*[@text="HK"]/following-sibling::*
  • 节点后有多个兄弟节点
//*[@resource-id="com.xueqiu.android:id/stock_layout"]/following-sibling::*[@resource-id="com.xueqiu.android:id/price_layout"]

preceding-sibling

  • 选择当前节点之前的所有兄弟节点
  • 节点前有一个兄弟节点
//*[@text="09988"]/preceding-sibling::*
  • 节点前有多个兄弟节点
//*[@resource-id="com.xueqiu.android:id/add_attention"]/preceding-sibling::*[@resource-id="com.xueqiu.android:id/price_layout"]

三、XPath 运算符

3.1、AND

  • 可以在 XPath 表达式中放置 2 个条件
  • AND 两个条件都应该为真的情况下,才能找到元素
//*[@resource-id="com.xueqiu.android:id/current_price" and @text="107.8"]

3.2、OR

  • 可以在 XPath 表达式中放置 2 个条件
  • OR 的情况下,两个条件中的任何一个为真,就可找到元素。
  • OR 定位获取的是并集
//*[@resource-id="com.xueqiu.android:id/tv_stock_add_follow" or @text="加自选"]

3.3、总结

  • and 定位是 2 个条件的交集
  • or 定位是 2 个条件的是并集