大数跨境

比 Appium 更轻、更稳、更跨端、零侵入:这款开源 AI UI 自动化测试工具有点东西

比 Appium 更轻、更稳、更跨端、零侵入:这款开源 AI UI 自动化测试工具有点东西 51Testing软件测试网
2026-09-18
3
导读:哈喽,宝子们!一条安装命令,一个 YAML 文件,你的第一条移动端 UI 测试就能跑起来。它就是 mobile.dev 出品的开源 UI 自动化框架——Maestro。它精准击中了传统移动端 UI 测
点击蓝字,关注我们

 

哈喽,宝子们!一条安装命令,一个 YAML 文件,你的第一条移动端 UI 测试就能跑起来。它就是 mobile.dev 出品的开源 UI 自动化框架——Maestro。它精准击中了传统移动端 UI 测试的两大痛点:脚本脆弱上手门槛高。让你告别繁琐的元素定位,以及脚本一改就大面积失败的窘境,是不是很厉害?


今天我们就带大家从“这是什么”到“为什么用”到“怎么跑”到“怎么用得好”四个维度,全面了解它。有兴趣的同学可以跟着练一练哦~


阅读本文你将收获

  1. Maestro 是什么;
  2. Maestro 的核心优势与定位;
  3. 如何快速跑通第一个测试;
  4. 进阶使用总结:从能跑到稳定跑。

一、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
查看应用 UI 层级
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 传统工具

维度
Maestro
Playwright
Appium
Selenium
平台支持
App + Web
Web
App
Web
脚本语言
YAML + JavaScript
TypeScript/Java/Python
多语言
多语言
AI 支持
原生 MaestroGPT
MCP 扩展
MCP 扩展
MCP 扩展
用例维护
CLI/IDE/YAML,官方维护
依赖第三方
依赖第三方
依赖第三方
安装部署
一键脚本
npm/pip
复杂
复杂

三、如何快速跑通第一个测试

以“电商下单”为例,完整走一遍流程。

Step 1:装好环境

Maestro 需要 Java 17 或更高版本。

如果没装或者版本太低,macOS 可以用 brew install openjdk@17 ,其他系统去 OpenJDK 官网下载即可。Maestro 在 Java 17 和 21 上表现最稳定,版本太老或者太新都可能出问题。


   
   
   
   
    
   
   
   
   java-version

Java 没问题之后,装 Maestro 就一行命令:


   
   
   
   
    
   
   
   
   curl-fsSL"https://get.maestro.mobile.dev"|bash

macOS 用户也可以用 Homebrew:


   
   
   
   
    
   
   
   
   brew tap mobile-dev-inc/tapbrew install maestro

装完验证一下:


   
   
   
   
    
   
   
   
   maestro --version

看到版本号就 OK 了。

Step 2:连上设备

Maestro 测试需要有一个 Android 模拟器、iOS 模拟器或者真机连着。Android 的话,启动模拟器之后跑一下:


   
   
   
   
    
   
   
   
   adb devices

能看到设备列表就行。真机需要打开开发者选项里的“USB 调试”。如果有多个设备同时连着,可以用 --device 参数指定:


   
   
   
   
    
   
   
   
   maestro --device emulator-5554 test .maestro/checkout.yaml

Step 3:写第一个 Flow——电商下单流程

在项目根目录建一个 .maestro/ 文件夹,新建 checkout.yaml 。这个 Flow 模拟一个完整的用户购物流程:


   
   
   
   
    
   
   
   
   appId: com.example.shop---# 1. 启动,清空数据- launchApp:    clearState: true
# 2. 处理启动弹窗(有就关掉,没有就跳过)- runFlow:    when:      visible: "新人专享红包"    commands:      - tapOn: "关闭"
# 3. 登录(复用子流程)- runFlow: ./subflows/login.yaml
# 4. 首页搜索商品- tapOn: "搜索框"- inputText: "无线耳机"- pressKey: Enter
# 5. 在搜索结果中滚动找到目标商品- scrollUntilVisible:    element:      text: "降噪无线耳机 Pro"    direction: DOWN- tapOn: "降噪无线耳机 Pro"
# 6. 商品详情页 — 选择规格,加入购物车- tapOn: "颜色"- tapOn: "黑色"- tapOn: "加入购物车"
# 7. 进入购物车,确认商品在- tapOn: "购物车图标"- assertVisible: "降噪无线耳机 Pro"
# 8. 结算- tapOn: "去结算"- tapOn: "提交订单"
# 9. 等待支付完成(可能较慢,设 30 秒上限)- extendedWaitUntil:    visible: "支付成功"    timeout: 30000
# 10. 回到首页校验- tapOn: "返回首页"- assertVisible: "我的订单"- takeScreenshot: "order_success"

就这 30 行不到,覆盖了一个完整的电商核心链路。


下面拆开看几个关键点。

弹窗处理用了条件执行。 电商 App 启动时经常弹新人红包、限时优惠这些弹窗。如果写死“点掉弹窗”,万一某次没弹出来,脚本就卡住了。 runFlow 加 when: visible 的意思是“弹窗出现了就关掉,没出现就跳过”,官方文档里也推荐这种写法处理动态 UI。


搜索列表用了 scrollUntilVisible 。 搜索结果超过一屏时,目标商品可能在屏幕外。这个命令会自动向下滚动直到找到元素为止,不需要手算滑动距离。 scrollUntilVisible 默认超时是 20 秒,方向默认向下,如果列表特别长可以调大 timeout 参数。


支付环节用了 extendedWaitUntil 。 提交订单后跳转支付页面、等待支付网关响应,这个时间不确定。普通断言默认等 7 秒就超时了, extendedWaitUntil 可以设 30 秒上限——元素提前出现就提前继续,不会死等。


登录拆成了子流程。./subflows/login.yaml 是一个独立文件,里面写登录的完整步骤。下单、退款、查订单都需要登录,改一处就全生效。

Step 4:跑起来


   
   
   
   
    
   
   
   
   maestro test .maestro/checkout.yaml


终端会实时显示每一步的执行结果。成功的打勾,失败会告诉你卡在哪一步、当前屏幕长什么样。如果想边改边跑,可以用持续模式:


   
   
   
   
    
   
   
   
   maestro test-c .maestro/checkout.yaml


保存 YAML 文件之后测试会自动重新执行。

Step 5:元素找不到怎么办

这是新手最常遇到的问题。Maestro 提供了一个可视化工具:


   
   
   
   
    
   
   
   
   maestro studio


启动后连上设备,鼠标在应用界面上悬停到任意元素上,就能看到它的属性和推荐的定位方式。对于排查“为什么这个按钮点不到”这类问题很省时间。

如果 Studio 不方便用,也可以用命令行的方式看当前页面的元素层级:


   
   
   
   
    
   
   
   
   maestro hierarchy


终端会打印出当前屏幕上所有元素的属性,从中找到正确的 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 本,快来评论区互动吧~

image.png

 



图片
END





图片
点点赞
图片
点分享
图片
点推荐

【声明】内容源于网络
0
0
51Testing软件测试网
博为峰51Testing软件测试网提供各种线上招聘、线上课程等网络服务,出版软件测试系列丛书及电子杂志,组织线上技术交流活动;同时还举办多种线下公益活动,如软件测试沙龙、软件测试专场招聘会等。
内容 3949
粉丝 0
51Testing软件测试网 博为峰51Testing软件测试网提供各种线上招聘、线上课程等网络服务,出版软件测试系列丛书及电子杂志,组织线上技术交流活动;同时还举办多种线下公益活动,如软件测试沙龙、软件测试专场招聘会等。
总阅读3.7k
粉丝0
内容3.9k