自动测试框架airtest应用一:将XX读书书籍保存为PDF

一、Airtest的简介

Airtest是网易出品的一款基于图像识别和poco控件识别的一款UI自动化测试工具。Airtest的框架是网易团队自己开发的一个图像识别框架,这个框架的祖宗就是一种新颖的图形脚本语言Sikuli。Sikuli这个框架的原理是这样的,计算机用户不需要一行行的去写代码,而是用屏幕截屏的方式,用截出来的图形摆列组合成神器的程序,这是Airtest的一部分。

另外,Airtest也基于poco这个U控件搜索框架,这个框架也是网易自家的跨平台U测试框架,原理类似于appium,通过控件的名称,id之类的来定位目标控件,然后调用函数方法,例如click(),swip()之类的方法来对目标控件进行点击或者是操作。

更多介绍可参考官网关于Airtest的使用探索

二、准备

首先为了方便我们编写脚本,查看UI元素以及调试,我们需要下载AirtestIDE。

其次我们需要使用iOS-Tagent在手机上创建一个WebDriver服务器,可用于远程控制iOS设备,定位UI元素。clone相关代码后,在Xcode里选择WebDriverAgentRunner这个target,然后使用Test模式编译运行。这时候手机会进入Automation Running模式。

第三步,我们要将手机的8100端口映射到电脑的8100端口。

iproxy是usbmuxd附带的一个小工具,它的作用是将设备的某个端口映射到电脑的某个端口。mac下可以通过brew安装 brew install usbmuxd

iproxy 8100 8100 意思就是将手机的8100端口,映射到电脑的8100端口上。这样我们就能通过访问电脑的8100端口来访问到手机了。

对于Windows用户而已,这一步也可以使用tidevice和 wdaproxy代替[参考]。

这时候我们就可以在AirtestIDE右下角点击connect按钮,成功的话,就会在右侧显示设备的图像。

接着我们就可以在代码编辑区编写代码了。

三、脚本编写

想象一下我们接下去要进行的步骤:1.启动应用,开始截图,然后翻页,再截图......直到翻完为止。首先我们遇到的问题就是如何启动应用。一个做法是我们可以使用poco("应用名称")。如果它正好在当前屏幕内,我们可以使用poco("应用名称")找到要点击元素的位置,然后通过click()来模拟点击它,这样应用就启动了。但是如果它不在当前屏幕,那就走不通,需要变通一下。我们应该先回到home,然后再滚动到这一页。这样看起来比较麻烦,有没有更直接的办法呢?那就需要使用airtest.core.api中的start_app("bundle-id"),这个api需要指定一个应用的bundle id。

应用启动之后,我们就可以使用snapshot截屏。为了方便我们管理图片,我们需要给产生的截屏指定保存的路径:

python 复制代码
snapshot(filename="/Users/xxx/Desktop/book/1.png")

截完图后我们需要模拟翻到下一页,这里我们使用swipe方法:

python 复制代码
swipe(v1=(300,900), vector=[-0.2365, 0.0053])

swipe方法需要指定从哪个位置开始滚动多少距离,距离是一个包含xy两个值的向量,而且是屏幕大小的比例值。

最后我们要判断翻页是否结束。考虑到每本书看完之后,都会有"全书完"三个字,并且下面有一个完的图标,于是我们选择将这个整体作为判断的标志。点击左侧Airtest assist里的exists方法,这时候代码插入编辑区,并且提示我们选择要识别的区域。我们使用鼠标在右侧设备实时屏幕中选中该区域。这时候这块区域的截图会插入代码中:

最后我们可以通过Python的fitz库来将多张图片合并成一个PDF文件。可以看到效果还是可以的:

四、总结

最后,也要考虑到该方案存在的一些问题,譬如说会把这个圆形按钮截图截进去,当然我们可以在辅助中将其关闭。考虑到一本书的页面较多,使用该方法将一本书完整截图截下来,需要耗费不少时间。其间手机顶部可能会出现不少推送消息,遮挡住书籍内容本身。最后,考虑到版权因素,该方案仅供学习交流之用,请勿用于传播。本文通过一个截屏保存电子书籍的趣味小例子,学习、掌握自动化测试框架Airtest的基本使用。

相关推荐
神奇夜光杯7 分钟前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
千天夜19 分钟前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
测试界的酸菜鱼22 分钟前
Python 大数据展示屏实例
大数据·开发语言·python
羊小猪~~26 分钟前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
放飞自我的Coder1 小时前
【python ROUGE BLEU jiaba.cut NLP常用的指标计算】
python·自然语言处理·bleu·rouge·jieba分词
正义的彬彬侠1 小时前
【scikit-learn 1.2版本后】sklearn.datasets中load_boston报错 使用 fetch_openml 函数来加载波士顿房价
python·机器学习·sklearn
张小生1802 小时前
PyCharm中 argparse 库 的使用方法
python·pycharm
秃头佛爷2 小时前
Python使用PDF相关组件案例详解
python
Dxy12393102162 小时前
python下载pdf
数据库·python·pdf
叶知安2 小时前
如何用pycharm连接sagemath?
ide·python·pycharm