出品 | 51Testing软件测试网
前言
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)
源码分析
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:拖动到目标元素
源码分析
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)
源码解析
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
源码分析
可以看到,和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)
源码分析
如果列表长度 = 1,则直接对唯一x,y坐标的元素进行操作
如果列表长度 > 1, 则循环列表,然后依次对每个元素进行操作
无论列表的长度等于多少,对元素的操作都是一样的:如果有duration,则进行长按(long_press)操作,如果没有duration,则进行点击(tap)操作
51Testing测试交流群,欢迎大家加入!每日分享测试干货+技术交流加下方小姐姐,可领取干货&加群备注【领资料】即可~
END 推荐阅读点击阅读☞怎样构建测试自动化框架?你得记住以下三个编码实践!
点击阅读☞如何提高自身编码能力--定位Bug篇
点击阅读☞JMeter运行结果Unicode编码乱码问题
点击阅读☞写脚本蓝瘦香菇?TW带你0编码自动化!
点击阅读☞省时省力!能够简化自动化代码的神器使用指南
戳