導(dǎo)入TouchAction
- Python 版本
from appium.webdriver.common.touch_action import TouchAction
- Java 版本
import io.appium.java_client.TouchAction;
常用的手勢操作
press 按下
TouchAction 提供的常用的手勢操作有如下操作:
- press 按下
- release 釋放
- move_to/moveTo 移動
- tap 點擊
- long_press/longPress 長按
- wait 等待
- cancel 取消
- perform 執(zhí)行
TouchAction 提供的 press( ) 方法可以實現(xiàn)對元素或者坐標(biāo)的按下操作。通常會結(jié)合 release( ) 方法實現(xiàn)對某個元素的點擊(包括按下和抬起兩個動作)。
在某個控件上執(zhí)行 press 操作,用法如下:
- Python 版本
按下某個元素,用法如下:
press(WebElement el)
在坐標(biāo)為(x,y)的點執(zhí)行 press 操作,用法如下:
press(int x, int y)
- Java 版本
在坐標(biāo)為(x,y)的點執(zhí)行 press 操作,用法如下:
press(int x, int y)
release 釋放
釋放操作,可以結(jié)合其它的事件使用。代表該系列動作的一個結(jié)束標(biāo)志。在某個控件上執(zhí)行釋放操作,用法如下:
- Python 版本
release(WebElement el)
也可以在上一個操作結(jié)束之后執(zhí)行 release,不添加任何參數(shù),用法如下:
release()
- Java 版本
release()
移動
以控件為目標(biāo),從一個點移動到該目標(biāo)上,用法如下:
- Python 版本
move_to(WebElement el)
以(x,y)點為目標(biāo),從一個點移動到該目標(biāo),用法如下:
move_to(WebElement el, int x, int y)
- Java 版本
以(x,y)點為目標(biāo),從一個點移動到該目標(biāo),用法如下:
moveTo(WebElement el, int x, int y)
tap 點擊
在某個控件的中心點上點擊一下,用法如下:
- Python 版本
tap(WebElement el)
以控件 el 的左上角為基準(zhǔn),沿著 x 軸向右移動 x 單位,沿著 y 軸向下移動 y 單位。在該電腦上點擊,用法如下:
tap(WebElement el, int x, int y)
以(x,y)坐標(biāo)點為目標(biāo)點擊,用法如下:
tap(int x, int y)
- Java版本
只提供坐標(biāo)點擊,用法如下:
tap(int x, int y)
長按
長按某一控件,用法如下:
- Python 版本
long_press(WebElement el)
以(x,y)點為目標(biāo)實現(xiàn)長按,用法如下:
long_press(int x, int y)
在控件的左上角的 x 坐標(biāo)偏移 x 單位,y 左邊偏移 y 單位的坐標(biāo)上長按。用法如下:
long_press(WebElement el, int x, int y)
- Java 版本
只提供坐標(biāo)點擊,用法如下:
longPress(int x, int y)
等待
等待,單位為秒??梢栽诓僮魇录倪^程中,短暫地停留幾秒再繼續(xù)操作。用法如下:
- Python 版本
wait(long timeout)
- Java 版本
wait(long timeout)
cancel 取消
可以取消執(zhí)行事件鏈中的事件,用法如下:
- Python 版本
cancel()
- Java 版本
cancel()
執(zhí)行 perform
執(zhí)行事件鏈中的事件,一般最后會調(diào)用這個方法,順序執(zhí)行事件鏈中的動作。用法如下:
- Python 版本
perform()
- Java 版本
perform()
案例
打開測試應(yīng)用,從元素 “Views” 文本滑動到 “Accessibility” 元素,創(chuàng)建一個測試文件代碼如下:
測試 app 官方下載地址:appium/sample-code/apps at master · appium/appium · GitHub
#!/usr/bin/env python# -*- coding: utf-8 -*-# 測試文件 test_touchaction.pyfrom appium import webdriverfrom appium.webdriver.common.touch_action import TouchActionclass 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()public class TouchActionTest { static AppiumDriver driver; @BeforeAll public static void beforeAll() throws MalformedURLException { DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability(“deviceName”, “emulator-5554”); caps.setCapability(“platformName”, “Android”); caps.setCapability(“appPackage”, “io.appium.android.apis”); caps.setCapability(“appActivity”, “io.appium.android.apis. ApiDemos”); URL appiumServer = new URL(“http://127.0.0.1:4723/wd/hub”); driver = new AndroidDriver(appiumServer, caps); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } @Test void test() { // 創(chuàng)建 TouchAction 對象 TouchAction action = new TouchAction(driver); // TouchAction 滑動操作 action.press(PointOption.point((int) (width * 0.5), (int) (height * 0.8))).waitAction(WaitOptions. waitOptions(Duration.ofSeconds(2))).moveTo( PointOption.point((int) (width * 0.5), (int) (height * 0.2))).release().perform(); }}
以上兩段代碼實現(xiàn)了相同的操作,創(chuàng)建了一個 TouchAction 對象,調(diào)用里面的 press() 方法實現(xiàn)起點元素的點擊,使用 wait() 方法在事件之間添加等待,使用 move_to()/moveTo() 方法是完成手勢的移動操作,然后調(diào)用 release() 方法來完成手勢的抬起,最后調(diào)用 perform() 方法對添加到 TouchAction 中的事件鏈順序執(zhí)行。