
Maestro移动UI自动化测试3分钟从零跑通第一条YAML流程【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro当你想验证 App 里点按钮→出结果这条链路通常要先配好真机、写测试代码、再盯着日志看结果。Maestro 把这件事压缩成一段 YAML几行命令描述操作它替你执行并逐步给出判定。它到底能帮你做什么用YAML命令替代测试代码场景每次发版前都要重复登录→下单→返回这套操作。 做法写一个.yaml文件每行一个动作比如launchApp启动应用、tapOn: 搜索点击按钮、assertVisible: 购物车断言页面出现某文本。 效果文件不需要编译改完直接maestro test重跑几秒内重新执行迭代远快于写单元测试。自动等待替代sleep场景页面有网络加载固定sleep要么浪费时间要么赶不上加载。 做法assertVisible这类命令会持续轮询元素出现即通过超时才判失败默认等待上限可调。 效果网络波动导致的偶发失败大幅减少同一脚本在不同速度的设备上都能稳定跑。一套脚本覆盖Android、iOS和Web场景同一个功能要分别测 Android 和 iOS 版本。 做法命令语法相同换掉文件头的appId或url即可仓库里 e2e/workspaces/web/ 和 e2e/workspaces/wikipedia/ 目录放了现成样例可以直接抄结构。 效果一份流程逻辑维护两个平台不用各学一套 API。快速上手 环境要求一句话系统装有 Java 17 及以上java -version检查其余靠下面的命令装。git clone https://gitcode.com/GitHub_Trending/ma/maestro cd maestro ./gradlew :maestro-cli:installDist构建完成后CLI 产物在maestro-cli/build/install/maestro/bin/下。把它加进 PATH终端里敲maestro --version能看到版本号就说明安装成功。不想自己构建的话仓库自带 scripts/install.sh 也提供了一键安装。跟着一个真实任务走一遍 我们用仓库里的 Web 登录样例参考 e2e/workspaces/web/simple.yaml走一遍完整流程。任务用账号密码登录测试站点确认商品页出现。第一步建一个login.yaml内容如下- launchApp - tapOn: Username - inputText: standard_user - tapOn: Login - assertVisible: Products第二步执行maestro test login.yaml。终端会逐行打印每一步的结果看到每行命令后跟着绿色PASS说明该步成功最后输出FLOW PASSED即整条流程通过若某步失败该行标红并自动截图存到项目下.maestro/screenshots/目录仓库里 e2e/demo_app/.maestro/screenshots/ 就留着这类断言失败的截图点进去看失败时画面长什么样很直观。逐条理解这五行命令作用launchApp启动文件头声明的应用appId或urltapOn: Username按可见文本找到元素并点击找不到就等超时报错inputText向当前焦点的输入框写入文本assertVisible: Products断言页面出现该文本是登录成功的判据第三步把验证做严一点。把最后一行换成两条断言assertVisible: Products和assertNotVisible: Login登录框应已消失。两条都过才算真正跳转成功。进阶技巧与避坑点击可能静默失败。现象tapOn没报错但页面根本没跳转流程卡住。做法包一层retry重试再跟一条assertNotVisible确认旧元素已消失。仓库里 e2e/workspaces/simple_web_view/webview.yaml 就是这个写法注释里还解释了tap 可能被加载中的 runner 吞掉的根因。别手写 sleep用extendedWaitUntil显式等待。现象某个页面特别慢默认超时不够。做法用extendedWaitUntil指定等哪个元素可见 自定义超时例如该样例文件里的timeout: 90000。判断成功的标志是输出里出现你写的label文案失败时会给出等待超时而不是笼统的报错。文本重名时改用更精确的选择器。现象页面有两个取消按钮tapOn: 取消点到第一个就停了。做法在 flow 里给tapOn加条件如按id定位或组合多个条件缩小范围也可以传正则表达式做模糊匹配比如assertVisible: .*sleek.*能匹配任意含 sleek 的行。公共步骤抽成子流程。现象每个流程开头都要重复清状态→启动→过引导页。做法把这段单独存成一个 yaml用subFlow引用。e2e/workspaces/wikipedia/subflows/ 里就分平台存了launch-clearstate-android.yaml这类复用片段。常见问题Q断言失败怎么定位是哪一步、当时屏幕是什么样看终端输出定位到标红的那一行同一时刻的截图在项目根目录.maestro/screenshots/下失败时一定会生成直接打开对照即可。Q改了一行 YAML需要重新编译什么吗不需要。flow 是解释执行的保存后重新maestro test即可这也是它比先编译测试再跑的框架快的原因。QAndroid 和 Web 的 flow 有什么差别只有头部不同Android/iOS 写appId: com.android.contactsWeb 写url:。命令本体tapOn、inputText、断言完全一致。Q终端提示 java 相关错误先跑java -version。低于 17 会导致 CLI 构建或运行失败升级到 17 或 21 再执行安装脚本即可。写在最后Maestro 适合需要少写代码、多跑回归的移动端和 Web 团队以及想先建立 E2E 测试习惯的新手。下一步建议直接打开 e2e/workspaces/ 目录挑一个最接近你业务的样例改造成自己的第一条正式流程。【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考