事情的起因是在两个项目上,A项目的虚浮窗按钮无法获取
B项目的推荐和看动态无法获取UI元素
通过adb shell dump也是无法获取到,但就一个问题,为啥weditor可以定位到呢?
那奇怪了是什么原因?为什么会突然有这个现象呢?因为我们是用weditor录制脚本,然后用appium执行,appium通过http请求的response和打印的日志,都是没有获取到相关元素。
经过对比实验,是ui2的问题,weditor的atx ui2是有修改过的。所以就安排开始看ATX ui2项目,进行定位,并对appium的UI2进行修改,最终搞定。appium自动化框架都可以识别到,解决了悬浮窗popwindow这类节点定位不到的问题。
ATX 和appium获取当前Android设备上所有可访问窗口的根节点元素区别:
ATX 代码:(简称A)
appium 代码(简称B)
这两段代码都是获取当前Android设备上所有可访问窗口的根节点元素,但是实现方法不同,具体不同如下:
共同之处:
1.都是获取当前Android设备上所有可访问窗口的根节点元素;
2.都是通过AccessibilityService的相关方法实现的;
不同之处:
1.A代码是在获取根节点元素时使用了XML序列化,并将序列化结果存储到ByteArrayOutputStream中,然后再将其转换为InputStream返回;
2.A代码是直接获取所有窗口的根节点元素,而B代码则有选择地获取所有窗口或者只获取活动窗口的根节点元素;
3.A代码不涉及缓存,每次调用都会重新获取根节点元素,而B代码则通过缓存来优化性能,如果缓存中已经存在获取到的窗口根节点元素,则直接返回缓存中的结果;
所以整体appium获取不到元素的原因在于不同之处的第2和第3点,实时获取根节点元素以及获取的方式,修改的地方很多,但可以根据ATX的ui2来修改;
以上,就是关于解决appium 无法获取PopWindow 悬浮窗问题,当然获取不到,还可以用图像识别,但不在本次的讨论范围~
如果需要已编译好的appium-uiautomator2-server apk,请加微信:Dark_Angel168 或者扫描,备注获取apk包,也可关注订阅号,后台回复“ui2”获取下载链接;
领取专属 10元无门槛券
私享最新 技术干货