Maestro实现IOSUI自动化

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个skillskill如下skill执行流程如下Skill获取方式可以自己根据Raina提供的思路进行开发skill如果需要现成的也可以加入【Raina的AI测试实战圈】获取~里面还有很多AI赋能测试全流程的实战教程。完整实战案例环境准备1、jdk17安装mac# 下载brewinstall--casktemurin17# 环境设置exportJAVA_HOME$(/usr/libexec/java_home-v17)# 检查版本是否生效java-version2、maestro cli安装brew tap mobile-dev-inc/tap brew install mobile-dev-inc/tap/maestro3、Xcode安装1、打开App Store2、搜索XcodeApple 官方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项目也OK2、点击根目录、找到Targets下的DiaryAppidentity找到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的复杂程度较高包括下面几点1app的设备环境复杂需要考虑Android SDK、iOS 开发者证书、不同系统版本、机型、分辨率兼容性爆炸、权限、弹窗、后台、锁屏等2元素定位更加复杂包括原生控件、Flutter、React Native、WebView 混合3app的交互动作也更加复杂滑动、长按、拖拽、捏合、截屏、物理返回键、键盘、通知栏、权限弹窗本套方案以 AI 辅助落地自动化为探索方向无法做到完全脱离人工。内容仅供参考如果有更好的方案也欢迎在评论区一起讨论和学习