接触过 UI 自动化的同学都应该清楚,当你要使用自动化工具操作界面元素时,首先必须要找到这个元素。在 Web UI 中,我们使用 selenium 进行自动化,定位方式的查看使用的是浏览器自带的开发者工具。
在 App 测试中呢?如何查看页面元素?这又不像 Web 页面,有浏览器。就会很困惑!
App 由于没有基于浏览器运行,那就需要借助一些工具了。目前主要有两种:
- 由 Google 提供,在 Android SDK 环境 tools 目录下的 UIAutomatorviewer
- 由 Appium 桌面版提供的定位工具,inspector
注意,这里讲的定位工具都是针对原生应用。混合应用和 web 应用后面再专门来谈。
没有 Android SDK 的同学请参看《Android Appium环境搭建》
那么哪个工具好用方便呢?都难用! # 手动捂脸 (*/ω\*)
但是难用归难用,总还得用啊。当然还有一种套路,根据页面上显示的文字来定位,这个需要自己封装方法,这个后面专门讲。
先讲讲难用的工具们吧!
UIAutomatorviewer
你可以在 Android SDK 目录下的 tools 中找到它。
点开后出现如下界面,当你连接模拟器后,就可以点击 ② 或 ③ 按钮连接设备桌面,用来查看页面元素。
保证设备已经连接。可通过adb devices
查看。(不熟悉 adb 命令的话请先看 adb 命令介绍)
> adb devcices
List of devices attached
192.168.213.101:5555 device
在模拟器或设备上打开待测应用,这里以墨迹天气为例,点击 UIAutomatorViewer 上的 ② 按钮,连接设备,连接成功后界面如下:
- 左边部分为当前设备屏幕截图,可以直接点击你想查看的元素;
- 右边部分分为上下两部分:上半部分为元素的层级,下半部分为当前选中元素的属性展示。
如果连接不成功,重启一下 adb 服务。
在实际使用过程中,可以将页面截图保存下来,以后在写自动化脚本的时候,不用每次都连接设备打开 App,可以直接打开保存的截图,方便快捷。
保存后有两个文件,屏幕截图和 xml 格式的屏幕层级关系(uix文件):
下次使用时直接打开保存的截图就可以进行定位了。
下面是一个大致的 Appium 和 Selenium 定位方式的区别:
定位方式 | Appium | Selenium | 说明 |
---|---|---|---|
id | resource-id | id | 唯一性较强的定位方式 |
class name | class | class | web 中的 class 为 css 样式类,而 App 中表示控件类型 |
name | name | Appium 1.5 以前 name 定位使用 text 属性,1.8 以后取消 | |
accessibility id | content-desc | 无 | Android中独有的定位方式 |
xpath | 使用class表示层级 | 使用标签名表示层级 | //android.widget.TextView[@resource-id="com.moji.mjweather:id/cm3"] |
css selector | 无 | css 选择器语法 | |
UIAutomator | 使用 Android 官方测试框架 UIAutomator 定位 | 无 | Android 独有定位方式 |
其余 selenium 中的定位方式,如 link text 等,在 Appium 中不存在。