Maestro UI自动化5分钟装好,一个YAML测试流一次跑通 Maestro UI自动化5分钟装好一个YAML测试流一次跑通【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro人工点点点还要维护三套脚本发版前你大概经历过这样的流程打开 Android 模拟器走一遍登录、下单、支付再开 iOS 模拟器重复同样的操作如果还做了 Web 端得第三次。手点一遍至少半小时而一旦偶现失败你连哪一步挂的都要靠翻聊天记录去对。更糟的是脚本化之后Appium 一套、XCUITest 一套、Selenium 再来一套三套语言、三套定位方式改一个文案等于修三个仓库。Maestro把这件事收敛成一个格式一份人类可读的YAML 测试流Android、iOS、Web 通用解释型执行——YAML 写完即跑不用编译也不用先写脚手架。下面带你从零走到一次跑通。它替你省掉什么痛点Maestro 的做法写 sleep 等页面加载内置智能等待元素没出现就自动重试出现才往下走三套端、三套脚本同一份语法覆盖 Android / iOS / Web含 Flutter、React Native、混合应用脚本要编译、装依赖流文件本身即测试改完直接maestro test再跑失败后抓现场难每次运行自动记录截图、视图层级和日志报告里直接看注意一个词解释型执行。意思是 Maestro 不在测试前把你的用例编译成代码而是运行时逐条解释 YAML 指令。好处是迭代快——改完一个选择器秒级重跑不用等构建。记住这个判断标准如果你现在为等待和三端重复头疼继续往下看。如何一条命令装好 Maestro安装前只有一个硬依赖Java 17 或更高Maestro 是 JVM 上的工具跑流时会用到。打开终端确认java -version版本低于 17 就先升级 Java。macOS、Linux 或 WindowsWSL下接着执行这一条curl -fsSL https://get.maestro.mobile.dev | bash这条命令会依次做四件事检查 java / unzip / curl 是否就位 → 下载最新发行包 → 解压并复制到~/.maestro→ 把~/.maestro/bin写进你的 PATH写在哪、怎么幂等可以看仓库里的 安装脚本。装完验证maestro --version打印出版本号就算装好了老终端需要source ~/.bashrc或重开一个窗口让 PATH 生效。现在就敲这条命令看到版本号再往下走。launchApp / tapOn 等高频命令速查写流之前先混个脸熟最常用的四条命令大白话写法launchApp启动appId指定的应用- launchApptapOn点屏幕上写着这个文本或这个 id的元素- tapOn: Create new contactinputText往当前聚焦的输入框打字- inputText: JohnassertVisible断言某个元素可见不可见就判失败- assertVisible: Credentials are correcttapOn除了直接写文本还能按 id 或第几个同名元素定位后面实战里会出现- tapOn: text: Login index: 1意思是屏幕上出现两个 Login 时点第二个。速查表收好下一步把它拼成一份真正的流文件。第一个 YAML 测试流从 3 行写到能跑新建flow_contact.yaml先只写最小的可执行体appId: com.android.contacts --- - launchApp三行各干各的事appId告诉 Maestro 要驱动哪个应用Android 是包名iOS 是 bundle idWeb 是 URL---YAML 文档分隔符前面是元信息后面是步骤列表- launchApp第一条指令把应用拉起来。跑一下maestro test flow_contact.yaml绿色 PASSED 就说明应用能启动这条用例成立了。现在往里加东西加一项讲一项appId: com.android.contacts tags: - android --- - launchApp - tapOn: Create new contact - inputText: John - assertVisible: Create new contacttags是纯标记用来筛选和分组比如 CI 里只跑android标签的流不参与执行逻辑tapOn/inputText是动作按顺序执行最后一条assertVisible是断言整个流的成败由它说了算。动作可以容忍一时找不到会等断言找不到就是失败——这就是步骤和检查点的分工。现在把这个文件丢到模拟器上跑一遍看它绿。实战跑通仓库里的维基百科示例仓库自带一套现成样例e2e/workspaces/wikipedia/我们直接用它省得自己造轮子。android-flow.yaml 的内容长这样appId: org.wikipedia tags: - android - passing --- - launchApp在装了维基百科 App 的 Android 模拟器/真机上maestro test e2e/workspaces/wikipedia/android-flow.yaml做对了长什么样终端输出流里每一步的状态最后PASSED退出码 0。失败→定位→修复一次真实的找不到元素换个更长的流android-advanced-flow.yaml你会遇到第一种典型失败tapOn: id: org.wikipedia:id/search_container报Element not found。按顺序排查先怀疑页面没就绪。这一步 Maestro 已经替你等了还等不到说明此刻屏幕上确实没有它——大概率是 onboarding 引导页没走完。对着报告看截图。每次失败 Maestro 都会存一张当时屏幕的截图和视图层级文件打开看一眼引导页还卡在第一屏。修流而不是修断言。把 onboarding 单独抽成子流 subflows/onboarding-android.yaml主流里用- runFlow: subflows/onboarding-android.yaml先跑完它再去找搜索框。子流里甚至藏了个技巧- launchApp: clearState: trueclearState: true强制应用回到首次启动状态这样每次跑 onboarding 都确定存在不用赌上一次运行留下了什么状态。重跑maestro test e2e/workspaces/wikipedia/android-advanced-flow.yaml这次绿了。顺带记一个更隐蔽的坑仓库 e2e/README.md 自己踩过Web 测试流里如果静态页面服务器没起launchApp照样成功浏览器会渲染出自己的错误页接着流就会报一个选择器明明正确的Element not found。解法是先e2e/ensure_fixtures把页面服务拉起来再跑流。报错指向选择器根因却在环境——这条经验值得贴在工位上。踩坑指南等待、optional 与可视化调试别再手写 sleep。智能等待是默认行为每条指令都在等待-尝试-重试里循环页面慢它就多等元素出现才执行。你唯一要做的是把等待交给框架别自己写死时间。optional: true给可能不存在的元素用。上面 onboarding 子流里有这么一段- tapOn: text: Non existent view optional: trueoptional: true表示找到就点找不到也不判失败继续下一步。它适合偶尔弹的广告/引导这类不确定性交互别用它掩盖真正的断言失败——那是把红灯贴成黄灯。Maestro Studio 可视化排查。Studio 是配套的桌面测试 IDE非开源单独下载能连上真机/模拟器逐帧检视元素、录制交互直接生成 YAML、单步执行流。命令行里定位不了的元素问题拖进 Studio 看一眼层级结构往往立刻破案。报告别只看红绿每次运行产物里含截图与层级文件失败时第一反应是打开对应那张截图比读报错快得多。什么时候用 Maestro什么时候别用适合不适合移动端 / Web 端到端冒烟与回归性能压测、崩溃率统计等非 UI 指标小团队想当天上线第一版自动化需要精细手势编排多点触控、复杂拖拽路径用例以文本/可见内容定位为主深度依赖私有协议、需 mock 网络层CI 里要快速、稳定、可解释的结果用例规模上千且需精细编排并行调度可再评估 Maestro Cloud延伸阅读都在仓库里e2e/workspaces/wikipedia/含subflows/与scripts/看子流拆分和 JS 变量注入怎么写e2e/workspaces/web/Web 端测试流与 fixtures含 iframe、SPA 路由等场景e2e/README.md整套 e2e 怎么编排、哪些流应当失败为什么scripts/install.sh安装脚本全流程排查装不上的问题看这里。到这里你已经走完装好 → 读懂四条命令 → 手写最小流 → 在真实样例上修过一次失败。剩下的事只有一件把你项目里最高频的那条用户路径翻成第一份 YAML。【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考