『與善仁』Appium基礎 — 25、APP模擬手勢高級操作


APP模擬手勢的動作都被封裝在TouchAction類中,TouchActionAppiumDriver的輔助類,主要針對手勢操作,如滑動、按、拖動等,原理是將一系列的動作放在一個鏈條中發送到服務器,服務器接受到該鏈條后,解析各個動作,逐個執行。 所有手勢都要通過執行函數才會運行。

提示:

我們之前學習的滑動操作,都是對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()

參數:

  1. element:被定位到的元素
  2. x:相對於元素左上⻆的坐標,通常會使用元素的X軸坐標
  3. y:通常會使用元素的Y軸坐標

參數可以傳入元素,也可以傳入xy坐標。也就是說可以在元素上進行輕敲動作,也可以在坐標上進行輕敲動作。

業務場景:

  1. 進入設置。
  2. 點擊“藍牙”選項。

代碼實現:

"""
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. 進入設置。
  2. 點擊藍牙選項。

代碼實現:

"""
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()

業務場:

  1. 進入設置。
  2. 長按藍牙選項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. 進入設置。
  2. 長按藍牙選項。

代碼實現:

"""
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()

業務場景:

  1. 進入設置APP。
  2. 在設置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個黑點的位置。因為紅框內為一個元素,是一個整體,所以只能通過坐標的方式來進行定位。
    image
    2,如何使用坐標的方式定位黑點
    方法很簡單,就在UI Automator Viewer工具中,把鼠標放在黑點的上方就可以了。如下圖:
    (注意:需要把工具的界面拉大一些。)
    image

代碼實現:

# 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()


免責聲明!

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



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