尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Maestro 跨平台 UI 自动化测试实战:一份 YAML 脚本一次跑通三端
Maestro 跨平台 UI 自动化测试实战一份 YAML 脚本一次跑通三端【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro这是一份面向 UI 测试开发者的 Maestro 实战指南。Maestro 用 YAML 描述测试步骤同一份脚本能在 Android、iOS、Web 三端运行并内置智能等待。读完你能独立做完四件事验证环境是否就绪、写出第一条可运行的登录用例、把偶发断言拉稳、看懂元素定位失败时的排查路径。全文按先建立执行模型再跑绿最后排查的顺序展开命令与字段名保留英文原形。内容预览先建立执行模型理解脚本为什么能跨端、等待为什么不用手写 sleep三条命令完成环境自检把一次真实登录行为翻译成一条 Flow元素定位从宽到紧的三层条件用 retry 与 timeout 两个旋钮拉稳偶发断言appId 与 url同一份逻辑的两种写法跑绿之前过一遍自检清单它凭什么能一份脚本跑三端在动手前先建立一个能预测的执行模型。你只需要记住两件事流程是被解释执行的元素定位走的是无障碍层而不是选择器路径。理解这两点后面遇到的多数为什么都有答案。脚本被解释执行不经过编译一条 Flow 就是一个 YAML 文件逐行解释、改完即跑。没有构建步骤也就没有改了没生效的错觉。这让迭代循环很短编辑、运行、看结果、再编辑。定位走无障碍层不写选择器路径你写的是文本为『登录』的元素而不是//LinearLayout[2]/Button这种脆弱路径。UI 改版只动内部结构时只要文本没变脚本就不需要跟着改。跨端的含义也在这里逻辑只写一遍元素在各端找得到就行。[!TIP] 判断一条脚本抗不抗改看它依赖的是文本与语义还是层级深度。越贴近用户看到的文本越稳定。环境自检三条命令确认能开工前置条件只有一个Java 17 或更高版本。用java -version确认版本号低于 17 就先升级。macOS、Linux、WindowsWSL都支持。下面三步跑官方安装脚本、把安装目录加入PATH、用版本命令确认能打印出来。看到版本号环境就算就绪。java -version curl -fsSL https://get.maestro.mobile.dev | bash maestro --version如果maestro --version报 command not found通常是 PATH 没生效补一行export PATH$PATH:$HOME/.maestro/bin再试一次即可。把登录行为翻译成一条 Flow 一条用例就是一次真实登录的逐字记录。头部声明appId移动端包名和tags---之后是逐步执行的命令。先认清四种基本动作后面所有用例都由它们组合而成。命令的四种基本动作命令作用launchApp启动应用加clearState: true可清状态tapOn点击指定文本的元素inputText输入文本assertVisible断言元素可见找不到则失败用这四种动作写出的最小登录用例如下成功标准是最后一条assertVisible变绿appId: com.example.ecommerce tags: - login - positive --- - launchApp: clearState: true - tapOn: 我的账户 - inputText: standard_user - inputText: secret_sauce - tapOn: 登录 - assertVisible: 我的订单分支用 if 处理验证码流程里要做条件判断用if / then / else。例如仅当验证码元素可见时输入验证码否则点击跳过验证。异常路径同理把输入换成锁定账号、末尾断言错误提示即可两条用例步骤结构相同只是数据不同。- if: 验证码 then: - tapOn: 验证码 - inputText: 123456 else: - tapOn: 跳过验证元素定位从宽到紧的三层条件 Element not found 通常不是元素不存在而是定位条件给得太死。按排查成本从低到高走三层能停就停。第一层把精确匹配换成模糊匹配。文本里带单号、时间这类动态内容时用contains只匹配其中一段- tapOn: text: contains: 登录第二层用 parent 收窄范围。多个元素文本相同比如两个提交时加上parent把范围限定到父容器里。第三层确认前置条件成立。页面可能根本没翻到正确位置或应用状态被污染。给launchApp加clearState: true用干净环境复现一次排除状态干扰。[!WARNING] 别一开始就加 timeout 或 sleep 来等它出现。定位不到九成是条件问题先改定位再谈等待顺序反了会掩盖真正的 bug。偶发断言两个旋钮把等待拉稳最常见的不稳定来自页面还没加载完元素没出现。Maestro 默认会自动等元素多数情况无需处理。当某条断言仍然偶尔变红有两个明确作用的旋钮。retry是带间隔重试 N 次timeout是抬高单步等待上限。注意这是等更久不是一直等——超时后依然失败就该回头检查用例本身而不是继续加码等待。- retry: maxAttempts: 3 interval: 1000 command: assertVisible: 加载完成 - assertVisible: text: 支付成功 timeout: 10000第一段让断言最多重试 3 次、每次间隔 1 秒第二段把单条断言的等待上限拉到 10 秒。若某条用例反复需要加这两个旋钮多半说明前置状态没对齐优先查clearState。一份逻辑两端的字段差异移动端和 Web 端的步骤写法完全同构差别只在头部声明。移动端用appId指包名Web 端则以url字段开头指向页面地址。仓库里的e2e/workspaces/web/simple.yaml就是一个真实示例结构如下url: https://www.saucedemo.com/ tags: - web --- - launchApp - tapOn: Username - inputText: standard_user - tapOn: Password - inputText: secret_sauce - tapOn: Login - assertVisible: Products维度移动端Web 端入口字段appId包名url页面地址元素来源无障碍层文本页面文本 / DOM步骤写法同左同左用例需要反复造随机数据时还有inputRandomEmail、inputRandomNumber这类命令运行时现生成邮箱或指定范围内的数字不必把测试数据写死在脚本里。跑绿之前的自检清单把一条用例变成能交给 CI 的稳定用例按下面顺序过一遍先在单一平台把登录跑绿再补一条负向分支锁定账号后断言错误提示然后把同一流程改写成 Web 版本、用url验证通过最后给偶发失败的断言套上retry观察是否变稳。三件事做完你就有一组最小可交接的用例集。到那时真正的下一步不是继续堆用例数量而是确认这几条在 Android、iOS、Web 三端都稳定变绿。【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

软件需求分析报告模板:核心区块、填写顺序与避坑实践

软件需求分析报告模板:核心区块、填写顺序与避坑实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/2 1:35:06
51单片机驱动GC9A01圆屏:原理、移植与性能优化

51单片机驱动GC9A01圆屏:原理、移植与性能优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/2 1:35:06
PADS Logic VX2.5元件库绘制指南:从建库规划到TVS型号修改

PADS Logic VX2.5元件库绘制指南:从建库规划到TVS型号修改

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/2 1:35:06
MORE NEWS

更多资讯

📰

MFC/VS截屏实战:GDI BitBlt原理与避坑指南

简介:面向MFC/C开发者的屏幕截图功能实现资源,基于Visual Studio环境,完整演示如何捕获整个屏幕或指定窗口,并将其保存为BMP/JPEG文件。压缩包共22个文件,其中6个.h头文件与3个.cpp源文件承载核心逻辑,1个.…

📰

OpenRig:基于Node.js+tmux+YAML的轻量级本地AI开发工作流

1. OpenRig 是什么:一个被误读的开源项目名与真实技术图谱OpenRig 这个词在当前中文技术社区里,正经历一场典型的“语义漂移”——它既不是某个广为人知的成熟开源项目(比如 OpenCV、OpenSSH 那样有明确官网、GitHub star 数和文档体系&#…

📰

从WiFi 4到WiFi 7:协议命名、技术演进与路由器选购指南

我最近在整理WiFi系列基础内容,写到第三篇,正好是大家问得最集中的地方:802.11ac、802.11ax、802.11be这些协议名,和路由器包装上印的WiFi 5、WiFi 6、WiFi 7到底怎么对应?市面上那么多数字,到底哪个才是现…

📰

光纤环形器从原理到选型:单向传输控制与工程实战要点

光纤环形器这个东西,做光通信的应该都不陌生,但说实话,很多人对它也就是停留在“认识”的阶段——知道它能单向传光,知道它常用于OTDR和WDM系统,但真要问到它内部是怎么工作的、怎么选型、为什么某些场景必须用它而不是…

📰

React Native鸿蒙动画实战:Animated上下滑动入场踩坑与优化

把React Native应用跑到鸿蒙设备上,这个流程现在其实很成熟了:改一下入口配置,用适配层的原生容器去加载JS bundle,大部分业务页面能直接跑起来。但真正让团队头疼的往往是动画。尤其是上下滑动入场这类最常用的交互动效——列表卡…

📰

挖掘机检测模型训练:VOC数据体检与YOLO格式转换实战

简介:面向计算机视觉与目标检测学习者的挖掘机图像数据集,包含约700张已完成人工标注的图片,符合VOC标准标注格式,可直接用于训练YOLO等目标检测模型,也可转换为COCO或其他框架格式;聚焦工程车辆典型场景&a…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬