写点什么

软件测试 | App 控件定位

  • 2023-02-17
    北京
  • 本文字数:1857 字

    阅读完需:约 6 分钟

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 版本

driver.find_element(By.ID,"android:id/testl").click()
复制代码


Java 版本

driver.findElement(By.id("android:id/textl")).click();
复制代码


注:resource-id 对应的属性(包名:id/id 值),我们在使用这个属性定位元素的时候要把它当做一个整体。

(2)通过 accessibility-id 定位

当用分析工具抓取到页面元素的 content-desc 的属性值是唯一时,可以采用 accessibility-id 定位页面元素,示例代码如下所示(Python 版和 Java 版)。


Python 版本

driver.find_element_by_accessibility_id("Accessibility")
复制代码


Java 版本

driver.findElementByAccessibilityId("Accessibility")
复制代码


(3)通过 XPath 定位

我们也可以通过 XPath 的方式完成页面元素的定位。XPath 定位分为绝对路径定位与相对路径定位两种形式,下面介绍的都是 XPath 的相对路径定位形式。


1)XPath:resource-id 属性定位


用 resource-id 定位页面元素怒的格式如下。


格式://*[@resource-id=’resource-id 属性‘]


示例代码如下(Python 版和 Java 版)


Python 版本

driver.find_element(By.XPATH, \'//*[@resource-id="rl_login_phone"]').click()
复制代码


Java 版本

driver.findElement(By.xpath(\"//*[@resource-id=\"rl_login_phone\"]"));
复制代码


2)XPath:text 属性定位

用 text 属性定位页面元素的格式如下。

格式:

//*[@text='text 属性']
复制代码


示例代码如下(Python 版和 Java 版)。

Python 版本

driver.find_element(By.XPATH,'//*[test='我的']')
复制代码


Java 版本

driver.findElement(By.xpath("//*[@test=\"我的"]"));
复制代码


3)XPath: class 属性定位

通过 class 属性定位页面元素的格式如下。

格式:

//*[@class='class 属性']
复制代码


示例代码如下(Python 版和 Java 版)。

Python 版本

driver.find_element(By.XPATH\'//*[class=\"android.widget.EditTest"]')
复制代码


Java 版本

driver.findElement(By.xpath(\"//*[class=\"android.widget.EditTest\"]"));
复制代码


4)XPath: content-desc 属性定位

通过 content-desc 属性定位页面元素的格式如下。


格式:

//*[@content-desc='content-desc 属性']
复制代码


示例代码如下(Python 版和 Java 版)。

Python 版本

driver.find_element(By.XPATH,\'//*[@content-desc="搜索"]')
复制代码


Java 版本

driver.findElement(By.xpath(\"//*[@content-desc=\"搜索"]"));
复制代码

3.使用 UI Automator Viewer 定位

我们使用 Android SDK(路径:sdk/tools/uiautomatorviewer)下自带的 UI Automator Viewer 工具也可以定位 App 的页面元素。


使用 UI Automator Viewer 之前,我们需要配置 sdk/tools/路径到环境变量 $PATH 中,配置好路径后,直接在命令行直接输入下面的命令:


uiautomatorviewer
复制代码


可以打开图 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 霍格沃兹的干货都很硬核

用户头像

社区:ceshiren.com 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
软件测试 | App控件定位_测试_测吧(北京)科技有限公司_InfoQ写作社区