一、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 个条件的是并集