写点什么

软件测试 | 触屏操作测试自动化

  • 2023-02-17
    北京
  • 本文字数:2771 字

    阅读完需:约 9 分钟

测试工作中我们经常需要对 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 版本

press(WebElement el)
复制代码


在坐标为(x,y)的点执行点击操作,press()的用法如下(Python 版和 Java 版)。

press(int x,int y)
复制代码


Java 版本

在坐标为(x,y)的点执行点击操作,press()用法如下(Python 版和 Java 版)。

press(int x,int y)
复制代码


(2)release 释放

测试工作中模拟释放操作可以结合 press()和 long_press()一起使用。release 代表 press()和 long_press()方法结束后的动作事件。在某个被测的控件上执行释放操作的代码如下(Python 版和 Java 版)。


Python 版本

release(webElement el)
复制代码


也可以在上一个操作结束之后执行 release,不添加任何参数,代码如下。

release()
复制代码


Java 版本

release()
复制代码


(3)移动

以控件为目标,测试模拟从一个点移动到一个目标点上,代码如下(Python 版和 Java 版)。


Python 版本

move_to(WebElement el)
复制代码


以(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 版本

tap(WebElement el)
复制代码


以控件 el 的左上角为基准,沿着 x 轴向右移动 x 单位,沿着 y 轴向下移动 y 单位。在该点上点击,代码如下:

tap(WebElement el ,int x , int y)
复制代码


以(x,y)坐标点为目标模拟点击操作,代码如下:

tap(int x,int y)
复制代码


Java 版本

对页面上某个点实现点击模拟操作,代码如下:

tap(int x,int y)
复制代码


(5)长按


测试那个模拟长按某一控件的操作,代码如下(Python 版和 Java 版)。

Python 版本

long_press(WebElement el)
复制代码


测试中模拟以(x,y)点为目标长按操作,代码如下:

long_press(WebElement el,int x_len,int y_len)
复制代码


Java 版本

只模拟在坐标点长按操作,代码如下:


longPress(int x,int y)
复制代码


(6)等待

测试中模拟等待,单位为毫秒。可以在模拟操作事件的过程中,短暂地停留几秒再继续操作。代码如下(Python 版和 Java 版)。

Python 版本

wait (long timeout)
复制代码


Java 版本

wait (long timeout)
复制代码


(7)cancel 取消

测试中模拟取消执行事件链中的事件,代码如下(Python 版和 Java 版)。


Python 版本

cancel()
复制代码


Java 版本

cancel
复制代码


(8)执行 perform

测试模拟执行事件链中的时间,一般在测试脚本最后会调用 perform 方法,用以顺序执行事件链中的动作。代码如下(Python 版和 Java 版)。


Python 版本

preform()
复制代码


Java 版本

perform()
复制代码

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.pyfrom appium import webdriverfrom appium.webdriver.common.touch_action import TouchActionclass 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 霍格沃兹的干货都很硬核

用户头像

社区:ceshiren.com 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
软件测试 | 触屏操作测试自动化_测试_测吧(北京)科技有限公司_InfoQ写作社区