標籤:thread bsp ppi wait width ide ogg 三個點 starty
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); //初始化TouchAction15 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)一般設定手勢密碼都是要兩次才能完成設定作業;
appium-手勢密碼實現