UiAutomator获取webview里面ui元素的方法

        在这里首先感谢qq群UiAutomator_Android中刘杨同学提供了这个方法。由于这个方法在网上一直搜索不到,因此分享到贴吧来,以便让更多人受益。希望大家广为流传、无限转发,也有助于增大UiAutomator这个优秀自动化测试工具的影响力。
       在手机里安装一个工具叫做TalkBack,在安卓市场可以下载。然后在设置〉辅助功能中将其打开,但这里千万要注意:打开之后整个系统的操作都变得不同了!!滑动界面需要两个手指,单击变成双击。

       打开之后用UiAutomatorViewer获取webview界面的内容,你就会发现原来webview里面获取不到的ui元素,现在已经可以可以获取到了。即使现在你关掉TalkBack,也能获取到,除非重启手机才会回到不能获取的状态。

       补充一点,有些app它自己限制了对界面元素的获取,比如uc浏览器、微信或者一些游戏类软件,上面所说的这种方法就不起作用了。

      如果其他朋友还有别的方法,希望也能分享出来,人多力量大,大家互相交流进步才比较快,谢谢各位!也欢迎大家多到uiautomator贴吧交流:http://tieba.baidu.com/f?kw=uiautomator
### 关于 uiautomator2 在微信中定位元素失败的原因及解决方案 在使用 Appium 的 `uiautomator2` 驱动操作微信时,可能会遇到无法成功定位到某些特定类型的 UI 元素的情况。这通常是因为微信应用本身的复杂性和安全性设置所致。 #### 1. **原因分析** - 微信的部分界面可能基于 WebView 或者自定义渲染引擎实现,而这些内容不一定能够被原生 Android 的 `uiautomator2` 正常识别[^1]。 - 如果目标页面涉及 HTML5 渲染的内容,则需要切换至 WebView 上下文中才能正常访问 DOM 节点并执行交互操作[^2]。 - 另外,在未启用调试模式的情况下尝试捕获或操控敏感区域也可能受到限制。 #### 2. **解决方法** ##### 方法一:确认上下文环境 当面对混合开发的应用程序(即同时存在Native组件与Webview),需先获取当前可用的所有contexts列表并通过switch命令进入相应的webview context后再继续查找对应节点路径: ```python # 获取所有context名称 contexts = driver.contexts # 切换到指定的WebView Context (假设只有一个) driver.switch_to.context(contexts[-1]) # 使用XPath或其他方式寻找HTML中的对象 element_in_webview = driver.find_element_by_xpath("//div[@id='example']") ``` 注意这里假定最后一个context就是所需的webview;实际项目里应该依据具体情况判断哪个才是真正的目标视图。 ##### 方法二:开启必要的Debug选项 对于一些特殊场景下的UI自动化测试来说,仅仅依靠标准API或许不足以满足需求。以微信为例,为了更好地支持H5页面内的脚本运行效果观察以及问题排查等工作,建议按照官方文档指引激活内部浏览器开发者工具功能开关——也就是常说的“内核debug模式”。这样不仅可以方便查看实时布局结构变化情况,而且有助于提高兼容性表现水平。 > 提醒:具体如何启动该特性可查阅相关资料说明或者咨询技术支持团队成员获得最新指导信息。 ##### 方法三:调整策略适配Toast消息处理 由于toast提示本质上不属于常规意义上的widget范畴之内,因此即使借助uiautomator也无法像对待普通button那样简单粗暴地去捕捉它。不过我们仍然可以通过间接手段达成目的比如监听logcat输出流数据来检测是否有预期字符串出现作为替代方案之一考虑采用这种方式解决问题: ```java Runtime.getRuntime().exec("adb logcat -c"); // clear previous logs first Process process = Runtime.getRuntime().exec("adb logcat *:S ActivityManager:I"); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = bufferedReader.readLine()) != null){ if(line.contains("expected toast text")){ System.out.println("Found the desired Toast message!"); break; } } bufferedReader.close(); process.destroy(); ``` 上述代码片段展示了通过读取Android设备日志文件的方式来验证是否存在某个特定短语的方法论思路供参考借鉴。 --- ### 总结 综上所述,针对利用Appium配合uiautomator2驱动器开展有关微信客户端方面的自动化任务过程中所遭遇的各种挑战给出了几个可行性的应对措施方向供大家探讨交流学习之用。希望以上分享能对你有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值