首頁 > 軟體

Appium自動化測試實現九宮格解鎖

2022-02-15 10:02:14

背景

我們在操作APP密碼解鎖裡面就有一個九宮格滑動解鎖,這時候我們就需要手動連續滑動進行操作,前面提到的swipescrolldrag_and_drop 這些就無法實現解鎖操作,我們就需要學會使用高階手勢操作

高階手勢

高階手勢TouchAction可以實現一些針對手勢的操作,比如滑動、長按、拖動等。我們可以將這些基本手勢組合成一個相對複雜的手勢。
想要使用TouchAction,必須要建立TouchAction物件,通過物件呼叫想要執行的手勢,通過perform()執行動作。
使用手勢操作,需要匯入 TouchAction

from appium.webdriver.common.touch_action import TouchAction

輕敲(tap)

模擬手指對某個元素或座標按下並快速擡起。比如點選(200, 200)的位置。

方法:

TouchAction(driver).tap(element=None, x=None, y=None)

引數可以是元素,也可以是x,y座標。

短按 (press)

模擬手指一直按下。

方法:

TouchAction(driver).press(el=None, x=None, y=None)

引數可以是元素,也可以是x,y座標。

長按 (long_press)

模擬手指長按幾秒。

方法:

TouchAction(driver).long_press(el=None, x=None, y=None,duration: int = 1000)

引數可以是元素,也可以是x,y座標,預設長按 1 秒,單位毫秒

等待 (wait)

模擬手指等待,比如按下後等待5秒之後再擡起。

方法:

TouchAction(driver).wait(ms=0)

引數是暫停的毫秒數。

移動到 (moveTo)

模擬手指移動操作,比如,手勢解鎖需要先按下,再移動。

方法:

TouchAction(driver).move_to(el=None, x=None, y=None)

引數可以是元素,也可以是x,y座標。

釋放 (release)

模擬手指擡起

方法:

TouchAction(driver).release()

模擬手指對元素或座標的擡起操作。

執行 (perform)

執行手勢操作,相當於傳送手勢操作命令到手機執行

方法:

TouchAction(driver).perform()

九宮格解鎖

現在大部分九宮格就是一整個元素,所以無法通過每個點的元素座標進行操作,只能通過先獲取元素座標位置,再獲取元素大小,然後切割圖片,分別計算出每個點的座標

下圖

實現程式碼

from appium.webdriver.common.touch_action import TouchAction
from appium.webdriver.common.appiumby import AppiumBy
from appium import webdriver
import time

desc = {
    "platformName": "Android",
    "platformVersion": "7.1.2",
    "deviceName": "127.0.0.1:62001",
    "appPackage": "com.android.settings",
    "appActivity": "com.android.settings.ChooseLockPattern",
    "noReset": True,
    "unicodeKeyboard": True,
    "resetKeyboard": True
}
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desc)
driver.implicitly_wait(5)

#獲取起始座標-九宮格左上頂點
loc = driver.find_element(AppiumBy.ID, "com.android.settings:id/lockPattern").location

# 獲取九宮格元素大小
loc_size = driver.find_element(AppiumBy.ID, "com.android.settings:id/lockPattern").size

# 獲取分割後的均值,即下面要用到的九宮格的步長
step = loc_size["width"] / 6
step_x = loc_size["width"] / 6
step_y = loc_size["height"] / 6

# 計算出每個點的座標
point1 = (loc["x"] + step, loc["y"] + step)
point2 = (point1[0] + step * 2, point1[1])
point3 = (point2[0], point2[1] + step * 2)
point4 = (point3[0] + step * 2, point3[1])

# 進行滑動操作
TouchAction(driver).press(x=point1[0], y=point1[1]).wait(500). 
    move_to(x=point2[0], y=point2[1]). 
    move_to(x=point3[0], y=point3[1]). 
    move_to(x=point4[0], y=point4[1]). 
    release().perform()

time.sleep(10)
driver.quit()

說明

在計算各個點的座標時,為什麼是 6 等分,我們可以大概畫一下線估算出來,或者找UI設計圖可以計算

到此這篇關於Appium自動化測試實現九宮格解鎖的文章就介紹到這了,更多相關Appium 九宮格解鎖內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com