下拉刷新示例:
public static void swipeDown(AppiumDriver androidDriver){ int width = androidDriver.manage().window().getSize().getWidth(); int height = androidDriver.manage().window().getSize().getHeight(); int startx = width/2; int endx = width/2; int starty = height/4; int endy = height*3/4; TouchAction touchAction = new TouchAction(androidDriver); Duration dd = Duration.ofMillis(500); touchAction.press(startx, starty).waitAction(dd).moveTo(endx, endy).release().perform(); }
MultiTouchAction类可以模拟用户多点触摸操作 主要包含有add()和perform()两个方法 可以结合TouchAction模拟多根手指滑动效果
示例:放大
@Test public void testMultiSwipe(){ int width = androidDriver.manage().window().getSize().getWidth(); int height = androidDriver.manage().window().getSize().getHeight(); PointOption pointOptionA = PointOption.point(width/5,height/5); PointOption pointOptionB = PointOption.point(width*2/5,height*2/5); PointOption pointOptionC = PointOption.point(width*3/5,height*3/5); PointOption pointOptionD = PointOption.point(width*4/5,height*4/5); //放大手势操作 //手指1 B(0.4,0.4)->A(0.2,0.2) TouchAction touchAction1 = new TouchAction(androidDriver); touchAction1.press(pointOptionB).moveTo(pointOptionA).release(); //手指2 C(0.6,0.6)->D(0.8,0.8) TouchAction touchAction2 = new TouchAction(androidDriver); touchAction2.press(pointOptionC).moveTo(pointOptionD).release(); //让这两根手指的滑动动作同时开始滑动--MultiTouchAction MultiTouchAction multiTouchAction = new MultiTouchAction(androidDriver); multiTouchAction.add(touchAction1); multiTouchAction.add(touchAction2); //最后让多点触摸手势动作生效 multiTouchAction.perform(); }
示例:屏幕解锁-六等分得到每个圆圈的中心点
@Test public void testUnlock(){ //不同分辨率手机屏幕兼容性问题-所以不用具体值,六等分计算 //1、先根据ID找到解锁区域元素 WebElement webElement = androidDriver.findElement(MobileBy.id("com.xxzb.fenwoo:id/lpv_password")); //2、获取解锁区域起始点坐标信息(X,Y) int X = webElement.getLocation().getX(); int Y = webElement.getLocation().getY(); //3、获取解锁区域的宽度/高度 int width = webElement.getSize().getWidth(); int height = webElement.getSize().getHeight(); PointOption pointOption1 = PointOption.point(width/6+X,height/6+Y); PointOption pointOption2 = PointOption.point(width*3/6+X,height/6+Y); PointOption pointOption3 = PointOption.point(width*5/6+X,height/6+Y); PointOption pointOption4 = PointOption.point(width*3/6+X,height*3/6+Y); PointOption pointOption5 = PointOption.point(width/6+X,height*5/6+Y); PointOption pointOption6 = PointOption.point(width*3/6+X,height*5/6+Y); PointOption pointOption7 = PointOption.point(width*5/6+X,height*5/6+Y); TouchAction touchAction = new TouchAction(androidDriver); touchAction.press(pointOption1).moveTo(pointOption2). moveTo(pointOption3).moveTo(pointOption4).moveTo(pointOption5). moveTo(pointOption6).moveTo(pointOption7).release().perform(); }
在通过代码启动测试App不用把App的数据清除掉 desiredCapabilities.setCapability("noReset",true);
切换到web页面中去
androidDriver.context("WEBVIEW_com.lemon.lemonban");
基于UIAutomator+ChromeDriver,native部分走UIAutomator,webview部分走Chromedriver,两者结合混搭,从而实现Hybrid自动化。
准备工作
webview.setWebContentsDebuggingEnabled(true);
识别web页面元素
替换到以下目录:
C:\Users\Administrator\AppData\Local\Programs\Appium\resources\app\node_modules\appium\node_modules\appium-chromedriver
脚本编写
driver.getContextHandles();
driver.context(webview名字);
driver.context(native视图)
在程序中context我们可以理解为当前对象在程序中所处的一个环境/状态
native界面和webview界面分属于不同的context,前者基于Andriod原生控件,后者是Web网页
native默认是”NATIVE_APP”,webview则默认是”WEBVIEW_被测进程名称”
两者的运行环境不同因此需要进行上下文(context)切换
显示布局边界-有框框的是native,没有的就是webview
7、代码示例:
@Test public void testHybrid() throws InterruptedException { //1、进入到柠檬社区web中 androidDriver.findElement(MobileBy.AndroidUIAutomator("new UiSelector().text(\"柠檬社区\")")).click(); Thread.sleep(5000); //2、获取到所有的context 模式(原生页面模式+web页面模式) Set<String> contexts = androidDriver.getContextHandles(); //System.out.println(contexts); //3、切换到web页面中去 androidDriver.context("WEBVIEW_com.lemon.lemonban"); //4、定位web页面元素,操作 //切换了web的模式 ,不再是手机模式 androidDriver.findElement(By.linkText("注册")).click(); //点击注册的展开区域 androidDriver.findElement(By.id("verifyGitHubIcon")).click(); //输入用户名 androidDriver.findElement(By.id("userName")).sendKeys("lemonban"); //输入邮箱 androidDriver.findElement(By.id("userEmail")).sendKeys("1425301899@qq.com"); // }
原文:https://www.cnblogs.com/shishibuwan/p/13770559.html