包含-contains()
- contains() 函数定位的元素很容易为 list
- contains() 函数内的属性名需要用 @开始
//*[contains(@属性,"属性值")]
XPath 轴
- 父子-当前节点的父节点
//*[@text="HK"]/..
//*[@text="HK"]/parent::*
- 父子-当前节点的子节点
//*[@resource-id="com.xueqiu.android:id/stock_layout"]/child::*
- 爷孙-当前节点的爷爷
# 当前节点的父级的父级
//*[@text="HK"]/../..
//*[@text="HK"]/parent::*/parent::*
- 爷孙-当前节点的孙子
# 当前节点的儿子的儿子
//*[@resource-id="com.xueqiu.android:id/stock_layout"]/child::*/child::*
- 祖先-ancestor
# 返回当前节点的所有祖先
//*[@text="HK"]/ancestor::android.widget.RelativeLayout
# 显式指定要返回的祖先
//*[@text="HK"]/ancestor::android.widget.RelativeLayout[1]
-
兄弟姐妹-sibling
- 节点前的兄弟姐妹节点: preceding-sibling
# 选择当前节点之前的所有兄弟节点 # 节点前有一个兄弟节点 //*[@text="HK"]/preceding-sibling::* # 节点前有多个兄弟节点 //*[@text="HK"]/preceding-sibiling::*[@resource-id="com.xueqiu.android:id/price_layout"]
- 节点后的兄弟姐妹节点: following-sibling
# 选择当前节点之后的所有兄弟节点 # 节点后有一个兄弟节点 //*[@text="HK"]/following-sibling::* # 节点后有多个兄弟节点 //*[@text="HK"]/following-sibiling::*[@resource-id="com.xueqiu.android:id/price_layout"]
XPath 运算符
- AND: 定位是 2 个条件的交集
//*[@resource-id="com.xueqiu.android:id/current_price" and @text="107.8"]
- OR: 定位是 2 个条件的是并集
//*[@resource-id="com.xueqiu.android:id/tv_stock_add_follow" or @text="加自选"]