Appium(移動端自動化)-解鎖屏幕

1.九個點分別由九個ImageView組成(每一個點都是一個對象)

由於創建的Android模擬器不是這種情況,具體操作並沒有嘗試,但在上網找資料時,對於這種情況的說明還是很多的,而且實現起來比第二種情況簡單,等碰到的時候再說吧~

2.九宮格使用了LockViewPattern(一個對象)

  1. 首先,通過AndroidSDK創建一個安卓模擬器(android avd),並設定好鎖屏圖案,如下圖:

這裏寫圖片描述

通過SDK自帶的工具uiautomatorviewer可以看到,密碼鍵盤用了LockViewPattern,整個密碼鍵盤就是一個對象。
這裏寫圖片描述
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”型的解鎖密碼,接下來就開始踩點吧!
    這裏寫圖片描述

爲了適應更多奇奇怪怪的機型,採用相對位置。從控件邊框到第一個點,相對位置變化了(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,成功!
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章