🎯 核心主线:为什么传统自动化测试维护让人抓狂?
传统的端到端测试(Playwright / Cypress / Selenium / Appium)就像**“给瞎子写路线指南”**——程序员必须硬编码每一步的 CSS 选择器、XPath 或 testID(如 button[data-testid="submit-v2"])。页面稍微重构或按钮微调样式,测试用例瞬间大面积红屏报错,工程师沦为修选择器的“维护苦力”!而近年来一些宣称“全 AI 驱动”的测试工具,又走向了另一个极端:每次运行都从头调用大模型看图识字,不仅运行极慢(跑个流程要几分钟)、费用昂贵(CI 每次跑几十美元),更伴随着大模型的偶发随机性与不可控幻觉!
💡 一句话核心解法:“确定性断言守底线,智能体自愈填鸿沟,重放缓存省算力”——用自然语言交给智能体去摸索操作,一旦跑通并经断言核验,直接沉淀为免模型调用的极速本地重放缓存;只有当界面真正发生变化时,智能体才现场接管自愈!
🔵 小蓝:智能体执行官 (Agent Executor)
驱动 agent.act、agent.assert、agent.extract 的模型核心。负责阅读脱敏屏幕快照、规划多步动作并探索未知的页面变化。
🟠 小橙:确定性底座 (Deterministic Runner)
基于 TypeScript 的 screen 查询与 expect 断言契约。以极高确定性守护核心业务指标,管理超时、预算与执行生命周期。
🟢 小绿:重放守护者 (Replay Cache Guard)
已验证动作的毫秒级重放引擎。零 Token 消耗复现操作,侦测屏幕漂移;一旦控件丢失或语义断裂,无缝把控制权转交小蓝(Handoff)。
🔴 红虚线:脆弱选择器与泄密陷阱
易碎的 CSS/XPath 维护噩梦、CI 循环烧钱的 Token 账单、以及将真实密码或生产密钥裸露给大模型的严重安全外溢风险。
演进 01 · 范式破壁
告别脆弱选择器:用自然语言意图替代 CSS / XPath 迷宫
选择器硬编码导致测试维护成本高于开发
以意图驱动交互,彻底终结选择器维护地狱
解决了什么:允许开发者使用 `agent.act('add one item')` 这类自然语言高维意图编写操作步骤,免除对脆弱 DOM 结构的死板绑定。
代价是什么:初次执行需要模型理解与推理,单步耗时略高于直接点击确定性 ID。
演进 02 · 混合双核哲学
确定性定位器与智能体步进混编:绝不盲目全盘 AI 化
全盘依赖 AI 带来测试不可靠与调试困难
确定性断言死守指标,智能体灵动操作铺路
解决了什么:拒绝“纯 AI 黑盒”,将 TypeScript 强类型的 `screen` 和 `expect` 与 `agent.act` 自由混编,兼具灵活性与 100% 确定性。
代价是什么:测试作者需要分清何时该写确定性断言、何时该交由智能体摸索。
演进 03 · 算力破局重器
Replay Cache 重放缓存:已验动作秒级重放,零 Token 开销
重复调用大模型让测试沦为吞金巨兽
录制一次永久秒放,CI 运行彻底告别 Token 消耗
解决了什么:发明 Replay Cache。智能体探索成功且被后置断言通过的操作被固化为语义动作流,下一次运行完全不调模型,毫秒直出。
代价是什么:仓库中需要管理 `.e2e/cache/` 目录;如果页面发生破坏性变更需要感知更新。
演进 04 · 自愈的艺术
断裂自动接管 (Handoff):UI 变动时智能体半途自愈
静态录制毫无自适应能力,脆如薄冰
重放遇阻智能体瞬间接管,跑完自动补齐新录制
解决了什么:当 UI 改版导致重放匹配失败时,不会粗暴报错,而是原地触发 Handoff,大模型接手从当前屏幕继续完成操作并重录。
代价是什么:如果改版引入的是真实 Bug,可能需要结合 `--strict-cache` 区分是“UI 重构”还是“功能回归”。
演进 05 · 动态数据克星
unique() 宏:消灭时间戳与动态测试数据的缓存失效
动态变量破坏了缓存的参数键值匹配
参数模式匹配代入,动态数据也能享受重放
解决了什么:提供 `unique()` 包装器,让具有时间戳、随机 UUID 或动态邮箱的测试依然能精确命中 Replay Cache 并完成动态置换。
代价是什么:如果两个 `unique()` 变量值偶然发生碰撞重叠,当前步会放弃记录并提示 `param-collision`。
演进 06 · 坚固安全防线
密码零泄密与脱敏视口:AI 绝对看不到真实密钥
把敏感凭证裸露给三方模型存在合规红线
模型知其然而不知其值,底层原生代理安全填密
解决了什么:通过 `Secret` 参数声明与 `type_secret` 原生工具,模型仅感知占位符,由 Runner 底层注入真实密码,且填密后自动关闭截图。
代价是什么:开发者需要在配置或测试上下文中显式声明 Secret 对象,无法直接字符串传密。
演进 07 · 跨端大一统
Web、iOS、Android 统一语义心智:同一套 API 跑多端
跨端测试技术栈分散,团队学习维护成本翻倍
一套 TypeScript 测试代码,统一驾驭网页与手机
解决了什么:将浏览器(Playwright 内核/Kernel)与移动端原生模拟器(iOS/Android)抽象为统一 Engine 合约,开发者零迁移门槛。
代价是什么:移动端由于宿主渲染差异,基于像素点(pixel tools)的点击判定会依赖当前设备视口分辨率。
演进 08 · 模型自由带来平权
BYOM 自带模型:白嫖现有订阅,支持本地与多提供商
商业闭源工具通过模型溢价赚取巨额差价
全面拥抱开源,已有订阅与本地模型随意插拔
解决了什么:支持 Bring Your Own Model (BYOM),开发者可直接复用个人 ChatGPT / GitHub Copilot 订阅或自建开源网关,零额外工具订阅费。
代价是什么:需要用户自行配置并管理模型 API Key 或订阅授权凭据。
演进 09 · 智能体共生生态
Agent-First 原生集成:MCP 服务端与技能包一键装配
Coding Agent 缺少与运行中 App 的交互眼睛
编程助手与测试框架打通,自动编写与调试闭环
解决了什么:开箱提供 MCP 服务端(`e2e mcp`)和官方 Skill,让 Claude Code、OpenClaw 等编码助手能直接通过 MCP 协议操控网页、写用例与修 Bug。
代价是什么:运行 MCP 时会额外常驻一个本地服务进程。
演进 10 · 质量工程终局
Bug Bash 与自愈 CI:软件质量守卫走向机器自治交付
人力测试效率低下,无法跟上 AI 时代的生产力
无人值守自主扫雷,自动生成复现测试用例
解决了什么:通过 `e2e explore` 与 Bug Bash 模式,智能体自主漫游应用,一旦捕获异常直接固化为 `.e2e.ts` 复现用例提交给开发者。
代价是什么:需要为全自动漫游探索设定明确的模型 Token 预算上限。