app自动化测试中的重点环节也是元素定位,只有精准定位到元素才能进行操作,点击,输入,滑动等等,appium提供了很多元素定位的api ,比如像id,text,className等
id定位
id就是一个元素的唯一身份标示,由开发人员在项目中指定,如果有对应的resource-id,就可以采取这种方式来实现定位操作
注意: 有可能app项目开发人员不严谨,一个页面中存在多个相同的resource-id属性
//找到我的柠檬元素并且点击
androidDriver.findElement(By.id("com.lemon.lemonban:id/navigation_my")).click()
text定位
driver.findElementByAndroidUIAutomator("new UiSelector().text("全程班")");
className定位
根据class属性查找元素
androidDriver.findElement(By.className("android.widget.LinearLayout"));
Xpath定位
项目中这种方式可应用在各种场景,跟web测试相同
android.widget.EditText(contains(@resource-id,'et_mobile'))
android.widget.TextView[@text='全程班']
accessibility id定位
在UIAutomatorViewer并没有此属性,对应是content-desc属性
androidDriver.findElementByAccessibilityId("题库");
坐标定位
开启坐标显示 设置-关于手机-连续点击5次版本号-进入开发者选项-指针位置勾选
坐标定位并不稳定,受影响的因素很多,万不得已的时候才可使用
且只可用来点击
UIAutomator定位
Android的UIAutomator 是一个强有力的元素定位方式,是通过android提供的原生UIAutomator框架去找元素,且支持元素全部属性定位,appium元素定位方法其实也是基于UIAutomator进行封装
//通过UIAutomator的description方法找到属性是content-desc的元素
androidDriver.findElementByAndroidUIAutomator("new UiSelector().description(\"你的content-desc
对应的值\")");
//通过UIAutomator的text方法找到属性是text的元素
androidDriver.findElementByAndroidUIAutomator("new UiSelector().text(\"对应的text值\")");
//通过UIAutomator的resourceId方法找到属性是resourceId的元素
androidDriver.findElementByAndroidUIAutomator("new
UiSelector().resourceId(\"com.lemon.lemonban:id/category_title\")")
特殊元素定位
toast元素定位
Android 中的toast是一种简易的消息提示框,当视图显示给用户,在应用程序中显示为浮动,和dialog不一样,永远不会获得焦点,不能被惦记
获取方式 使用xpath中的contains进行搜索
androidDriver.findElement(By.xpath("//*[contains(@text, 'tips')]"));
ADB连接报错
C:\Users\Administrator>adb connect 127.0.0.1:62001
adb server version (36) doesn't match this client (40); killing...
could not read ok from ADB Server
* failed to start daemon
error: cannot connect to daemon
解决方案:
adb kill-server
adb start-server