
一套 YAML 脚本跑通三个端Maestro 跨平台 UI 自动化测试实战【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/MaestroMaestro 是一个开源的跨平台 UI 自动化测试框架用 YAML 写测试流程同一份脚本可以同时在 Android、iOS 和 Web 上运行。这篇文章不罗列概念直接走一遍完整工作流从给手机银行 App 写第一条转账回归用例到处理不稳定的元素、拆分子流程最后把测试挂上 CI 并产出报告。两分钟完成安装Java 17 加一条命令️ 需求方提的要求很直接每次发版前转账主流程必须自动过一遍Android、iOS 和网页端都要覆盖。动手之前先把工具装好。Maestro 只依赖一个前提Java 17 或更高版本。确认完版本后一条脚本就能完成安装macOS、Linux 和 WindowsWSL都支持java -version # 确认是 17 或更高 curl -fsSL https://get.maestro.mobile.dev | bash maestro --version # 出现版本号即成功装完后建议跑一下maestro download-samples它会拉下一组现成的演示应用和流程脚本。不写一行代码就能看完整条命令执行的效果比翻文档快得多。最小脚本8 行 YAML 盯住转账主流程先别管什么条件分支把主路径跑起来。一个 YAML 文件分两段头部声明被测应用和标签---之后是逐步执行的命令列表。这段脚本模拟一次完整转账清空登录态、录入收款人、提交、验证结果appId: com.mybank # 以网商银行为例 tags: [transfer, smoke] --- - launchApp: clearState: true # 从干净环境开始避免脏数据 - tapOn: 转账 - tapOn: 收款人 - inputText: alicemybank.com - inputText: 500 - tapOn: 确认转账 - assertVisible: 转账成功 - assertNotVisible: 转账失败 # 负向断言同样重要执行就一句话maestro test transfer.yaml。命令是逐行解释执行的改完立即生效不需要编译。定位元素默认用界面上可见的文本这正是它比传统选择器抗改版的原因——文案没变脚本就不用动。别写 sleep让脚本自己等元素出现内置等待轮询 金融类应用里接口响应慢是常态确认转账按钮要点两次才出结果。传统脚本只能塞 sleep 硬扛而 Maestro 的每个命令都自带轮询tapOn会等元素可点击再动手assertVisible会持续检查直到超时。页面慢一拍脚本只是多等一会儿而不是直接失败。超时、模糊匹配与可选元素遇到个别特别慢的节点或带动态文案的按钮可以显式控制等待行为。下面的例子覆盖三种常见情况- assertVisible: text: 转账成功 timeout: 15000 # 断言最长等 15 秒 - tapOn: text: contains: 转账 # 模糊匹配金额嵌在文案里也不炸 optional: true # 元素可能不存在找不到就跳过还有个别节点抖得厉害就用retry包一层指定maxAttempts和interval自动重试比全局拉长超时更精准。流程变长之后子流程复用加条件分支重复步骤只写一遍转账、还款、缴费每个用例开头都是同一段登录。重复的段落抽成子流程比如subflows/login.yaml主流程里一行runFlow: subflows/login.yaml引用即可。以后登录页改版只改一个文件。风控弹窗才处理银行 App 有个特点风控弹窗出现概率不定。用if加visible条件弹窗出现了才走处理分支没有就断言正常页面- runFlow: subflows/login.yaml - if: visible: 安全验证 # 风控弹窗出现才处理 then: - inputRandomNumber: into: 验证码 min: 100000 max: 999999 else: - assertVisible: 转账金额需要更灵活的动态数据时还能在流程里跑一段 JSrunScript: scripts/genAmount.js生成随机金额再用${output.amount}注入后面的inputText。仓库自带用例e2e/workspaces/wikipedia/里就有这个写法可以直接参考。同一份脚本跑 Android、iOS 和 Web到了这一步跨平台几乎不用额外付出。Android 端通过设备上的驱动 APK 操作界面iOS 端走 XCUITestWeb 端则直接驱动 Chrome。三份 YAML 语法完全一致唯一区别在头部移动应用写appId网页写url。仓库自带的这个 Web 流程可以直接运行验证浏览器端的登录断言链路url: https://www.saucedemo.com/ # Web 端用 url 代替 appId tags: [web, smoke] --- - launchApp - tapOn: Username - inputText: standard_user - tapOn: Login - assertVisible: Products三端行为偶有差异细节可以看仓库 maestro-client 的驱动层AndroidDriver、IOSDriver、WebDriver各自封装了平台怪癖脚本层面感知不到。挂上 CI 与边界哪里好用哪里别硬套 回归要可信就得进 CI。每台执行机起好模拟器或浏览器后maestro test指向流程目录即可。用例失败时 Maestro 会自动留截图和录屏报告模块把这些产物汇总成可读的执行报告不用自己拼。仓库自己的 e2e 套件有个值得抄的细节见 e2e/workspaces/每条流程都打passing或failing标签负向用例预期就是失败跑测时反转校验结果。这样能防住框架永远报通过这种致命 bug。边界也说清楚它不做性能压测封闭 WebView 内部可能只能靠id定位涉及真实资金的风控验证建议用真机和脱敏数据复杂业务规则断言下沉到接口层更稳。把 Maestro 定位成端到端冒烟和主路径回归的守门人它的工作就做得很扎实。【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考