1. 程式人生 > >appium-手勢密碼實現

appium-手勢密碼實現

str oca 分享圖片 on() const 元素 style app .com

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); //初始化TouchAction 15 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-手勢密碼實現