app自动化测试中的重点环节也是元素定位,只有精准定位到元素才能进行操作,点击,输入,滑动等等,appium提供了很多元素定位的api ,比如像id,text,className等

id定位

id就是一个元素的唯一身份标示,由开发人员在项目中指定,如果有对应的resource-id,就可以采取这种方式来实现定位操作
注意: 有可能app项目开发人员不严谨,一个页面中存在多个相同的resource-id属性

  1. //找到我的柠檬元素并且点击
  2. androidDriver.findElement(By.id("com.lemon.lemonban:id/navigation_my")).click()

text定位

  1. driver.findElementByAndroidUIAutomator("new UiSelector().text("全程班")");

className定位

根据class属性查找元素

  1. androidDriver.findElement(By.className("android.widget.LinearLayout"));

一般得到的会是多个元素

Xpath定位

项目中这种方式可应用在各种场景,跟web测试相同

  1. android.widget.EditText(contains(@resource-id,'et_mobile'))
  2. android.widget.TextView[@text='全程班']

accessibility id定位

在UIAutomatorViewer并没有此属性,对应是content-desc属性

  1. androidDriver.findElementByAccessibilityId("题库");

坐标定位

开启坐标显示 设置-关于手机-连续点击5次版本号-进入开发者选项-指针位置勾选
坐标定位并不稳定,受影响的因素很多,万不得已的时候才可使用
且只可用来点击

UIAutomator定位

Android的UIAutomator 是一个强有力的元素定位方式,是通过android提供的原生UIAutomator框架去找元素,且支持元素全部属性定位,appium元素定位方法其实也是基于UIAutomator进行封装

  1. //通过UIAutomator的description方法找到属性是content-desc的元素
  2. androidDriver.findElementByAndroidUIAutomator("new UiSelector().description(\"你的content-desc
  3. 对应的值\")");
  4. //通过UIAutomator的text方法找到属性是text的元素
  5. androidDriver.findElementByAndroidUIAutomator("new UiSelector().text(\"对应的text值\")");
  6. //通过UIAutomator的resourceId方法找到属性是resourceId的元素
  7. androidDriver.findElementByAndroidUIAutomator("new
  8. UiSelector().resourceId(\"com.lemon.lemonban:id/category_title\")")

特殊元素定位

toast元素定位
Android 中的toast是一种简易的消息提示框,当视图显示给用户,在应用程序中显示为浮动,和dialog不一样,永远不会获得焦点,不能被惦记
获取方式 使用xpath中的contains进行搜索

  1. androidDriver.findElement(By.xpath("//*[contains(@text, 'tips')]"));

ADB连接报错

  1. C:\Users\Administrator>adb connect 127.0.0.1:62001
  2. adb server version (36) doesn't match this client (40); killing...
  3. could not read ok from ADB Server
  4. * failed to start daemon
  5. error: cannot connect to daemon

解决方案:
adb kill-server
adb start-server