哈喽,宝子们!一条安装命令,一个 YAML 文件,你的第一条移动端 UI 测试就能跑起来。它就是 mobile.dev 出品的开源 UI 自动化框架——Maestro。它精准击中了传统移动端 UI 测试的两大痛点:脚本脆弱、上手门槛高。让你告别繁琐的元素定位,以及脚本一改就大面积失败的窘境,是不是很厉害?
今天我们就带大家从“这是什么”到“为什么用”到“怎么跑”到“怎么用得好”四个维度,全面了解它。有兴趣的同学可以跟着练一练哦~
阅读本文你将收获:
Maestro 是什么; Maestro 的核心优势与定位; 如何快速跑通第一个测试; 进阶使用总结:从能跑到稳定跑。
一、Maestro 是什么?
Maestro 简介:
Maestro 是一款轻量开源 UI 自动化工具,主打移动端与 Web 端测试。它采用 YAML 语法编写用例,内置 AI 元素识别、智能等待能力,无需复杂环境依赖,上手门槛低、脚本运行稳定,一份脚本即可跨 Android、iOS、浏览器多端执行。
同时,它支持 CLI 命令行调用,适合结合 AI 能力提升 UI 自动化效率。Maestro CLI 常用指令包括:
|
|
|
|---|---|
maestro test |
|
maestro test -c |
|
maestro list-devices |
|
maestro start-device |
|
maestro driver-setup |
|
maestro cloud |
|
maestro login |
|
maestro logout |
|
maestro hierarchy |
|
maestro record |
|
它能解决什么问题?
传统 Appium 环境重、脚本脆、维护成本高。
适用平台:
Android、iOS、Web,支持原生、React Native、Flutter。
二、它的核心定位与优势
1、轻:YAML 写测试,不用编译
Maestro 的测试文件是 YAML,命令都是 launchApp 、 tapOn 、 assertVisible 这种一看就懂的表达。工作流是解释执行的,不需要编译,装好就能跑。安装也就一行脚本的事,不用配驱动、不用改项目构建配置。
2、稳:内置弹性与智能等待
Appium 脚本最让人头疼的就是“等”。网络慢了要等,动画没播完要等,页面没渲染完要等。很多团队写一堆 sleep(3000) ,跑得快时浪费 3 秒,跑得慢时 3 秒又不够。Maestro 内置了容错和自动等待,处理动态 UI 不需要手动调 sleep ——UI 没稳它就等,稳了立刻执行。
3、跨端:一份脚本,Android/iOS/Web 都能跑
Maestro 支持模拟器、仿真器、真机,覆盖 Android、iOS、Web。React Native、Flutter、混合应用都不挑。同一份 YAML,换个设备照样跑。
4、零侵入:不依赖框架,直接测编译后的包
这点和 Flutter 关系很大。Maestro 不需要你在 Flutter 项目里加任何测试基础设施代码,不用改 pubspec.yaml ,直接测编译后的 APK 或 IPA。测试的是你实际发布的包,不是特殊的 debug 包。
5、还有个内置的 AI 能力
Maestro 自带 MaestroGPT,可以生成命令、回答使用问题。如果你用 Claude Code 或 Cursor,还可以通过 MCP 让 AI 直接调用 Maestro 写测试、跑测试、看结果。
Maestro vs 传统工具
|
|
|
|
|
|
|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
三、如何快速跑通第一个测试
以“电商下单”为例,完整走一遍流程。
Step 1:装好环境
Maestro 需要 Java 17 或更高版本。
如果没装或者版本太低,macOS 可以用 brew install openjdk@17 ,其他系统去 OpenJDK 官网下载即可。Maestro 在 Java 17 和 21 上表现最稳定,版本太老或者太新都可能出问题。
Java 没问题之后,装 Maestro 就一行命令:
macOS 用户也可以用 Homebrew:
装完验证一下:
看到版本号就 OK 了。
Step 2:连上设备
Maestro 测试需要有一个 Android 模拟器、iOS 模拟器或者真机连着。Android 的话,启动模拟器之后跑一下:
能看到设备列表就行。真机需要打开开发者选项里的“USB 调试”。如果有多个设备同时连着,可以用 --device 参数指定:
Step 3:写第一个 Flow——电商下单流程
在项目根目录建一个 .maestro/ 文件夹,新建 checkout.yaml 。这个 Flow 模拟一个完整的用户购物流程:
就这 30 行不到,覆盖了一个完整的电商核心链路。
下面拆开看几个关键点。
弹窗处理用了条件执行。 电商 App 启动时经常弹新人红包、限时优惠这些弹窗。如果写死“点掉弹窗”,万一某次没弹出来,脚本就卡住了。 runFlow 加 when: visible 的意思是“弹窗出现了就关掉,没出现就跳过”,官方文档里也推荐这种写法处理动态 UI。
搜索列表用了 scrollUntilVisible 。 搜索结果超过一屏时,目标商品可能在屏幕外。这个命令会自动向下滚动直到找到元素为止,不需要手算滑动距离。 scrollUntilVisible 默认超时是 20 秒,方向默认向下,如果列表特别长可以调大 timeout 参数。
支付环节用了 extendedWaitUntil 。 提交订单后跳转支付页面、等待支付网关响应,这个时间不确定。普通断言默认等 7 秒就超时了, extendedWaitUntil 可以设 30 秒上限——元素提前出现就提前继续,不会死等。
登录拆成了子流程。./subflows/login.yaml 是一个独立文件,里面写登录的完整步骤。下单、退款、查订单都需要登录,改一处就全生效。
Step 4:跑起来
终端会实时显示每一步的执行结果。成功的打勾,失败会告诉你卡在哪一步、当前屏幕长什么样。如果想边改边跑,可以用持续模式:
保存 YAML 文件之后测试会自动重新执行。
Step 5:元素找不到怎么办
这是新手最常遇到的问题。Maestro 提供了一个可视化工具:
启动后连上设备,鼠标在应用界面上悬停到任意元素上,就能看到它的属性和推荐的定位方式。对于排查“为什么这个按钮点不到”这类问题很省时间。
如果 Studio 不方便用,也可以用命令行的方式看当前页面的元素层级:
终端会打印出当前屏幕上所有元素的属性,从中找到正确的 selector 就行。
几个容易踩的坑
-
Java 版本不对。 Maestro 需要 Java 17+,版本太低会报 UnsupportedClassVersionError,版本太高也可能出问题。用java -version确认一下,推荐用 Java 17 或 21。
-
设备没连上。 跑之前先确认 adb devices能看到设备。如果 Maestro 提示 “Device was requested, but it is not connected”,用--device参数显式指定设备 ID,或者先重启 ADB 服务。
-
Windows 用户注意。 Maestro 需要跑在 WSL 环境里,不要直接在 Windows 的 CMD 或 PowerShell 里装。另外,项目文件要放在 WSL 的原生文件系统里(比如 /home/username/),不要放在/mnt/c/下面,否则可能有 socket 绑定和文件权限问题。
-
优先用 ID 定位,别用文字。 按钮从“登录”改成“立即登录”,用文字定位的脚本就挂了。ID 不会变。如果做的是长期维护的项目,建议在早期就跟研发约定好核心控件的测试标识。
-
clearState: true保证从干净状态开始。 不写这个,上次测试残留的数据可能影响这次。但注意它只清应用数据,不清系统缓存。
四、进阶使用总结
-
Selector 策略: 优先 ID,提前和研发约定核心控件测试标识。 -
runFlow 复用: 登录、加购、结算等公共流程拆出来,但不要为拆而拆。 -
等待业务状态: 不要固定 sleep,等待业务结果出现。 -
参数分离: 账号、环境配置用 ${LOGIN_PHONE}外部传入。 -
数据准备: 能用接口/数据库造数据,就不要全走 UI。 -
断言聚焦: 只盯关键结果,比如订单提交成功、支付状态正确。
然后补两个进阶方向:
-
Flutter / React Native: Maestro 支持好,直接测 APK/IPA,不依赖 Widget 树。 -
AI + MCP: Trae + Maestro MCP 可以辅助生成脚本,但 AI 不能完全替代人工。
最后避坑一句:操作路径明确的场景最适合 Maestro;复杂断言和深度平台控制,Appium 仍有优势。
五、话题讨论
讨论 1: 零侵入是降低了协作成本,还是转移了协作成本?你们团队里,测试和研发在 UI 自动化这件事上是怎么配合的?
讨论 2: YAML 项目也需要架构,但 YAML 本身的架构能力很弱。那最后会不会变成“写起来爽,维护起来想哭”?
讨论 3: 自动等待和重试的边界在哪?什么样的失败应该被容忍,什么样的失败必须暴露?你们有没有遇到过“测试跑通了但线上还是出问题”的情况?
以上话题,任选其一,欢迎评论区留言。小编会在下下周一(2026 年 9 月 28 日)下午,选取 1 位“关注+点赞+留言”的幸运用户,送出《Codex 快速入门 Harness 工程落地》1 本,快来评论区互动吧~


