• 20200817_多点触摸操作和Hybrid应用自动化


    1、手势操作-下拉

    下拉刷新示例:

    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();
    }

    2、手势操作-多点触摸(放大缩小)-屏幕解锁

    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();
        }

    3、不清楚原来的缓存数据,免得有些需要重新配置,比如刚开机要设置手机的语言之类的

    在通过代码启动测试App不用把App的数据清除掉
    desiredCapabilities.setCapability("noReset",true);

    4、webview Hybrid应用-有个切换到web的动作

    切换到web页面中去
    androidDriver.context("WEBVIEW_com.lemon.lemonban");

    5、Hybrid应用自动化

    基于UIAutomator+ChromeDriver,native部分走UIAutomator,webview部分走Chromedriver,两者结合混搭,从而实现Hybrid自动化。

    准备工作

    • step1:准备android 4.4+版本以上的手机/模拟器
    • step2:在app源码中将webview调试模式打开(重要)--让开发打开 
      webview.setWebContentsDebuggingEnabled(true);
    • step3:安装UC开发者工具 -识别App内嵌的web页面元素信息

    识别web页面元素

    • 1. UC开发者工具识别webview版本(Chrome浏览器版本),找匹配的chromeDriver-http://npm.taobao.org/mirrors/chromedriver

      替换到以下目录:

    C:UsersAdministratorAppDataLocalProgramsAppium
    esourcesapp
    ode_modulesappium
    ode_modulesappium-chromedriver
    • 2. UC开发者工具识别web页面元素

     http://npm.taobao.org/mirrors/chromedriver--下载对应驱动的链接

    脚本编写

    • step1:识别 - webview视图
    • step2:获取所有的contexts:
      driver.getContextHandles();
    • step3:切换 context- webview名字
      driver.context(webview名字);
    • step4:定位 - 定位webview中的元素,并执行操作:web网页元素定位和操作。
    • step5:切换 - 切换回默认的视图:
      driver.context(native视图)

    6、context理解

    在程序中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");
            //
        }
  • 相关阅读:
    表格Table宽度设置无效的解决方法
    ajax异步模式下实现同步和等待loading效果(jQuery同步Ajax带来的UI线程阻塞问题及解决办法)
    Chrome开发者工具详解(2)-Network面板
    iframe框架加载完成后执行函数
    js获取url?号后面的参数
    绑定键盘回车事件
    js判断一个元素是否在iframe里面
    字符串一些js操作方法
    基于GIS技术的国土空间规划“一张图”实施监督信息系统SuperMap arcgis
    基于supermap 3d-webgl技术的商务楼宇信息监测系统大数据 三维
  • 原文地址:https://www.cnblogs.com/shishibuwan/p/13770559.html
Copyright © 2020-2023  润新知