TouchAction:在移动应用自动化中实现触摸操作的关键技术

前言

目前正在进行Android自动化搭建过程中,今天在写用例时,遇到个头疼的滑块,折腾了好久才跑通case,记录一下心酸过程以及如何实现滑块的自动化。

TouchAction

关键就是这个东西,最终使用TouchAction模拟了用户触摸动作。

TouchAction是一种强大的技术,可以让测试工程师通过代码模拟用户在移动设备上的触摸行为。

简介

TouchAction是一种在移动应用自动化测试中模拟用户触摸操作的技术。通过TouchAction,测试工程师可以编写代码来模拟用户在屏幕上的滑动、点击、长按等操作,以验证移动应用的交互行为和功能。

原理

TouchAction的实现依赖于移动设备提供的触摸事件接口。当触摸事件发生时,移动设备会产生相应的事件数据,如触摸点坐标、触摸压力、触摸类型等。测试工程师可以通过TouchAction API来构造和发送这些事件数据,从而模拟用户的触摸行为。

如何使用

1、导入所需的库

javascript 复制代码
from appium.webdriver.common.touch_action import TouchAction

2、创建TouchAction对象 在代码中创建一个TouchAction对象,该对象用于构造和发送触摸事件数据。

scss 复制代码
TouchAction(driver)

3、构造触摸事件 使用TouchAction对象的方法,如press()moveTo()release()等,来构造触摸事件序列。通过这些方法可以模拟用户的滑动、点击、长按等操作。

4、发送触摸事件 使用TouchAction对象的perform()方法来发送构造好的触摸事件序列。移动设备将会处理这些事件并执行相应的操作。

常用方法

1、press(x, y):按下屏幕上的指定坐标点(x, y)。

  • 参数x和y是触摸点的坐标,单位为像素。

2、moveTo(x, y):将触摸点移动到屏幕上的指定坐标点(x, y)。

  • 参数x和y是目标坐标点的位置,单位为像素。

3、release():释放触摸点,完成触摸操作。

4、tap(element=None, x=None, y=None, count=1):模拟点击操作。

  • 可以指定元素(element)或者坐标点(x, y)进行点击。
  • 参数count用于指定点击次数。

5、long_press(element=None, x=None, y=None, duration=1000):模拟长按操作。

  • 可以指定元素(element)或者坐标点(x, y)进行长按。
  • 参数duration用于指定长按的持续时间,单位为毫秒。

6、wait(ms=0):等待指定的时间(毫秒)。

  • 参数ms用于指定等待的时间。

7、perform():执行构造好的触摸事件序列。

案例

触摸需要知道元素的坐标,所以我们先来搞定元素的坐标

先来获取元素的尺寸

python 复制代码
class Common:
​
    @classmethod
    def get_element_size(cls, element) -> Size:
        """获取元素尺寸"""
        _size = element.size
​
        return Size(_size['width'], _size['height'])
​

这个方法,我们通过size来获取宽高

再来获取元素左上角的坐标,是以屏幕左上方为起点的

python 复制代码
class Common:
​
​
    @classmethod
    def get_location(cls, element) -> Coordinate:
        """获取元素坐标"""
        _location = element.location
​
        return Coordinate(_location['x'], _location['y'])
​

这个方法,我们通过location来获取左上角的x、y轴坐标

如果想让滑块直接滑到中间位置,可以计算中间位置的坐标

python 复制代码
class Common:
​
​
    @classmethod
    def get_slider_position(cls, element, space: int = 0) -> Coordinate:
        """获取滑块位置, 默认中间位置"""
        _size = cls.get_element_size(element)
        _location = cls.get_location(element)
        _middle_x = _location.axis_left_top + _size.width // 2
        _middle_y = _location.yaxis_left_top + _size.height // 2
​
        return Coordinate(_middle_x + space, _middle_y)

这样就计算出中心位置的坐标

然后我们找到滑块,

ini 复制代码
ele = driver.find_element(locator)

最后,就可以使用TouchAction来模拟用户触摸动作了

scss 复制代码
action = TouchAction(self.driver)
action.press(x=x, y=y).release().perform()

这里的x、y就是需要传入之前计算好的坐标。我们实例化了一个TouchAction对象,接下来,我们使用press()方法指定起始坐标,使用release()方法释放触摸,并使用perform()方法执行触摸操作。这样就实现了模拟触摸动作。

最后

通过使用TouchAction,测试工程师可以通过代码模拟用户的触摸操作,验证移动应用的交互行为和功能。确实是强大很多,第一次使用感觉不错。

相关推荐
AI蜗牛之家2 小时前
Qwen系列之Qwen3解读:最强开源模型的细节拆解
人工智能·python
whyeekkk3 小时前
python打卡第48天
开发语言·python
烛阴4 小时前
bignumber.js深度解析:驾驭任意精度计算的终极武器
前端·javascript·后端
服务端技术栈4 小时前
电商营销系统中的幂等性设计:从抽奖积分发放谈起
后端
你的人类朋友5 小时前
✍️Node.js CMS框架概述:Directus与Strapi详解
javascript·后端·node.js
Eiceblue5 小时前
Python读取PDF:文本、图片与文档属性
数据库·python·pdf
面朝大海,春不暖,花不开5 小时前
自定义Spring Boot Starter的全面指南
java·spring boot·后端
weixin_527550405 小时前
初级程序员入门指南
javascript·python·算法
程序员的世界你不懂5 小时前
Appium+python自动化(十)- 元素定位
python·appium·自动化
钡铼技术ARM工业边缘计算机6 小时前
【成本降40%·性能翻倍】RK3588边缘控制器在安防联动系统的升级路径
后端