TouchAction:在移动应用自动化中实现触摸操作的关键技术
前言
目前正在进行Android自动化搭建过程中,今天在写用例时,遇到个头疼的滑块,折腾了好久才跑通case,记录一下心酸过程以及如何实现滑块的自动化。
TouchAction
关键就是这个东西,最终使用TouchAction模拟了用户触摸动作。
TouchAction是一种强大的技术,可以让测试工程师通过代码模拟用户在移动设备上的触摸行为。
简介
TouchAction是一种在移动应用自动化测试中模拟用户触摸操作的技术。通过TouchAction,测试工程师可以编写代码来模拟用户在屏幕上的滑动、点击、长按等操作,以验证移动应用的交互行为和功能。
原理
TouchAction的实现依赖于移动设备提供的触摸事件接口。当触摸事件发生时,移动设备会产生相应的事件数据,如触摸点坐标、触摸压力、触摸类型等。测试工程师可以通过TouchAction API来构造和发送这些事件数据,从而模拟用户的触摸行为。
如何使用
1、导入所需的库
from appium.webdriver.common.touch_action import TouchAction
2、创建TouchAction对象 在代码中创建一个TouchAction对象,该对象用于构造和发送触摸事件数据。
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()
:执行构造好的触摸事件序列。
案例
触摸需要知道元素的坐标,所以我们先来搞定元素的坐标
先来获取元素的尺寸
class Common:
@classmethod
def get_element_size(cls, element) -> Size:
"""获取元素尺寸"""
_size = element.size
return Size(_size['width'], _size['height'])
这个方法,我们通过size来获取宽高
再来获取元素左上角的坐标,是以屏幕左上方为起点的
class Common:
@classmethod
def get_location(cls, element) -> Coordinate:
"""获取元素坐标"""
_location = element.location
return Coordinate(_location['x'], _location['y'])
这个方法,我们通过location来获取左上角的x、y轴坐标
如果想让滑块直接滑到中间位置,可以计算中间位置的坐标
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)
这样就计算出中心位置的坐标
然后我们找到滑块,
ele = driver.find_element(locator)
最后,就可以使用TouchAction来模拟用户触摸动作了
action = TouchAction(self.driver)
action.press(x=x, y=y).release().perform()
这里的x、y就是需要传入之前计算好的坐标。我们实例化了一个TouchAction对象,接下来,我们使用press()
方法指定起始坐标,使用release()
方法释放触摸,并使用perform()
方法执行触摸操作。这样就实现了模拟触摸动作。
最后
通过使用TouchAction,测试工程师可以通过代码模拟用户的触摸操作,验证移动应用的交互行为和功能。确实是强大很多,第一次使用感觉不错。
转载自:https://juejin.cn/post/7315280636929998898