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

  • 相关阅读:
    spark机器学习从0到1特征抽取–Word2Vec(十四)
    spark机器学习从0到1特征抽取–CountVectorizer(十三)
    spark机器学习从0到1特征提取 TF-IDF(十二)
    spark机器学习从0到1机器学习工作流 (十一)
    vant ui中area组件踩坑记录
    免费CDN:jsDelivr+Github 使用方法
    使用vue-quill-editor实现富文本编辑器
    数组添加元素到特定位置
    scoop——强大的Windows命令行包管理工具
    radio单选框样式
  • 原文地址:https://www.cnblogs.com/leavescy/p/9597160.html
Copyright © 2011-2022 走看看