8.4 脚本相关的FAQ

8.4.1 我该如何开始写脚本?

我们提供的两个用于支持脚本编写、运行的仓库 AirtestPoco 库,是Python第三方库,因此脚本的编写需要有 一定的Python基础 。若对 Python 不熟悉,网络上有不少非常优秀的Python教程可以学习,例如我们非常推荐 廖雪峰的Python新手教程

在脚本编写过程中,可以根据需求在里面混合使用 AirtestPoco ,也可以加入自己想用的其他库完成更加强大的功能。

但是请注意,可以 混用 AirtestPoco 代码,不代表是在同一条语句中混合使用Airtest的图片与Poco的语句,请各位在编写时注意每个库自己的API和语法。

在开始你的脚本编写工作前,可以先读一读官网提供的 教程 ,可以帮助你更快地上手。

8.4.2 开发环境的准备

如果使用AirtestIDE来编写脚本,只需要在 官网 下载最新版本AirtestIDE,解压即可直接使用。AirtestIDE内置了Python3.6.5,airtest和poco环境,本地无需安装python环境就能直接使用。

如果想要使用其他需要安装的Python第三方库,或者Python2,也可以在本地Python环境中用 pip install airtestpip install pocoui 指令自行安装Airtest与Poco库,然后在AirtestIDE设置中添加本地的Python.exe路径,详情请参考 IDE配置

若需要使用命令行运行脚本,请参考 运行脚本

8.4.3 Airtest与Poco相关问题

Airtest和Poco的区别

Airtest框架基于图像识别,写脚本的时候类似这样:

http://airtest.netease.com/tutorial/gif/airtest_auto_record.gif

Poco框架基于UI控件搜索,写脚本的时候是这样的:

http://airtest.netease.com/tutorial/gif/poco_auto_record.gif

Airtest和Poco如何初始化

在AirtestIDE中新建的脚本,后缀都为 .air ,但实际上我们在运行的时候, 运行的是.air目录下的同名.py文件 。因此,就像一个普通的python脚本那样,当我们需要使用airtest的接口时(例如touch指令),我们需要在.py脚本的最前面import airtest的api。我们可以在AirtestIDE里新建一个脚本,就能看到默认的初始化代码:

# -*- encoding=utf8 -*-
__author__ = "user"

from airtest.core.api import *
# 从api中import接口后,就能直接使用airtest的各个接口了
auto_setup(__file__)  # 自动初始化设备,也可以选择手工connect_device()

关于airtest提供的更多API信息,请参考 Airtest文档

Poco需要在使用前,插入一段初始化代码,如图:

http://airtest.netease.com/docs/docs_AirtestIDE-zh_CN/_images/4-poco_manual_record.gif

为什么我选择了Poco模式后,没有成功刷出UI树

Poco 目前支持以下几种模式(不仅仅包含游戏引擎):

  • Cocos2dx-js,Cocos2dx-lua -> 接入文档
  • Unity3D -> 接入文档
  • Android 原生APP -> 无需接入,在运行脚本时将自动安装poco-services.apk
  • iOS -> 帮助文档
  • 网易自研引擎
  • 其他引擎 -> 可 自行接入
  • 更多平台更多引擎,敬请期待

目前除了Android原生App无需接入SDK即可直接使用之外,其余引擎都需要事先 接入SDK 才能获取到UI结构信息(游戏没有事先接入SDK是无法直接看到UI树的),请务必仔细阅读 接入文档 ,进行SDK接入后再进行使用。

H5等其他版本的poco-sdk

暂时仍在开发中,未来将逐步放出。

目前支持了 微信小程序 ,以及IDE支持了 selenium 插件,可以查看 7.2 Airtest-Selenium 获得更多细节。

为什么接入了SDK、使用了原生App依然看不到UI树

在Poco初始化时,会向手机中安装相关的apk,请务必保证手机允许了相关apk的安装。部分型号的手机需要在设置中开启“允许通过ADB安装应用”等相应选项才能进行安装。

UI树在一段时间后没有正确刷新

可以尝试先将Poco模式选项的下拉菜单改为 Stop,再重新选择你所需要的模式,例如 Android, IDE将重新建立与手机的Poco通信连接。

如何用命令行运行脚本

关于命令行运行脚本,我们在 运行脚本 中做了非常详尽的介绍,请查阅。

批量运行脚本的方式我们暂时未提供,若有需求,可以自行写调度脚本来运行。

为什么Mac下使用命令行运行失败,提示Permission denied

在Mac系统的Python环境中,使用 pip install airtest 安装完毕之后,需要去airtest安装的目录下,手工地为adb加上操作权限:

chmod a+x (你的airtest安装目录)airtest\airtest\core\android\static\adb\mac\adb

如果重装了airtest,有可能也需要重新运行一次上述指令。

在AirtestIDE里写的脚本丢失了

第一次打开AirtestIDE时,会默认帮忙在系统temp目录下新建一个空脚本,方便大家熟悉软件功能和上手编写脚本。请在脚本编写的工作中,尽量避免将脚本保存在系统目录、或无权限读写的目录。如果是MacOS,请 不要将脚本保存在AirtestIDE.app的目录里 (例如: /Applications/AirtestIDE.app/Contents/MacOS ),因为一旦重装应用,将会覆盖掉该目录,导致脚本丢失。

请务必选择一个合适的、有存取权限的目录来存放你的脚本。

8.4.4 Airtest API文档

Airtest的常用API大部分都列在了AirtestIDE里的Airtest辅助窗中,在使用各种常见的截图语句时,鼠标移动到按钮上即可看到每个接口的常用参数与返回值信息,非常方便。

../_images/airtest_ide_api.png

想要查阅更详细的API信息,请翻阅 airtest.core.api 页面。

airtest.core.api 中的API信息,是各平台通用的API和通用参数。而同一个接口在不同的平台下,可能会有不同的参数,甚至有些额外的特有接口。例如,在 Android 设备上, touch 接口是点一下某个位置,但是在 Windows 中,我们可能会有双击、右键操作,这时候就需要去查阅对应平台的对应接口文档了,如图:

../_images/airtest_api_win.png

在我们的快速上手教程 如何为你的游戏写一个测试脚本 中的进阶阅读章节,我们以 touch 为例,详细介绍了它的使用方式和文档查阅方式,大家可以作为参考。

如果你的脚本涉及到 Android 设备,以及想要使用一些 Android 设备上的独有接口(例如想便捷地调用 adb shell ls 这样的指令),可以参考教程- 在Android手机上进行测试 ,里面详细地介绍了几种Android设备专用的接口和调用方式。其他的平台也与此类似,请通过查阅相关的教程来获取更多信息。

8.4.5 Poco API文档

在我们提供的快速上手 如何为你的游戏写一个测试脚本 教程中,我们使用一个游戏作为例子详细阐述了如何上手编写airtest和poco脚本,非常建议新手事先进行阅读。

另外,我们也建议大家:

  • 阅读我们提供的 入门教学用例 ,教学demo里提供的游戏和应用都已经接入了 Poco-SDK ,能够最快速度上手体验 Poco
  • 关于如何上手,poco提供了非常详尽的入门攻略: 如何使用poco
  • 仔细阅读 Poco 文档,学习如何 使用Poco选择UI对象 ,对于选择器的熟练掌握能够让我们写出更符合我们需求的UI选择代码
  • 文档中的 操作UI对象 描述了最常用的一些操作,可以先学习上手
  • 当已经大致入门后,可以更深入地阅读 Poco instance APIPoco proxy object API ,以及API文档的其他章节

8.4.6 代码补全不全

代码补全提示暂时不够全,部分python库函数目前尚待加入.

8.4.7 如何调试脚本

目前AirtestIDE暂不支持断点调试功能,因此调试脚本只能通过print log等较为简单的方式。

但是由于Airtest的截图语句涉及到图像识别的准确率问题,需要反复运行和调试才能确定合适的图片与识别阈值,因此我们提供了一种 选中部分代码单独运行 的调试功能:

../_images/debug_code.png

可以选中部分代码后点击鼠标右键,选择 只运行选中代码,即可单独运行被选中的代码段落。需要注意的是,该单独运行代码的功能不会执行到脚本中其他代码里的内容,可能会出现别处的变量未能初始化等情况,因此只能作为辅助工具使用,不能完全依赖它来调试整个脚本。