目录
1 airtest简介
Airtest 是一个基于python、跨平台的、 基于图像识别 的UI自动化测试框架,适用于游戏和App,支持平台有Windows、Android和iOS
Poco是一款 基于UI控件识别 的自动化测试框架,本质上也是python第三方库
AirtestIDE 是一款跨平台的 UI自动化测试编辑器 ,内置了Airtest和Poco的相关插件功能,能够使用它快速简单地编写 Airtest 和 Poco 代码
2 airtestIDE
Airtest辅助窗:主要是用来生成airtest框架中的代码
Poco辅助窗:要是用来抓取元素信息的,并且可以生成Poco框架代码
Selenium Window:学习的过程,就还没用到是基于selenium语法的,在Selenium Window这个窗口中,可以对待测浏览器进行录制,自动生成基于selenium语法的自动化脚本。另外还提供了一些封装好的截图操作,比如airtest_touch等等
设备窗(右侧):连接设备,如已连接则同步显示设备画面
脚本编辑窗(中上):用来编写自动化代码
Log查看窗(中下):代码不运行的时候用来显示Poco辅助窗选定元素后的所有信息;代码运行后显示程序运行时代码
3 airtestIDE 辅助窗
Touch:图片识别点击操作,点击‘touch’按钮,在手机屏幕上拖动选取点击的图片,在代码编辑窗会自动生成代码v – 点击位置,可以是一个 Template 图片实例,或是一个绝对坐标 (x, y)
Airtest封装的图像类
Swipe:在当前设备话画面上进行一次滑动操作/ v1 – 滑动的起点,可以是一个Template图片实例,或是绝对坐标 (x, y) v2 – 滑动的终点,可以是一个Template图片实例,或是绝对坐标 (x, y)
Text:在目标设备上输入文本,文本框需要处于激活状态。
Keyevent :模拟按键,如HOME键,返回键,菜单键
对目标设备进行一次截图,并且保存到文件中。filename – 保存截图的文件名,默认保存路径为 ``ST.LOG_DIR``中
msg – 截图文件的简短描述,将会被显示在报告页面中
quality – 图片的质量,[1,99]的整数,默认是10
max_size – 图片的最大尺寸,例如 1200
4 airtestIDE 脚本录制
在AirtestIDE编写Airtest脚本时,我们最常见的就是类似这样的图像脚本:其实它本质上还是一条Python脚本,只不过Airtest把图像封装起来了,并且可以直接显示图像,更方便查看:
其中 Template(r"tpl1635489343794.png", record_pos=(-0.365, 0.228), resolution=(1080, 2280))就是Airtest封装的图像类。
图像识别过程中,会使用这MultiScaleTemplateMatchingPre、TemplateMatching、SURFMatching和 BRISKMatching这4个算法依次进行图像识别,找到结果将停止识别,未找到结果将会一直按照这个算法的识别顺序一直循环识别直到超时。
5 airtestIDE Poco辅助窗
选模式后,airtestIDE会拉取元素树(每过几秒都会拉取最新元素),单击某个元素,Log查看窗会显示该元素详细信息,投屏会高亮所选元素。
点击检视按钮,探测页面元素,鼠标悬浮在右侧页面上的元素,在左侧UI渲染树能看到该元素属性了
点击冻结按钮, 投屏会冻结,元素树也不再更新,定住当前画面以方便查看当下元素信息
点击录制按钮,再去投屏上点击,即可实时生成Poco操作代码。
Poco的坐标系与Airtest不一样,Airtest使用的是绝对坐标系,Poco使用的是归一化坐标系 (同一个UI的归一化坐标系下的位置和尺寸是一样的,有助于编写跨设备测试用例)
对于控件来说,采用的是局部坐标系,该坐标系系是为了表示相对于某UI的坐标,(0.5, 0.5)就代表UI的正中央,超过1或小于0的坐标值则表示UI的外面
与 swipe 不同的是, darg 是从一个UI拖到另一个UI,而 swipe 是将一个UI朝某个方向拖动。
我们可以使用wait方法,指定时间等待控件出现,再进行点击操作(该方法的返回值是控件本身,所以后面可以紧跟控件操作,比如点击、长按
这两个API可以帮助我们等待页面上 某1个UI 出现或者消失,等待的超时时间 timeout 默认为120秒,如果在超时时长之内元素没有出现或者消失的话,会报 PocoTargetTimeout 的错误
判断元素是否存在,可以使用exists(),该方法返回结果是布尔值,
IDE的poco辅助窗检索出来的控件属性,基本上都可以通过 attr 接口读取出来
设置文本框的文本属性(输入文本),可以使用 set_text() 方法或者 setattr() 方法
6 总结