用途:这是面向 React Native/Expo 应用的 Maestro 移动端端到端(E2E)测试技能,Maestro 是基于声明式 YAML 的移动测试框架,具备自动等待、内置重试与快速执行能力,官方称其比 Detox 或 Appium 更适合 React Native 场景。
主要能力:
- 声明式 YAML 测试流程,无需命令式测试代码;
- 自动等待与内置重试,减少测试不稳定;
- Maestro Studio 交互式测试构建器;
- 子流程(sub-flows)复用,避免重复;
- GraalJS 运行时脚本,可做 HTTP 调用与数据处理;
- Maestro Cloud 在 CI 中测试真机。
选择器策略:多语言/i18n 项目推荐使用 id(testID)作为选择器,单语言项目可用文本标签,系统弹窗只能使用文本。React Native 中通过 testID 属性配合 ID 选择器;命名约定为 {component}-{action/type}[-{variant}]。
关键测试模式:
- 认证预检:用零尺寸的 auth-loaded 标记确认认证状态已解析,再用 extendedWaitUntil 等待;
- 自适应测试:用 runFlow 的 when 条件兼容已登录与未登录两种状态;
- 乐观更新验证:用较短超时(如 3000ms)确认 UI 在服务端响应前已变化;
- 原生弹窗:先用 extendedWaitUntil 等待状态变化,再用 optional 点击 OK;
- 深链(Expo):使用 app.json 中的 scheme,如 myapp://,而非 bundle ID;
- 平台分支:通过 platform: ios/android 分别运行流程;
- 环境变量:在 env 中定义并用 ${VAR} 引用;
- 选择器状态属性:enabled、checked、selected、focused;
- 相对位置选择器:below、above、leftOf、rightOf、childOf、containsChild、containsDescendants。
安装与运行: curl -Ls "https://get.maestro.mobile.dev" | bash brew install openjdk@17 export JAVA_HOME=/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home maestro test .maestro/smoke-test.yaml maestro test --debug .maestro/smoke-test.yaml maestro studio
认证测试:通过邮件捕获服务(如 Mailpit、MailHog、Ethereal)用 GraalJS 获取 OTP 验证码。注意 Maestro 使用 GraalJS,不支持 async/await 与 fetch(),应使用 http.get()、http.post()、json() 与 output.VAR。
重要限制与坑点:
- clearState 不会清除 iOS 钥匙串,认证令牌可能残留,该问题仅限 iOS,Android 会完全重置;
- iOS 冷启动可能触发 XCTest kAXErrorInvalidUIElement 崩溃,可在 launchApp 后加一次短暂下滑;
- 依赖本地 API 的应用需先启动完整服务或模拟服务,否则相关页面会静默失败;
- 登录前后 tab 栏不同时会导致选择器失败,应仅断言两种状态共有的 tab 或使用条件流程。
适用场景:React Native/Expo 应用的冒烟测试、认证流程、乐观更新、截图流程与 CI 真机测试等移动端 E2E 场景。资料未提供价格与具体商业条款信息。