Maestro实现IOSUI自动化

之前我们分享过web端和桌面端的UI自动化方案,不少小伙伴希望能出一套AI驱动APP自动化的方案,我也针对性做了一段时间调研,Maestro、Appium是目前 APP UI 自动化两大主流选型,本文将以 iOS端为例,基于Maestro进行实践讲解,后续再分享基于Appium进行IOS、Android的UI自动化实践案例。

Maestro介绍

Maestro 是一款轻量开源 UI 自动化工具,主打移动端与 Web 端测试。它采用 YAML 语法编写用例,内置 AI 元素识别、智能等待能力,无需复杂环境依赖,上手门槛低、脚本运行稳定,一份脚本即可跨安卓、iOS、浏览器多端执行。

同时工具支持 CLI 命令行调用,适合结合 AI 能力来实现 UI 自动化提效。本文将基于 iOS 模拟器,实践一下如何利用Maestro skill工作流的方式进行UI自动化

首先我们先看看 maestro cli拥有的指令

开展 UI 自动化的核心前提是获取页面控件元素,Maestro 提供了 hierarchy 指令,通过它可以拿到整个 APP 页面的 UI 层级。 拿到这份结构化数据后,AI 能够自动解析页面元素信息,把传统文本测试用例转化为 Maestro 可直接运行的脚本;最终我们通过 maestro test 命令,就能批量执行整套自动化流程。

如:下面是一个AI识别ui结构后生成的yaml文件,maestro会根据yaml文件中的相关指令去执行

yaml文件内部的具体文件就不在这里做太详细的介绍了,现在有AI,大家也不会太细致的去查看内部的内容了,不过如果想要了解的话,也可以看看该官方提供的说明:官方yaml参数说明

Skill介绍

本来是考虑参考browser use的方式,只设计成一个skill,将探索元素和执行用例放在一个skill,但是在实际操作中,发现执行skill的时间会花很多的时间,且会导致skill内容过于庞大,AI注意力分散,使得输出效果一般,因此还是拆解为了3个skill,skill如下:

skill执行流程如下:

Skill获取方式:

可以自己根据Raina提供的思路进行开发skill,如果需要现成的,也可以加入**【Raina的AI&测试实战圈】**获取~里面还有很多AI赋能测试全流程的实战教程。

完整实战案例

环境准备

1、jdk17安装

mac:

bash 复制代码
# 下载
brew install --cask temurin@17
# 环境设置
export JAVA_HOME=$(/usr/libexec/java_home -v17)
# 检查版本是否生效
java -version

2、maestro cli安装

json 复制代码
brew tap mobile-dev-inc/tap
brew install mobile-dev-inc/tap/maestro

3、Xcode安装

1、打开 App Store

2、搜索 Xcode(Apple 官方)

3、点「获取」→ 验证 Apple ID → 自动下载安装。

4、安装后,直接打开即可

实操步骤

在安装好jdk、maestro cli之后,我们再进行下面的步骤操作

1、Simulator 模拟器安装

在安装好Xcode之后,打开,点击顶部菜单:Xcode → Settings(偏好设置)

点击 components(组件),点击 add platforms(添加平台)

选择你想要的 ios 版本进行安装

等待安装,时间可能会比较久

安装后,打开 xcode->open developer tool->simulator 打开模拟器

等待启动成功,效果如下:

2、skill安装

下载skill,安装到自己的ai工具中

3、获取模拟器中的bundle Id

使用codex打开项目,找到从gitcode中下载下来的项目,或者打开你自己的ios项目也OK

2、点击根目录、找到Targets下的DiaryApp>identity,找到bundle identifier后面的信息就是我们要的bundle id了,可以先复制下来,后面需要用到

3、准备一份excel测试用例

这里主要围绕用例执行,因此用例生成部分,这里不过细讲太多了(可以看看往期的文章,根据需求文档生成测试用例)

将excel用例和skill放在同个项目下

4、探索app、执行yaml编写

AI执行过程:

启动模拟器

会先进行界面的快照抓取

之后基于快照,生成探索的yaml,并执行

最终在执行成功,且元素探索没问题之后,会生成yaml文件

输入:

/maestro-run yaml文件夹 bundleId

执行脚本

在执行的过程中,可能会失败,失败的话处理方式是会先做重试,如果还是失败,则会直接中断

并且会描述原因以及给出修复建议,可以让AI根据建议进行修复,并继续执行

AI会进行页面探索和yaml修复

6、报告生成

执行md

最终执行结果

小结

现阶段AI 并非万能,目前主要还是作为辅助比较多。尤其是app的复杂程度较高,包括下面几点:

(1)app的设备环境复杂:需要考虑Android SDK、iOS 开发者证书、不同系统版本、机型、分辨率兼容性爆炸、权限、弹窗、后台、锁屏等

(2)元素定位更加复杂:包括原生控件、Flutter、React Native、WebView 混合

(3)app的交互动作也更加复杂:滑动、长按、拖拽、捏合、截屏、物理返回键、键盘、通知栏、权限弹窗

本套方案以 AI 辅助落地自动化为探索方向,无法做到完全脱离人工。内容仅供参考,如果有更好的方案,也欢迎在评论区一起讨论和学习~

相关推荐
dok1221 分钟前
Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》(4) devicefile 设备号相关
linux·运维·服务器
CodexDave24 分钟前
Python 自动化接单实战(一):把 CSV 需求做成配置驱动解析器
java·python·自动化·json·数据清洗·python自动化·csv处理
毛驴赶鹿42 分钟前
低配置服务器怎么搭建监控?Komari Docker部署与公网访问完整教程
运维·服务器·docker
Fu2067211 小时前
结课项目考试
linux·运维·服务器
MXsoft6181 小时前
## 信创运维2.0的“最后一公里”——国产设备“能用但不好用”,问题出在哪?
运维
IT小白杨1 小时前
指纹浏览器安全架构技术评测与API自动化能力对比
经验分享·安全·自动化·业界资讯·安全架构·指纹浏览器
公众号:fuwuqiBMC2 小时前
(转自“服务器BMC”)服务器BMC芯片——AST1840
运维·服务器·fpga开发
爱网络爱Linux3 小时前
RHCSA+RHCE 10.0全新升级!红帽Ansible自动化运维
运维·自动化·ansible·rhce认证·rhel1o·linux10·rhce10
瞬间&永恒~3 小时前
【MySQL】练习5-1:配置慢查询日志
linux·运维·云原生
A15362553 小时前
五金批发电商业财一体化 ERP 推荐:打通订单、库存、财务对账
大数据·运维·人工智能·零售