软件测试 | App 控件定位
App 客户端的页面时通过 XML 来实现 UI 布局的,页面的 UI 布局是一个树形结构,树叶被定义为节点。这里的节点也就对应了要定位的页面的元素,节点的上级节点是这个节点所在的布局结构。在 XML 布局中,我们可以使用 XPath 表达进行节点的定位。
1.App 的页面布局结构
从图 5-11 中可以看到,最左侧的是 App 的页面,中间部分展示了这个页面的树形结构,及 XML 代码。
XML 代码中包含的元素定位有关的内容如下。
(1)节点 node
(2)重要的节点属性:clickable(是否可点击)、content-desc(内容)、resource-id(元素 id)、text(文本)、bounds(坐标)。
2.App 的页面元素定位的实现
(1)通过 ID 定位
Android 系统的 App 的页面元素的 ID 称为 resource-id,使用页面分析工具,如 Appium Inspector,能够获取 App 的页面元素的唯一标识,即 ID 属性,使用 ID 属性进行页面元素的定位既方便又快捷。
示例代码如下(Python 版和 Java 版)。
Python 版本
Java 版本
注:resource-id 对应的属性(包名:id/id 值),我们在使用这个属性定位元素的时候要把它当做一个整体。
(2)通过 accessibility-id 定位
当用分析工具抓取到页面元素的 content-desc 的属性值是唯一时,可以采用 accessibility-id 定位页面元素,示例代码如下所示(Python 版和 Java 版)。
Python 版本
Java 版本
(3)通过 XPath 定位
我们也可以通过 XPath 的方式完成页面元素的定位。XPath 定位分为绝对路径定位与相对路径定位两种形式,下面介绍的都是 XPath 的相对路径定位形式。
1)XPath:resource-id 属性定位
用 resource-id 定位页面元素怒的格式如下。
格式://*[@resource-id=’resource-id 属性‘]
示例代码如下(Python 版和 Java 版)
Python 版本
Java 版本
2)XPath:text 属性定位
用 text 属性定位页面元素的格式如下。
格式:
示例代码如下(Python 版和 Java 版)。
Python 版本
Java 版本
3)XPath: class 属性定位
通过 class 属性定位页面元素的格式如下。
格式:
示例代码如下(Python 版和 Java 版)。
Python 版本
Java 版本
4)XPath: content-desc 属性定位
通过 content-desc 属性定位页面元素的格式如下。
格式:
示例代码如下(Python 版和 Java 版)。
Python 版本
Java 版本
3.使用 UI Automator Viewer 定位
我们使用 Android SDK(路径:sdk/tools/uiautomatorviewer)下自带的 UI Automator Viewer 工具也可以定位 App 的页面元素。
使用 UI Automator Viewer 之前,我们需要配置 sdk/tools/路径到环境变量 $PATH 中,配置好路径后,直接在命令行直接输入下面的命令:
可以打开图 5-12 所示的一个页面,点击页面左上角的一个图标(手机图标),就可以获取 UI Automator Viewer 快照图。
用 UI Automator Viewer 抓取当前页面的截图,用以分析和展示当前页面上包含的所示有元素信息,如果想要查看 XML DOM 的具体结构代码,可以通过代码打印页面信息。通过代码 “driver.page_source” 打印手机页面信息,得到的内容如图 5-13 所示。图 5-13 中框起来的部分是 XML DOM 中的一个节点。
我们通过对图 5-13 的分析可以知道,android.widget.TextView 是文本类型的节点,其中包含的属性信息都在 UI Automator Viewer 抓取快照(见图 5-13)中展示。如果只想定位基于 Android 系统 App 的页面元素,可以直接使用 UI Automator Viewer,运行速度快且不需要配置任何复杂的参数,直接在运行后的 UI Automator Viewer 界面上点击获取页面元素的图标就可以将客户端 App 的页面信息抓取出来。
另外,UI Automator Viewer 只能抓取 Android 8 以下版本的 App 的页面信息,如果要抓取 Android 8 以上版本的 App 的页面信息,可以使用 Appium Inspector。
搜索微信公众号:TestingStudio 霍格沃兹的干货都很硬核
评论