AirtestIDE实践二:Poco框架试用
上一篇用airtest框架做了一个梦幻西游手游的DEMO,这次看看poco的强大之处。
首先安装poco:
pip install pocoui
其次,把SDK集成到你家游戏中,我这直接用官网提供的一个Unity引擎做的游戏demo,demo下载地址&用法示例:https://poco.readthedocs.io/zh_CN/latest/source/doc/poco-example/index.html
打开AirtestIDE,新建一个项目,连接手机或模拟器,打开游戏。在IDE左下的Poco辅助窗下拉列表选择Unity,此时在代码编辑区上方会有提示,是否自动插入相关代码,点Yes。
此时Poco辅助窗下面已经显示UI树了,相信以前搞过uiautomator、Robotium、Appium等的朋友会非常熟悉。选中一个元素,在Log区会显示该元素的属性。
现在可以写脚本了,手写的话,在UI树上双击一个元素可以自动插入该元素的对象语句,如上图,双击btn_back,会自动插入poco("btn_back")。也可以录制,点击Poco辅助窗下面的录制按钮(录像机图标),然后点击游戏界面上的返回按钮,会自动生成poco("btn_back").click()。
如果游戏界面一直在刷新,UI树一直在变,点击录制按钮前面的锁,可以锁定界面,方便查看元素。
点击录制按钮前面的圆圈按钮(inspector),之后在Device Screen上左击或右击元素,也可以很方便的查看元素,效果和在UI树看是一样的。

另外poco提供了一套单元测试框架pocounit,用法和unittest一样(应该就是基于unittest写的),更重要的是——使用pocounit编写的用例将可以通过其提供的回放工具对测试过程进行完整的回放,不会漏掉任何细节。视频如下:
http://top.gdl.netease.com/poco-res/video/result_player_demo.mp4
好了,看一下针对游戏demo写的几行代码:
from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()
poco("btn_start").click() # 点击start按钮
poco("basic").click() # 点击basic按钮
poco("star_single").long_click(duration=3) # 长按五角星
poco("pos_input").set_text('测试输入文字') # 输入文字
sleep(3)
poco("btn_back").click() # 点击back按钮
sleep(1.0)
poco("drag_and_drop").click() # 点击drag drop按钮
shell = poco("shell").focus('center') # 定义贝壳对象
for star in poco("star"):
star.drag_to(shell) # 循环将五角星拖到贝壳
poco("btn_back").click() # 点击back按钮
poco("list_view").click() # 点击list view按钮
poco("Scroll View").swipe([0, -1]) # 将列表向上滑动
sleep(2.0)
poco("Text (12)").click() # 选中列表最后一项
poco("btn_back").click() # 点击back按钮
poco("wait_ui").click() # 点击Wait UI按钮
count = 0
while True:
yellow_fish = poco("yellow") # 定义黄鱼
blue_fish = poco("blue") # 定义蓝鱼
fish = poco.wait_for_any([yellow_fish, blue_fish]) # 等待鱼出现
fish.click() # 点击鱼对象
sleep(1.0)
放上回放脚本时的录制视频,大家可以感受一下,为了看的更明了一点,我在手机开发者选项中打开了‘显示点按操作反馈’、‘指针位置’:
https://v.qq.com/x/page/p071278u6gc.html
可以看到,脚本最后一块,等待鱼出现,然后点击鱼,代码有运算时间,发送的adb命令有执行时间,但是游戏的鱼很快飞过,导致点击时,鱼其实已经飞过去了,不知道换模拟器会不会好一点。
脚本源码:
https://github.com/songzhenhua/airtest
最后再次附上Poco文档地址和demo示例地址:
https://poco.readthedocs.io/zh_CN/latest/index.html#
https://poco.readthedocs.io/zh_CN/latest/source/doc/poco-example/index.html
AirtestIDE实践二:Poco框架试用的更多相关文章
- AirtestIDE实践一:梦幻西游手游师门任务自动化
Airtest Project是网易自研的游戏自动化项目.Airtest IDE是这个项目的一个IDE,就像Eclipse.Pycharm一样,是一个集成开发工具.Airtest框架是一个基于Open ...
- ASP.NET MVC5 网站开发实践(二) Member区域–管理列表、回复及删除
本来想接着上次把这篇写完的,没想到后来工作的一些事落下了,放假了赶紧补上. 目录: ASP.NET MVC5 网站开发实践 - 概述 ASP.NET MVC5 网站开发实践(一) - 项目框架 ASP ...
- ASP.NET MVC5 网站开发实践(二) Member区域–我的咨询列表及添加咨询
上次把咨询的架构搭好了,现在分两次来完成咨询:1.用户部分,2管理部分.这次实现用户部分,包含两个功能,查看我的咨询和进行咨询. 目录: ASP.NET MVC5 网站开发实践 - 概述 ASP.NE ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 咨询管理的架构
咨询.留言.投诉等功能是网站应具备的基本功能,可以加强管理员与用户的交流,在上次完成文章部分后,这次开始做Member区域的咨询功能(留言.投诉都是咨询).咨询跟文章非常相似,而且内容更少.更简单. ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 修改及删除文章
上次做了显示文章列表,再实现修改和删除文章这部分内容就结束了,这次内容比较简单,由于做过了添加文章,修改文章非常类似,就是多了一个TryUpdateModel部分更新模型数据. 目录: ASP.N ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 全部文章列表
显示文章列表分两块,管理员可以显示全部文章列表,一般用户只显示自己的文章列表.文章列表的显示采用easyui-datagrid.后台需要与之对应的action返回json类型数据 目录 ASP.N ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 添加文章
上次把架构做好了,这次做添加文章.添加文章涉及附件的上传管理及富文本编辑器的使用,早添加文章时一并实现. 要点: 富文本编辑器采用KindEditor.功能很强大,国人开发,LGPL开源,自己人的好东 ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 文章管理架构
上次把member的用户部分完成,现在开始做文章管理部分.文章部分根据涉及显示现实文章列表,发布文章,修改文章,删除文章等功能.最终的实现目标是使用权限来控制用户是否能进行相应操作,管理员权限的会显示 ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 用户部分(3)修改资料、修改密码
在上一篇博客中实现了用户的注销和登录,其实代码里落了点东西,就是用户登录要更新最后一次登录时间和登录IP,这次补上.今天做修改资料和修改密码,TryUpdateModel是新用到的东西. 目录: AS ...
随机推荐
- 报错Caused by: org.hibernate.AnnotationException: No identifier specified for entity:
Caused by: org.hibernate.AnnotationException: No identifier specified for entity:. 原因: 1.没有给实体类ID 解决 ...
- 关键字: simpledateformat24小时 格式串
SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出 Era 标志符 Text AD y 年 Year 1996; 96 M 年中的月份 M ...
- EF Core中怎么实现自动更新实体的属性值到数据库
我们在开发系统的时候,经常会遇到这种需求数据库表中的行被更新时需要自动更新某些列. 数据库 比如下面的Person表有一列UpdateTime,这列数据要求在行被更新后自动更新为系统的当前时间. Pe ...
- servelet跳转页面的路径中一直包含sevelet的解决办法
解决办法1: 在web.xml配置文件中修改: <servlet-mapping> <servlet-name>LoginServelet</servlet-name&g ...
- ConfigurationManager.AppSettings方法
一 配置文件概述: 应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序.配置文件的根节点是conf ...
- C++ map练习
C++ STL之map map介绍 C++里的map数据结构,会存储键值对信息key-value,通过key得到value的信息.map的key与value有一个特点就是:每个唯一的key拥有唯一对应 ...
- Redis Sentinel 集群安装 step by step
一. 准备材料 服务器 IP address 操作系统 位数 Redis 版本 CNT06CAH05 192.168.3.47 CentOS 6.5 x64 Redis-3.2.6 sentine ...
- Docker Nginx安装(centos7)
docker search nginx docker pull nginx docker images nginx mkdir -p /data/nginx/{conf.d,html,logs} ...
- ATM购物作业
一. 基本需求 模拟实现一个ATM + 购物商城程序 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 支持多账户登录 支持账户间转账 记录日常消费 ...
- 帝国cms教程父栏目和子栏目都能在当前栏目高亮
首先在/e/class/userfun.php这个文件里面加上下面代码.上面父栏目的,下面子栏目的.红色代表css样式.自定义吧 function currentPage($classid,$this ...