appium-手勢密碼實現-automationName 是Appium的情況


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)一般設置手勢密碼都是要兩次才能完成設置操作;

 

以上情況限於automationName 是Appium的情況;

當automationName 是automator2時, 我的用例就失敗了。 坐標整個是亂掉的。解決方法請看下面的博客。原因是底層的實現發生了變化。

appium-手勢密碼實現-automationName 是automator2

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM