测试工作中我们经常需要对 App 的页面(或手机屏幕)进行滑动、长按、拖动等手势操作,AppiumDriver 提供了一个模拟手势操作的辅助类 TouchAction,可以通过这个类对手机屏幕进行手势操作模拟。
具体用法参见链接:
https://ceshiren.com/t/topic/3275。
1.导入 TouchAction
导入 TouchAction 的演示代码如下(Python 版和 Java 版)。
Python 版
from appium.webdriver.commoon.touch_action import TouchAction
复制代码
Java 版本
import io.appium.java_client.TouchAction
复制代码
2.常用的手势操作方法
TouchAction 提供的常用的模拟手势的操作方法如下:
press 按下;
release 释放;
move_to/moveTo 移动;
tap 点击;
long_-press/longPress 长按;
wait 等待;
cancel 取消;
perform 执行。
(1)press(按下)
TouchAction 提供的 press()方法可以实现模拟对元素或者页面上某个坐标点的按下操作。通常会结合 release()方法实现对某个元素的点击(包括按下和抬起来两个动作)模拟操作。
当对某个控件执行点击操作时,就可以以使用 press()方法,用法如下(Python 版和 Java 版)。
Python 版本
在坐标为(x,y)的点执行点击操作,press()的用法如下(Python 版和 Java 版)。
Java 版本
在坐标为(x,y)的点执行点击操作,press()用法如下(Python 版和 Java 版)。
(2)release 释放
测试工作中模拟释放操作可以结合 press()和 long_press()一起使用。release 代表 press()和 long_press()方法结束后的动作事件。在某个被测的控件上执行释放操作的代码如下(Python 版和 Java 版)。
Python 版本
也可以在上一个操作结束之后执行 release,不添加任何参数,代码如下。
Java 版本
(3)移动
以控件为目标,测试模拟从一个点移动到一个目标点上,代码如下(Python 版和 Java 版)。
Python 版本
以(x,y)点为目标,测试模拟从一个点移动到目标点,代码如下。
move_to(WebElement el,int x,int y)
复制代码
Java 版本
以(x,y)点为目标,测试模拟从一个点移动到目标点,代码如下。
moveTo(WebElement el,int x,int y)
复制代码
(4)tap(点击)
测试模拟在某个控件的中心点上点击一下,代码如下(Python 版和 Java 版)。
Python 版本
以控件 el 的左上角为基准,沿着 x 轴向右移动 x 单位,沿着 y 轴向下移动 y 单位。在该点上点击,代码如下:
tap(WebElement el ,int x , int y)
复制代码
以(x,y)坐标点为目标模拟点击操作,代码如下:
Java 版本
对页面上某个点实现点击模拟操作,代码如下:
(5)长按
测试那个模拟长按某一控件的操作,代码如下(Python 版和 Java 版)。
Python 版本
long_press(WebElement el)
复制代码
测试中模拟以(x,y)点为目标长按操作,代码如下:
long_press(WebElement el,int x_len,int y_len)
复制代码
Java 版本
只模拟在坐标点长按操作,代码如下:
(6)等待
测试中模拟等待,单位为毫秒。可以在模拟操作事件的过程中,短暂地停留几秒再继续操作。代码如下(Python 版和 Java 版)。
Python 版本
Java 版本
(7)cancel 取消
测试中模拟取消执行事件链中的事件,代码如下(Python 版和 Java 版)。
Python 版本
Java 版本
(8)执行 perform
测试模拟执行事件链中的时间,一般在测试脚本最后会调用 perform 方法,用以顺序执行事件链中的动作。代码如下(Python 版和 Java 版)。
Python 版本
Java 版本
3.案例
测试用的 App 下载地址如下:
'https://GitHub 网站/appium/appium/tree/master/sample-code/apps'
操作步骤:
1)打开测试应用;
2)从元素 “ Views” 滑动到 “Accessibility” 元素。
演示代码如下(Python 版和 Java 版)。
(1)Python 演示代码
#!/usr/bin/env python
# -*-coding:utf-8 -*-
#测试文件 test_touchaction.py
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
class TestTouchAction():
def setup(self):
capa['platformName'] = 'Android'
caps['platformVersion'] = '6.0'
caps['deviceName'] = '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 reardown(self):
self.driver.quit()
def test_touchaction_unlock(self):
#点击 View
ell = self.driver.find_element_by_accessibility_id(
"Views")
#点击 Accessibliity
el2 = self.driver.find_element_by_accessibilty_id(
"Accessibility")
# TouchAction 滑动操作
action = TouchAction(self.driver)
action.press(ell).wait(100).move_to\
(el2).wait(100).release().perform()
复制代码
(2)Java 演示代码
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/wb/hub");
driver = new AndroidDriver(appiumServer,caps);
driver.manage().tiemouts().implicityWait 10,/
TimeUnit.SECONDS);
}
@Test
void test(){
//创建TouchAction对象
TouchAction action = new TouchAction<>(driver);
//TouchAction滑动操作
action.press(PointOption.point((int)(width * 0.5),\
(int) (height * 0.8 ))).waitAction(WaitOptions.\
waitOptions(Duration.ofSecond(2))).moveTo(\
PointOption.point(int) (width * 0.5),\
(int) (height * 0.2))).release().perform();
}
)
复制代码
以上两段测试代码实现了相同的操作,创建了一个 TouchAction 对象,调用里面的 press()方法实现了对元素的点击;使用 wait()方法在时间之间添加等待;使用 move_to()/moveTo()方法完成手势的移动操作;然后调用 release()方法完成手势操作的抬起;最后调用 perform()方法对添加到 TouchAction 中的时间链顺序执行。
搜索微信公众号:TestingStudio 霍格沃兹的干货都很硬核
评论