id定位
(1)id定位方式找元素属性,对于app,找到的不是id,而是resource-id
image.png
(2)开发会误写一些重复的id,注意下重复的id问题: 重复的id默认会点击第一个
//1. resouce-id定位
androidDriver.findElement(By.id("com.lemon.lemonban:id/navigation_tiku")).click();
className定位(不推荐)
(1)className定位找元素,元素属性不是className,而是class
image.png
(2)一般不通过class来定位-》className一般会有很多重复的(如上图,class的属性值就是标签名(有很多一样的标签名)
Accessbility id定位
(1)Accessbility id定位去找元素的属性,属性不是Accessbility ID,而是content-desc
(2)如果元素有content-desc属性,我们就可以通过它来进行定位
image.png
androidDriver.findElementByAccessibilityId("题库").click();
Text文本定位
(1)Web自动化话里面元素的文本值是放在标签对中间的,而app元素文本值是作为元素的属性存在的
(2)appium 没有原生的方式支持Text文本定位
androidDriver.findElementByAndroidUIAutomator("new UiSelector().text(\"题库\")").click();
findElementByAndroidUIAutomator: 通过Android原生的自动化引擎去定位元素
new UiSelector().text("题库"):实例化UiSelector对象,调用text方法
xpath定位相对定位
android.widget.FrameLayout是标签名字
image.png
//4.xpath相对定位
androidDriver.findElement(By.xpath("//android.widget.FrameLayout[@content-desc=\"题库\"]")).click();
坐标定位
(1)坐标打开
手机设置-》开发者选项-》显示指针位置打开
代码中加入了硬性等待,如果不加傻等,app页面还没有打开,代码就执行完了(这里因为没有调用findElement,隐式等待就没作用了)
// 5.坐标定位元素
Thread.sleep(5000);
TouchAction action = new TouchAction(androidDriver);
// 将原始坐标x,y转换成PointOption类型
PointOption pointOption = PointOption.point(451, 1537);
// 点击坐标,注意,这里不能直接传入坐标,必须传入PointOption类型(因为java-client版本发生了变化,6.1.0之后的版本必须传入PointOption类型
// 调用perform()让点击生效
action.press(pointOption).perform();
网友评论