Maestro 完整指南:YAML 脚本驱动跨平台 UI 自动化测试,5 分钟跑通第一个用例
【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro
周五下午,离上线还有两天,测试群突然丢来一句:把登录流程的 Android、iOS 和 H5 版本回归用例都跑一遍,明早要结果。如果是 Espresso、XCTest、Selenium 各管一摊,你得维护三套代码、三套环境。而 Maestro 这个开源的 UI 自动化测试框架,让你用一份 YAML 文件写完同样的回归用例,在 Android、iOS 和浏览器上直接执行——不需要编译,保存即运行。
它是什么:一套脚本跑三端的跨平台测试工具
三句话先建立认知:
- 定位:开源(Apache 2.0)的端到端 UI 测试框架,覆盖 Android、iOS 和 Web,兼容 Flutter、React Native 等混合应用
- 解决的:同一份 YAML 脚本在模拟器、真机、浏览器上通用,测试逻辑只写一遍
- 核心卖点:
tapOn、assertVisible这类人话级命令,加内置智能等待,脚本里不用散落 sleep()
| 维度 | 传统做法 | Maestro |
|---|---|---|
| 平台覆盖 | 每个平台一套框架 | 一份 YAML 三端通用 |
| 语法 | 编程语言、需编译 | 人类可读、解释执行 |
| 等待机制 | 手动 sleep | 内置自动等待 |
🚀 五分钟上手:从零跑通第一个测试用例
系统要求:Java 17+,macOS / Linux / Windows(WSL)。
curl -fsSL "https://get.maestro.mobile.dev" | bash maestro --version # 能打印版本号即安装成功写一个最小 flow 试试手:
appId: com.example.shop --- - launchApp - tapOn: "登录" - inputText: "standard_user" - assertVisible: "首页"执行maestro test 文件名.yaml,模拟器上就能看到自动化在替你点按和校验。
[!TIP] 新手最常卡住的一步:
appId要填应用的包名或 Bundle ID,Web 场景则改用url字段。跑之前先确认设备已连接、应用已安装,否则第一条命令就会报找不到应用的错。
实战演练:从冒烟测试到参数化数据
跑通一个冒烟测试
上线前最该确认的是"应用能开、页面能渲染、核心操作走得通"。仓库自带一套 e2e 样例(见 e2e/workspaces/),一个 Web 冒烟用例长这样:
- launchApp - tapOn: Username - inputText: standard_user - tapOn: Login - assertVisible: Products关键就一点:动作之后紧跟断言,元素超时未出现测试立刻失败——断言就是冒烟用例的骨架。
用条件分支应对弹窗和引导页
真实应用每次冷启动都是弹窗轰炸:引导页、权限框、活动弹层,而且下个版本可能就不弹了。硬编码"关掉它"会让脚本在下个版本全部失效,Maestro 的思路是"在就处理,不在就跳过":
- runFlow: when: visible: "已退出登录" commands: - tapOn: "不登录继续"when是条件分支,再配上optional: true的兜底点击,弹窗顺序怎么变脚本都不怕。
用参数化覆盖多组数据
同一流程要换几组输入验证时,别复制 YAML,用变量注入:
- runScript: scripts/getSearchQuery.js - inputText: ${output.result} - eraseText - inputText: qwertyrunScript执行一段 JS,结果通过${output.xxx}注入后续步骤,随机数据、接口取数都走这条路。
❗ 避坑手册:新手最容易栽的三个坑
tapOn 找不到元素怎么办?别急着加 sleep。先用模糊匹配确认目标到底在不在:
- tapOn: text: contains: "登录"这个坑我踩过——九成情况是应用显示文案和你写的对不上,用 Maestro Studio 检查器看一眼屏幕上真实的文本再改,比瞎猜快得多。
断言时过时不过?用重试兜底,但别因此放宽断言标准:
- retry: maxAttempts: 3 command: assertVisible: "加载完成"重试后仍不稳,多半是屏幕上有动画或轮播在干扰,可以显式等待动画结束(waitForAnimationToEnd)。
用例多了怎么管?把重复步骤抽成子流程文件,用runFlow引用,仓库里 e2e/workspaces/wikipedia/subflows/ 就是活例子;再用tags给用例分类,maestro test --tags smoke按需批量跑,比一个目录堆几十个文件清爽得多。
从今天开始跑起来
如果你还在为每个平台各写一套测试、或脚本里到处是 sleep,不妨花十分钟装一下 CLI、照抄上面的冒烟示例,对着自己设备上的任意应用跑一遍。
- 完整样例流程:e2e/workspaces/
- 贡献与开发指南:CONTRIBUTING.md
当模拟器上跳出第一个绿色的 PASS,问题就会从"能不能自动化"变成"还有哪些流程可以自动化"——这正是这套工具值得留下来的时刻。
【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考