使用UIAutomatorViewer定位元素

使用UIAutomatorViewer进行移动应用自动化测试
本文介绍了如何使用UIAutomatorViewer工具来定位和识别Android应用的UI元素,包括连接设备、打开工具、截屏、查看元素属性以及保存和打开UI转储文件,以实现移动自动化测试。

1)在设备上找到任何元素之前的第一步是首先将设备与计算机连接。我希望您按照关于使用Eclipse设置Appium的完整教程来阅读本章。

按照步骤检查设备是否正确连接:

  • 转到“运行”并键入“ cmd” 以打开命令提示符界面。
  • 在窗口中输入“ adb devices ”。

PDA_Net_Installation_18

这将显示连接到您的计算机的所有Android设备列表。不要担心名称,因为它显示设备的二进制名称。

2)在实际设备上,将应用程序打开到要自动化的页面。在我们的例子中,我们正在亚马逊应用程序上进行演示。

3)浏览您的Android安装文件夹并转到以下目录以打开UIAutomatorViewer

Android - > android-sdk - > tools - > uiautomatorviewer.bat 

在我的机器上,Android文件夹的默认位置是“ C:\ Users \ lsharm \ AppData \ Local \ Android \ ”,我在本教程中遵循了该位置。

4)在UIAutomatorViewer中,单击设备屏幕截图(标记在第二个按钮下方)。

UIAutomatorViewer_1注意:确保在单击“设备屏幕截图”之前打开应用程序,表示设备屏幕不应关闭并锁定。

 

5)您会注意到设备图像显示在UIAutomator窗口的左侧,右侧是树节点的详细信息,右下侧是属性信息。

6)单击页面上的任何元素,然后查看“节点详细信息”窗口的右侧。它显示树结构中元素的信息。

UIAutomatorViewer_2

注意:在上图中,显示了信息,可用于使用脚本标识元素。

 

7)单击主菜单按钮以显示其所有属性。
UIAutomatorViewer_2_1

注意:在此资源ID中填充,可用于标识元素。

 

8)单击Shop by Department文本以显示其所有属性。注意在上面的屏幕截图中,显示了文本值,可用于标识元素。
UIAutomatorViewer_2_2
 

 

如何保存屏幕截图和UiX文件

这是一个非常方便的功能,用于保存设备的不同屏幕。在使用UIAutomatorViewer进行移动自动化的过程中,您会注意到您需要一次又一次地使用同一页面的设备屏幕截图,这需要您始终与设备连接。使用UIAutomator的这一功能,可以保存屏幕截图和UIX文件,以后可以在未连接设备时使用。

1)一旦获取设备的屏幕截图并显示在UIAutomator的窗口上,单击“ 保存”按钮。它将打开小窗口,如下图所示。

UIAutomatorViewer_1_1

2)现在选择保存两个文件的最佳位置(屏幕截图和UiX文件)。

3)转到同一位置,注意两个文件已保存在所选位置下,一个是设备屏幕的屏幕截图,另一个是UiX文件,其中包含节点结构和所有元素的属性。

 

如何打开UI转储文件

保存应用程序的不同屏幕的所有屏幕截图后,是时候查看如何打开所需的屏幕截图。

1)单击UIAutomator窗口的“ 打开”按钮。一个小窗口将打开。

2)现在浏览屏幕截图和UiX文件,然后单击确定按钮。
UIAutomatorViewer_1_2

将显示屏幕截图,其中包含所选节点的所有节点信息和属性值。您现在可以开始使用它进行自动化,无需连接设备来读取应用程序的属性。

使用 `UIAutomatorViewer` 进行 UI 自动化测试时,遇到元素定位失败的问题是比较常见的。此类问题通常与设备连接、UI 元素属性、布局层级或工具本身的配置有关。 ### 常见原因及解决方法 #### 1. 设备连接问题 在使用真机时,`UIAutomatorViewer` 无法获取设备截图或无法识别设备,这通常与 ADB 连接状态有关。请确保: - 设备已正确连接并被 `adb devices` 命令识别; - 开启了开发者选项和 USB 调试模式; - 使用 `adb logcat` 检查是否有与 UIAutomator 相关的错误日志。 若使用模拟器,需确认其兼容性,某些第三方模拟器(如夜神)可能需要额外的 ADB 配置或端口转发设置[^1]。 #### 2. 元素属性不唯一或动态变化 页面元素的 `resource-id`、`text`、`content-desc` 等属性可能不唯一,或者在不同状态下发生变化,导致定位失败。建议: - 使用 `UIAutomatorViewer` 查看元素层级结构,结合多个属性进行定位; - 使用 `BySelector` 或 `UiSelector` 组合条件,例如: ```java UiSelector selector = new UiSelector().resourceId("com.example:id/button").text("Login"); ``` - 使用 `description` 或 `className` 作为辅助定位条件。 #### 3. 布局层级嵌套过深 某些 UI 元素可能嵌套在多层容器中,导致无法直接定位。可以尝试: - 使用 `childSelector` 方法逐层定位; - 使用 `scrollIntoView` 处理滚动页面中的元素。 #### 4. 工具配置问题 `UIAutomatorViewer` 在某些系统环境下可能无法正常运行,尤其是 SWT 库路径未正确配置时,会报 `NoClassDefFoundError` 错误。解决方法包括: - 修改 `UIAutomatorViewer` 的启动脚本,指定正确的 SWT 库路径; - 确保 JDK 版本兼容性,建议使用 JDK 1.8; - 更新 Android SDK Tools 到最新版本,以获得更好的兼容性[^2]。 #### 5. 页面未加载完成即进行定位 在执行定位操作前,若页面尚未完全加载,可能导致元素不可见或不存在。建议: - 使用 `UiDevice.getInstance().wait()` 等待特定元素出现; - 在关键操作前加入适当的等待时间或显式等待逻辑。 #### 6. 使用替代工具或框架 若 `UIAutomatorViewer` 定位始终不稳定,可考虑使用以下替代方案: - **Appium**:支持多种语言绑定,兼容性强,支持跨平台测试; - **AccessibilityService**:自定义辅助服务实现元素识别; - **图像识别技术**:通过图像匹配定位元素(如 OpenCV 集成)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值