appium中xpath定位原生元素详解

当页面元素中没有包含明显的text、ID等或者text不具备唯一性时,定位就比较坑爹了,那么我们就必须要使用xpath定位了。

一般情况下不推荐使用绝对路径,如果确实人品爆棚整个页面都没有你能够定位到的东西或者无法定位时那就老老实实一层一层的写,但这种情况基本不会存在。

下面主要看下相对路劲的定位方法:

一、用ID定位

如图:


上面的"账单"和"我要"的id都是com.wlqq:id/title_left_btn,并且假设当前页面只有这两个位置id为前面写的,那么你在用id定位"账单"的时候,就可以用xpath了,因为id已经不唯一了。用id定位“账单”的为:xpath=(//android.widget.TextView[@resource-id="com.wlqq:id/title_left_btn"])[1],定位"我要"的为:
xpath=(//android.widget.TextView[@resource-id="com.wlqq:id/title_left_btn"])[2]
此处注意三点:
a,下标是从1开始,而不是0;
b,如果有下标,需要用括号把前面的部分括起来,并且前面需要加xpath=,可能有些人习惯了前面都加xpath=,但是像我这种只习惯写//开头,不写xpath=的就被坑惨了。。。反正不容易发现是因为没有写xpath=,也可能是我个人比较坑吧。
c,就是和web不一样的就是标签的取值,在这里取的是class的值=android.widget.TextView而不是看到的标签TextView,具体原因没有深究。反正记住用class代替标签就对了。

另外,上面的只是为了说明只有1个层级的时候xpath的用法,1层也算是一种相对路径吧。因为没有从第一个位置的属性开始写。xpath的书写规则基本是越少越好。所以层级也是越少越好。有1层可以唯一定位就不要2层。

二、没有ID可定位,利用父子、兄弟关系来定位

xpath常用轴函数:

1、preceding-sibling::    ----可以找到节点前面也就是哥哥节点

2、following-sibling::      ----可以找到节点后面也就是弟弟节点

3、parent::                     ----可以找到节点的父亲节点

4、..                               ----也是可以找到父亲接到,常常替代parent::

如图:


要定位到上面的小人图标:

//android.widget.TextView[contains(@text"钱包")]/following-sibling::android.widget.LinearLayout/android.widget.ImageButton

因为是紧挨着的,所以弟弟没有下标,可想而知如果是第几个弟弟,就加个下标吧。哥哥也是同理

绕个圈说下父子关系:

//android.widget.TextView[contains(@text"钱包")]/../android.widget.LinearLayout[2]/android.widget.ImageButton





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值