乾貨|移動端App自動化之觸屏操作自動化
本文節選自霍格沃茲測試學院內部教材
工作中我們經常需要對應用的頁面進行手勢操作,比如滑動、長按、拖動等,AppiumDriver 為我們提供一個模擬手勢操作的輔助類
TouchAction,可以通過它對手機螢幕進行手勢操作。
具體用法參見連結:https://ceshiren.com/t/topic/3275
匯入TouchAction
from appium.webdriver.common.touch_action import TouchAction
常用的手勢操作
TouchAction 提供的常用的手勢操作有如下操作:
-
Press 按下
-
release 釋放
-
move_to 移動
-
tap 點選
-
longPress 長按
-
wait 等待
-
cancel 取消
-
perform 執行
press
**
**
TouchAction 提供的 press( ) 方法可以實現對元素或者座標的按下操作。通常會結合 release( )
方法實現對某個元素的點選(包括按下和抬起兩個動作)。
在某個控制元件上執行 press 操作,用法如下:
press(WebElement el)
在座標為(x,y)的點執行 press 操作,用法如下:
press(int x, int y)
release
**
**
釋放操作,可以結合其它的事件使用。代表該系列動作的一個結束標誌。在某個控制元件上執行釋放操作,用法如下:
release(WebElement el)
也可以在上一個操作結束之後執行 release,不新增任何引數,用法如下:
release()
move_to
**
**
以控制元件為目標,從一個點移動到該目標上,用法如下:
move_to(WebElement el)
以(x,y)點為目標,從一個點移動到該目標,用法如下:
move_to(WebElement el, int x, int y)
tap
**
**
在某個控制元件的中心點上點選一下,用法如下:
tap(WebElement el)
以(x,y)座標點為目標點選,用法如下:
tap(int x, int y)
以控制元件 el 的左上角為基準,沿著 x 軸向右移動 x 單位,沿著 y 軸向下移動 y 單位。在該點上點選,用法如下:
tap(WebElement el, int x, int y)
longpress
**
**
長按某一控制元件,用法如下:
long_press(WebElement el)
以(x,y)點為目標實現長按,用法如下:
long_press(int x, int y)
在控制元件的左上角的 x 座標偏移 x 單位,y 左邊偏移 y 單位的座標上長按。用法如下:
long_press(WebElement el, int x, int y)
wait
**
**
等待,單位為毫秒。可以在操作事件的過程中,短暫的停留幾秒再繼續操作。用法如下:
wait(long timeout)
cancel
**
**
可以取消執行事件鏈中的事件,用法如下:
cancel()
perform
**
**
執行事件鏈中的事件,一般最後會呼叫這個方法,順序執行事件鏈中的動作。用法如下:
perform()
案例
開啟測試應用,從元素 “Views” 文字滑動到 “Accessibility” 元素,建立一個測試檔案
test_touchaction.py
,程式碼如下:
測試 app 官方下載地址:https://github.com/appium/appium/tree/master/sample-code/apps
#!/usr/bin/env python# -*- coding: utf-8 -*-from appium import webdriverfrom appium.webdriver.common.touch_action import TouchAction
class TestTouchAction(): def setup(self): caps = {} caps['platformName'] = 'Android' caps['platformVersion'] = '6.0' caps['deviceName'] = 'emulator-5554' caps['appPackage'] = 'io.appium.android.apis' caps['appActivity'] = 'io.appium.android.apis.ApiDemos' self.driver = webdriver.Remote(\ "http://127.0.0.1:4723/wd/hub", caps) self.driver.implicitly_wait(5)
def teardown(self): self.driver.quit()
def test_touchaction_unlock(self): # 點選 Views el1 = self.driver.find_element_by_accessibility_id( "Views") # 點選 Accessibility el2 = self.driver.find_element_by_accessibility_id( "Accessibility") # TouchAction 滑動操作 action = TouchAction(self.driver) action.press(el1).wait(100).move_to\ (el2).wait(100).release().perform()
上面程式碼可以看出,首先定位兩個元素 el1 與 el2 ,分別作為滑動過程中起點元素和終點元素,將我們滑動的起點元素與終點元素找到之後,建立一個
TouchAction 物件,呼叫裡面的 press( ) 方法實現起點元素的點選,使用 wait( ) 方法在事件之間新增等待,使用 move_to( )
方法完成手勢的移動操作,然後呼叫 release( ) 方法來完成手勢的抬起,最後呼叫 perform( ) 方法對新增到 TouchAction
中的事件鏈順序執行。
** 推薦學習**
內容全面升級,4 個月 20+ 專案實戰強化訓練,資深測試架構師、開源專案作者親授 BAT 大廠前沿最佳實踐,
帶你一站式掌握測試開發必備核心技能( 對標阿里P6+,年薪50W+ )! 直推 BAT 名企測試經理,普遍漲薪 50%+!
⬇️ 點選“閱讀原文”,提升測試核心競爭力!
閱讀原文