likes
comments
collection
share

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

作者站长头像
站长
· 阅读数 41

前言

目前正在进行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
评论
请登录