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

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

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

如果你还想从头学起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 元素以便计算子元素个数 划重点
  • 其中 UiSelector 在 appium 自动化代码选择元素时候直接使用到的
  • 用来生成一个定位器来选择界面中的控件元素,可以通过text,content-desc,class,和一些状态信息来进行条件过滤
  •  UiSelector 类似于 appium中  find_element_by_xxx() 方法中函数值
  • UiSelector官方文档:https://developer.android.google.cn/reference/android/support/test/uiautomator/UiSelector
难点
  • 使用 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,学习成本 & 编写成本 & 维护成本都会高很多(当然,你想装逼也不是不可以)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/589293.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存