前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Appium自动化(10) - appium高级元素定位方式之 UI Automator API 的详解

Appium自动化(10) - appium高级元素定位方式之 UI Automator API 的详解

作者头像
小菠萝测试笔记
发布2020-06-09 16:33:41
1.4K0
发布2020-06-09 16:33:41
举报
文章被收录于专栏:自动化、性能测试

如果你还想从头学起Appium,可以看看这个系列的文章哦!

https://www.cnblogs.com/poloyy/category/1693896.html

前言

前面介绍过根据id,classname, accessibilityid,xpath来定位元素,其他这些方法底层都是利用了 UI Automator 的 API 功能实现的

UI Automator 介绍

  • UI Automator 测试框架提供了一组 API 来构建 UI 测试,用于在用户应用和系统应用中执行交互
  • 利用 UI Automator API,可以打开“设置”菜单或应用启动器等操作
  • UI Automator 测试框架非常适合编写黑盒自动化测试,其中的测试代码不依赖于目标应用的内部

UI Automator 提供的功能

  • 自带的元素定位工具
  • 在设备上检索状态信息并执行操作的API
  • 支持跨应用 UI 测试的API

UI Automator 访问设备状态

UI Automator 测试框架提供了一个 UiDevice 类,用于在 app 运行的设备上进行访问和执行等操作,它提供了以下操作

  • 更改设备旋转
  • 按D-pad按钮
  • 按返回、主屏幕、菜单按钮
  • 打开通知栏
  • 对当前窗口进行屏幕截图

更多的 UI Automator API

利用 UI Automator API,可以编写稳健可靠的测试,而无需了解目标应用的实现详情

下面将列出常见的类,它们都是在 android.support.test.uiautomator 这个库下的

类名

作用

UiDevice

设备封装类

上面说到的,获取设备信息和设备交互

UiObject

所有空间抽象类

表示设备上可见的一个Android控件

UiSelector

控制选择器

在设备上查询一个或多个目标 UI 元素

Configurator

配置基类

设置运行 UI Automator 测试所需的关键参数

UiScrollable

滚动控件

当目标控件存在于屏幕之外时使用

UiCollection

控件集合

控件遍历,枚举容器的 UI 元素以便计算子元素个数

  • 其中 在 appium 自动化代码选择元素时候直接使用到的

UiSelector

  • 用来生成一个定位器来选择界面中的控件元素,可以通过text,content-desc,class,和一些状态信息来进行条件过滤
  • 类似于 appium中 find_element_by_xxx() 方法中函数值

UiSelector

难点
  • 使用 UI Automator API,需要写Java 代码哦!
  • 当然如果没有基础的话,记住对应的语法格式就行

UiSelector 的栗子

Java语法
代码语言:javascript
复制
 new UiSelector().resourceId(“io.manong.developerdaily:id/tv_tab_title”) 
结合Appium 的用法
代码语言:javascript
复制
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.hpbr.bosszhipin:id/tv_tab_label")') 
还是结合boss直聘 app 做例子哦

环境要求:Android

代码
代码语言:javascript
复制
# 此处省略配置代码...
# 通过resourceId
test = driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.hpbr.bosszhipin:id/tv_tab_label")')
print(test.text)

# 通过text
test = driver.find_element_by_android_uiautomator('new UiSelector().text("附近")')
print(test.text)

# 通过className
test = driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.TextView")')
print(test.text)
输出结果
代码语言:javascript
复制
推荐
附近
自动化测试

UiSelector 还可以通过哪些方法来定位元素

基本上除了xpath之外,可以通过appium实现的元素定位方式,UIAutomator也有,因为底层就是靠他实现的

xpath 虽然没有直接对应的方法,但是像下面这种 xpath 写法,UIAutomator 也有对应的方法

  • // :表示任意后代关系
  • x[n] : 表示第几个子节点
小栗子
代码语言:javascript
复制
# 正常appium写法

test = driver.find_elements_by_id("com.hpbr.bosszhipin:id/tv_tab_label")[1]

# 结合uiautomator写法

test = driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.hpbr.bosszhipin:id/tv_tab_label").enabled(true).instance(1)')

emmm...两种写法得到的结果是一样的,但第二种写法有点复杂就是了...太长了

UI Automator 的总结

  • 当 Appium 封装的方法无法满足你的需求的时候可以尝试用 UI Automator API 去解决问题
  • 不建议,在日常工作中全都用 UI Automator API,学习成本 & 编写成本 & 维护成本都会高很多(当然,你想装逼也不是不可以)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • UI Automator 介绍
  • UI Automator 提供的功能
  • UI Automator 访问设备状态
  • 更多的 UI Automator API
    • 难点
    • UiSelector 的栗子
      • Java语法
        • 结合Appium 的用法
          • 还是结合boss直聘 app 做例子哦
            • 代码
              • 输出结果
              • UiSelector 还可以通过哪些方法来定位元素
                • 小栗子
                • UI Automator 的总结
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档