Maestro 入门实践:用 YAML 给 Android、iOS 与 Web 写自动化 UI 测试
【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro
每天早上开工,同一套回归流程要在 Android 模拟器、iOS 仿真器上各手点一遍,改个按钮文案还要担心漏了哪台机器。Maestro 是一个开源的移动 UI 自动化框架:用 YAML 文件描述点击、输入、断言等操作,一条命令就能在 Android、iOS 和浏览器上跑完这套流程,无需为每个平台各写一套脚本。
先判断它适不适合你
Maestro 的定位是 UI 层面的端到端测试,适合 App 验收、发布前回归,以及需要跨 Android、iOS、Web 三端复用同一份用例的团队。它不适合替代单元测试、纯接口测试和性能压测——这些场景用各自的专用工具更合适。如果你的测试主要停留在"调完接口看一眼返回值",引入 UI 自动化只会增加维护成本。
装好并跑通第一个用例
环境要求只有一项:本机装有 Java 17 及以上版本,可用java -version确认。
安装是单条命令,脚本会把二进制下载到~/.maestro并写好 PATH,脚本源码见 scripts/install.sh,官方安装地址以仓库根目录 README 为准:
java -version curl -fsSL "https://get.maestro.mobile.dev" | bash第一条用例不必从自己的 App 开始。Android 自带的 Contacts 应用就够用:新建一个 YAML 文件,声明目标应用的 appId,然后是一串动作——启动、点击、输入、再断言,全程没有代码,也不需要编译:
appId: com.android.contacts --- - launchApp - tapOn: "Create new contact" - tapOn: "First Name" - inputText: "John" - tapOn: "Save" - assertVisible: "John"运行只需一条命令:
maestro test flow_contacts.yaml执行结束时终端会逐步打印每条命令的结果,最后给出 PASS 或 FAIL,失败时附截图和元素树,方便定位是哪一步没点中。
把用例写稳
同名元素点不准
界面里出现多个同文案按钮时,tapOn: "确定"会随机命中。优先改用元素 ID 定位,或者给条件对象加index指定第几个匹配;enabled、textMatches等限定条件组合起来,基本能覆盖定位歧义问题。
动画和加载让断言抖动
不要靠sleep硬等,它要么等太久拖慢套件,要么等不够照样挂。Maestro 的元素查找本身就带自动重试,assertVisible写下来就等于"等到它出现再判断";遇到转场动画,加一行waitForAnimationToEnd,再配合assertNotVisible等加载提示消失,比任何拍脑袋的等待时间都可靠。
一份用例跑多组账号
账号、环境地址这类变量别写死在用例里。流程头部的env块和运行时的--env参数可以注入值,用例中用{{VAR}}占位;子流程用runFlow调用时同样支持传 env。同一份登录流程,生产账号和测试账号各跑一遍,就不需要复制两份文件了。
从单机到团队
用例多了以后,升级路径大致是三步。个人写用例阶段,可以换 Maestro Studio 这个免费桌面 IDE:可视化搭流程、检查器里直接点选元素拿定位条件、录制操作生成 YAML,省去手写细节——注意它是闭源独立应用,代码不在这个仓库里。团队规模上云之后,Maestro Cloud 把用例分发到专用基础设施并行执行,官方数据称执行时间可缩短约九成,并附带完整报告。接入 CI 没有门槛:GitHub Actions 里安装脚本加maestro test ./tests/两行就是一条流水线,再给 YAML 打上 tag(仓库 e2e/workspaces/ 里的示例都带 tag,如passing、web),就能按 tag 筛选用例,控制每次构建跑多少。
源码地图
仓库是多模块 Kotlin 工程,职责划分清楚:maestro-cli/是命令行入口,负责设备发现、执行调度和报告;maestro-client/抽象出Driver、Maestro等核心接口,Android、iOS、Web(CDP)三个驱动各自实现;maestro-orchestra/是解释执行引擎,从Orchestra.kt开始读文件、逐条执行命令、收集失败产物;maestro-orchestra-models/定义 YAML 命令模型,Commands.kt和ElementSelector.kt是理解全部命令和定位语法的入口;maestro-ios-xctest-runner/则是一整个 Swift 的 XCTest Runner 工程。想动手改之前,先读Orchestra.kt的执行循环和ElementSelector.kt,再对照 CONTRIBUTING.md 的协作约定即可。
用例文件是仓库里最便宜的学习材料,e2e/workspaces/ 目录下的示例覆盖了 Web、iframe、SPA 导航等场景,比任何教程都贴近真实写法。等你需要多设备并行、可视化编写和统一报告时,再依次引入 Studio 与 Cloud 就好。
【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考