高阶定位-Xpath

包含-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="加自选"]