1.九個點分別由九個ImageView組成(每一個點都是一個對象)
由於創建的Android模擬器不是這種情況,具體操作並沒有嘗試,但在上網找資料時,對於這種情況的說明還是很多的,而且實現起來比第二種情況簡單,等碰到的時候再說吧~
2.九宮格使用了LockViewPattern(一個對象)
- 首先,通過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),最後鬆開。
- 事先設定了“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,成功!