注:我们的 Airtest 官方公众号(AirtestProject)会持续更新大家对于 Airtest 感兴趣的问题,欢迎有需要的同学关注并查看我们更多的内容。

如想向我们反馈关于 AirtestProject 想了解的问题,欢迎到公众号后台留言。

前言

如同点击操作一样,滑动操作也是测试过程中非常常用的操作。下文将向大家讲述Airtest和poco下的swipe如何使用以及应用swipe解决跳过 APP 介绍页和连续滑动等实际应用的问题。

Airtest 下的 swipe 接口

swipe接口实现在当前设备画面上进行一次滑动操作,它支持的平台有Android、IOS和Windows。参数如下:

v1 – 滑动的起点,可以是一个 Template 图片实例,或是绝对坐标 (x, y)

v2 – 滑动的终点,可以是一个 Template 图片实例,或是绝对坐标 (x, y)

vector – 滑动动作的矢量坐标,可以是绝对坐标 (x,y) 或是屏幕百分比,例如 (0.5, 0.5)

***kwargs* – 平台相关的参数 kwargs

swipe有两种传入参数的方式:

从 v1 滑动到 v2,swipe(v1, v2) ,例如:

swipe((672,1214),(336,1305))

从 v1 开始滑动,沿着 vector 方向,swipe(v1, vector=(x, y)),例如:

swipe(Template(r"tpl1574067097045.png", record_pos=(0.042, 0.145), resolution=(1080, 1920)), vector=[-0.2666, -0.0005])

当没有足够的参数来执行滑动时会引发Exception,比如当我们只向 swipe 接口传入 1 个参数时,运行报告就会如下图所示:

Android 和 IOS 平台

除了上述参数以外,swipe在Android和IOS平台下,还有几个比较特别的参数:

duration – 在屏幕上滑动的时长,默认是 0.5

steps – 滑动过程中的步数,默认为 5

fingers – 滑动的手指数量,1 或者 2,默认为 1

如果你想自定义滑动,比如把滑动时长改为 1,滑动步数改为 6,并且用两只手指滑动,可以向下面这样依次把参数传进去:

swipe((672,1214),(336,1305),duration=1,steps=6,fingers=2)

Windows 平台

与Android和IOS平台不同的是,Windows平台下的swipe接口只有duration和steps这俩个平台相关的参数;并且duration默认为 0.8。

poco 下的 swipe 接口

在poco框架下,swipe是从一个 UI 开始,滑动到某个点或朝着某个方向滑动一段距离。

我们既可以选中 UI 来执行swipe,也可以不选中 UI 执行swipe:

# coding=utf-8

from poco.drivers.unity3d import UnityPoco

poco = UnityPoco()

# 选中UI执行swipe

# 向上滑动列表视图

poco('Scroll View').swipe([0, -0.1])

# 与上面这条代码一样, 并且还可以传入down/left/right

poco('Scroll View').swipe('up')

# 向下滑动列表视图

poco('Scroll View').swipe('down')

# 不选中UI执行swipe

x, y = poco('Scroll View').get_position()

end = [x, y - 0.1]

dir = [0, -0.1]

# 从点A滑动到点B

poco.swipe([x, y], end)

# 从点A沿着一定的方向滑动一段距离

poco.swipe([x, y], direction=dir)

当选中 UI 执行swipe时,swipe默认的起点是选中 UI 的锚点(即 UI 的中心点),那么只要像上述代码一样,给swipe传入一个终点坐标或者滑动方向和距离即可。

当不选中 UI 执行swipe时,就需要给swipe传入完整的起点和终点坐标,或者传入起点以及移动方向和距离,就像上述代码展示的一样。另外poco的swipe还可以按比例滑动,这一点与Airtest的滑动是不一样的:

poco.swipe([0.9,0.5], [0.1,0.5])

滑动的特殊情况 -- 拖动(darg_to)

在poco中,还有与swipe接口非常相似的一个 UI 操作 -- 拖动(drag_to)。它是从一个 UI 到另一个 UI,本质上,拖动是滑动的特殊情况。

如图,我们想要把星星拖动到贝壳里,这时候我们就会使用到drag_to:

# coding=utf-8

from poco.drivers.unity3d import UnityPoco

poco = UnityPoco()

# 把“星星”拖动到“贝壳”上

poco('star').drag_to(poco('shell'))

应用 swipe 的特殊场景

应用 swipe 跳过 APP 的介绍页

在考拉 app 打开后,有 4 个介绍页需要滑动后才能进去。如果我们通过airtest/poco的 UI 测试语句,需要运行半天。但如果执行四下固定坐标位置滑动,则可以很容易跳过这四个介绍页。

要注意的是,这里坐标脚本的连续运行操作得太快,设备有可能会反应不过来,一般每行语句后面需要加一下sleep(1.0),等待一下设备响应。

如果这种情形非常多的话,可以封装成通用的函数,用到的时候调用一下即可。 省代码 + 快速~

# 获取设备的高度和宽度

width, height = device().get_current_resolution()

# 校准滑动的起点和终点

start_pt = (width * 0.9, height / 2)

end_pt = (width * 0.1, height / 2)

# 滑动5次:

for i in range(5):

swipe(start_pt, end_pt)

sleep(1) # 等待设备的响应

当然,除了自己计算分辨率和坐标,然后使用Airtest的swipe来执行,我们还可以使用poco下swipe的按比例滑动来跳过这几个介绍页:

for i in range(5):

poco.swipe([0.9,0.5], [0.1,0.5])

sleep(1) # 等待设备的响应

这样看起来似乎帮我们省去了获取设备高度宽度以及计算滑动坐标的步骤,但实际上运行速度会大大降低:

所以如果比较在意运行速度的话,还是选用Airtest的swipe会好一些。

应用 swipe_along 实现连续滑动

有些时候在安卓手机上面,我们需要实现连续滑动多个点的操作(例如屏幕滑动图案解锁功能),我们提供了一个 swipe_along 操作,示例代码如下:

from airtest.core.api import *

dev = device() # 获取当前手机设备

# 手指按照顺序依次滑过3个坐标

dev.minitouch.swipe_along([(100, 100), (200, 200), (300, 300)])

点击选项--设置--勾选实时坐标显示,即可让手机屏幕的绝对坐标显示在画面上,右键点击鼠标还能将坐标复制到剪贴板中,这样可以很方便地实现一些在坐标间滑动的需求,如图:

请注意这个接口目前只有在使用了默认的 minitouch 模式时才能使用。

最后,如果大家对 Airtest 有疑问、BUG、建议,请到https://github.com/AirtestProject/AirtestIDE/issues 发布 issue,我们会有专人解答。同时,我们还提供了官方 QQ 群给大家沟通交流,目前 1 群已满,欢迎大家加入 2 群:

unity3d android访问剪贴板,Airtest 和 poco 的 swipe 接口使用总结相关推荐

  1. 一篇文章带你快速上手Airtest和Poco

    前言 本文档将演示使用AirtestProject专用的编辑器AirtestIDE,编写Airtest+Poco自动化脚本的全流程.强烈建议新手从本文档开始阅读,并使用AirtestIDE上手脚本编写 ...

  2. 【Android】基于Airtest实现大麦网app自动抢票程序

    0x01 缘起 疫情结束的2023年5月,大家对出去玩都有点疯狂,歌手们也扎堆开演唱会.但演唱会多,票一点也不好抢,抢五月天的门票难度不亚于买五一的高铁票.所以想尝试找一些脚本来辅助抢票,之前经常用s ...

  3. 用Airtest和poco实现APP自动登录和退出

    版权声明:允许转载,但转载必须保留原链接:请勿用作商业或者非法用途 此文章来源于项目官方公众号:"AirtestProject" 前言 今天我们将完成1个实操,来实现APP自动登录 ...

  4. Unity3d android 通信之 unity3d读取android SD卡文件

    此篇博文解决的问题是: 1.unity3d如何访问android SD卡的文件 2.如果把android端代码以jar包形式由unity3d调用 闲话不多说,现在咱们进入正题. 一.unity3d如何 ...

  5. 彻底搞定IE7频繁弹出“确实允许此网页访问剪贴板吗”

    每次用IE7进51CTO论坛及其他网站或博客,在发贴复制粘贴的时候,一般会弹出一个对话框"确实允许此网页访问"剪贴板"吗?让人不胜其烦.现在我们就来彻底搞定这个问题,说来 ...

  6. “超级”容易用错的几个Airtest和Poco的API,看看你有没有遇到过

    前言 最近在我们的答疑群里面,经常遇到这样一类情况: 错把Airtest的API强行用在Poco控件上面 错把Poco的API强加在Airtest的截图脚本上面 不管API的实际用法如何,只按自己的臆 ...

  7. Android访问WCF服务(使用json实现参数传递)

    经过多日努力, 终于勉强弄明白了Android访问WCF服务的方法. 服务端实现 一, 实现服务. 操作契约 [csharp] view plaincopy [ServiceContract] pub ...

  8. Android访问网络系列之--访问图片

    今天闲着无聊,顺便做了个android 访问网络图片的demo,希望与大家分享下: 下面是主要代码: 1.main.xml <?xml version="1.0" encod ...

  9. 解决:“确实允许此网页访问剪贴板吗”

    IE7频繁弹出"确实允许此网页访问剪贴板吗"问题     问题描述 访问论坛及其他网站或博客,在发贴复制粘贴的时候,一般会弹出一个对话框"确实允许此网页访问"剪 ...

  10. Unity3d Android SDK接入解析(四)通用的Android SDK接入中间件

    一.前言 接入Android SDK正式告一段落,在这段时间里面,依次接入了华为.应用宝.小米.360等等大大小小十来个SDK,也算对Unity接入渠道SDK有了较为全面的理解,对各个渠道的坑也算深有 ...

最新文章

  1. 第四范式戴文渊:AI落地,为什么不能照搬教科书?
  2. 2021年春季学期-信号与系统-第六次作业参考答案-第四小题
  3. 商城项目:装nginx时碰到的各种问题
  4. 1.4.在TypeScript中使用JQuery
  5. Django: OperationalError / no such table
  6. Cocos2dx------touch事件
  7. 利用deepface网络进行表情分类
  8. SecurityError: Blocked a frame with origin from accessing a cross-origin frame
  9. atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 。打开浏览服务器文件夹java .net php
  10. 【期刊会议系列】IEEE系列模板下载指南
  11. 微信支付成功后服务器宕机了,今天微信出现大面积宕机,可能与支付宝有关?...
  12. 鼠标手是否算工伤 专家:法定职业病才能获赔
  13. fatal: unable to access ‘https://github.com/golang/tools.git/‘: Encountered end of file
  14. 清华大学计算机王佳希,北大清华2012年拟录取保送生名单及简析(北京市)
  15. PYqt5制作登陆界面
  16. 学生优化(一)------输入文本限制
  17. 如何合并多个excel中(excel表格样式都一样)
  18. ssm基于Java和MySql的产业信息管理系统的设计与实现毕业设计源码260839
  19. 揭秘:和中国过不去的顶级网络间谍“索伦之眼”
  20. 不履行网络安全保护义务被处罚!合肥网警发布“净网2020”行动执法典型案例

热门文章

  1. 判断英语文章中空格,数字,各个大小写字母的个数
  2. 中国高校外语慕课平台职场英语期末考试答案
  3. 力扣刷题 DAY_71 回溯
  4. 目标检测之FCOS算法分析
  5. 什么是贪婪型人格?如何改变贪婪的性格?
  6. Debian6.02 终端中文设置--FBTerm + ucimf
  7. 高级PHP工程师所应该具备的一些技能
  8. entity framework migration
  9. linux权限英文,Linux常见英文报错中文翻译(菜鸟必知)
  10. PDF文件太大无法上传,如何压缩变小?