Appium 实现 LockViewPatter 手势密码输入方法之一

问题描述
问题的产生是这样滴,俺们公司的app登录时有一步需要输入手势密码,九宫格那种的,看下图:

Paste_Image.png

解决目标是需要用appium自动的输入手势密码。

搜解决方案
于是乎,上网搜现成的经验,有了如下结果:

Paste_Image.png

遇到了问题
按照图示,九宫格的9个点应该为9个ImageView对象,如法炮制使用UIAutomator撸一遍咱要测试的app,发现现实有点骨干 😂 看下图

Paste_Image.png

原来咱公司的app手势密码键盘用了LockViewPattern,没有办法拿到9个点对象;

也就是说网上搜到的现成方法不适用我遇到的问题😓

换个思路 另辟蹊径
那咋办呢,这时理所应当的想到了TouchAction;利用触摸动作行为,直接做相应的手势。上网一搜就可以找到一段示例代码

touchAction.press(beginX,beginY).moveTo(xStep,yStep).moveTo(xStep,yStep).release().perform();

虽然之前我没有接触过app的自动化测试,但是从这段例子代码中我得到了一些暗示;我猜他的意思是 在 (beingX,beginY)点按下手指,然后先移动 (xStep,yStep), 再移动(xStep,yStep) 最后松开。

实操办法
为了简化测试难度,我设定的手势密码是沿中间三个点 从上往下画一条直线;

但是直接用坐标点找会有一些问题,比如手机屏幕大小不同,找点的位置可能会有偏差,所以输入hardcode坐标点是绝对不可取的;怎么办呢,看下图

Paste_Image.png

目前我从LockPatternView对象上可以拿到它的左上角起点的坐标 (beginX,beginY), 高度 height, 宽度width;如果是从中间第2点 垂直往下一条直线,那么第二个点的x轴坐标肯定是 beginX + width/2 ,毕竟在中点; 它的Y轴坐标 大约为 beginY + height/4 ; 从第二个点起始,先往下走到第5点 然后再是 第8点; 它们大约要移动 2个 1/4 * height的高度;有了这些可变的相对坐标位置,就不怕屏幕大小变化了 😊

尝试了几款屏幕大小不同的手机,均获成功 😆

Paste_Image.png

当然这应该只是解决思路之一,欢迎大家补充其他更好的办法😃

代码参考

    public static void setLockPattern(AppiumDriver driver) throws Exception{
        List<WebElement> view = Toolkit.waifForExistence("//android.view.View[contains(@resource-id,'view_lock_pattern')]",driver); //九宫格键盘view
        WebElement welem = view.get(0);
        int startX = welem.getLocation().getX();
        int startY = welem.getLocation().getY();
        int height = welem.getSize().getHeight();
        int width = welem.getSize().getWidth();
        int yStep = height / 4;
        int beginX = (2 * startX + width) / 2;
        int beginY = startY + yStep;

        //手势密码设置
        logger.info("开始设置手势密码,中间垂直直线 上->下");
        TouchAction touchAction1 = new TouchAction(driver);
        touchAction1.press(beginX,beginY).moveTo(0,yStep).moveTo(0,yStep).release().perform();
        Toolkit.wait(1);
        logger.info("再次设置手势密码,中间垂直直线 上->下");
        touchAction1.press(beginX,beginY).moveTo(0,yStep).moveTo(0,yStep).release().perform();
        logger.info("手势密码设置完毕");
    }

https://testerhome.com/topics/5650

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,166评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,801评论 4 61
  • 上文已经提到了HTTP/2主要利用多路复用传输,头部压缩,服务端推送,可以减少网络延迟对性能带来的影响,优化首次访...
    dotview阅读 5,771评论 0 1
  • 有个美国小孩问他的爸爸:咱家有钱吗?爸爸回答他:我有钱,你没有。我的钱是我自己努力奋斗得来的,将来你也可以通过你的...
    731912ad5985阅读 1,801评论 0 1
  • 放著 就忘記了 不是故意的 天冷了 想起火塘 夜黑了 想起了燈光 可是 我好像忘記了什麼 把某一樣 原本屬於我的 ...
    蔡振源阅读 1,688评论 0 1

友情链接更多精彩内容