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

简介: 分享1个模拟各种复杂的滑动或手势操作的方法,赶紧学起来~

前言



滑动操作千千万,你是否会遇到过使用 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-ocr文字识别点击真香!
网易私有云新增的测试驱动力,Airtest-ocr文字识别点击真香!
687 0
|
机器学习/深度学习 算法 数据挖掘
【机器学习】算法术语、决策函数、概率模型、神经网络的详细讲解(图文解释)
【机器学习】算法术语、决策函数、概率模型、神经网络的详细讲解(图文解释)
716 1
|
Android开发 开发者
Android 13 NotificationChannels与Notification的加载流程
Android 13 NotificationChannels与Notification的加载流程
1403 0
Android 13 NotificationChannels与Notification的加载流程
|
9月前
|
存储 缓存 人工智能
深度解析CPFS 在 LLM 场景下的高性能存储技术
本文深入探讨了CPFS在大语言模型(LLM)训练中的端到端性能优化策略,涵盖计算端缓存加速、智能网卡加速、数据并行访问及数据流优化等方面。重点分析了大模型对存储系统的挑战,包括计算规模扩大、算力多样性及数据集增长带来的压力。通过分布式P2P读缓存、IO加速、高性能存算通路技术以及智能数据管理等手段,显著提升了存储系统的吞吐量和响应速度,有效提高了GPU利用率,降低了延迟,从而加速了大模型的训练进程。总结了CPFS在AI训练场景中的创新与优化实践,为未来大模型发展提供了有力支持。
|
12月前
|
应用服务中间件 网络安全 nginx
nginx作为web服务以及nginx.conf详解
nginx作为web服务以及nginx.conf详解
|
Java Android开发 UED
深入探索安卓应用开发中的生命周期管理:从创建到销毁的全过程
在安卓应用开发中,理解并妥善管理应用及活动(Activity)的生命周期至关重要。本文将详细解析从应用创建到销毁的整个生命周期过程,以及如何通过高效管理提升应用性能与用户体验。
332 4
|
数据采集 JSON Serverless
通过百炼大模型+FC函数计算构建小红书图文工作流
使用阿里云函数服务和百炼平台,快速构建小红书图文创作工作流。通过两步轻松创建: 1) 在函数计算中利用Puppeteer构建卡片生成服务; 2) 在百炼平台上创建工作流,整合大模型、脚本和函数计算节点,实现图文内容的自动化处理和生成。此方案适合高效创作小红书内容。
2021 7
|
存储 监控 调度
Django中的定时任务与后台任务队列的实践
【6月更文挑战第10天】在Django中实现定时任务和后台任务队列,可以使用Celery+Beat进行定时任务,Django Q处理后台任务。Celery配置包括设置Broker和Result Backend,创建Celery实例及任务。Django Q则涉及安装、配置ORM和创建任务。通过`async_task`将任务放入队列。注意性能、资源、安全和错误处理。使用时需考虑认证、输入验证、日志监控、部署策略和测试质量保障。
Django中的定时任务与后台任务队列的实践
|
机器学习/深度学习 安全 API
爱回收平台技术揭秘:构建高效、安全、用户友好的二手物品回收生态系统
爱回收利用微服务架构打造高效安全的二手电子回收平台。系统通过API Gateway处理前端请求,各微服务独立处理业务逻辑,如商品评估、订单创建和支付结算,采用机器学习算法预估价格。安全策略包括OAuth2.0授权、数据加密、访问控制和DDoS防护。性能优化涉及缓存、负载均衡及数据库优化,提供便捷、透明的服务,促进可持续发展。
539 1
|
JSON API 数据安全/隐私保护
Django 后端架构开发:JWT 项目实践与Drf版本控制
Django 后端架构开发:JWT 项目实践与Drf版本控制
402 0