尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Maestro移动UI自动化完整指南:五分钟内跑通第一个E2E流程

Maestro移动UI自动化完整指南:五分钟内跑通第一个E2E流程 Maestro移动UI自动化完整指南五分钟内跑通第一个E2E流程【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/MaestroMaestro 是一个开源移动UI自动化测试框架覆盖 Android、iOS 和 Web 三个平台。测试写成 YAML 流程文件用一条命令在模拟器、真机或浏览器上执行。本文从安装、写流程到接入 CI给出可以直接复制执行的步骤。 Maestro移动UI自动化解决什么场景多端应用的 E2E 测试过去通常要维护三套代码Android 用 EspressoiOS 用 XCTestWeb 用 Selenium。同一场景要写三遍还要处理等待和重试。Maestro 的思路是只用一套 YAML 语法描述流程执行引擎按平台分发。Android 端由 maestro-client/ 里的驱动实现接管Web 端基于 Selenium项目锁定 4.43.0 版本。另一个痛点是测试不稳定。动态 UI 里手动sleep()既慢又不可靠。Maestro 的每条命令自带等待逻辑元素没出现会按超时重试而不是立即报错。⚡ 三步完成Maestro安装与首次运行第一步确认环境并安装 CLI。Maestro 要求 Java 17 或更高版本java -version curl -fsSL https://get.maestro.mobile.dev | bashmacOS、Linux、Windows WSL 都用这一条命令。装完后maestro --version能输出版本号即成功。第二步写一个最小流程文件flow_contacts_android.yaml测试系统联系人应用新建联系人appId: com.android.contacts --- - launchApp - tapOn: Create new contact - tapOn: First Name - inputText: John - tapOn: Save第三步启动一个装了联系人应用的 Android 模拟器执行maestro test flow_contacts_android.yaml终端逐行打印每条命令的执行结果全部通过则退出码为 0。这就是一个可验证的起点流程跑通退出码为 0。⚙️ Maestro YAML流程核心机制速览元素定位text、id 与 optional 容错每条命令通过选择器找元素支持text、id、index等字段组合。找不到的元素默认失败标记optional: true则跳过。仓库里的 e2e/workspaces/wikipedia/onboarding-android.yaml 就混合用了两种定位- tapOn: id: org.wikipedia:id/fragment_onboarding_forward_button - tapOn: text: Non existent view optional: trueid定位不受界面语言影响跨环境更稳定optional用于处理版本间可能不存在的视图。子流程、脚本与环境变量长流程用runFlow拆成子文件复用runScript执行 JS 生成动态数据${...}注入环境变量或脚本输出。官方样本 e2e/workspaces/wikipedia/android-advanced-flow.yaml 的结构如下- runFlow: subflows/onboarding-android.yaml - runScript: scripts/getSearchQuery.js - inputText: ${output.result} - launchApp: clearState: truerunFlow把引导页操作收进subflows/目录主流程保持可读clearState: true重启应用并清空状态保证每次执行从初始界面开始。命令模型定义在 maestro-orchestra-models/src/main/java/maestro/orchestra/MaestroCommand.kt想确认某条命令的字段时查这里即可。 两个真实场景跑通搜索流程与Web登录流程场景一Android 端 Wikipedia 搜索背景需要验证搜索框输入到结果展示的完整链路且搜索词每次要不同。操作使用上面提到的 advanced flow。它先runFlow走引导页再点search_container通过runScript生成随机搜索词inputText输入后assertVisible断言该词出现在结果页。结果整个流程带android和passing标签在 e2e 套件中按通过用例断言执行每次运行搜索词不同但断言逻辑不变。场景二Web 端 saucedemo 登录背景同一个团队还要测 Web 应用希望不换语法。操作Web 流程把appId换成url字段其余命令完全一致。样本 e2e/workspaces/web/simple.yaml 登录 saucedemo断言商品列表可见后点进商品页。本地运行前先起静态服务e2e/ensure_fixtures maestro --platform web test e2e/workspaces/web/simple.yaml结果ensure_fixtures在 7357 端口启动 fixture 服务并等待其真正应答避免流程在服务器未就绪时以元素未找到报错。CI 环境加--headless参数即可无头运行。 仓库关键目录对照表目录路径一句话职责maestro-cli/CLI 入口test、report等命令与 MCP 实现maestro-orchestra/流程解析与执行引擎YAML 到设备操作的调度maestro-orchestra-models/命令、选择器、配置等 YAML 模型定义maestro-client/驱动层Android、iOS、Web 三端设备通信e2e/workspaces/官方样本流程wikipedia、web、simple_web_viewe2e/框架自测脚本run_tests按平台分跑全部用例框架本身用 Kotlin 2.2.0 构建模块依赖统一在 gradle/libs.versions.toml 中声明。 把Maestro移动UI自动化接入CI流水线最小接入方式是 GitHub Actions 三步检出代码、装 CLI、跑流程。退出码决定构建成败failing标签的反向断言由 e2e 脚本 e2e/run_tests 处理保证该失败的用例通过也会被识别为故障name: Maestro Tests on: [push] jobs: e2e: runs-on: ubuntu-latest steps: - uses: actions/checkoutv3 - name: Install Maestro run: curl -fsSL https://get.maestro.mobile.dev | bash - name: Run flows run: maestro test ./tests/本地想跑框架自带的全套 e2e按 e2e/README.md 的顺序执行download_apps、install_apps、run_tests android|ios|web即可。✅ 从这里开始三条可立即执行的动作装好并验证执行安装命令用maestro test跑通一个 5 行流程确认退出码为 0读一遍样本对照 e2e/workspaces/ 里的 wikipedia 和 web 两组流程弄清runFlow、optional、${...}三种写法接入构建把上面 11 行的 Actions 配置放进你的仓库先让一条登录流程在 CI 里稳定跑绿【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表