app控件唯一相对Xpath自动生成(增强版uiautomatorviewer)
Posted 杨不羁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了app控件唯一相对Xpath自动生成(增强版uiautomatorviewer)相关的知识,希望对你有一定的参考价值。
作者:cryanimal QQ:164166060
工具由来
前面的一篇博文较详细地介绍了uiautomatorviewer:扫描和分析android应用程序的UI控件的工具。
熟悉控件获取的同学都知道,使用uiautomatorviewer可以抓取到的用来定位控件的元素大概有
- text
- resource-id
- content-desc
- index
除此之外,appium还支持按Xpath来定位控件
Xpath和元素定位相关的语法,参见博文:
http://blog.csdn.net/kaka1121/article/details/51811296
从上文中可以看出,uiautomatorviewer抓取出来的属性,可统一用Xpath方式来获取,可以较大地简化代码,我们只需要定义一个优先级策略即可。
工具设计思路
首先,前端开发同学也需要定位元素,通常使用resource-id或text,因此大部分关键元素都会有唯一的resource-id或text,列表除外。
其次,少量元素会有 content-desc,且唯一;
再次,index是每个元素都有的,也是最不靠谱的一个;
除此之外,Xpath本身作为DOM,本身会根据元素类型(在此工具中叫class)维护一个顺序,本文中称之为“元素索引”;
综上,可以定义如下优先级:
1.resource-id
2.text
3.content-desc
4.元素索引
5.index(因其不可预知,弃用)
这里要说明一下xpath的元素索引和index的区别
xpath的元素索引上面已经说了,序列从1开始(IE除外,统一方法,见下面图片)
index作为手机端的节点属性,一般是从0开始的,但是有很多也是从非零开始的,非常不可预知,完全受编程人员支配,也和class无关。
下图为w3school的文档示例:
优先级策略
1.如果只包含resource-id,且唯一,则直接用resource-id,其Xpath为://android.XX.XXX[@resource-id=\\"com.duowan.mobile:id/rb_main\\"]
2.如果只存在text,且唯一,则直接用text,其Xpath为://android.XX.XXX[@text=\\"直播\\"]
3.如果只存在content-desc,且唯一,则直接用content-desc,其Xpath为://android.XX.XXX[@content-desc=\\"热门推荐\\"]
4.如果不满足1/2/3,且存在resource-id、text、content-desc,三者取其二或者取其三能唯一定位,则其Xpath类似:
//X.XX.XXX[@resource-id=\\"abc\\" and @text=\\"狂热\\" and @content-desc=\\"推荐\\"]
5.如果不满足1/2/3/4,则递归地寻找其父节点,直到找到唯一。再从其父节点开始,取绝对路径(元素索引),加起来唯一定位,其Xpath类似:
//X.XX.XXX[@resource-id=\\"android:id/list\\"]/X.XX.XXX[1]/X.XX.XXX[2]
此处有同学有疑惑,再详细说一下:
比如要找A节点 A不能用上面的方法唯一定位,但是A有父节点 或父节点的父节点, 可以被唯一定位,则用离他最近的能唯一定位的父节点 加上从其到A节点的绝对路径来定位
6.以上全不满足,则给出其绝对路径(元素索引),来唯一定位,其Xpath类似:
//X.XX.XXX[1]/X.XX.XXX[2]/X.XX.XXX[5]/X.XX.XXX[2]
根据以上策略,重写了uiautomatorviewer,实现了以上逻辑。
展示
上图中Xpath即为生成结果
fullIndexXpath为其Xpath的完整绝对路径
软件下载
下载地址(也稍微赚点积分,没有的可以在下方留言,加QQ群610460807 :
http://download.csdn.net/detail/kaka1121/9568123
安装和使用
1. 将所有jar包拷贝到%SDK%/tools\\lib目录下,覆盖原来的uiautomatorviewer.jar
2. 使用%SDK%/tools\\uiautomatorviewer.bat 运行即可。
3. 更多开源测试工具参见个人博客:http://blog.csdn.net/kaka1121
以上是关于app控件唯一相对Xpath自动生成(增强版uiautomatorviewer)的主要内容,如果未能解决你的问题,请参考以下文章