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)的主要内容,如果未能解决你的问题,请参考以下文章

Appium《元素定位和UiAutomator表达式》

app自动化测试(Android)--App 控件定位

Android版App的控件元素定位

四:RF框架appium工具之xpath定位

Android自动化测试怎么填写Xpath

selenium自动化之xpath定位*必会技能*