xiaocong的uiautomator有时候找不到界面元素的问题和解决
来源:互联网 发布:精通android网络开发 编辑:程序博客网 时间:2024/06/03 18:00
问题
最近一直在用xiaocong的uiautomator做android的自动化测试,这是一个python对android uiautomator的包装,非常好用。
不过最近经常出现一个问题,界面上明明有这个元素,但是xiaocong的uiautomator却无法发现,无法点击。
解决
经过一番折腾,我猜测解决问题的核心大概在于setCompressedLayoutHeirarchy方法。
setCompressedLayoutHeirarchy是android uiautomator的一个方法,在官网的介绍中这个方法:
public void setCompressedLayoutHeirarchy (boolean compressed)Enables or disables layout hierarchy compression. If compression is enabled, the layout hierarchy derived from the Acessibility framework will only contain nodes that are important for uiautomator testing. Any unnecessary surrounding layout nodes that make viewing and searching the hierarchy inefficient are removed.Parameterscompressed true to enable compression; else, false to disable
大意是说如果启用压缩,界面层只会返回对UIAutomator测试重要的元素。Any unnecessary surrounding layout nodes that make viewing and searching the hierarchy inefficient are removed.
但是问题就是,有时候代码判定无用的元素,实际上却是有用的。
xiaocong的uiautomator提供了一个dump方法,对应到android uiautomator的方法是dumpWindowHierarchy,用于将界面提取成xml数据。这个dump方法可以设置compressed参数。
我在测试中验证过,设置了compressed=True的时候,一些元素确实就从xml数据中消失了,设置compressed=False时又出现——与此同时,这些元素也变得可被找到和点击。
查看了xiaocong的uiautomator jsonrpcserver端代码,可以确定,在做dump操作时,它会同时调用setCompressedLayoutHeirarchy方法,并且在dump结束时不会将compressed恢复为调用之前状态。
也就是说,虽然xiaocong的uiautomator没有暴露setCompressedLayoutHeirarchy方法给我,但是我可以调用一下dump(compressed=False)来间接的调用setCompressedLayoutHeirarchy(compressed=False)。
增加dump之后,后面的测试都很顺利,再也没出现看着界面大眼瞪小眼的情况了。
参考:
http://developer.android.com/reference/android/support/test/uiautomator/UiDevice.htmlhttps://github.com/xiaocong/android-uiautomator-jsonrpcserverhttps://github.com/xiaocong/uiautomator
- xiaocong的uiautomator有时候找不到界面元素的问题和解决
- Toast有时候不显示问题的解决
- 解决viewPager fragment有时候内容重叠的问题的方法
- Uiautomator依赖jar包找不到的提示
- 解决有时候silverlight在VS2008中不能调试的问题
- 解决Chrom 浏览器对 returnValue 有时候接受不到的问题
- 解决Yii有时候会获取不到redis数据的问题
- 解决DRM找不到的问题。
- 解决MenuBuilder找不到的问题
- 解决找不到jni.h和jni_md.h的问题
- 解决找不到jni.h和jni_md.h的问题
- uiautomator获取不到动态界面的缘由
- uiautomator获取不到动态界面的缘由
- uiautomator获取不到动态界面的缘由
- ssh 有时候遇到的问题;
- 解决错误界面的问题
- Uiautomator2和Uiautomator的区别
- 如何解决找不到xmldom.idl的问题
- Mark
- OUTLOOK更改离线文件夹位置
- Swift-方法(Methods)(十)
- POJ 1458 最长公共子序列
- Java Timer的缺陷 用ScheduledExecutorService替代
- xiaocong的uiautomator有时候找不到界面元素的问题和解决
- 用adb操作apk和app的脚本
- leetcode_c++:Next Permutation (031)
- Activity的生命周期之我见
- Spring 系列:AOP原理
- 字符与ascii码的相互转换以及字符串和字符数组的相互转换
- Unity3D【教材Unity3D游戏开发:2.7】
- Tmcat热部署方法(2种)
- 手机安全卫士第二课---主页面布局学习 跑马灯的实现