Skip to content

新建脚本

新建一个.air脚本

打开你的IDE,点击左上角的文件--新建脚本--.air Airtest项目,即可新建一个.air脚本。

image

当你的.air脚本新建成功时,就能看到默认的初始化代码:

image

初始化代码帮助你从api中引入了airtest的各个接口以及自动初始化设备。实际上,.air脚本是一个文件夹,里面存放了与 .air 同名的 .py 文件,以及相关的图片文件。在运行脚本时,实际上依然使用了python调用了里面的 .py文件,因为Airtest本质上是一个Python的第三方库。(关于如何运行脚本,请点 这里 。)

新建纯.py脚本[新]

根据上文我们可以知道,在普通的 .py 文件中,一样可以调用Airtest的接口,由于这样的需求与日俱增,我们在AirtestIDE和Airtest中,都增加了一个便捷创建.py脚本的功能。参考的示例代码可以点 这里 查看。在IDE的创建方式如下:

点击左上角的文件--新建脚本--.py 纯Python (高级用户):

image

随后会弹出python文件的设置窗口:

image

里面的配置项有:

  • Save Path: 文件保存路径,必填项,选择好路径后才能继续配置其他选项
  • Log Directory: 脚本运行时的log保存路径,默认为.py文件所在目录下的 log/ 目录
  • Devices: 可以选择自动使用当前已连接的手机设备对devices参数进行初始化,也可以以后再填写
  • Project Root: 项目的父目录,方便未来使用 using 语句引入同一父目录的其他子文件夹

在配置完所需要的选项后,点击ok按钮,将会自动以刚才的配置内容新建一份模板python文件,接下来只需要像编写一个普通py文件那样来编写脚本就可以了。当你的.py脚本新建成功时,也同样可以看到设置的一些初始化代码:

image

上图中这段初始化代码的意思是说,当使用 python xxx.py 来运行本文件,不带任何命令行参数时,则自动使用 auto_setup 这个接口来对airtest相关的参数进行初始化。这样只需要在写py脚本时,填写好期望的参数就能直接用 python xx.py 指令来运行脚本。而原先的 airtest run xx.air --devices xx 也不受影响,只要脚本检测到传入了命令行参数,就依然优先使用命令行参数来初始化airtest。

纯.py脚本的报告生成

关于如何生成.air脚本的报告,在文档 4.2.3 生成运行结果报告 中有很详细的描述。如果在纯.py脚本中,需要通过代码来生成报告,同样可以参考文档中描述的内容。

在AirtestIDE中,假如打开了.py文件,并且在运行完脚本后,希望能直接使用IDE的一键生成报告功能的话,需要在点击生成报告按钮时,手工指定运行脚本时的log目录所在路径:

image

如何调试脚本

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

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

image

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

脚本的自动保存与缓存文件找回

在脚本编写工作中,我们十分推荐各位尽可能地利用一些版本管理软件,对编写的脚本进行管理,这样能避免很多脚本的丢失与多人协作的问题。

在使用AirtestIDE编写脚本时,我们将会每隔30秒对当前编辑窗口的脚本进行一次自动保存工作,避免遗忘保存导致的脚本遗失问题。

然而在一些极端情况下(电脑蓝屏、死机等),还有可能出现脚本编辑框显示错乱,导致原先的脚本丢失的问题。因此我们新增了一个脚本缓存找回功能,每当 手动选择保存 或是 运行脚本 时,都认为当前文件是一个完好的脚本文件,因此会自动在系统缓存目录下另存一份脚本的纯文本内容。如果遇到了异常情况,需要找回以前保存过的脚本的话,可以在脚本标题上点击鼠标右键:

image

随后的弹窗中,有3个可选项:

image

最左边的按钮是一键自动恢复,能将最近一次的缓存文件内容恢复到当前编辑窗口中。中间的按钮是打开缓存文件夹,打开后将会看到一些纯文本文件,命名规则是将脚本文件的路径中的 :\/ 等符号替换成% ,最后以时间戳进行结尾,可以自行找到编辑中的文件名对应的缓存文件后,用文本编辑器打开,就可以看到自动保存的内容了。