学习 Airtest 的一些经验分享,新手指引部分

首先感谢网易的各位大神,从 ATX 到 Airtest 收获颇多

在手游中,一般新手指引都是固定的强制步骤,所以我们可以用自动点击的方式直接跑完整个新手

现行方案

基于坐标(相对位置)

直接点击每个步骤对应的坐标位置,每个步骤量一下坐标

更换不同分辨率的手机,只需要计算一下,改成点击屏幕的相对位置就行了

点击坐标过程中如果遇到弹框(断线)之类的阻碍时,没办法跳过

基于图片

在当前界面搜索图片,点击改图片的中心(但是图片识别存在匹配度的问题,可能会识别的相似的图片)

更换不同分辨率的手机,每种分辨率都需要截图,工作量比较大(airtest 有提供缩放的方法,可以只截一种分辨率)

点击坐标过程中如果遇到弹框(断线)之类的阻碍时,只需要提前截图,在点击过程中增加判断

基于 UI

在当前场景内搜索 UI 对象,点击改对象的位置(要注意条件,可能搜索条件并不是唯一;搜索到的UI也有可能并没有显示在屏幕内)

更换不同分辨率的手机,不需要做其他操作

点击坐标过程中如果遇到弹框(断线)之类的阻碍时,只需要增加判断就可以了

以上三种方法,在编写测试代码的时候都需要手动跑至少一遍新手测试

坐标的话,需要测量计算

图片的话,主要的工作量在截图

UI 对象的话,只需要测需要的 UI 就可以了(可能并不需要手动跑完整个新手)

对比下来,UI 的工作量是最小的;而且以上三种方法可以结合使用

而且使用 UI 对象有个最大的优势,可以取到游戏内的文本,可以进行更复杂的逻辑操作

代码示例

学 ATX 时写的基于图片操作,完全写死的步骤

这段代码中,详细列举了新手的每一步操作,搜索图片,然后点击对应的位置

因为代码中所写的步骤都是固定的,所以面临两个问题

引导修改

如果游戏迭代过程中,对新手指引的步骤进行了修改,代码也需要同步修改

中断

如果代码执行过程中断了,继续执行的话,需要删减部分代码

如果游戏内出现阻碍新手的弹框、提示之类的,也无法进行判断

所以我们需要一个更好的办法来解决通用和中断的问题

部分资料

Python 基础:http://www.runoob.com/python3/python3-tutorial.html

Poco 文档:http://poco.readthedocs.io/zh_CN/latest/

Poco 示例:http://poco.readthedocs.io/zh_CN/latest/source/README.html#tutorials-and-examples

修改过程

接下来的过程以另一个游戏为例,使用基于 UI 的方式来执行新手指引的过程

这里需要提前集成 Poco-SDK

我们先分析下整个新手过程中的通用部分,我们主要是把整个新手拆分成不同的UI,方便我们进行不同的操作

开场战斗

角色创建

存在指引手指的指引步骤

剧情对话

各类提示框

有了大致的 UI 后,我们可以考虑直接使用循环点击指引手指指引的位置,过程中存在其它界面时,就执行对应的操作,大致结构如下:

上面的代码就不需要和最初那样,考虑新手指引的步骤;因为一直在检查当前界面显示的 UI,所以也不用考虑执行中断后重哪里继续

但是游戏过程中需要考虑到一个问题,在网络中断的时候,弹框会和指引手指或者其它界面一起出现;虽然其它 UI 会被提示框遮挡,但是 UI 还是存在于当前界面的;所以在判断的时候,需要考虑下编写的顺序

优化过程

在 Poco 的示例中有一个等待 UI 出现的方法

https://poco-chinese.readthedocs.io/zh_CN/latest/source/poco.pocofw.html#poco.pocofw.Poco.wait_for_any

在超时前返回等到的第一个 UI 代理对象,等不到 UI 时会报错

所以上面的代码可以改一下:

但是在等待过程中,一直没有找到 UI 时,会报错,我们可以在报错的时候做一些处理,比如停止循环

最终代码

最终使用 Poco 跑新手流程的完整代码

完成以上步骤后,我们已经可以运行一个完整的新手流程了

接下来可以使用命令直接运行写好的 .air 脚本

http://airtest.readthedocs.io/zh_CN/latest/README_MORE.html#run-test-case

将命令保存为不同的批处理文件后,批量打开,就可以做到最简单的多台机器同时运行了,需要注意,如果使用命令的话,需要将脚本内连接设备的代码删掉

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180801G096JS00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券