上一篇用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框架试用的更多相关文章

  1. AirtestIDE实践一:梦幻西游手游师门任务自动化

    Airtest Project是网易自研的游戏自动化项目.Airtest IDE是这个项目的一个IDE,就像Eclipse.Pycharm一样,是一个集成开发工具.Airtest框架是一个基于Open ...

  2. ASP.NET MVC5 网站开发实践(二) Member区域–管理列表、回复及删除

    本来想接着上次把这篇写完的,没想到后来工作的一些事落下了,放假了赶紧补上. 目录: ASP.NET MVC5 网站开发实践 - 概述 ASP.NET MVC5 网站开发实践(一) - 项目框架 ASP ...

  3. ASP.NET MVC5 网站开发实践(二) Member区域–我的咨询列表及添加咨询

    上次把咨询的架构搭好了,现在分两次来完成咨询:1.用户部分,2管理部分.这次实现用户部分,包含两个功能,查看我的咨询和进行咨询. 目录: ASP.NET MVC5 网站开发实践 - 概述 ASP.NE ...

  4. ASP.NET MVC5 网站开发实践(二) Member区域 - 咨询管理的架构

    咨询.留言.投诉等功能是网站应具备的基本功能,可以加强管理员与用户的交流,在上次完成文章部分后,这次开始做Member区域的咨询功能(留言.投诉都是咨询).咨询跟文章非常相似,而且内容更少.更简单. ...

  5. ASP.NET MVC5 网站开发实践(二) Member区域 - 修改及删除文章

    上次做了显示文章列表,再实现修改和删除文章这部分内容就结束了,这次内容比较简单,由于做过了添加文章,修改文章非常类似,就是多了一个TryUpdateModel部分更新模型数据.   目录: ASP.N ...

  6. ASP.NET MVC5 网站开发实践(二) Member区域 - 全部文章列表

    显示文章列表分两块,管理员可以显示全部文章列表,一般用户只显示自己的文章列表.文章列表的显示采用easyui-datagrid.后台需要与之对应的action返回json类型数据   目录 ASP.N ...

  7. ASP.NET MVC5 网站开发实践(二) Member区域 - 添加文章

    上次把架构做好了,这次做添加文章.添加文章涉及附件的上传管理及富文本编辑器的使用,早添加文章时一并实现. 要点: 富文本编辑器采用KindEditor.功能很强大,国人开发,LGPL开源,自己人的好东 ...

  8. ASP.NET MVC5 网站开发实践(二) Member区域 - 文章管理架构

    上次把member的用户部分完成,现在开始做文章管理部分.文章部分根据涉及显示现实文章列表,发布文章,修改文章,删除文章等功能.最终的实现目标是使用权限来控制用户是否能进行相应操作,管理员权限的会显示 ...

  9. ASP.NET MVC5 网站开发实践(二) Member区域 - 用户部分(3)修改资料、修改密码

    在上一篇博客中实现了用户的注销和登录,其实代码里落了点东西,就是用户登录要更新最后一次登录时间和登录IP,这次补上.今天做修改资料和修改密码,TryUpdateModel是新用到的东西. 目录: AS ...

随机推荐

  1. 2springboot:快速创建springboot项目

    使用IDEA快速创建springboot项目流程: 创建新的项目选择 项目的命名以及包名 需要什么包就导入什么包 进行测试的单元 <dependency> <groupId>o ...

  2. Redis的Windows端开发连接Linux端以及相应的代码实现

    在Windows端开发连接需要进行配置文件的配置: 在redis.conf配置文件中 将protected-mode yes,修改为protected-mode no:不保护redis # By de ...

  3. 常用的css选择器

    1.最基本的 * * 选择所有元素. #id #firstname 选择 id="firstname" 的元素. .class .intro 选择 class="intr ...

  4. stixel上边缘

    上图是2^x-1的曲线,取值范围在(-1,正无穷) 上面两个公式组成了隶属函数(membership)表示隶属度,隶属度就是衡量这个点同下边缘点是否属于同一个物体.实际上M函数就是2^x-1,但M函数 ...

  5. [LCOI2018][WX] Tirpitz

    \([LCOI2018][WX11.1]~Tirpitz​\) 时限:1s 内存限制:131072KB 输入文件: T.in 输出文件: T.out 题目背景 王九日很颓废,这也就是他为什么这么弱的原 ...

  6. HIDU 2094

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2094 产生冠军 Time Limit: 1000/1000 MS (Java/Others)    M ...

  7. Keil开发的ARM程序main函数之前的汇编分析

    Keil开发的ARM程序main函数之前的汇编分析 ——BIN文件中RW段的数据移动 系统平台: STM32系列STM32F103ZE,512KB内部FLASH,64KB片内存储; FLASH地址范围 ...

  8. js常用共同方法

    var uh_rdsp = (function(){ //获取根目录 var getContextPath = function(){ var pathName = document.location ...

  9. JS中new运算符的实现原理

    当我们用new运算符new一个构造函数产生一个实例时,比如说: var obj = new Func 时,其背后的步骤是这样的: 1:创建一个继承自 Func.prototype 的新对象:2:执行构 ...

  10. Wireshark抓取Mqtt报文

    安装版本较高的Wireshark,我的版本是2.4.6,然后在编辑--> 首选项--> 协议中找到MQTT,然后将端口改为你MQTT服务器的端口,然后就可以在抓包中抓到MQTT了