功能
Hover 今天能做什么,分布在它的四个面:通过 MCP 编写,在可选的驾驶舱中审阅,在 CI 中运行。
编写 —— MCP
编写引擎是一个 MCP server(@hover-dev/mcp),把它接入你已经在用的编码 agent 即可。接好之后,你的 agent 就获得了 Hover 那套带有落地约束(grounded)的浏览器工具,外加一个 test_app prompt,用来探索你的应用并 crystallize 出一整套测试。
- MCP 工具 —— 带落地约束的操作工具(
click_control/fill_control/select_control/check_control)、browser_navigate/browser_snapshot、crystallize_spec、recall/record_fact记忆工具,以及test_app/healprompt。agent 通过这些工具执行动作,所以驱动某个动作的那个 selector,就是最终被保存下来的那个。 - API testing —— Hover 在同一条 CDP 连接上被动捕获应用的浏览器流量(不走 proxy),把值得固定下来的检查 crystallize 成一个纯粹的
*.api-test.spec.ts,并用replay_request验证过,绝不凭空编造 status code。 - 登录与凭据 —— agent 通过每个环境各自的
@account登录;密码会被脱敏成process.env.HOVER_PASSWORD,登录动作被提取到一个auth.setup.tsfixture,整套测试只跑一次。密码绝不写进 spec、JSDoc 或 sidecar。 - 白盒源码阅读 —— 一个可选的、只读的源码阅读器,agent 可以用它把测试落到你的代码上。默认关闭;限定为只读。
输出
- Crystallize 一个 spec ——
__vibe_tests__/<slug>.spec.ts,使用getByRole/getByLabel/getByTestId,以确定性方式生成(没有 LLM 在写代码)。不依赖 Hover 就能在 CI 里跑。每个交互都被包在一段可见性前置校验里,所以 UI 一旦漂移,大约 3 秒就会以Locator expected to be visible失败,而不是拖到 30 秒的 actionability 超时。 - 结构化的 spec 输出 —— 保存下来的 spec 会长出一套结构:
test.step阶段划分、弹窗 / 新标签页的Promise.all配对,以及一个.hover/sidecars/<slug>.jsonsidecar。 - Page Object 抽取 —— 当某个非登录流程在多个 spec 里重复出现时,Hover 把它提取到
pages/+fixtures.ts并把相关 spec 折叠进来,这样对该流程的改动就变成改一个文件。确定性,无 LLM。 - 优化一个 spec —— 一个可选、默认关闭的 AI pass,把一份确定性草稿打磨成一个经过 diff 审阅的候选版本:补上运行时观察到的断言,把有 bug 的行为标记为
// KNOWN BUG,并始终保留原始版本。
维护
- 自愈一个漂移的 spec —— 当 UI 变化、某个录制下来的 selector 不再匹配时,
/mcp__hover__heal会把该 spec 对着线上应用重放,找到坏掉的那一步,只对那一步重新落地约束。record == replay 得以保留。
记忆
- 会复利增长的测试知识 —— Hover 在
.hover/下维护一份 Business Map,记录你应用的各条流程 + 记下来的规则,随你的代码一起提交。整套测试始终"自知",并随你的应用成长而变得更聪明。
审阅 —— 可选的驾驶舱
VS Code 扩展(hyperyond.hover-dev)是一个可选的审阅驾驶舱,不是引擎:一张展示你各条流程 + 覆盖情况的 Business Map 图,以及一个 Dashboard(通过 / 失败 / flaky + CI 结果),支持一键运行。它只做审阅 —— 它不驱动任何 agent。
运行 —— CI
crystallize 出来的 spec 就是纯粹的 @playwright/test。它们在每个 PR 上运行,不需要 agent、不需要 token、不需要 key。Hover 可以帮你生成 GitHub Actions workflow,并把运行结果拉回 Dashboard。