Maestro E2E 自动化入门:如何用 10 分钟跑通第一个跨平台登录用例
【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro
如果你的团队在给一个应用做回归测试,而 Android 和 iOS 两端的用例各写一套,改一个 bug 就要同步维护两份脚本,那 Maestro 值得试试。它是一个开源的 E2E 自动化测试框架,同一个 YAML 用例可以直接跑在 Android、iOS 和 Web 上。下面带你把"安装 → 跑通登录用例 → 处理失败"这件事完整走完。
安装与版本验证
唯一的依赖是 Java 17 或更高版本,装好之后在 macOS、Linux 或 Windows(WSL)上直接执行:
curl -fsSL "https://get.maestro.mobile.dev" | bash export PATH="$PATH:$HOME/.maestro/bin" maestro --version能打印出版本号,说明安装成功。
登录用例完整写法
把下面的内容保存为login.yaml。从上往下读,就是"启动应用 → 输入凭据 → 验证结果"的操作顺序:
appId: com.example.shop --- - launchApp: clearState: true # 每次重置到初始状态 - tapOn: "登录" - inputText: "standard_user" - inputText: "secret_sauce" - tapOn: "登录" - assertVisible: "我的订单"一条命令运行:
maestro test login.yaml有两个点值得注意。第一,clearState: true会在启动前清空应用状态,避免上一次已登录的数据污染本次运行。第二,全程没有一行 sleep:Maestro 会持续等待目标元素出现再执行下一步,页面加载慢它只会多等一会,而不会直接报错。最后一条assertVisible找不到"我的订单"时,命令返回非零退出码,可以直接接进 CI 判断成败。
异常与 Web 变体用例怎么写
把用例反过来,验证负向流程——账号被锁定时应出现提示。与正向用例的差异只在输入和断言:
appId: com.example.shop --- - launchApp: clearState: true - tapOn: "登录" - inputText: "locked_out_user" - inputText: "secret_sauce" - tapOn: "登录" - assertVisible: "您的账户已被锁定"再把目标从手机换成 Web:只需把appId换成url,其余语法完全一致。仓库 e2e/workspaces/web/ 里有一份现成的登录用例:
url: https://www.saucedemo.com/ --- - launchApp - tapOn: Username - inputText: standard_user - inputText: secret_sauce - tapOn: Login - assertVisible: Products同样的登录操作,两端只有一行差异:启动目标怎么写。这也是你写多平台用例时的基本心智——命令不变,只改头部声明。
元素定位失败的处理 🔧
运行中出现Element not found报错,通常是目标文案变了。把精确匹配放宽为包含匹配:
- tapOn: text: contains: "登录"有些元素只在部分场景出现(比如广告横幅),不该因为它缺席让流程失败,加optional: true即可:
- tapOn: text: "广告横幅" optional: true断言偶发超时、重试才能过的时候,用retry包裹,最多试 3 次、间隔 1 秒:
- retry: maxAttempts: 3 interval: 1000 command: assertVisible: "加载完成"如果想弄清引擎是如何实现这些等待与重试的,可以看看核心执行引擎所在的 maestro-orchestra/ 目录。
适不适合你的团队
如果同一批用例要覆盖多个平台、人手有限,还希望测试脚本能被非测试同学看懂,Maestro 的 YAML 流式写法很合适。反过来,如果你要做底层手势组合、验证应用内部状态或做性能测量,YAML 命令的粒度就不够了,老老实实用原生框架。
【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考