如果你想学习自动化测试,可以看看这个视频哦!
Python自动化测试:从入门到大师,手把手教你做60个实战项目。
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 元素以便计算子元素个数 |
划重点
- 其中 UiSelector 在 appium 自动化代码选择元素时候直接使用到的
- 用来生成一个定位器来选择界面中的控件元素,可以通过text,content-desc,class,和一些状态信息来进行条件过滤
-
UiSelector 类似于 appium中 find_element_by_xxx() 方法中函数值
- UiSelector官方文档:UiSelector | Android Developers
难点
- 使用 UI Automator API,需要写Java 代码哦!
- 当然如果没有基础的话,记住对应的语法格式就行
UiSelector 的栗子
Java语法
new UiSelector().resourceId(“io.manong.developerdaily:id/tv_tab_title”)
结合Appium 的用法
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.hpbr.bosszhipin:id/tv_tab_label")')
还是结合boss直聘 app 做例子哦
环境要求:Android
代码
# 此处省略配置代码... # 通过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)
输出结果
推荐 附近 自动化测试
UiSelector 还可以通过哪些方法来定位元素
基本上除了xpath之外,可以通过appium实现的元素定位方式,UIAutomator也有,因为底层就是靠他实现的
xpath 虽然没有直接对应的方法,但是像下面这种 xpath 写法,UIAutomator 也有对应的方法
- // :表示任意后代关系
- x[n] : 表示第几个子节点
小栗子
# 正常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,学习成本 & 编写成本 & 维护成本都会高很多(当然,你想装逼也不是不可以)
最后,绵薄之力
感谢每一个认真阅读我文章的人,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!
软件测试面试小程序
被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!
涵盖以下这些面试题板块:
1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux
6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础
获取方式 :