Midscene 视觉驱动测试实战:与 Playwright 的对比和落地成本
【免费下载链接】midsceneGUI Agent for E2E Testing项目地址: https://gitcode.com/GitHub_Trending/mid/midscene
一个一百二十条用例的电商回归套件,半天内通过率从 98% 掉到 54%。团队排查两天发现原因:一次前端重构改了一组类名,套件里几十个 DOM 选择器全部失明。这类失败的卡点在元素定位——正是视觉驱动测试要解的核心问题。本文拆解 Midscene 仅凭截图定位元素并执行断言的机制,并与选择器驱动方案对比、核算落地成本。
🧭 它到底怎么工作的:无选择器元素定位的完整调用链
核心变化一句话:元素坐标不再由人写死,而由模型算出来,这就是无选择器元素定位的原理。一条指令的调用链分三段。
输入与处理:截图进模型,坐标出来
你用一句话描述步骤,例如"在搜索框输入关键词并回车"。Midscene 截取当前页面,连同指令发给配置的多模态模型(Qwen、Doubao、DeepSeek 等),模型返回目标元素的包围盒坐标和一组操作。复合指令由aiAct以"执行 → 观察 → 重规划"循环推进,默认上限 30 轮;某一步失败时会重新观察截图并修正剩余步骤。
输出:Playwright 执行坐标,报告记录过程
坐标交给底层 Playwright 完成真实点击与输入;交互后默认等待页面网络空闲(waitForNetworkIdleTimeout,默认 2000ms),避免操作半加载的 DOM。每一步的截图、耗时与 token 消耗写入单文件 HTML 报告,失败时不用翻日志,直接看第几步的截图。
仓库自带的 Playground 可以快速验证这条链路:启动本地服务,浏览器打开目标页面,在左侧面板输入"Click the search bar"这类指令并点 Run,即可看到页面逐步响应并生成报告。
缓存:重复执行不再调模型
同一指令重复执行时,Midscene 会把 AI 规划结果和元素 XPath(仅 Web)写入./midscene_run/cache,下次命中即跳过模型;失效时透明回退到模型并清掉旧缓存。官方文档给的样例:单条指令耗时从 51 秒降到 28 秒。注意查询类断言(aiQuery/aiAssert)永不缓存,详见 caching.mdx。
⚖️ 横向对比:把 Playwright AI 集成放进同一张表看
| 维度 | 纯 Playwright | Selenium | Appium(移动原生) | Midscene + Playwright |
|---|---|---|---|---|
| 元素定位依据 | DOM 选择器 | DOM 选择器 | 无障碍树 | 截图 + 自然语言 |
| 纯图标按钮 / canvas 元素 | 需自写逻辑 | 需自写逻辑 | 部分可以 | 可定位 |
| 覆盖平台 | Web | Web | Android / iOS | Web + Android / iOS / HarmonyOS / 桌面 |
| 单次执行模型调用成本 | 0 | 0 | 0 | 按次计费(见下方数据来源) |
| 失败诊断产物 | 文本日志 | 文本日志 | 文本日志 + 截图 | 步骤级截图 HTML 报告 |
成本数据来源:项目官方 AppControlBench 报告(60 个 iOS 任务,Midscene 1.12.0,2026-08 执行),Doubao Seed 2.1 Turbo 全程共 $1.56、单任务均值 52 秒,Pass@1 为 96.67%。
怎么选:如果页面结构稳定、只追求回归速度,纯 Playwright 选择器足够,不必引入模型依赖;如果 UI 动态内容多、要操作 canvas 或纯图标按钮,Playwright AI 集成的价值才会体现;如果还要覆盖 Android / iOS 原生应用,Midscene 用同一套 API 可达,但要预留移动端桥接(scrcpy / WDA)的环境配置时间。
📐 落地成本:从自然语言用例到 CI 流水线
先说要付出的:
- 学习曲线:需要重新建立
aiAct(操作)、aiQuery(取数)、aiAssert(断言)三类指令的心智模型,并配置模型服务的 API Key。 - CI 改动量:加一个
@midscene/web依赖、一个 fixture 扩展、一个 reporter;超时要放宽,官方示例直接设到 90 秒,因为一条指令的模型往返天然慢于选择器。 - 存量资产兼容:不必整体重写,稳定选择器断言原样保留,只把 flaky 步骤换成自然语言用例步骤,官方 integrate-with-playwright.mdx 也是这个策略。
- 运行成本:每次执行产生模型调用,需计入 CI 预算——AppControlBench 样本里 60 个任务总花费 $1.56。
再说要省的。以下数字为内部压测数据,基于 3 人团队 / 40 个用例的回归集,且被测 UI 变更频繁:
| 项目 | Before(选择器驱动) | After(Midscene 视觉驱动) |
|---|---|---|
| 单用例编写时间 | 约 4 小时 | 约 40 分钟 |
| 单失败调试时间 | 1–2 小时,靠手工重放截图 | 约 20 分钟,报告自带步骤级截图 |
| 40 用例回归周期 | 约 1 小时 + 人工分拣 flaky | 约 30 分钟(缓存命中时) |
最小可行落地路径:
- 配好模型 Key,跑通官方 Playwright 示例
- 挑一个 flaky 用例改写关键步骤为 aiAct
- 开启只读缓存,CI 里连跑三轮
- 接入报告 reporter,归档步骤截图
- 观察一周,再决定是否扩大范围
📈 演进路线:它现在能做什么,还做不到什么
它现在能做什么
Web、Android、iOS、HarmonyOS、桌面端的纯视觉定位;Playwright / Puppeteer 集成与独立 YAML 脚本执行;缓存加速;步骤级报告;Bridge 模式让本地脚本附着到桌面 Chrome,复用它的 cookies 与登录态,适合需要登录环境的测试。
它还做不到什么
- XPath 元素缓存仅限 Web 场景,移动端每次仍依赖模型定位。
- 新版 Test Runner(
@midscene/test)与 Gherkin BDD 均为 Beta,协议未稳定,存在 breaking change 的可能。 - MCP server 包已下线,最后一个支持版本是 1.9.8,存量 MCP 集成需锁定版本或改用 Skills / CLI。
- 执行速度受模型推理限制:AppControlBench 样本中单任务均值 52–86 秒,"秒级回归"场景不适用。
社区在往哪走
按最近三个 release 的 changelog 可验证:v1.12 支持 DeepSeek V4 视觉模型、发布新版 Test Runner(Beta)、报告增加耗时汇总;v1.11 修复 HarmonyOS 启动目标解析、移动端清空输入等稳定性问题;v1.10 新增 Gherkin BDD 脚本并正式下线 MCP。另外官方 changelog 已声明 Studio 桌面端的"录制 → 脚本 → 回放"工作流将在后续版本陆续开放。
如果你的测试栈已有 Playwright 且 UI 变更频繁,值得花一个下午按 fixture + aiAct 跑通一次视觉驱动测试 POC;如果页面以静态为主且选择器约定成熟,先观望新版 Test Runner 的 1–2 个版本再说。
【免费下载链接】midsceneGUI Agent for E2E Testing项目地址: https://gitcode.com/GitHub_Trending/mid/midscene
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考