UIAutomatorViewer 脚本编写

UIAutomatorViewer 工具介绍 在你开始写测试用例之前,使用 uiautomatorviewer 工具可以帮助你熟悉你的UI 组件(包括视图和控件),并获取组件的各项属性信息。你可以使用它对当前连接到你电脑上的手机屏幕进行一个快照,然后可以看到手机当前页面的层级关系和每个控件的属性。利用这些信息,你可以写出针对特定 UI 控件的测试用例。 在本地的..\sdk\tools\目录下打开uiautomatorviewer.bat (打开前请手机连接电脑,手机开启 USB 调试)。

1、获取快照:

        当你要分析一个页面时,首先将手机的页面停留在你要分析的页面,然后用数据线连接电脑。 然后点击 uiautomatorviewer 左上角的第二个图标按钮DeviceScreenshot,点击之后会将当前手机界面的快照更新到这里来。

2、页面层级:

        右上方的整个区域,就是当前页面布局的层级关系。

3、属性详情:

        右下方的整个区域,是当前选中的页面或者是控件的属性信息。这部分比较重要,我们以后写代码的时候就是需要通过查看属性中的控件的 id 或者是 text 等来获取控件的实例,然后点击操作它。

定位控件的参数选择要求

        原则:对脚本控件定位参数的选择要追求在要求范围内的唯一性。

        即除了在多个页面中都会出现的公共控件之外(例如返回按钮),其它的控件定位参数的选择要做到在题目范围内的全局唯一

涉及到使用两种参数对控件进行定位,控件id或控件XPath,其中参数选择优先级:控件Resource-id > 控件 XPath

        优先使用控件的 id 来定位控件(对应 driver.findElementById()方法),若id在题目范围内 并不全局唯一, 则 使 用 XPath 进行定位 (对应driver.findElementByXPath()方法)。

例1:

        如上图中使用 UI Automator Viewer 工具(这个工具在本机的 Android sdk目录下的 tools 文件夹下,名为 uiautomatorviewer.bat 的文件,双击运行即可启动该工具,点击工具中左上角,见图,第二个按钮即可获取当前已连接设备的当前页面,并查看对应控件属性)查看已连接设备当前页面上的控件及其属性。

        对比以上两图可以发现,“商城”控件的 id 为 com.floral.life:id/rb_bottom_shop,而与其同类的控件“我的”的 id 为 com.floral.life:id/rb_bottom_person,我们如果要定位控件“商城”,可知其 id 满足定位参数唯一性的原则,所以这里使用 id 作为“商城”定位的参数

例2:

        比较上面两张图可以发现,当前屏幕上“干花”这个控件的 id 和“鲜切花”的 id 是相同的,都为 com.floral.life:id/tv_title。如果我们要定位“鲜切花”这个控件,根据优先使用全局唯一的参数来定位的原则,发现 id 并不全局唯一,不能和例 1 一样处理,故考虑使用 XPath 进行定位。

        XPath 是一种特殊的路径,可以理解为使用多个参数来唯一定位到一个控件。在此处我们使用的 XPath 为//android.widget.TextView[@text='鲜切花 '],即其格式如下。

//控件类名[@控件属性名='控件属性值']

        即定位到当前页面中的 android.widget.TextView 类控件且其对应的 text 属性值为'鲜切花 '(此处'鲜切花'的花字后面还有一个空格,所以不要自己输入属性值,应该直接把在UI Automator Viewer中的值直接拷贝到代码中去)。

        理论上来说 XPath 中的控件属性名可以是该控件的任意属性,但因为全局唯一性的要求,首要选择 text、content-desc 这种特殊性较强的属性值,不要选择 index、bounds 这种多个控件极易相同(即未满足全局唯一)的属性值。

其他注意事项:

①脚本中不要使用 driver.findElementsByxxx()一类的方法,不要用该方法 定位多个控件得到一个 list 再循环来操作 list 中控件(除非该控件的 XPath 都不能满足在测试范围内的全局唯一)。

②脚本中允许自定义函数,但对于 driver.findElementById()这类原生方法,不要进行封装。

③脚本中使用 XPath 进行定位时,务必与脚本编写要求中的 XPath 格式完全一致,即 //控件类名[@控件属性名='控件属性值'] 不要使用//*[@控件属性名='控件属性值']等一系列其他格式。

④ 逻辑上是一句话的代码务必写在一行内,不要在函数的参数处换行。

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值