
30 分钟跑通跨平台 UI 自动化一套 YAML 写完整登录回归测试【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro 上个发版夜37 条用例红了 12 条定位半天才发现不是 bug是点击时元素还没加载。后来我改用 Maestro——基于 YAML 测试的跨平台 UI 自动化一个脚本同时跑 Android 和 iOS登录回归从此只维护一份。为什么写跨平台 UI 自动化测试时选了 Maestro按平台各写一套原生测试一个登录流程就是三套代码Android 用 EspressoiOS 用 XCTestWeb 用 SeleniumUI 一改要改三处。Maestro 的差异点有三个全部命令写在 YAML 里新人一天就能读懂assertVisible这类断言是声明式的你写的是什么该成立而不是该怎么点每条命令都内置自动等待不必靠 sleep 硬扛时机问题。它是开源免费的项目安装一条命令语法一页纸能看完。环境就绪接下来让脚本真正跑起来。如何安装 Maestro 并 5 分钟跑通第一个 YAML 脚本先装。macOS、Linux、Windows WSL 都适用唯一前置是 Java 17 以上用java -version确认过再往下走curl -fsSL https://get.maestro.mobile.dev | bash然后写一个最小 flow。先不写业务就用系统自带通讯录 App——任何模拟器上都有不用装应用最适合验证工具链# first.yaml —— 先确认链路通别急着碰业务 appId: com.android.contacts --- - launchApp - tapOn: First Name - inputText: John - tapOn: Last Name - inputText: Snow - tapOn: Save - assertVisible: John Snowmaestro test first.yaml终端里看到整条流程变绿就说明环境没问题。现在不用纠结每一行后面用熟了自然懂。如果终端提示没找到设备先开一个模拟器或插上真机再跑Maestro 会自己列出已连接的设备。如何给电商 App 写一套完整的登录回归测试回到目标把正常账号登录 → 落到订单页这件事跑稳。写法是分层叠加先骨架再遇到问题补什么每一步都清楚自己在解决什么。先写裸流程文案用你应用 UI 上的真实文字appId: com.example.shop --- - launchApp: clearState: true # 清掉残留状态上次测试的脏数据不能带进这次 - tapOn: 我的账户 - tapOn: 用户名 - inputText: standard_user - tapOn: 密码 - inputText: secret_sauce - tapOn: 登录 - assertVisible: 我的订单能跑了但新测试机会卡在验证码弹窗——脚本不知道这回事会一直等一个不存在的输入框直到超时。加个分支让脚本自己决策# 有验证码就走输入分支没有就直接跳过不让脚本原地等死 - if: visible: 输入验证码 then: - inputText: 123456 else: - tapOn: 跳过验证第二个问题是测试数据两个人在共享环境跑同一个写死的手机号账号互相顶失败原因查半天。手机号改成随机生成# 每次跑随机生成同环境多人执行互不冲突 - tapOn: 手机号 - inputRandomNumber最后是时机。弱网下从点登录到订单页出现要 8 秒默认窗口偶发不够。与其加 sleep不如给关键断言显式超时让 Maestro 自己去轮询- assertVisible: text: 我的订单 timeout: 15000 # 给最慢的那台 CI 机器留足余量完整脚本二十多行从上到下读下来就是一条操作动线。这就是 YAML 语法的回报review 脚本时你不需要在脑子里翻译哪个类里哪个方法调了什么看到的就是读到的。脚本能跑了但能跑离稳定跑还差一口气尤其是进了 CI 之后。当 Maestro 出现定位漂移和 CI 时序问题时怎么修当按钮文案漂移的时候产品把登录改成立即登录整套脚本全红你得逐行改定位符。改成 contains 而不是精确匹配因为按钮文案是 UI 里最常随版本微调的部分contains 同时兼容新旧两版文案- tapOn: text: contains: 登录当本地过而 CI 超时的的时候CI 机器通常比你本机慢写 sleep 只是把一种不稳定换成另一种——写短了照样超时写长了整套回归变慢。给断言更大的超时让 Maestro 自己等到元素真正出现- assertVisible: text: 订单列表 timeout: 15000如何在 CI 里跑 Maestro 并多端并行接入日常流程只加一行传脚本目录即可批量执行maestro test flows/ --shard-split 3--shard-split 3会把所有 flow 切成 3 片分派到 3 台模拟器或真机上并行三端回归一杯水的工夫跑完。跑完默认在当前目录生成 HTML 报告report.html每个失败点都带逐步截图--format可换格式接 CI 结果页用 JUnit 格式最顺手。更完整的分片与并行参数翻官方文档对应章节即可。一套 YAML 三端通用免费开源今天写的登录脚本就是第一块砖。放进 nightly 回归让它今晚先跑起来。【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考