Appium自動化測試實現(xiàn)九宮格解鎖
背景
我們在操作APP密碼解鎖里面就有一個九宮格滑動解鎖,這時候我們就需要手動連續(xù)滑動進行操作,前面提到的swipe、scroll、drag_and_drop 這些就無法實現(xiàn)解鎖操作,我們就需要學(xué)會使用高級手勢操作。
高級手勢
高級手勢TouchAction可以實現(xiàn)一些針對手勢的操作,比如滑動、長按、拖動等。我們可以將這些基本手勢組合成一個相對復(fù)雜的手勢。
想要使用TouchAction,必須要創(chuàng)建TouchAction對象,通過對象調(diào)用想要執(zhí)行的手勢,通過perform()執(zhí)行動作。
使用手勢操作,需要導(dǎo)入 TouchAction 包
from appium.webdriver.common.touch_action import TouchAction
輕敲(tap)
模擬手指對某個元素或坐標(biāo)按下并快速抬起。比如點擊(200, 200)的位置。
方法:
TouchAction(driver).tap(element=None, x=None, y=None)
參數(shù)可以是元素,也可以是x,y坐標(biāo)。
短按 (press)
模擬手指一直按下。
方法:
TouchAction(driver).press(el=None, x=None, y=None)
參數(shù)可以是元素,也可以是x,y坐標(biāo)。
長按 (long_press)
模擬手指長按幾秒。
方法:
TouchAction(driver).long_press(el=None, x=None, y=None,duration: int = 1000)
參數(shù)可以是元素,也可以是x,y坐標(biāo),默認長按 1 秒,單位毫秒
等待 (wait)
模擬手指等待,比如按下后等待5秒之后再抬起。
方法:
TouchAction(driver).wait(ms=0)
參數(shù)是暫停的毫秒數(shù)。
移動到 (moveTo)
模擬手指移動操作,比如,手勢解鎖需要先按下,再移動。
方法:
TouchAction(driver).move_to(el=None, x=None, y=None)
參數(shù)可以是元素,也可以是x,y坐標(biāo)。
釋放 (release)
模擬手指抬起
方法:
TouchAction(driver).release()
模擬手指對元素或坐標(biāo)的抬起操作。
執(zhí)行 (perform)
執(zhí)行手勢操作,相當(dāng)于發(fā)送手勢操作命令到手機執(zhí)行
方法:
TouchAction(driver).perform()
九宮格解鎖
現(xiàn)在大部分九宮格就是一整個元素,所以無法通過每個點的元素坐標(biāo)進行操作,只能通過先獲取元素坐標(biāo)位置,再獲取元素大小,然后切割圖片,分別計算出每個點的坐標(biāo)
下圖

實現(xiàn)代碼
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)
#獲取起始坐標(biāo)-九宮格左上頂點
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
# 計算出每個點的坐標(biāo)
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()
說明
在計算各個點的坐標(biāo)時,為什么是 6 等分,我們可以大概畫一下線估算出來,或者找UI設(shè)計圖可以計算

到此這篇關(guān)于Appium自動化測試實現(xiàn)九宮格解鎖的文章就介紹到這了,更多相關(guān)Appium 九宮格解鎖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用Python爬取微博數(shù)據(jù)生成詞云圖片實例代碼
這篇文章主要給大家介紹了關(guān)于利用Python爬取微博數(shù)據(jù)生成詞云圖片的相關(guān)資料,文中通過示例代碼介紹非常詳細,對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08
tensorflow基本操作小白快速構(gòu)建線性回歸和分類模型
這篇文章主要介紹了tensorflow基本操作,快速構(gòu)建線性回歸和分類模型,圖文代碼示例非常詳細,有需要的朋友可以借鑒參考下,希望可以對大家有所幫助2021-08-08
詳解用Python調(diào)用百度地圖正/逆地理編碼API
這篇文章主要介紹了詳解用Python調(diào)用百度地圖正/逆地理編碼API,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
10個Python常用的損失函數(shù)及代碼實現(xiàn)分享
損失函數(shù)是一種衡量模型與數(shù)據(jù)吻合程度的算法。損失函數(shù)測量實際測量值和預(yù)測值之間差距的一種方式。本文為大家總結(jié)了10個常用的損失函數(shù)及Python代碼實現(xiàn),需要的可以參考一下2022-09-09
tensorflow實現(xiàn)二維平面模擬三維數(shù)據(jù)教程
今天小編就為大家分享一篇tensorflow實現(xiàn)二維平面模擬三維數(shù)據(jù)教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
python torch.utils.data.DataLoader使用方法
這篇文章主要介紹了python torch.utils.data.DataLoader使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
python函數(shù)enumerate,operator和Counter使用技巧實例小結(jié)
這篇文章主要介紹了python函數(shù)enumerate,operator和Counter使用技巧,結(jié)合實例形式總結(jié)分析了python內(nèi)置函數(shù)enumerate,operator和Counter基本功能、原理、用法及操作注意事項,需要的朋友可以參考下2020-02-02

