1. 程式人生 > 其它 >乾貨|移動端App自動化之觸屏操作自動化

乾貨|移動端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%+!

⬇️ 點選“閱讀原文”,提升測試核心競爭力!

閱讀原文