干貨|移動(dòng)端App自動(dòng)化之觸屏操作自動(dòng)化
工作中我們經(jīng)常需要對(duì)應(yīng)用的頁(yè)面進(jìn)行手勢(shì)操作,比如滑動(dòng)、長(zhǎng)按、拖動(dòng)等,AppiumDriver 為我們提供一個(gè)模擬手勢(shì)操作的輔助類 TouchAction,可以通過(guò)它對(duì)手機(jī)屏幕進(jìn)行手勢(shì)操作。 具體用法參見(jiàn)鏈接:chromedriver下載地址與webview自動(dòng)化關(guān)鍵代碼 2
導(dǎo)入TouchAction
from appium.webdriver.common.touch_action import TouchAction
常用的手勢(shì)操作
TouchAction 提供的常用的手勢(shì)操作有如下操作:
Press 按下
release 釋放
move_to 移動(dòng)
tap 點(diǎn)擊
longPress 長(zhǎng)按
wait 等待
cancel 取消
perform 執(zhí)行
press
TouchAction 提供的 press( ) 方法可以實(shí)現(xiàn)對(duì)元素或者坐標(biāo)的按下操作。通常會(huì)結(jié)合 release( ) 方法實(shí)現(xiàn)對(duì)某個(gè)元素的點(diǎn)擊(包括按下和抬起兩個(gè)動(dòng)作)。 在某個(gè)控件上執(zhí)行 press 操作,用法如下:
press(WebElement el)
在坐標(biāo)為(x,y)的點(diǎn)執(zhí)行 press 操作,用法如下:
press(int x, int y)
release
釋放操作,可以結(jié)合其它的事件使用。代表該系列動(dòng)作的一個(gè)結(jié)束標(biāo)志。在某個(gè)控件上執(zhí)行釋放操作,用法如下:
release(WebElement el)
也可以在上一個(gè)操作結(jié)束之后執(zhí)行 release,不添加任何參數(shù),用法如下:
release()
move_to
以控件為目標(biāo),從一個(gè)點(diǎn)移動(dòng)到該目標(biāo)上,用法如下:
move_to(WebElement el)
以(x,y)點(diǎn)為目標(biāo),從一個(gè)點(diǎn)移動(dòng)到該目標(biāo),用法如下:
move_to(WebElement el, int x, int y)
tap
在某個(gè)控件的中心點(diǎn)上點(diǎn)擊一下,用法如下:
tap(WebElement el)
以(x,y)坐標(biāo)點(diǎn)為目標(biāo)點(diǎn)擊,用法如下:
tap(int x, int y)
以控件 el 的左上角為基準(zhǔn),沿著 x 軸向右移動(dòng) x 單位,沿著 y 軸向下移動(dòng) y 單位。在該點(diǎn)上點(diǎn)擊,用法如下:
tap(WebElement el, int x, int y)
longpress
長(zhǎng)按某一控件,用法如下:
long_press(WebElement el)
以(x,y)點(diǎn)為目標(biāo)實(shí)現(xiàn)長(zhǎng)按,用法如下:
long_press(int x, int y)
在控件的左上角的 x 坐標(biāo)偏移 x 單位,y 左邊偏移 y 單位的坐標(biāo)上長(zhǎng)按。用法如下:
long_press(WebElement el, int x, int y)
wait
等待,單位為毫秒。可以在操作事件的過(guò)程中,短暫的停留幾秒再繼續(xù)操作。用法如下:
wait(long timeout)
cancel
可以取消執(zhí)行事件鏈中的事件,用法如下:
cancel()
perform
執(zhí)行事件鏈中的事件,一般最后會(huì)調(diào)用這個(gè)方法,順序執(zhí)行事件鏈中的動(dòng)作。用法如下:
perform()
打開(kāi)測(cè)試應(yīng)用,從元素 “Views” 文本滑動(dòng)到 “Accessibility” 元素,創(chuàng)建一個(gè)測(cè)試文件 test_touchaction.py,代碼如下: 測(cè)試 app 官方下載地址:https://github.com/appium/appium/tree/master/sample-code/apps
#!/usr/bin/env python?
# -*- coding: utf-8 -*-?
from appium import webdriver?
from 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):
? ? ?
??# 點(diǎn)擊 Views
? ? ??
?el1 = self.driver.find_element_by_accessibility_id(
? ? ?
?? ? ?"Views")
??
? ? ?# 點(diǎn)擊 Accessibility
? ??
? ?el2 = self.driver.find_element_by_accessibility_id(
? ? ? ? ? ?"Accessibility")
? ??
? ?# TouchAction 滑動(dòng)操作
? ??
? ?action = TouchAction(self.driver)
? ? ? ?action.press(el1).wait(100).move_to\
? ? ? ?(el2).wait(100).release().perform()
上面代碼可以看出,首先定位兩個(gè)元素 el1 與 el2 ,分別作為滑動(dòng)過(guò)程中起點(diǎn)元素和終點(diǎn)元素,將我們滑動(dòng)的起點(diǎn)元素與終點(diǎn)元素找到之后,創(chuàng)建一個(gè) TouchAction 對(duì)象,調(diào)用里面的 press( ) 方法實(shí)現(xiàn)起點(diǎn)元素的點(diǎn)擊,使用 wait( ) 方法在事件之間添加等待,使用 move_to( ) 方法完成手勢(shì)的移動(dòng)操作,然后調(diào)用 release( ) 方法來(lái)完成手勢(shì)的抬起,最后調(diào)用 perform( ) 方法對(duì)添加到 TouchAction 中的事件鏈順序執(zhí)行。