zoukankan      html  css  js  c++  java
  • appium-手势密码实现-automationName 是Appium的情况

    1. 红色区域的范围为:[66,575][1014,1523], 由于这块是一个整块,所以无法使用每个点的数据;因此只能使用LockPatternView对象拿到左上角的坐标值

    2.  原理, 将九宫格分割为6块, 左上角顶部坐标为[66,575], 我们假设为【startX,startY】, 整个区域的高度为height, 宽度为width,  则Xstep = width / 6,   Ystep = height / 6. 其中Xstep和Ystep分别表示被分割为6块后,每一块的宽度和高度。

         根据上述的变量,我们可以推算出:

        第一个点的坐标为【startX+Xstep, startY + Ystep】;  第二个点的坐标为【startX+3*Xstep, startY + Ystep】; 第三个点的坐标为【startX+5*Xstep,startY + Ystep】

        第四个点的坐标为【startX+Xstep, startY + 3*Ystep】;依次类推则可获取到9宫格9个点的坐标;

     3.  代码如下:这边完成的是一个从中间起点开始的L的手势密码

        

     1     public void setLockPattern(String id) throws Exception {
     2         if (driver.getPageSource().contains("设置手势密码")) {//检测是否是有手势密码出现
     3             List<AndroidElement> element = driver.findElements(By.xpath(Constant.XPATH_VIEW + "[contains(@resource-id,'" + id + "')]"));
     4             Thread.sleep(1000);//触摸前要等待1秒
     5             AndroidElement gelemt = element.get(0);//获取到这个元素把它当做一个对象来做
     6             int startX = gelemt.getLocation().getX();//获取元素的起始点x坐标
     7             int startY = gelemt.getLocation().getY();//获取元素的起始点y坐标
     8             int height = gelemt.getSize().getHeight();//获取元素的高
     9             int width = gelemt.getSize().getWidth();//获取元素的宽
    10             int xStep = width / 6;//把宽分成6份
    11             int yStep = height / 6;//把高分成6份
    12             int beginX = startX + 3*xStep;//计算触摸起始点x坐标
    13             int beginY = startY + yStep;//计算触摸点y坐标
    14             TouchAction ta = new TouchAction(driver); //初始化TouchAction
    15   
    16             //ta.press(beginX, beginY).waitAction(5000).moveTo(0, beginY + 2*yStep).waitAction(5000).moveTo(0, beginY + 4*yStep).waitAction(5000).moveTo((beginX + 2*xStep), beginY + 4*yStep).waitAction(5000).perform();
    17             ta.press(beginX, beginY).moveTo(0, beginY + 2*yStep).moveTo(0, beginY + 4*yStep).moveTo(beginX + 2*xStep, beginY + 4*yStep).release().perform();
    18             sleep(2000);
    19             ta.press(beginX, beginY).moveTo(0, beginY + 2*yStep).moveTo(0, beginY + 4*yStep).moveTo(beginX + 2*xStep, beginY + 4*yStep).release().perform();
    20             logger.info("手势密码设置完毕");
    21 
    22         }
    23     }

       1) ta.press(beginX,beginY),为从[beginX,beginY]坐标开始; moveTo【x,y】为相对于[beginX,beginY]坐标移动[x,y]的距离, 即最终的坐标为【beginX+x, beginY+y】;

        2)waitAction(int ms), 指的是停留多少毫秒;

        3)release()方法,指的是释放当前的手势;

        4)perform()方法,显示整个手势链条;

        5)一般设置手势密码都是要两次才能完成设置操作;

    以上情况限于automationName 是Appium的情况;

    当automationName 是automator2时, 我的用例就失败了。 坐标整个是乱掉的。解决方法请看下面的博客。原因是底层的实现发生了变化。

    appium-手势密码实现-automationName 是automator2

  • 相关阅读:
    -bash: fork: Cannot allocate memory 问题的处理
    Docker top 命令
    docker常见问题修复方法
    The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
    What's the difference between encoding and charset?
    hexcode of é î Latin-1 Supplement
    炉石Advanced rulebook
    炉石bug反馈
    Sidecar pattern
    SQL JOIN
  • 原文地址:https://www.cnblogs.com/leavescy/p/9597160.html
Copyright © 2011-2022 走看看