十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

5 分钟跑通 Maestro:把移动端 UI 自动化测试写成一份 YAML 剧本

5 分钟跑通 Maestro:把移动端 UI 自动化测试写成一份 YAML 剧本 5 分钟跑通 Maestro把移动端 UI 自动化测试写成一份 YAML 剧本【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro当你的回归测试清单已经长到 200 条而每次发版还要人工在真机上逐屏点一遍应用时就该把这件事交给脚本了。Maestro 是面向 Android、iOS 和 Web 的开源移动端 UI 自动化测试框架把操作写成纯文本 YAML由解释器在模拟器、仿真器或浏览器上逐行执行写完即跑不需要任何编译步骤。这篇 Maestro 教程直接上手先把环境跑通再讲透剧本结构最后以仓库自带的真实案例为蓝本走一遍从变量注入到断言的完整链路。先把环境装好一条 curl 完成 Maestro 安装步骤前置条件只有一个Java 17 或更高版本。用下面这条命令确认当前 JDKjava -version如果输出显示主版本低于 17先换好 JDK 再继续后面的安装脚本会直接依赖它。在 macOS、Linux 或 Windows WSL 上一条 curl 完成安装默认装到$HOME/.maestrocurl -fsSL https://get.maestro.mobile.dev | bash执行后终端会依次输出检查是否已用 brew 装过 → 校验 java、unzip 等依赖 → 下载最新安装包到临时目录 → 校验完整性、解压并替换旧版本 → 最后把 bin 目录追加进 PATH。装完开个新终端敲maestro --help能打印出完整命令树就成了。⚠️ 若终端仍提示找不到命令手动补一句export PATH$PATH:$HOME/.maestro/bin再试。仓库里也自带一份安装脚本scripts/install.sh如果本地网络不便直连官方下载地址可以把仓库克隆下来后改用这份脚本。心智模型一条 YAML 测试流就是按行执行的操作剧本先打个比方flow 就是一份操作剧本解释器从上往下逐行读每读一行就在屏幕上做对应动作。结构上每条 YAML 测试流都由三层组成头部appIdAndroid 包名 / iOS bundle idWeb 场景换成url再配上tags便于分类筛选分隔线---头部与脚本体的分界少了它解析直接报错脚本体命令列表一行一个动作-开头重点强调一处解释器在执行每行前都会轮询等待目标元素出现页面没渲染好它自己会等你不用满屏手写sleep()。另外 flow 是解释型格式改一行就能立刻重跑迭代成本接近为零。核心四步加两个扩展Maestro 命令参考速查表起步阶段只需要记住四步launchApp启动、tapOn点击、inputText输入、assertVisible断言。完整速查如下命令作用最小示例launchApp启动应用支持clearState: true清状态冷启- launchApptapOn点击按 text / id / index 定位- tapOn: LogininputText向当前输入框写入文本- inputText: adminassertVisible断言元素可见支持正则- assertVisible: .*Home.*assertNotVisible断言元素不存在- assertNotVisible: ErrorrunFlow引用另一份 YAML 测试流- runFlow: sub.yamlrunScript执行 JS 脚本把结果写入output变量- runScript: q.jsback/eraseText按返回键 / 清空当前输入- back单独精析tapOn它有两种写法值直接是字符串时按文本匹配值是对象时可以精确定位。仓库示例里维基百科 Android 版的搜索入口就是- tapOn: id: org.wikipedia:id/search_container这里的 id 采用包名:资源类型/名称的形式是 Android 视图定位的标准写法。另一个高频字段是optional: true——元素不出现就静默跳过、不算失败专门用来对付时有时无的弹窗。Maestro 实战跑通维基百科的搜索链路仓库的 示例测试流目录 里就躺着 wikipedia/android-advanced-flow.yaml覆盖跳过引导页、进搜索、JS 注入变量、断言全链路。下面是一个等价的独立可运行版本不依赖子流程文件appId: org.wikipedia tags: - android - search --- - launchApp: clearState: true - tapOn: id: org.wikipedia:id/fragment_onboarding_forward_button - tapOn: id: org.wikipedia:id/fragment_onboarding_forward_button - tapOn: id: org.wikipedia:id/fragment_onboarding_done_button - tapOn: id: org.wikipedia:id/search_container - runScript: getSearchQuery.js - inputText: ${output.result} - assertVisible: ${output.result}这样写的原因clearState: true强制每次冷启动引导页必然出现后续点击才稳定runScript那一行则是剧本里带变量的关键。旁边的 JS 文件只有一行——把搜索词写进output.resultYAML 里就能用${output.result}取用output.result qwerty;输入和断言两行都复用这同一个变量改一处即可不会出现两处不同步。运行命令假设模拟器已启动没有的话先maestro start-device拉起maestro list-devices查看当前设备maestro test wikipedia_search.yaml流程结束后终端会逐行给出通过或失败并生成执行报告失败时直接看报错行号和当时的界面状态定位很快。顺带一提 Web 场景同一套命令原样可用头部把appId换成url指向网页即可可参考 e2e/workspaces/web/simple.yaml 这份登录下单的完整用例。CI 上总挂稳定性调优与排障三件套用例一不稳定先别急着怀疑工具按顺序排查三个高频原因弹窗干扰部分机型或版本会多弹营销窗用条件分支处理——visible命中才点并写label说明用途可容忍元素非关键步骤挂上optional: true出现就处理不出现也放行页面渲染慢在 flow 头部调大waitTimeout单位毫秒给元素多留一点出现时间比如仓库里维基百科 iOS 版对Year in Review弹窗的处理方式- runFlow: when: visible: Explore your Wikipedia Year in Review commands: - tapOn: Done label: Dismiss Year In Review popup, if visible条件命中才执行内部命令否则整段跳过两种设备形态下都不会误报。还是挂的话上排障三件套maestro check-syntax先校验脚本语法maestro print-hierarchy把当前界面视图树完整打出来确认目标元素到底在不在、id 是否拼对maestro query Login直接查看某个元素的详细字段。想要更直观maestro record wikipedia_search.yaml能把整次执行录成视频maestro studio则打开桌面 IDE 可视化检查元素。这是录制功能自带的默认背景板视频与 YAML 逐行对照哪一步跑偏了基本一眼就能看出来。下一步行动清单curl 装好 Maestromaestro --help确认命令树正常把上面的维基百科 flow 拷出来改一下 JS 变量完整跑通一次养成习惯跑之前maestro check-syntax过一遍挂了就maestro print-hierarchy先看界面把e2e/目录整体翻一遍看官方示例的组织方式web 用例、subflows、scripts 都有覆盖高频追问为什么选它而不是 AppiumMaestro 的设计参考了 Appium、Espresso、UIAutomator、XCTest、Selenium、Playwright 这六套体系的经验但去掉了驱动配置和代码编译YAML 写完即跑内置的轮询等待已经消化掉大部分抖动。手头没有设备怎么办maestro start-device可以直接拉起对应平台的模拟器或仿真器Web 用例更简单有个浏览器就能跑。想看更多真实样例克隆仓库直接进e2e/workspaces/git clone https://gitcode.com/gh_mirrors/ma/maestro克隆后打开e2e/workspaces/wikipedia/下的每个 yaml那套就是官方自己日常使用的 UI 自动化测试回归集照着改即可。【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表