14.高阶定位-Xpath

发布时间 2023-12-20 09:34:37作者: 想要暴富的小男孩
  • xpath 函数
  • xpath 轴
  • XPath 运算符

包含-contains()

  • Xpath 表达式中的一个函数

  • contains()函数匹配==属性值==中包含的==字符串==

    //*[contains(@属性,"属性值")]

总结

  • contains() 函数定位的元素很容易为 list
  • 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

  • 节点后的兄弟姐妹节点
  • 节点前的兄弟姐妹节点

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 运算符

  • AND
  • OR

AND

  • 可以在 XPath 表达式中放置 2 个条件

  • 在 AND 两个条件都应该为真的情况下,才能找到元素

    //*[@resource-id="com.xueqiu.android:id/current_price" and @text="107.8"]

OR

  • 可以在 XPath 表达式中放置 2 个条件

  • 在 OR 的情况下,两个条件中的任何一个为真,就可找到元素。

  • OR 定位获取的是并集

    //*[@resource-id="com.xueqiu.android:id/tv_stock_add_follow" or @text="加自选"]

总结

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