调用模块里的action_初级测试人员进阶必备Python编码模块,看过的都说好

本文介绍了Python的ActionHelpers模块,主要用于移动端的特殊操作,包括滑动元素、拖放、屏幕滑动等。ActionHelpers封装了TouchAction类的方法,详细解析了各方法的参数和使用示例,帮助初级测试人员提升自动化测试技能。
摘要由CSDN通过智能技术生成
8fa46b86fddb6dcdfb8678b691928f8a.gif

出品 | 51Testing软件测试网

238fa422ba28b1ed39c3ab79ada7f702.png

前言

238fa422ba28b1ed39c3ab79ada7f702.png
  • 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)
e64e53ba6275117245351b5d14010eae.png 6cf5ac3eee5a9b69927ba67db6e33a4d.png

作用

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

e64e53ba6275117245351b5d14010eae.png 6cf5ac3eee5a9b69927ba67db6e33a4d.png

参数讲解

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

  • destination_el:滑动目标元素

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

e64e53ba6275117245351b5d14010eae.png 6cf5ac3eee5a9b69927ba67db6e33a4d.png

使用栗子

driver.scroll(el1, el2)
e64e53ba6275117245351b5d14010eae.png 6cf5ac3eee5a9b69927ba67db6e33a4d.png

源码分析

0b9c823aff9e19faee86d902d53e094c.png

action 链式调用的意思是:

1. 点击  origin_el 

2. 等待  duration  毫秒后

3. 移动至  destination_el  

4. 释放"手指"

5. 执行操作

drag_and_drop(self: T, origin_el: WebElement, destination_el: WebElement)
e64e53ba6275117245351b5d14010eae.png 6cf5ac3eee5a9b69927ba67db6e33a4d.png

作用

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

e64e53ba6275117245351b5d14010eae.png 6cf5ac3eee5a9b69927ba67db6e33a4d.png

参数讲解

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

  • destination_el:拖动到目标元素

e64e53ba6275117245351b5d14010eae.png 6cf5ac3eee5a9b69927ba67db6e33a4d.png

源码分析

e932dfe19881ac7a29ca9b8c310fa7d7.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)
e64e53ba6275117245351b5d14010eae.png 6cf5ac3eee5a9b69927ba67db6e33a4d.png

作用

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

e64e53ba6275117245351b5d14010eae.png 6cf5ac3eee5a9b69927ba67db6e33a4d.png

参数讲解

  • start_x:开始的x坐标

  • start_y:开始的y坐标

  • end_x:停止滑动的x坐标

  • end_y:停止滑动的y坐标

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

e64e53ba6275117245351b5d14010eae.png 6cf5ac3eee5a9b69927ba67db6e33a4d.png

使用栗子

driver.swipe(100, 100, 100, 400)driver.swipe(100, 100, 100, 400, 1000)
e64e53ba6275117245351b5d14010eae.png 6cf5ac3eee5a9b69927ba67db6e33a4d.png

源码解析

9da8dcd3a09c589b620412c9552fd8f3.png

action 链式调用的意思是

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

2. 等待 duration 毫秒

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

4. 释放"手指"

5. 执行操作

e64e53ba6275117245351b5d14010eae.png 6cf5ac3eee5a9b69927ba67db6e33a4d.png

兼容性问题

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

e64e53ba6275117245351b5d14010eae.png 6cf5ac3eee5a9b69927ba67db6e33a4d.png

解决兼容性问题

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

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
e64e53ba6275117245351b5d14010eae.png 6cf5ac3eee5a9b69927ba67db6e33a4d.png

实际场景

  • 如果是向左右滑动,一般只改变 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)
e64e53ba6275117245351b5d14010eae.png 6cf5ac3eee5a9b69927ba67db6e33a4d.png

作用

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

e64e53ba6275117245351b5d14010eae.png 6cf5ac3eee5a9b69927ba67db6e33a4d.png

参数讲解

  • start_x:开始的x坐标

  • start_y:开始的y坐标

  • end_x:停止滑动的x坐标

  • end_y:停止滑动的y坐标

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

e64e53ba6275117245351b5d14010eae.png 6cf5ac3eee5a9b69927ba67db6e33a4d.png

源码分析

6bbec53d2f54b987742af29b00b9eeb7.png

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

tap(self: T, positions: List[Tuple[int, int]], duration: Optional[int] = None)
e64e53ba6275117245351b5d14010eae.png 6cf5ac3eee5a9b69927ba67db6e33a4d.png

作用

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

e64e53ba6275117245351b5d14010eae.png 6cf5ac3eee5a9b69927ba67db6e33a4d.png

参数讲解

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

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

e64e53ba6275117245351b5d14010eae.png 6cf5ac3eee5a9b69927ba67db6e33a4d.png

使用栗子

driver.tap([(100, 20), (100, 60), (100, 100)], 500)
e64e53ba6275117245351b5d14010eae.png 6cf5ac3eee5a9b69927ba67db6e33a4d.png

源码分析

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

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

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

7c09810e43c5658ac03e958193513a58.gif

51Testing测试交流群,欢迎大家加入!每日分享测试干货+技术交流加下方小姐姐,可领取干货&加群备注【领资料】即可~

e5098bbebf90e32be5b4826d5606a767.png

074069de204dd1c80ea71abe5b92f350.gifEND a560dd0d32483561b085943755335970.gif

67634e3011acd9abffda499a4fa1b6c7.gif

推荐阅读

点击阅读☞怎样构建测试自动化框架?你得记住以下三个编码实践!

点击阅读☞如何提高自身编码能力--定位Bug篇

点击阅读☞JMeter运行结果Unicode编码乱码问题

点击阅读☞写脚本蓝瘦香菇?TW带你0编码自动化!

点击阅读☞省时省力!能够简化自动化代码的神器使用指南

28d21601532faec980a64475abd17939.gif

c5f5a1b6243b85550d61691af18f0288.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值