ARTICLE DETAIL

资讯详情

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

Maestro 跨平台 UI 自动化测试快速上手:一套 YAML 覆盖三端,十分钟跑通第一个用例

Maestro 跨平台 UI 自动化测试快速上手:一套 YAML 覆盖三端,十分钟跑通第一个用例 Maestro 跨平台 UI 自动化测试快速上手一套 YAML 覆盖三端十分钟跑通第一个用例【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/MaestroMaestro 是一个开源的跨平台 UI 自动化测试框架一份 YAML 流程在 Android、iOS、Web 三端运行内置智能等待元素加载慢也不必手写 sleep。读完这篇你会装好并验证环境、写出一个能跑通的商品搜索 Flow以及掌握偶发失败和定位失败这两类问题的稳定解法。全文按先动手、后原理的顺序展开。安装验证一步到位Maestro 环境准备前置条件只有一个Java 17 或更高版本。按下面三项依次执行即可执行java -version确认输出版本不低于 17运行安装脚本macOS、Linux、Windows WSL 均支持curl -fsSL https://get.maestro.mobile.dev | bash export PATH$PATH:$HOME/.maestro/bin执行maestro --version能打印出版本号环境就绪。写出第一个可运行的 Flow最小 YAML 测试脚本结论先行一个 Flow 就是一个 YAML 文件头部声明目标应用与标签---之后是顺序执行的步骤。先认识这几个字段字段作用appId声明被测应用包名移动端入口tags用例标签批量运行时按它筛选---头部与步骤的分隔符此后从上到下逐步执行launchApp启动应用配clearState: true清空状态保证环境干净tapOn点击指定文本的元素inputText向当前聚焦输入框输入文本assertVisible断言元素可见找不到则步骤失败以搜索商品为例最小可用用例appId: com.example.shop tags: - search - positive --- - launchApp: clearState: true - tapOn: 搜索 - inputText: 机械键盘 - tapOn: 搜索 - assertVisible: K800 无线机械键盘 - assertVisible: ¥ 399想覆盖异常路径步骤结构不变只换数据搜索一个不存在的关键词末尾断言没有找到相关商品提示。流程分支用if/then/else表达。比如商品详情页缺货时点到货提醒现货时点加入购物车- if: visible: text: 缺货 then: - tapOn: 到货提醒 - assertVisible: 有货时将通知你 else: - tapOn: 加入购物车 - assertVisible: 已加入购物车为什么一份 YAML 能盖住三端哪些团队值得引入结论先行同时维护 Android、iOS 与 Web 同构应用的团队Maestro 值得引入只测单一端时收益主要体现在脚本好写、好读、好交接。先看与传统三套脚本方案的差异维度传统方案三套工具Maestro脚本数量Android 用 Espresso、iOS 用 XCTest、Web 再拉一套一份 YAML 全端执行元素定位精确选择器路径UI 改版一次改 N 处文本 语义定位抗 UI 迭代等待处理手写 sleep内置自动等待执行形态编译后运行解释执行改完即跑从决策视角看四点优势对应的正是三套方案的三个成本一份脚本全端跑用例只写一遍定位基于文本与语义UI 迭代后脚本存活率高智能等待内置加载延迟不用 sleep 兜底解释执行免编译迭代速度快。适合多端同构产品团队、UI 高频迭代的团队以及希望产品、前端也能读懂用例的团队。让用例不再偶发失败UI 测试稳定性两步走怎么等从自动等待到重试偶发失败最常见的一类是页面没加载完元素还没出现。Maestro 默认对每个步骤自动等待目标元素多数加载延迟会被默认机制吸收无需额外处理。个别断言仍偶尔失败时有两种稳定写法- retry: maxAttempts: 3 interval: 1000 command: assertVisible: 加载完成 - assertVisible: text: 支付成功 timeout: 10000retry让断言最多重试 3 次、每次间隔 1 秒timeout把单条断言的等待上限拉到 10 秒。注意二者的定位这是等更久不是一直等。超时之后依然失败就该回头检查用例本身而不是继续加码等待。找不到元素怎么办三项自查清单Element not found 通常不是元素不存在而是定位条件写死了。按自查成本从低到高模糊匹配文本里带订单号、时间这类动态内容时用contains只匹配固定片段父子层级限定多个元素文本相同时如两个提交按钮用parent把范围限定到父容器前置条件确认页面可能没翻到正确位置或应用状态被污染——给launchApp加clearState: true用干净环境复现一次。前两项的写法- tapOn: text: contains: 订单号 - tapOn: text: 提交 parent: text: 收货地址表单同一份流程在移动端和 Web 端怎么跑appId 与 url结论先行只有入口声明不同后续步骤完全同构。项移动端Web 端入口声明appId包名url置于流程开头指向页面地址输入 / 点击 / 断言inputText/tapOn/assertVisible写法与移动端一致仓库里有一份真实示例可以直接对照e2e/workspaces/web/simple.yaml流程以url指向页面地址开头之后输入账号、密码、点击登录断言商品列表出现——和移动端的步骤同构这就是跨平台的实际含义。用例需要反复造随机数据时用运行时生成的命令不必把测试数据写死在脚本里命令运行时生成inputRandomEmail随机邮箱地址inputRandomNumber指定长度或范围内的随机数字可交接标准用例集三条验收清单单条用例跑通不等于能交接。对照三条验收清单衡量含负向分支不止正向路径异常数据如缺货商品、不存在的关键词有对应用例且断言了引导提示有对应 Web 版本同一流程把appId换成url在 Web 端同样通过偶发项已稳定原先偶发失败的断言都套上retry或timeout重复执行多轮后不再出现偶发失败。三条全部满足这套用例集就可以交给团队、放进 CI。届时需要确认的是每条用例在 Android、iOS、Web 三端都能稳定执行通过。【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表