
Maestro 移动端 UI 自动化测试用 YAML 在 5 分钟跑通第一个跨平台 Flow【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro发版前 48 小时测试同学还在三台设备上手动点开同一个页面、同一组弹窗一遍遍点。回归测试的价值本该在于拦住问题而不是消耗人力去重复点击。Maestro 是一款开源的移动 UI 与端到端自动化测试框架用一套 YAML 就能覆盖 Android、iOS 和 Web 三端在模拟器、真机或浏览器上都能跑写第一个测试通常不超过五分钟。它的核心思路是把界面操作写成launchApp、tapOn、assertVisible这类可读命令再由解释引擎直接执行省掉了编译环节。能做什么YAML 流程一套语法覆盖三端把一次交互写成一行命令多个命令串起来就是一个可重复执行的 Flow。它不需要编译改完即跑跨平台时只需换掉appId和个别选择器。appId: com.android.contacts --- - launchApp - tapOn: Create new contact - inputText: John - assertVisible: Save多设备并行把回归时间压下去maestro test支持用--shard-split把一组 Flow 均分给 N 台已连接设备或用--shard-all让每台设备都跑全量。设备数量不足时它会直接报错而不是静默降级。命令定义在 TestCommand.kt。maestro test flows/ --shard-split 3录制视频把过程变成可分享的证据maestro record会把一个 Flow 的执行过程渲染成带注释的视频适合放进缺陷单或演示。本地渲染可输出 1920x1080 的 MP4实现见 RecordCommand.kt。maestro record flows/login.yaml --local跟着做先确认环境满足前置条件Maestro 需要 Java 17 及以上用java -version检查。接着用官方脚本安装它会自动下载二进制、写入 PATHcurl -fsSL https://get.maestro.mobile.dev | bash maestro --version这里有个容易踩的坑网上不少教程让你用./gradlew :maestro-studio:web:serve启动可视化界面但当前仓库里并没有maestro-studio模块。Studio 是一个独立的免费桌面应用不随 CLI 打包也不在这个开源仓库中CLI 里的maestro studio命令只负责打印一个下载提示见 StudioCommand.kt。所以别在这个仓库里找 Studio 的源码直接去官网下载桌面端即可。装好 CLI 后用maestro download-samples拉一套现成的示例流程和配套 App不必先写自己的用例。打开一个示例 Flow 看它长什么样理解launchApp、tapOn、inputText、assertVisible的对应关系再改成自己的包名。maestro download-samples maestro test samples/flows/跑完一次后如果某一步失败Maestro 会在控制台打印调试产物目录日志与截图按提示定位卡在哪一步。想快速排查到底能不能找到这个元素可以用maestro print-hierarchy把当前界面的元素树打出来确认id、text是否对得上再回到 Flow 里改选择器。一个完整走查以一个登录 → 搜索 → 加购 → 结算的电商流程为例。下面把它拆进叙述里而不是一份命令清单。先登录。用户名和密码是敏感字段用--env注入而不是写死在 YAML 里maestro test flows/shop.yaml -e usernamealice -e passwordx- launchApp: com.example.shop - tapOn: 搜索 - inputText: ${username} - tapOn: 登录 - assertVisible: 首页推荐搜索后进入列表。这里容易卡住结果页往往还在异步加载直接assertVisible会偶发失败。Maestro 的断言默认带自动等待不需要手动sleep但如果列表是懒加载记得先scroll再断言目标元素避免元素其实在屏幕外导致的误判。- scroll: direction: DOWN - assertVisible: 加入购物车最后加购并进入结算。如果某一步是弹出来的可选提示比如登录即代表同意协议给它加optional: true让流程在提示不存在时也能继续而不是一遇到差异就中断。- tapOn: 加入购物车 - tapOn: text: 同意 optional: true - assertVisible: 结算避坑与进阶元素定位不准怎么办自动识别的可见文本一旦改了文案就会断。更稳的做法是用稳定的id选择器Android 的resource-id、iOS 的identifier或组合条件缩小范围。真不确定时用maestro print-hierarchy把当前界面元素树导出抄真实属性比猜快得多。- tapOn: id: org.wikipedia:id/search_container动态内容和偶发弹窗怎么处理弹窗、引导页这类可能出现的分支用条件块只在满足条件时执行而不是写死一条路。when: visible:让流程自己判断避免每次都要清状态。仓库里的 Wikipedia 示例 就是这种写法只在Year in Review弹窗可见时才去点掉它。- runFlow: when: visible: You have been logged out commands: - tapOn: Continue without logging in多设备并行怎么配设备少、Flow 多时用--shard-split N均分需要每台设备都跑全量比如跨分辨率覆盖用--shard-all N。两者互斥同时给会直接抛错。设备数量少于 N 时也会提前报错省得跑到一半才发现缺设备。规模化后如果本地设备不够maestro cloud可以把 Flow 丢到云端虚拟设备并行执行命令形如maestro cloud app_file flows_folder/。收尾如果你是想让测试、开发甚至产品都能写用例的跨端回归团队Maestro 值得一试YAML 门槛低、三端通用、自带等待与并行。下一步先用maestro download-samples跑通一个示例再把包名换成你自己的 App 改三五行若你关心的是发版前的多机型覆盖直接上--shard-split把设备拉满。【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考