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

本文介绍了如何在App自动化测试中使用AppiumDriver的TouchAction类来模拟各种手势操作,如press、release、move_to、tap、long_press、wait、cancel和perform。提供了Python和Java的示例代码,展示了如何进行点击、滑动和长按等操作,并给出了一个实际的Appium测试用例。
摘要由CSDN通过智能技术生成

测试工作中我们经常需要对App的页面(或手机屏幕)进行滑动、长按、拖动等手势操作,AppiumDriver提供了一个模拟手势操作的辅助类TouchAction,可以通过这个类对手机屏幕进行手势操作模拟。

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.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中的时间链顺序执行。

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

全套资料获取方式:点击下方小卡片自行领取即可

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值