Maestro 从零到实战:用 YAML 测试流搞定移动端 UI 自动化 Maestro 从零到实战用 YAML 测试流搞定移动端 UI 自动化【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro你有没有过这种时刻UI 改完一行布局手动把 App 点一遍十个页面改完就得重复十遍。更烦的是今天能点的按钮明天换个分辨率又对不上了。Maestro 就是为这类重复劳动而生的移动端 UI 自动化测试框架——把验证过程写成一份 YAML 文件一条命令反复跑。先认识一下 MaestroMaestro 的定位一句话用人类可读的 YAML 描述 UI 操作在 Android、iOS 和 Web 上解释执行。它不需要你写 Java 或 Swift 测试代码也不需要编译改完 YAML 直接重跑即可对前端开发、QA、甚至不写代码的产品同学都很友好。几个决定体验的特性先看这张表特性说明跨平台一套语法Android、iOS、Web 共用同一套 YAML 指令只换目标应用解释型执行测试流无需编译改完即跑迭代成本极低内置智能等待找元素时自动重试等待不需要手动 sleep 兜底单脚本安装一条 curl 命令装好默认落在~/.maestro可视化辅助Maestro Studio 提供流构建器和元素检查边看边写一条命令装好 Maestro环境检查和安装合并成四步走完确认本地 Java 是 17 或更高版本这是硬依赖java -version版本达标后运行官方安装脚本macOS、Linux、Windows WSL 通用curl -fsSL https://get.maestro.mobile.dev | bash脚本会自动检查java、unzip、curl是否齐全缺哪个会明确提示随后下载最新版压缩包、校验完整性、解压到~/.maestro。如果提示 homebrew 版本冲突用brew upgrade maestro更新或先brew uninstall maestro再重跑脚本。打开新终端或手动执行export PATH$PATH:$HOME/.maestro/bin运行maestro看到帮助信息即安装成功。核心指令速查跑流之前先认识下面这几条最常用的指令指令作用一行 YAML 示例launchApp启动目标应用- launchApptapOn点击元素支持文本/ID 定位- tapOn: LogininputText在已聚焦的输入框打字- inputText: maestroassertVisible断言元素可见- assertVisible: Credentials are correctscroll滚动页面- scrollrunFlow复用另一份 YAML 子流程- runFlow: subflows/onboarding-android.yaml两个值得多花一分钟的指令tapOn既支持字符串简写- tapOn: Login也支持结构化写法可以按text、id定位用index: 1区分同文本的多个元素加optional: true则元素缺失时不报错。仓库里 e2e/workspaces/wikipedia 的android-advanced-flow.yaml就是典型的组合用法。launchApp应用侧用appId指定包名Web 侧换成url指定地址其余语法完全一致。加clearState: true可以清空应用状态保证每次从干净页面开始。跑通你的第一个测试流新建一个wikipedia_test.yaml内容极简appId: org.wikipedia tags: - android - passing --- - launchApp文件头部是元信息appId指向被测应用tags用于分类筛选---之后逐行写测试步骤。然后执行maestro test wikipedia_test.yaml应用被拉起、流程跑完且无报错这条测试就通过了。仓库内置的 e2e/ 目录下有更多现成样例可以照着改。再上一个稍完整的例子模拟一次登录表单填写。Web 项目把appId换成url即可指令本身零改动url: https://www.saucedemo.com/ tags: - passing - web --- - launchApp: clearState: true # 每次从干净状态启动 - tapOn: Username - inputText: standard_user - tapOn: Password - inputText: secret_sauce - tapOn: text: Login index: 1 # 同文本多个元素时取第二个 - assertVisible: text: Products optional: true # CI 上偶发加载慢缺失不致命tags给用例打了分类标签之后可以按标签批量筛选执行clearState保证每次运行互不干扰optional给偶发不稳的断言留了余地。让 flaky 用例变稳UI 自动化最容易头疼的就是本地能过、CI 抽风。三条实用建议都来自仓库里真实测试流的写法给偶现元素挂optional: true。onboarding 引导页的跳过按钮不是每次都会出现写成可选点击后流程就不会因为它缺失而整体失败。调整步骤顺序替代 sleep。优先把先断言上一个状态、再操作下一个元素的顺序写对——assertVisible本身带等待它通过就意味着 UI 就绪了多数场景根本不需要手动延时。用 Maestro Studio 看现场。流在 CI 上失败时与其猜不如在 Studio 里逐帧查看元素树和截图定位到底是元素变了还是时序问题再把结论固化回 YAML。上手自检清单java -version输出 17 及以上maestro命令能打印帮助信息至少一台 Android 模拟器或真机处于已连接状态独立跑通过maestro test测试报告显示 passed自己的第一份 YAML 里写入了tags知道它的筛选用途能区分tapOn的字符串简写和text/id/index结构化写法理解optional: true和clearState: true分别解决什么问题【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考