zoukankan      html  css  js  c++  java
  • APP自动化特殊场景元素操作&手势操作(五)

    特殊场景元素操作

    toast元素定位

    Android中的Toast是一种简易的消息提示框。 当视图显示给用户,在应用程序中显示为浮动。和Dialog 不一样的是,它永远不会获得焦点,无法被点击。

    获取方式:

    匹配所有的元素,找对应的text属性值中有包含tips关键字

    androidDriver.findElement(By.xpath("//*[contains(@text, 'tips')]"));

    元素无法通过工具定位

    eg:bilibili的登录页面、银行金融类的App、密码输入界面

    原因在于:页面有做了截图限制,不能通过工具(元素定位工具、adb等)进行截图

    可以通过adb命令验证页面是否做了截图限制

    adb shell screencap -p /sdcard/1.png

    解决方案 getPageSource API获取页面源代码信息

    手势操作

    滑动

    滑动效果影响因素

    • 滑动距离
    • 滑动时间(越快滑动范围越大)

    实战示例:

    1.下拉刷新

    /*
    * 向左滑动的通用方法
    * swipeTime参数:控制滑动的时间,单位为毫秒
    */
    public static void swipeLeft(int swipeTime){
    //获取屏幕宽度和高度
    int width = driver.manage().window().getSize().getWidth();
    int height = driver.manage().window().getSize().getHeight();
    //定义滑动的起始点和滑动的终止点位置
    //起始点:(x轴:屏幕的1/2宽度,y轴:屏幕的1/4高度)
    PointOption startPoint = PointOption.point(width*3/4,height/2);
    //终止点:(x轴:屏幕的1/2宽度,y轴:屏幕的3/4高度)
    PointOption endPoint = PointOption.point(width/4,height/2);
    TouchAction touchAction = new TouchAction(driver);
    //滑动时间waitoptions类型参数
    WaitOptions waitOptions = new WaitOptions();
    waitOptions.withDuration(Duration.ofMillis(swipeTime));
    //press:按下 moveTo:移动到目标点 release:手指抬起
    touchAction.press(startPoint).waitAction(waitOptions).moveTo(endPoint).release().perform();
    }

    2.九宫格解锁 -- 多次连续滑动
    //1、得到整个解锁图案的宽度和高度
    WebElement webElement = driver.findElement(MobileBy.id("com.apple.apple2:id/lpv_password"));
    int elementWidth = webElement.getSize().getWidth();
    int elementHeight = webElement.getSize().getHeight();
    int x = webElement.getLocation().getX();
    int y= webElement.getLocation().getY();*/
    //得到手势滑动几个点的坐标(先以实际点坐标调试,再做总结共性适配所有机型,这里自己去替换即可,我这里手势是Z型为例)
    // 147 425 356 425 568 425(x/6,y/6)(3*x/6,y/6)(5*x/6,y/6)
    // 356 636(x*/6,3*y/6)
    // 147 850 356 850 568 850(x*/6,5*y/6)(3*/6,5*y/6)(5*x/6,5*y/6)

    PointOption pointOption1 = PointOption.point(,425);
    PointOption pointOption2 = PointOption.point(356,425);
    PointOption pointOption3 = PointOption.point(568,425);
    PointOption pointOption4 = PointOption.point(356,636);
    PointOption pointOption5 = PointOption.point(147,850);
    PointOption pointOption6 = PointOption.point(356,850);
    PointOption pointOption7 = PointOption.point(568,850);
    //创建TouchAction对象
    TouchAction touchAction = new TouchAction(driver);
    touchAction.press(pointOption1).moveTo(pointOption2).moveTo(pointOption3).moveTo(pointOption4)
    .moveTo(pointOption5).moveTo(pointOption6).moveTo(pointOption7).release().perform();

    3.多点触摸

    MultiTouchAction类可以模拟用户多点触摸操作,主要包含有add()和perform()两个方法,可以结合 TouchAction模拟多根手指滑动效果

    实例:手势放大(多点触摸)

    先获取屏幕的宽和高
    int width = driver.manage().window().getSize().getWidth();
    int height = driver.manage().window().getSize().getHeight();
    第一根手指的手势(B->A) B:0.4 A:0.2
    PointOption pointOptionB = PointOption.point(width*2/5,height*2/5);
    PointOption pointOptionA = PointOption.point(width/5,height/5);
    第二根手指的手势(C->D) D:0.6  D:0.8
    PointOption pointOptionC = PointOption.point(width*3/5,height*3/5);
    PointOption pointOptionD = PointOption.point(width*4/5,height*4/5);
    设置滑动
    WaitOptions waitOptions = new WaitOptions();
    waitOptions.withDuration(Duration.ofMillis(800));
    分别创建两根手势触摸对象-TouchAction
    • waitAction在单手势滑动中去设置:起始点和终止点的滑动时间
    • waitAction在多手势(放大/缩小)中去设置:在起始点等待多久

    TouchAction touchAction1 = new TouchAction(driver);
    touchAction1.press(pointOptionB).waitAction(waitOptions).moveTo(pointOptionA).waitAction(waitOptions).release();
    TouchAction touchAction2 = new TouchAction(driver);
    touchAction2.press(pointOptionC).waitAction(waitOptions).moveTo(pointOptionD).waitAction(waitOptions).release();
    两根手指的动作是需要同时进行的
    MultiTouchAction multiTouchAction = new MultiTouchAction(driver);
    multiTouchAction.add(touchAction1);
    multiTouchAction.add(touchAction2);
    multiTouchAction.perform();

    问题:多手势滑动里面怎么解决滑动时间的坑 

    • 单点手势动作(滑动),waitAction设置滑动过程经历的时间(滑动的快慢)
    • 多点手势动作(放大/缩小),waitAction是按下/抬起经过的时间,不能设置滑动过程经历的时间

    总结

    • 特殊场景元素操作:toast元素文本值获取,元素工具无法定位场景-getPageSource
    • 单手势动作:滑动->通用的向下滑动、通用向左滑动,多次连续滑动->连续调用moveTo
    • 多手势动作:放大/缩小 MultiTouchAction类型添加多个TouchAction滑动动作,最后调用perform

     

  • 相关阅读:
    概率密度函数 通俗理解
    宋浩《概率论与数理统计》笔记---2.2.2、连续型随机变量及其概率密度函数
    宋浩《概率论与数理统计》笔记---2.2.1、离散型随机变量及其概率分布
    宋浩《概率论与数理统计》笔记---2.1、随机变量的概念
    宋浩《概率论与数理统计》笔记---1.5.2、伯努利模型
    宋浩《概率论与数理统计》笔记---1.5.1、事件的独立性
    贝叶斯公式-汽车实例
    贝叶斯公式的理解
    宋浩《概率论与数理统计》笔记---1.4.2、贝叶斯公式
    nodemon通过配置文件监视
  • 原文地址:https://www.cnblogs.com/zhiyu07/p/14182399.html
Copyright © 2011-2022 走看看