appium环境安装常见问题的解决方案

appium环境安装常见问题的解决方案

如果你还想从头学起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 这个库下的

划重点

难点

  • 使用 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

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

代码

# 此处省略配置代码...
# 通过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 还可以通过哪些方法来定位元素

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

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

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

  • // :表示任意后代关系
  • x[n] : 表示第几个子节点

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

小栗子

# 正常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,学习成本 & 编写成本 & 维护成本都会高很多(当然,你想装逼也不是不可以)
05-20 21:43