版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途
此文章来源于项目官方公众号:“AirtestProject”

前言

滑动操作千千万,你是否会遇到过使用 swipedrag_to 都实现不了的滑动情况?或者你有没有为手势操作不知道如何模拟而苦恼的时候呢?

比如模拟长按删除操作,再比如模拟安卓的多指手势操作等等,这些操作用 swipedrag_to 等方法,都不能满足大家的实际需求。

所以今天想跟大家一起来学习下airtest的 basetouch 模块。这个模块提供了很多 底层的 点击、滑动等操作,用这个模块的方法或者类,我们可以轻松模拟出各种 自定义 的点击、滑动甚至其它手势操作。下文我们将详细了解下这个模块以及如何在实际的应用场景中使用这个模块。

basetouch 模块介绍

我们常使用的 minitouchmaxtouch ,其共同的底层操作都来自于 basetouch

举个例子,之前我们在“用airtest做滑动解锁怎么搞?其实很简单!”这篇推文中,也有详细介绍过 basetouch 模块里面的一些接口:

  • 实现连续划过一系列坐标的 swipe_along 接口
  • 实现双指捏合操作的 pinch 接口
  • 实现双指同时滑动的 two_finger_swipe 接口

除了这些接口以外,今天我们重点要了解的是这个模块里面的4个类:

  • DownEvent(coordinates, contact=0, pressure=50)
  • UpEvent(contact=0)
  • MoveEvent(coordinates, contact=0, pressure=50)
  • SleepEvent(seconds)

调用这4个类,理论上可以拼接组合出来所有的手势操作。我们举个简单的例子:比如 touch 接口,就是先调用 DownEvent ,实现点下某个坐标点,然后再调用 SleepEvent,停顿0.01s, 最后调用 UpEvent,实现抬起操作,拼接这三个“event”,就组成了1个完整的 touch 操作。

案例1:长按删除某个应用

我们先来分解下长按删除应用的整个操作,首先是长按某个应用不松手,然后再把应用滑动到垃圾桶的位置,最后点击弹窗的确认按钮即可完成删除应用的操作。

如果使用封装好的接口来实现,先使用 long_click ,再使用 swipe ,是完成不了这个任务的。因为 long_click 实现的是 点下-停顿-抬起 的动作,而我们在把应用拖到删除应用的垃圾桶之前,是不能有抬起操作的。

所以对于长按删除应用的操作,我们可以使用 basetouch 里面的4个 “event” 来拼接:

from airtest.core.android.touch_methods.base_touch import *
dev = device()# 案例一
# 长按删除应用
longtouch_event = [DownEvent([908, 892]),# 待删除应用的坐标SleepEvent(2),MoveEvent([165,285]),# 删除应用的垃圾桶坐标UpEvent(0)]dev.touch_proxy.perform(longtouch_event)# 取消卸载
poco("android:id/button2").click()

案例2:双指点击屏幕的不同坐标

模拟2个手指分别点击屏幕上的不同坐标,然后再松开2个手指。

# 案例二
# 双指点击屏幕
multitouch_event = [DownEvent([335, 1383], 0),DownEvent([629, 1345], 1),  # 第二根手指SleepEvent(1),UpEvent(0), UpEvent(1)]dev.touch_proxy.perform(multitouch_event)
sleep(1.0)

案例3:模拟三指滑动

三根手指同时在设备屏幕上滑动一定距离。

# 案例三
# 三指滑动
swipe_event2 = [DownEvent((100, 300), 0), DownEvent((100, 500), 1), DownEvent((100, 700), 2), SleepEvent(0.1)]for i in range(5):swipe_event2.append(MoveEvent((100 + 100*i, 300), 0))# 第一根手指swipe_event2.append(MoveEvent((100 + 100*i, 500), 1))# 第二根手指swipe_event2.append(MoveEvent((100 + 100*i, 700), 2))# 第三根手指swipe_event2.append(SleepEvent(0.2))swipe_event2.append(UpEvent(0))
swipe_event2.append(UpEvent(1))
swipe_event2.append(UpEvent(2))dev.touch_proxy.perform(swipe_event2)

使用小结

  • 使用 DownEventUpEventSleepEventMoveEvent,可以分别模拟按下、抬起、等待和移动这些基本操作;
  • 组合使用上述的“event”,可以模拟各种复杂的手势操作;
  • DownEvent((100, 300), 0) ,坐标后面的0代表第1根手指,依次类推, DownEvent((100, 500), 1) 坐标后面的1代表第2根手指;
  • 组合使用“event”的常见方式:把1个手势所需要的各个动作按顺序储存到1个列表(例如swipe_event)里面,最后使用 device().touch_proxy.perform(swipe_event)去执行这个动作列表,完成手势操作的模拟

Airtest官网:http://airtest.netease.com/
Airtest教程官网:https://airtest.doc.io.netease.com/
搭建企业私有云服务:https://airlab.163.com/b2b

Airtest官方答疑Q群:1017250147

分享1个模拟各种复杂的滑动或手势操作的方法,赶紧学起来~相关推荐

  1. 计算机二级虎贲跟未来教育那个好,考计算机二级的都看看,分享几款模拟软件...

    计算机二级考试是全国计算机等级考试四个等级中的一个等级,考核计算机基础知识和使用一种高级计算机语言编写程序以及上机调试的基本技能. 考试内容 1.  选择题20分(包括二级基础公共知识10分.计算机基 ...

  2. ADB模拟点击、滑动事件

    ADB 模拟点击.滑动事件 方案一:使用input子系统 1.adb shell input tap position_x position_y tap模拟点击事件 position_x 为点击的横坐 ...

  3. Android 模拟点击、滑动、返回

    懒惰使人进步.一点都没错,我就是那个懒惰的人. 文章目录 项目实现功能 使用方法 功能演示 技术分析 项目实现功能 可以模拟用户操作 点击 滑动 返回功能. 使用方法 安装apk,首次安装后引导至 开 ...

  4. 技术分享-车辆监控模拟-追踪定位

    技术分享-车辆监控模拟-追踪定位 GIS车辆监控模拟 显示窗口 声明地图 定义公交线路的样式. getBrowser: 获取浏览器名称.版本.设备名称.对应的属性分别为 name, version, ...

  5. python安卓脚本 模拟滑动_python模拟鼠标拖动操作的方法

    本文实例讲述了python模拟鼠标拖动操作的方法.分享给大家供大家参考.具体如下: pdf中的书签只有页码,准备把现有书签拖到一个目录中,然后添加自己页签.重复的拖动工作实在无趣,还是让程序帮我实现吧 ...

  6. 小白也能学会的模拟屏幕滑动与手势密码绘制

    前言 App自动化测试中有两个很重要的操作,屏幕滑动与绘制手势密码.目前很多App在启动时,都存在启动时的引导动画或者加载上下文内容时需要手动上滑或者下滑加载页面,所以在自动化测试的过程中模拟手的滑动 ...

  7. linux屏幕滑动效果实现代码,使用swipe方法模拟屏幕滑动与手势密码绘制

    前言 App自动化测试中有两个很重要的操作,屏幕滑动与绘制手势密码.目前很多App在启动时,都存在启动时的引导动画或者加载上下文内容时需要手动上滑或者下滑加载页面,所以在自动化测试的过程中模拟手的滑动 ...

  8. Android viewPager2 + fragment 模拟微信首页2(滑动页面标签同步变化,点击标签滑动页面)

    可以实现的方式:BottomNavigationView 这里我们不使用BottomNavigationView,手动来写代码 先看一下效果 fragment + viewPager2模拟微信首页2( ...

  9. javascript 模拟退格键_js实现模拟计算器退格键删除文字效果的方法

    本文实例讲述了js实现模拟计算器退格键删除文字效果的方法.分享给大家供大家参考.具体如下: /p> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-tr ...

最新文章

  1. 201621123048《Java程序设计》第八周学习总结
  2. Apache 配置支持HTTPS的SSL证书
  3. HDU - 3746 Cyclic Nacklace(KMP的next数组判循环节)
  4. linux之systemctl设置自定义服务
  5. 当爬虫工程师遇到 CTF丨2021 年 B 站 1024 安全攻防题解
  6. box-sizing的不同属性值间的区别
  7. 数据库版本管理工具Flyway应用
  8. 爬虫:python爬虫学习笔记之Beautifulsoup正则表达式
  9. python tornado websocket_Python:Tornado 第三章:WebSocket概念及应用:第一节:WebSocket概念...
  10. Kafka权威指南,Kafka消费者
  11. 春季养生知识多 吃萝卜可预防上火
  12. solidworks钣金学习分享
  13. 【高德地图API】从头德国高中生JS API(三)覆盖物——大喊|折线|多边形|信息表|聚合marker|点蚀图|照片覆盖...
  14. ormlite android jar,android使用orm框架ormlite在控制台打印log日志信息
  15. web前端开发技巧,CSS全局样式的设置
  16. xml 转json 传输
  17. 06-CSS盒模型详细阐述
  18. Lind.DDD.Domain领域模型介绍
  19. 关于广州小狐科技有限公司
  20. 2021中科院计算机博士,北京:中国科学院大学2021年秋季入学博士招生考试初试进入复试基本分数线要求的通知...

热门文章

  1. Source Insight中无法正确判断宏定义的问题
  2. 转载 tiny6410 使用rt5370 usb无线网卡
  3. 在tomcat集群下利用redis实现单点登陆
  4. Pointpillars三维点云实时检测
  5. es父子结构查询_探索ES-嵌套对象和父子对象(四)
  6. python算式运算题目_python的四则运算练习
  7. 学习HTML经历记录2
  8. 液晶面板里面有些什么配件_液晶模组和液晶面板有什么区别?
  9. JUC多线程并发编程
  10. 全网最详细的Transformer的源码解读