Appium(移动端自动化)-解锁屏幕

1.九个点分别由九个ImageView组成(每一个点都是一个对象)

由于创建的Android模拟器不是这种情况,具体操作并没有尝试,但在上网找资料时,对于这种情况的说明还是很多的,而且实现起来比第二种情况简单,等碰到的时候再说吧~

2.九宫格使用了LockViewPattern(一个对象)

  1. 首先,通过AndroidSDK创建一个安卓模拟器(android avd),并设定好锁屏图案,如下图:

Appium(移动端自动化)-解锁屏幕_第1张图片

通过SDK自带的工具uiautomatorviewer可以看到,密码键盘用了LockViewPattern,整个密码键盘就是一个对象。
Appium(移动端自动化)-解锁屏幕_第2张图片
2. 在网上找了好多资料,都是关于第一种情况如何解决,后来终于找到了使用TouchAction来解决这种情况–利用触摸动作行为,模拟出相应的手势。
(参考https://testerhome.com/topics/5650)

有这样一段示例代码:

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

大致意思是指:从(beginX,beginY)这个点开始,先后移动(xstep,ystep),最后松开。

  1. 事先设定了“L”型的解锁密码,接下来就开始踩点吧!
    Appium(移动端自动化)-解锁屏幕_第3张图片

为了适应更多奇奇怪怪的机型,采用相对位置。从控件边框到第一个点,相对位置变化了(width6,height/6),以此类推

if(driver.getPageSource().contains("android.view.View"))
        {
            System.out.println("需要解锁!");

            //图案解锁
            WebElement element = driver.findElementById("android:id/lockPatternView");
            int startx = element.getLocation().getX();  //获取控件的左上角坐标
            int starty = element.getLocation().getY();
            int height = element.getSize().getHeight(); //获取控件的height、width
            int width = element.getSize().getWidth();

            int beginx = startx + width/6;
            int beginy = starty + height/6;  //起始点

            int xstep = width/3;  //每次移动x,y的相对距离
            int ystep = height/3;

            TouchAction action = new TouchAction(driver);
            action.press(beginx, beginy).moveTo(0, ystep).moveTo(0, ystep).moveTo(xstep, 0).moveTo(xstep, 0)
            .release().perform();

            if(driver.getPageSource().contains("com.android.deskclock:id/analog_appwidget")){
                System.out.println("解锁成功!");
            }else{
                System.out.println("解锁失败!"); 
            }
        }else{
            System.out.println("无需解锁!");
        }

4.最后,Run As TestNG Suite,成功!
这里写图片描述

你可能感兴趣的:(Appium)