APP模擬手勢的動作都被封裝在TouchAction
類中,TouchAction
是AppiumDriver
的輔助類,主要針對手勢操作,如滑動、按、拖動等,原理是將一系列的動作放在一個鏈條中發送到服務器,服務器接受到該鏈條后,解析各個動作,逐個執行。 所有手勢都要通過執行函數才會運行。
提示:
我們之前學習的滑動操作,都是對
TouchAction
進行的封裝。之前我們說可以自定義滑動操作,就是通過封裝
TouchAction
類中的方法實現的。
注意:
TouchAction
輔助類所有的方法,都不能直接執行,需要調用perfrom()
方法執行。TouchAction
類使用前需要導入包:
from appium.webdriver.common.touch_action import TouchAction
1、手指輕敲操作
模擬手指輕敲一下屏幕操作。
方法介紹:
輕敲操作:tap(element=None, x=None, y=None)
# 發送命令到服務器執行操作
執行方法:perform()
# 調用方式
TouchAction(driver).tap(element,x,y).perform()
參數:
element
:被定位到的元素x
:相對於元素左上⻆的坐標,通常會使用元素的X軸坐標y
:通常會使用元素的Y軸坐標
參數可以傳入元素,也可以傳入x
、y
坐標。也就是說可以在元素上進行輕敲動作,也可以在坐標上進行輕敲動作。
業務場景:
- 進入設置。
- 點擊“藍牙”選項。
代碼實現:
"""
1.學習目標
掌握TouchAction類使用,
輕敲方法tap
2.操作步驟
2.1 導入TouchAction類
2.2 使用tap方法---手指輕敲
tap(element=None,x=None,y=None)
element 元素
x 坐標
y 坐標
使用方式:
TouchAction(driver).tap(element,x,y).perform()
3.需求
使用tap方法點擊設置首頁藍牙
"""
# 1.導入appium和TouchAction
import time
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
# 2.創建Desired capabilities對象,添加啟動參數
desired_caps = {
"platformName": "Android", # 系統名稱
"platformVersion": "7.1.2", # 系統版本
"deviceName": "127.0.0.1:21503", # 設備名稱
"appPackage": "com.android.settings", # APP包名
"appActivity": ".Settings" # APP啟動名
}
# 3.啟動APP
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
time.sleep(2)
# 4.操作APP
# 使用TouchAction中的tap方法點擊藍牙
# 4.1 敲擊元素,傳入元素
# 先定位到元素
blue_tooth = driver.find_element_by_android_uiautomator('new UiSelector().text("藍牙")')
# 輕敲藍牙按鈕
TouchAction(driver).tap(blue_tooth).perform()
# 注意:
# 現在不是用click()方法進行點擊元素的,
# 而是用TouchAction類中的tap方法進行的點擊元素操作。
# 4.2 進入到藍牙界面,傳入開啟\關閉按鈕的坐標,實現開啟\關閉藍牙的操作
# 可以通過uiautomatorviewer定位工具獲得元素按鈕的坐標
# 開啟\關閉元素的坐標為:[108,138][624,185]
# 也就是該元素x軸坐標為108到624,y軸坐標138到185
# 點擊“關閉”按鈕關閉藍牙
time.sleep(2)
TouchAction(driver).tap(x=120, y=200).perform()
# 點擊“開啟”按鈕打開藍牙
time.sleep(2)
TouchAction(driver).tap(x=120, y=200).perform()
# 5.關閉APP
time.sleep(5)
driver.quit()
拓展:
如果調用tap()
方法時,同時元素和坐標都傳入參數,到底會怎樣執行呢?
結論:
tap()
方法元素和坐標參數同時傳入,使用元素參數進行操作。- 如果所傳的元素參數定位不到該元素,就會報錯。
所以,傳入元素參數就不用傳入坐標參數了,二者選其一就行。
示例:
# 1.導入appium和TouchAction
import time
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
# 2.創建Desired capabilities對象,添加啟動參數
desired_caps = {
"platformName": "Android", # 系統名稱
"platformVersion": "7.1.2", # 系統版本
"deviceName": "127.0.0.1:21503", # 設備名稱
"appPackage": "com.android.settings", # APP包名
"appActivity": ".Settings" # APP啟動名
}
# 3.啟動APP
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
time.sleep(2)
# 4.操作APP
# 元素和坐標都傳入
# 當元素和坐標在同一個元素上的時候,兩個都傳入會正常執行。
# 當元素和坐標所指的位置不同時,執行元素參數。
view = driver.find_element_by_android_uiautomator('new UiSelector().text("顯示")')
# 坐標指向藍牙,坐標為x=120, y=200
TouchAction(driver).tap(element=view, x=120, y=200).perform()
# 5.關閉APP
time.sleep(5)
driver.quit()
2、手指按下和抬起操作
一個點擊屏幕的操作,可以分為按下和抬起兩個操作。
press()
方法:模擬手指按下屏幕的操作。
release()
方法:表示結束動作,手指離開屏幕
方法介紹:
# press()方法
press(el=None, x=None, y=None)
參數:
1.element:被定位到的元素
2.x:通常會使用元素的X軸坐標
3.y:通常會使用元素的Y軸坐標
# release()方法沒有參數,執行調用即可
# 調用方式
TouchAction(driver).press(el=None, x=None, y=None).release().perform()
業務場景:
- 進入設置。
- 點擊藍牙選項。
代碼實現:
"""
1.學習目標
掌握TouchAction類使用,
按下press()方法和抬起release()方法的操作
2.操作步驟
2.1 導入TouchAction類
2.2 使用press()---按壓操作
press(el=None,x=None,y=None)
element 元素
x 坐標
y 坐標
release()方法---抬起操作
使用方式:
TouchAction(driver).press(el=None, x=None, y=None).release().perform()
3.需求
使用press()方法和抬起release()方法實現點擊設置首頁藍牙按鈕
"""
# 1.導入appium和TouchAction
import time
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
# 2.創建Desired capabilities對象,添加啟動參數
desired_caps = {
"platformName": "Android", # 系統名稱
"platformVersion": "7.1.2", # 系統版本
"deviceName": "127.0.0.1:21503", # 設備名稱
"appPackage": "com.android.settings", # APP包名
"appActivity": ".Settings" # APP啟動名
}
# 3.啟動APP
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
time.sleep(2)
# 4.操作APP
# 使用press()方法按下藍牙按鈕,使用release()方法抬起
blue_tooth = driver.find_element_by_android_uiautomator('new UiSelector().text("藍牙")')
# 如果三個參數都傳入,按照元素參數執行,同tap()方法。
TouchAction(driver).press(blue_tooth).release().perform()
# 注意:如果想按住不松手,就單獨調用一個press()方法即可。
# 5.關閉APP
time.sleep(5)
driver.quit()
3、等待操作
wait()
方法相當於一個動作要持續多長時間。
方法介紹:
# wait()方法,參數單位:毫秒
wait(ms=0)
# 參數:
ms:暫停的毫秒數
# 調用方式
TouchAction(driver).press(el=None, x=None, y=None).wait(5000).perform()
業務場:
- 進入設置。
- 長按藍牙選項5秒。
代碼實現:
"""
1.學習目標
掌握TouchAction類中等待操作使用
2.操作步驟
2.1 等待方法 wait(時間,單位ms)
2.2 調用方式
TouchAction(driver).press(el=None, x=None, y=None).wait(5000).perform()
3.需求
在設置app首頁長按藍牙選項5秒
"""
# 1.導入appium和TouchAction
import time
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
# 2.創建Desired capabilities對象,添加啟動參數
desired_caps = {
"platformName": "Android", # 系統名稱
"platformVersion": "7.1.2", # 系統版本
"deviceName": "127.0.0.1:21503", # 設備名稱
"appPackage": "com.android.settings", # APP包名
"appActivity": ".Settings" # APP啟動名
}
# 3.啟動APP
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
time.sleep(2)
# 4.操作APP
# 在設置app首頁長按藍牙選項5秒
# 定位藍牙元素
blue_tooth = driver.find_element_by_android_uiautomator('new UiSelector().text("藍牙")')
# 長按藍牙選項5秒
TouchAction(driver).press(blue_tooth).wait(5000).perform()
# 也可以長安藍牙選項5秒之后把手抬起操作,如下調用方式:
# TouchAction(driver).press(blue_tooth).wait(5000).release().perform()
# 5.關閉APP
time.sleep(5)
driver.quit()
4、手指長按操作
long_press()
模擬手機按下屏幕一段時間。
方法介紹:
# long_press()方法
long_press(el=None, x=None, y=None, duration=1000)
參數:
1.element:被定位到的元素。
2.x:通常會使用元素的X軸坐標。
3.y:通常會使用元素的Y軸坐標。
4.duration:持續時間,默認為1000ms。
# 調用方式
TouchAction(driver).long_press(el=None, x=None, y=None, duration=1000).release().perform()
業務場景:
- 進入設置。
- 長按藍牙選項。
代碼實現:
"""
1.學習目標
掌握TouchAction類長按操作使用
2.操作步驟
2.1 長按 long_press(el=None, x=None, y=None, duration=1000)
參數:
1.element:被定位到的元素。
2.x:通X軸坐標。
3.y:Y軸坐標。
4.duration:持續時間,默認為1000ms。
3.需求
在設置app首頁長按藍牙選項
"""
# 1.導入appium和TouchAction
import time
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
# 2.創建Desired capabilities對象,添加啟動參數
desired_caps = {
"platformName": "Android", # 系統名稱
"platformVersion": "7.1.2", # 系統版本
"deviceName": "127.0.0.1:21503", # 設備名稱
"appPackage": "com.android.settings", # APP包名
"appActivity": ".Settings" # APP啟動名
}
# 3.啟動APP
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
time.sleep(2)
# 4.操作APP
# 在設置app首頁長按藍牙選項
blue_tooth = driver.find_element_by_android_uiautomator('new UiSelector().text("藍牙")')
TouchAction(driver).long_press(el=blue_tooth, duration=5000).release().perform()
# 5.關閉APP
time.sleep(5)
driver.quit()
說明:long_press()
方法就相當於press()
方法和wait()
方法的封裝。
5、手指移動操作
move_to()
方法:模擬手機的滑動操作。
方法介紹:
# move_to()方法
move_to(el=None, x=None, y=None)
參數:
1.el:定位的元素
2.x:滑動到元素的X軸坐標
3.y:滑動到元素的Y軸坐標
# 調用方式
TouchAction(driver).press(save).move_to(el=None, x=None, y=None).release().perform()
業務場景:
- 進入設置APP。
- 在設置APP首頁從存儲滑動到藍牙。
代碼實現:
"""
1.學習目標
掌握TouchAction類中手指移動使用
2.操作步驟
移動 move_to(元素)
3.需求
在設置app首頁從存儲滑動到藍牙
"""
# 1.導入appium和TouchAction
import time
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
# 2.創建Desired capabilities對象,添加啟動參數
desired_caps = {
"platformName": "Android", # 系統名稱
"platformVersion": "7.1.2", # 系統版本
"deviceName": "127.0.0.1:21503", # 設備名稱
"appPackage": "com.android.settings", # APP包名
"appActivity": ".Settings" # APP啟動名
}
# 3.啟動APP
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
time.sleep(2)
# 4.操作APP
# 在設置app首頁從存儲滑動到藍牙
save = driver.find_element_by_android_uiautomator('new UiSelector().text("存儲")')
blue_tooth = driver.find_element_by_android_uiautomator('new UiSelector().text("藍牙")')
# 滑動,相當於於向上滑動屏幕操作
TouchAction(driver).press(save).wait(5000).move_to(blue_tooth).release().perform()
# 5.關閉APP
time.sleep(5)
driver.quit()
6、綜合練習
業務場景:打開設置APP,設置屏幕鎖定。
說明:
- 實現步驟:
打開設置APP首頁,
需要向上滑動屏幕(手勢),到頁面顯示"安全"選項。
定位"安全"選項,並進入安全頁面。
在安全頁面中定位”屏幕鎖定“選項,並點擊進入。
”屏幕鎖定“頁面定位”圖案“選項,並點擊進入。
開始繪制z
字型圖案。 - 問題:
1,不能直接定位到9個黑點的位置。因為紅框內為一個元素,是一個整體,所以只能通過坐標的方式來進行定位。
2,如何使用坐標的方式定位黑點
方法很簡單,就在UI Automator Viewer
工具中,把鼠標放在黑點的上方就可以了。如下圖:
(注意:需要把工具的界面拉大一些。)
代碼實現:
# 1.導入appium和TouchAction
import time
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
# 2.創建Desired capabilities對象,添加啟動參數
desired_caps = {
"platformName": "Android", # 系統名稱
"platformVersion": "7.1.2", # 系統版本
"deviceName": "127.0.0.1:21503", # 設備名稱
"appPackage": "com.android.settings", # APP包名
"appActivity": ".Settings" # APP啟動名
}
# 3.啟動APP
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
time.sleep(2)
# 4.操作APP
# 4.1 在設置app首頁從存儲滑動到藍牙
# 定位“存儲”和“滑動”元素
save = driver.find_element_by_android_uiautomator('new UiSelector().text("存儲")')
blue_tooth = driver.find_element_by_android_uiautomator('new UiSelector().text("藍牙")')
# 開始滑動屏幕
driver.scroll(save, blue_tooth, duration=4000)
time.sleep(2)
# 4.2 定位“安全”選項,並點擊進入。
safe = driver.find_element_by_android_uiautomator('new UiSelector().text("安全")')
# 使用tap()方法,輕敲點擊進入
TouchAction(driver).tap(safe).perform()
time.sleep(1)
# 4.3 定位“屏幕鎖定”選項,並點擊進入。
# 定位“屏幕鎖定”選項
lock = driver.find_element_by_android_uiautomator('new UiSelector().text("屏幕鎖定")')
# 使用按下和抬起操作,點擊進入
TouchAction(driver).press(lock).wait(3000).release().perform()
time.sleep(1)
# 4.4 定位“圖案”選項,並點擊進入。
# 定位“圖案”選項
design = driver.find_element_by_android_uiautomator('new UiSelector().text("圖案")')
# 使用長按操作,點擊進入
TouchAction(driver).long_press(el=design, duration=3000).release().perform()
time.sleep(1)
# 5.開始繪圖
TouchAction(driver).press(x=145, y=615).move_to(x=575, y=620).wait(3000) \
.move_to(x=145, y=1050).wait(3000) \
.move_to(x=575, y=1050).release().perform()
# 之后可以點擊確定等繼續操作
# 6.關閉APP
time.sleep(5)
driver.quit()