You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用单个Maestro Flow运行两款独立App ID应用或共享子流程?

解决Maestro跨iOS/Android应用共享流程或单Flow适配双端的方案

方案1:用环境变量动态指定App ID

  • 主Flow不硬编码App ID,通过环境变量传递,子流程完全不指定appId,只保留通用操作步骤
  • Android端主Flow示例:
appId: ${APP_ID}
---
- runFlow: ./common-subflow.yaml
  • iOS端主Flow示例:
appId: ${APP_ID}
---
- runFlow: ./common-subflow.yaml
  • 通用子流程common-subflow.yaml示例:
---
- tap: "登录按钮"
- inputText:
    text: "test@example.com"
    selector: "用户名输入框"
  • 运行时通过命令行传入对应环境变量:
    • Android:maestro test -e APP_ID=com.your.android.app main-flow.yaml
    • iOS:maestro test -e APP_ID=com.your.ios.app main-flow.yaml

方案2:通过Flow参数传递端特定配置

  • 主Flow根据平台定义App ID和端专属选择器,将这些作为参数传给子流程,子流程通过参数引用实现跨端兼容
  • Android端主Flow示例:
appId: com.your.android.app
---
- runFlow:
    file: ./common-subflow.yaml
    params:
      LOGIN_BTN: "//android.widget.Button[@text='登录']"
      USERNAME_INPUT: "//android.widget.EditText[@hint='用户名']"
  • iOS端主Flow示例:
appId: com.your.ios.app
---
- runFlow:
    file: ./common-subflow.yaml
    params:
      LOGIN_BTN: "//XCUIElementTypeButton[@name='登录']"
      USERNAME_INPUT: "//XCUIElementTypeTextField[@name='用户名']"
  • 子流程引用参数示例:
---
- tap: ${LOGIN_BTN}
- inputText:
    text: "test@example.com"
    selector: ${USERNAME_INPUT}

方案3:单Flow内置条件判断适配双端

  • 利用Maestro内置的isAndroid/isIOS变量,在同一个Flow中根据运行环境动态切换App ID和操作逻辑
appId: ${isAndroid ? 'com.your.android.app' : 'com.your.ios.app'}
---
- if: ${isAndroid}
  then:
    - tap: "//android.widget.Button[@text='登录']"
  else:
    - tap: "//XCUIElementTypeButton[@name='登录']"
- inputText:
    text: "test@example.com"
    selector: ${isAndroid ? "//android.widget.EditText[@hint='用户名']" : "//XCUIElementTypeTextField[@name='用户名']"}
  • 运行时无需额外参数,Maestro会自动识别当前设备系统,执行对应分支的操作

内容的提问来源于stack exchange,提问作者Andrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 10:47:45