导航菜单

初级测试人员进阶必备Python编码模块

陆兴东 2026-04-15 39 浏览 Python

前言

  • ActionHelpers类在python安装路径\Lib\site-packages\appium\webdriver\extensions 下的  action_helpers.py模块中

  • 主要是封装了一些移动端才有的特殊操作的方法

  • 全部方法,都基于一个类去封装的,那就是 TouchAction 

scroll(self: T, origin_el: WebElement, destination_el: WebElement, duration: Optional[int] = None)

作用

点击一个元素,并滑动到另一个元素处【注意,不是滑动页面哦。】

参数讲解

  • origin_el:起始元素,注意是一个 WebElement对象哦!

  • destination_el:滑动目标元素

  • duration:点击 origin_el 并将元素移至 destination_el 之间的持续时间,默认600 毫秒

使用栗子

driver.scroll(el1, el2)

源码分析

image.png

action 链式调用的意思是:

1. 点击  origin_el 

2. 等待  duration  毫秒后

3. 移动至  destination_el  

4. 释放"手指"

5. 执行操作

drag_and_drop(self: T, origin_el: WebElement, destination_el: WebElement)

作用

和Selenium.webdriver的方法作用一样,都是拖放元素。

参数讲解

  • origin_el:起始元素,注意是一个 WebElement对象哦!

  • destination_el:拖动到目标元素

源码分析

image.png

action 链式调用的意思是

1. 长按 origin_el 

2. 移动至 destination_el 

3. 释放"手指"

4. 执行操作

swipe(self: T, start_x: int, start_y: int, end_x: int, end_y: int, duration: int = 0)

作用

滑动屏幕【这个才是滑动屏幕哦!!】

参数讲解

  • start_x:开始的x坐标

  • start_y:开始的y坐标

  • end_x:停止滑动的x坐标

  • end_y:停止滑动的y坐标

  • 持续时间:滑动从起点到终点坐标所耗费的时间,以毫秒为单位,默认等于0

使用栗子

driver.swipe(100, 100, 100, 400)driver.swipe(100, 100, 100, 400, 1000)

源码解析

image.png

action 链式调用的意思是

1. 点击坐标为(start_x,start_y)的元素  

2. 等待 duration 毫秒

3. 移动至坐标为(end_x,end_y)的元素

4. 释放"手指"

5. 执行操作

兼容性问题

因为是坐标,如果换了屏幕,坐标可能不一定适用,就会有问题。

解决兼容性问题

可以根据元素宽度和左上角坐标来计算出相对坐标,然后就可以设置滑动的起始和结束位置了。

window_size = driver.get_window_size()height = window_size['height']width = window_size['width']start_x = width * 0.5start_y = height * 0.1end_y = height * 0.9

实际场景

  • 如果是向左右滑动,一般只改变 start_x 和 end_x ,y 坐标应该是大致一样的

  • 如果是向上下滑动,一般只改变 start_y 和 end_y ,x 坐标应该是大致一样的(如上代码,只取了一个start_x)

flick(self: T, start_x: int, start_y: int, end_x: int, end_y: int)

作用

类似swipe ,只不过他是快速滑动,没有 duration。

参数讲解

  • start_x:开始的x坐标

  • start_y:开始的y坐标

  • end_x:停止滑动的x坐标

  • end_y:停止滑动的y坐标

  • 持续时间:滑动从起点到终点坐标所耗费的时间,以毫秒为单位,默认等于0

源码分析

image.png

可以看到,和swipe基本一样,只是press之后没有调用wait方法了.

tap(self: T, positions: List[Tuple[int, int]], duration: Optional[int] = None)

作用

模拟最多五个手指在特定位置上轻按,并保持一定时间【多指操作】。

参数讲解

position:坐标列表,每个坐标元素是一个元组,包含x , y坐标;列表长度最长 = 5

duration:点击的时间长度,以毫秒为单位

 

使用栗子

driver.tap([(100, 20), (100, 60), (100, 100)], 500)

 

源码分析

image.png

  • 如果列表长度 = 1,则直接对唯一x,y坐标的元素进行操作

  • 如果列表长度 > 1, 则循环列表,然后依次对每个元素进行操作

  • 无论列表的长度等于多少,对元素的操作都是一样的:如果有duration,则进行长按(long_press)操作,如果没有duration,则进行点击(tap)操作。
    [magic_form id="form_1779690765"]