给注释中添加@Test(enabled = false)代表不执行此方法
image.png
字符串文本定位:
1.text查找
需要调整成1.8后支持的API
androidDriver.findElementsByAndroidUIAutomator("new UiSelector().text("河南")");
进行text查找
2.name查找
androidDriver.findElementByName("长沙").click();
3.坐标定位
不清除掉应用的数据启动测试
对配置对象DesiredCapabilities调用设置
//noReset:不清楚掉应用的数据启动测试,true不清除,false清除
desird.setCapability("onReset", "true");
元素等待
1.强制等待
设置固定时间Thread.sleep()
2.隐式等待(参数一等待时间,参数二等待时间单位)
androidDriver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
3.显示等待
针对某个元素设置等待时间
WebDriverWait
元素等待
设置元素等待能更加灵活定位元素,增加代码的健壮性
1.强制等待
固定的等待时间
Thread.sleep()
2.隐式等待
最对全局元素设置等待时间
androidDriver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);(全局查找元素,如果找不到的话调用隐式等待时间内一直找找,找到的话往结束),设置后其实也就不用强制等待了
3.显示等待
针对某个元素设置等待时间
WebDriverWait
需要初始化WebDriverWait对象(参数二是超时时间)
//显示等待
WebDriverWait web=new WebDriverWait(androidDriver,10);
WebElement webElement=web.until(new ExpectedCondition<WebElement>() {
@Override
public WebElement apply(WebDriver input) {
// TODO Auto-generated method stub
return androidDriver.findElementById("com.rongda.investmentmanager:id/et_name");
}
});
webElement.click();
}
显示等待如果10秒内没有仍然没有找到元素则抛出异常
(就是直到元素出现才去操作,如果超时则报异常)
APP手势操作-滑动
将手机的显示指针位置功能打开
单次滑动
5.0之前有特定的方法:androidDriver.Swipe(startX,startY,endx,endy,duration)
public void testRef() {
TouchAction touchAction = new TouchAction(androidDriver);
//把原始的坐标转换成PointOption类型的
//开始坐标
PointOption startpoint = PointOption.point(396, 594);
//终止坐标
PointOption endpoint = PointOption.point(396, 594);
//把原始的时间Duration类型的
Duration ofMillis = Duration.ofMillis(800);
//把Duration时间转换成waitAction类型的
WaitOptions waitOptions = WaitOptions.waitOptions(ofMillis);
//配置滑动
touchAction.press(startpoint).waitAction(waitOptions).moveTo(endpoint);
//执行
touchAction.perform();
}
多次滑动
调用多次:.moveTo即可
//实例化TouchAction对象
TouchAction touchAction = new TouchAction(androidDriver);
//把原始的坐标转换成PointOption类型的
//开始坐标
PointOption startpoint = PointOption.point(396, 594);
//终止坐标
PointOption endpoint = PointOption.point(396, 594);
//把原始的时间Duration类型的
Duration ofMillis = Duration.ofMillis(800);
//把Duration时间转换成waitAction类型的
WaitOptions waitOptions = WaitOptions.waitOptions(ofMillis);
//配置滑动
//例如第一个点坐标:150,427第二个坐标:362.427,第三个点坐标:569,427
//第四个点坐标:359,625
PointOption startpoint1 = PointOption.point(396, 594);
PointOption startpoint2 = PointOption.point(396, 427);
PointOption startpoint3 = PointOption.point(396, 150);
touchAction.press(startpoint3).waitAction(waitOptions).moveTo(startpoint1).moveTo(startpoint2).release();
touchAction.perform();
多点触摸
MultiTouchAction类可以模拟用户多点触摸操作
主要包含有add()和perform()两个方法
可以结合TouchAction模拟多根手指滑动效果
public void testMutiSwipediru() {
//1.实例化MultiTouchAction对象
MultiTouchAction multiTouchAction = new MultiTouchAction(androidDriver);
//2.实例化两个TouchAction(应为需要两根手指进行放大操作)
TouchAction touchAction = new TouchAction(androidDriver);
TouchAction touchAction2 = new TouchAction(androidDriver);
//得到当前屏幕的高度和宽度
int x = androidDriver.manage().window().getSize().getWidth();
int y = androidDriver.manage().window().getSize().getHeight();
//获取第一根手指滑动到A点
touchAction.press(PointOption.point(x*4/10, y*4/10)).waitAction(WaitOptions.waitOptions(Duration.ofMillis(1000))).moveTo(PointOption.point(x*2/10, y*2/10)).release();
//第二根手指
touchAction2.press(PointOption.point(x*6/10, y*6/10)).waitAction(WaitOptions.waitOptions(Duration.ofMillis(1000))).moveTo(PointOption.point(x*8/10, y*8/10)).release();
//把两根手指的动作添加到MultiTouchAction里面
multiTouchAction.add(touchAction);
multiTouchAction.add(touchAction2);
multiTouchAction.perform();
}
网友评论