一套验收流程:AI 写完代码后,自己开浏览器实操、验证页面效果、交出证据

从读改动、启动应用,到操作、保存、刷新、修复复测和交付证据,把一次完整验收交给 Agent。再用项目规则、Skill 和可选工具把它复用起来。

作者:freeCodeCamp · Timothy Ogbemudia10-21 · 约 20 分钟

这是一套让 AI 编程智能体(Coding Agent)在写完前端代码后,按真实用户的操作路径打开浏览器,点击、输入、保存和刷新,检查功能与页面效果,并留下可复查证据的验收流程。

开发者 Timothy Ogbemudia 先把这些要求写进项目规则和可复用的 Skill,后来又开发了开源工具 katalepsis,用来运行检查、整理报告。前面的验收流程也可以独立使用。

用 Claude Code、Codex 或 Cursor 改网页,你可能遇过这种情况:Agent 汇报“已实现,测试全部通过”,打开页面却发现筛选后仍是旧数据、设置刷新后恢复原值,或弹窗里的保存按钮被挤出了手机屏幕。

接下来又得你操作一遍、截图、复制报错、等它修改,再打开页面核对。代码写得快了,验收这一段却还需要人不断传话。

Ogbemudia 想补上的就是这段反馈:Agent 改完代码,先跑已有检查,再启动应用、使用刚改的功能;发现问题就修,修后再用一遍。已有测试检查它们覆盖的场景,浏览器验收则从本次改动出发,检查实际运行中的结果。两者配合,才更容易发现“测试全绿,界面仍然不对”的问题。

先走完一次验收:修改设置、保存,再刷新

下面用一个原创教学场景串起流程:设置页新增“显示名称”和“周报通知”的保存功能。路由、字段和后面的报告都为讲解而设,不是本次实际运行的项目。

1. 先读需求和改动,确定要验什么

Agent 先看 git status --short,记录已有修改和未跟踪文件;再读需求与本次实际代码差异,包括任务涉及的提交、未提交修改和新增文件,不能把一条 git diff HEAD 当成所有任务的完整改动。

假设改动涉及设置页面和保存接口,验收计划就应写到具体结果:

  • 打开 /settings/profile,记录名称和开关当前状态。
  • 改成与初始状态不同的新值,保存后检查结果。
  • 刷新页面,等数据加载完,再读名称和开关的当前值。
  • 检查保存中的禁用状态是否解除,失败时是否有错误提示;若改动涉及空数据或相邻路径,也纳入检查。
  • 在相关桌面、窄屏视口检查布局,核对保存请求与本次操作引入的新报错。

进入浏览器前,先运行项目已有的相关测试,以及本次需要的构建或类型检查,记录结果。浏览器检查要补上这些检查没有回答的问题。

2. 按项目已有方式启动,记录自己创建的资源

先查 package.json 的 dev 脚本,再看 README 的本地启动说明;确实需要容器时,使用项目已有的 Docker 配置。命令、端口、依赖都以该项目为准。

启动时保存日志,记录自己启动的进程 PID、容器和临时目录;等待服务就绪,并为等待设定时限。启动失败就读日志、报告缺少的条件,不能只因进程已创建就宣布应用可用。

验收的是准备交付的真实应用。不能为方便登录而关掉认证、修改 .env、另造假服务,或增加绕过真实流程的临时路由。按文档测试账号或种子数据仍无法登录时,报告受阻及原因。

3. 修改、保存、刷新,核对最终状态

浏览器通道接好后——具体接法在后文——Agent 打开目标路由。在这个例子里,假定初始名称是“原名称”,周报开关关闭:

  1. 确认初始值,再把名称改为“小互”、开关设为开启。
  2. 点击保存,检查成功提示、按钮状态,以及相关请求是否成功。
  3. 刷新页面,等待设置重新加载。
  4. 读取输入框的当前值,检查是否仍是“小互”;读取开关状态,检查是否仍为开启。

这里要读运行中的控件状态,不能只读输入框初始 HTML 的 value 属性。DOM 是浏览器里的页面元素结构;通过它或无障碍快照,可以找到控件并读取状态。写成 Playwright 测试时,名称可用 toHaveValue("小互") 检查,真正的开关/复选框可用 toBeChecked();使用通用浏览器工具,也应读取新页面里的对应状态。

这组检查能验证本次改值、保存、刷新后的结果。“按钮点过了”或“成功提示出现过”,都不能代替最后一步。Playwright 的网页断言会在超时前重试检查条件,适合等待界面异步更新;断言仍需对应实际用户要求。

4. 功能看状态,布局看画面,接口看响应

不同证据回答不同问题:

  • 功能状态:读 DOM 或无障碍快照,核对名称、选中状态、按钮是否禁用、弹窗是否打开。
  • 页面效果:例如在 375×812、1440×900 两种视口截图,查看按钮遮挡、弹窗裁切、文字重叠。它们是浏览器视口检查,不等于实体手机实测。
  • 接口与新错误:保存依赖接口时,检查对应请求的响应,以及本次操作产生的相关控制台错误。页面显示成功,接口却返回 HTTP 500,仍然需要报告。

截图能显示遮挡,却不能单独证明刷新后的字段值正确;DOM 中有弹窗,也不代表它在屏幕上能正常使用。检查范围围绕本次改动:旧警告或无关请求不应自动扩成另一项修复任务,纯前端切换也不必额外做全面网络审计。

同样的思路也用于筛选和重置。Ogbemudia 在 freeCodeCamp 文章中给的筛选计划是:记录初始行数,选 Active,再叠加 Owner,清空后检查原始结果恢复;再重新设置非默认筛选,检查 URL 与刷新后的条件、结果是否保留。不能在一开始就没有筛选时点 Reset,然后声称“重置有效”。

5. 发现问题,修复后重走流程

假如刷新后恢复旧名称,就保留当时的请求、状态和错误记录,回代码中查原因。完成修复后,重跑受影响的测试,再重复“修改→保存→刷新→读当前值”的流程。不能在改完代码后只说“现在应该好了”。

缺少项目要求的测试登录条件、迁移或可用预览环境,可能使验收受阻(blocked);已经执行的业务流程因真实依赖接口故障而失败,则应保留实际失败和原因,不能仅因问题不在当前源码里就改写成受阻。

6. 保留交付证据,只清理自己创建的资源

成功、失败或中途受阻,都要关闭本次创建的浏览器,停止自己的服务和容器,删除不需交付的临时材料。依据启动时记录的归属清理,避免用 pkill node、git clean -fd 等全局命令波及其他工作。

再次查看 git status --short:原有修改和未跟踪文件应保留,本次修复应能解释,临时 QA 产物不要混入代码提交;报告要交付的截图和轨迹另行保留,并注明位置。修复本身可能改变源码,工作区不必与开始时完全一致。验收流程本身不授权额外提交或推送。

7. 把做过什么、看到什么交回来

最后交付路由、操作、预期与实际结果、证据位置、相关测试、修复和复验,以及受阻或未测项。开发者应能据此复查,而不必再问一遍“你到底测了哪里”。

一份能拿来复查的交付报告

下面是与上述场景对应的教学示意,不是本次生成的测试结果或证据文件:

### 设置页验收报告(教学示意)

- 环境:本地开发应用;路由 /settings/profile。
- 初始状态:显示名称“原名称”;周报关闭。
- 前置检查:已运行项目现有设置页相关测试,结果通过。

操作与结果:
1. 名称改为“小互”,周报开启,点击保存。
   预期:显示成功提示,保存按钮恢复可用。
   实际:符合预期,保存请求成功。
2. 刷新并等待数据加载。
   预期:当前名称仍为“小互”,周报仍开启。
   实际:读取输入框当前值与开关状态,符合预期。
3. 检查桌面与窄屏视口。
   预期:按钮完整可见,标签无重叠。
   实际:符合预期;本次操作无新增相关控制台错误。

发现与复验:
- 初测发现保存后按钮一直禁用。
- 修复提交状态恢复逻辑,重跑相关测试;再完整操作、保存、刷新,结果通过。

证据(示意路径):
- evidence/settings-desktop.png:桌面状态截图。
- evidence/settings-mobile.png:窄屏布局截图。
- evidence/settings-actions.log:操作、字段状态、请求和错误记录。

未测/受阻:未测实体手机;本次无受阻项。
清理:已关闭自己创建的浏览器、服务及临时材料;保留上述证据。
工作区:原有修改和未跟踪文件保留;本次修复已说明,无额外 QA 产物混入提交。

同一处改动,哪些证据还不够?

以下是教学示例。切换任务,比较现有测试、页面加载与结果检查各自能说明什么。

选中的筛选条件写进网址参数,刷新后仍然生效。

已打开列表页,状态码 200,没有报错,验证通过。

现有单元测试
可能未覆盖这条路径

只检查状态函数,未必能发现网址参数与页面同步的问题。

只打开页面
只证明页面可加载

未改变筛选条件,也没有检查刷新后的状态。

还要检查的结果
针对任务验证

选择筛选条件,检查结果列表;刷新带参数的网址,再确认筛选状态与结果都保留。

把流程留在项目里:简短规则、按需 Skill、独立审查

每次都靠人重发一长段提示词,很容易漏掉步骤。Ogbemudia 的做法是把完成标准留在项目规则里,把具体操作放进可复用技能。

常驻规则说明“何时算完成”,Skill 说明“怎样检查”

在支持相应约定的客户端中,AGENTS.md(例如 Codex 使用)或 CLAUDE.md(Claude Code 使用)会按客户端和目录范围加载为工作指令。把长篇浏览器手册全部放进去,会让不需要浏览器的任务也携带这些内容。

Skill 是包含 SKILL.md 的目录,文件以 name、description 等元数据开头。支持技能的客户端通常先展示简短介绍,任务匹配或明确调用时,再读取详细步骤。因此可以拆成:

  • 项目规则:用户可见行为要在运行的应用里验证,具体遵循哪个 Skill。
  • browser-review Skill:从读改动到启动、操作、取证、修复和清理的完整步骤。

这些文件是 Agent 的工作指令,实际加载方式取决于客户端支持。原作者同时用 Codex 和 Claude Code,通过 Claude 的 @ 导入语法共享规则;这是一种配置方式,不是所有客户端都会自动共用。

支持 AGENTS.md 时,可加入下面这段自拟规则;使用 Claude Code 则放入 CLAUDE.md 或按其支持的方式导入:

## 界面验证规范

用户可见行为的改动,在宣布完成前,要在实际运行的应用中验证受影响的流程。
具体遵循 `.agents/skills/browser-review/SKILL.md`。
构建、类型检查及已有测试结果,与本次运行页面的检查一并报告。
无法完成的步骤说明受阻原因;没有做的检查列为未测,不当作通过。
只清理自己创建的资源,保留交付证据,不把临时 QA 产物混入提交。

让另一位 Agent 自己决定该检查哪里

实现者知道自己打算改什么,也可能沿着同一套假设设计自测。原作者因此要求:重要改动交给一个没有继承实现会话的审查 Agent,只给原始需求、实际 diff 和验收 Skill,让它独立判断影响范围,不依赖实现者的截图、QA 笔记或绿灯结论。

原文的一个例子很具体:需求是让端到端测试通过 E2E_BASE_URL 配置应用地址,实现者在默认的 8080 端口测试通过。但 e2e/global-setup.ts 里种子图片的 URL 仍写死为 http://localhost:8080/test-media/...。

独立审查者改用 8081 启动应用,看到了 3 个发往旧端口的失败图片请求,以及页面上 3 张回退卡片。只检查“卡片存在”仍会通过,因为回退卡片也是卡片。修法是从配置的基础地址生成图片 URL,或采用合适的相对地址。

这个例子的价值,是展示另一套验收范围怎样发现默认路径掩盖的问题;它不能保证第二位 Agent 会找到所有缺陷。

可复用的验收技能:中英双语 browser-review Skill

以下是两份内容完全等价的标准化流程文件,分别提供中文版与英文版。用户无需双语并用,只需根据团队工作语言选一种使用即可。

使用时,在项目根目录下创建 .agents/skills/browser-review/SKILL.md,并将对应内容完整存入(保留开头的 YAML 元数据)。

中文版(本指南自拟)

---
name: browser-review
description: 检查本次用户可见改动在真实应用中的行为,并提交可复查证据。
---

请对当前任务的用户可见改动执行浏览器验收:
1. 先读原始需求和实际 git diff(包含本次未提交改动与新增文件),记录 git status --short 中已有的工作。列出受影响路由、相关加载/空/错误/选中/禁用状态、相邻路径、操作、预期结果及检查方式。先运行已有的相关测试及必要的构建或类型检查,记录结果。
2. 按项目 dev 脚本、README 或既有 Docker 配置启动应用;限时等待服务就绪后再打开浏览器,启动失败保留日志并报告。记录自己启动的进程、容器、浏览器与临时文件。不为方便检查而关闭认证、修改 .env、造假服务或新增绕过真实流程的路由。
3. 走完受影响的用户流程,检查最终结果。保存要先记录初始值、改成不同目标值,再检查刷新后的当前值;重置要先改变条件,再检查输入和结果是否都恢复。不能只以页面加载或点击没有报错当成功。
4. 功能状态读取 DOM/无障碍快照;布局问题检查相关桌面、窄屏视口并截图。涉及接口时检查相关响应和新报错;旧警告、无关网络请求不扩展本次范围。
5. 发现缺陷,修最小原因,重跑相关测试,再走受影响流程。缺文档规定的凭据、预览服务本身不可达等环境障碍写 blocked;已执行业务因真实依赖接口故障而失败,保留失败与原因。没做的检查列为未测,说明原因。
6. 无论成功失败,只清理自己启动或创建的进程、容器、浏览器和临时材料,保留需要交付的证据。再看 git status --short,保住原有修改与未跟踪文件。不执行 git add、commit、push 或全局清理命令。
7. 报告列出:路由、操作、预期与实际结果、对应证据、相关测试结果、修复、受阻/未测项及清理情况。不要把没有证据的检查写成通过。

English version(本指南自拟)

---
name: browser-review
description: Verify this task's user-visible changes in the running app and report reviewable evidence.
---

Perform browser verification for this task's user-visible changes:
1. Read the original request and actual git diff, including this task's uncommitted changes and new files. Record pre-existing work with git status --short. Plan affected routes, relevant loading/empty/error/selected/disabled states, nearby flows, actions, expected outcomes and how to check them. Run existing relevant tests and any necessary build or type checks first, and record results.
2. Start the real app using its dev script, README or existing Docker configuration. Wait for readiness with a time limit; retain logs and report startup failure. Track only the processes, containers, browsers and temporary files you create. Do not disable authentication, edit .env, invent a fake service or add a bypass route to make verification easier.
3. Exercise each affected user flow and check the final result. Before saving, record initial values and set distinct target values; reload and read current values to check persistence. Before resetting, change the state, then check both inputs and results. Page loading or a click without an error is insufficient.
4. Use DOM/accessibility state for functional checks and relevant desktop/narrow viewport screenshots for layout. Inspect relevant responses and new errors when the flow uses an API. Do not expand scope to old warnings or unrelated requests.
5. Fix the smallest cause of a defect, rerun relevant tests and repeat the affected flow. Report missing documented credentials or an unreachable preview server as blocked. If an executed product flow fails because a real dependency API fails, keep the failure and its cause. List checks not performed and why.
6. Clean up your own processes, containers, browsers and temporary files on success or failure; preserve evidence needed for hand-off. Check git status --short again and preserve pre-existing edits and untracked files. Do not run git add, commit, push or global cleanup commands.
7. Report routes, actions, expected versus actual outcomes, supporting evidence, test results, fixes, blocked/untested items and cleanup. Do not claim a pass without evidence.

给 Agent 接上浏览器:Playwright MCP 或 CLI + Skill

上面的流程需要一条实际可操作的浏览器通道。Playwright 能自动控制浏览器、定位元素和检查状态;MCP 是让 Agent 调用外部工具的协议。Playwright MCP 将这些浏览器操作提供给 Agent,不是普通浏览器插件。

微软的仓库还列出 Playwright CLI + Skill 路线:用命令行与按需说明控制浏览器,适合编码任务中关注上下文开销的场景;MCP 则提供持续的工具接口和浏览器上下文。接上任何一路,都仍需要前面的验收规则。

原文使用 Node.js 20+;所核对的 Playwright MCP 官方 README 最低要求是 Node.js 18+。若还要安装后面的 katalepsis,则需 Node.js 22.12+。

按客户端选择注册命令。Claude Code:

claude mcp add playwright npx @playwright/mcp@latest

Codex:

codex mcp add playwright npx "@playwright/mcp@latest"

重载客户端连接,确认能看到浏览器工具。然后让 Agent 打开 TodoMVC 演示页,新增“Browser QA”待办并确认列表中出现。这个小测试验证通道可用,不能代替项目本身的验收。

Agent 怎样找到要点的控件?

Playwright MCP 可以返回无障碍快照:把页面整理成带角色、名称和状态的结构,例如 button "保存"、textbox "邮箱",并提供元素引用编号 ref。Agent 根据当前快照寻找控件,不必凭空猜 CSS 选择器。页面变化后要重新读取,不能照抄文章中的编号去点击。

语义定位有助于围绕用户看到的行为检查。每个测试也应隔离自己的数据和状态,避免依赖上一项检查留下的结果。但快照有按钮不代表按钮没有被遮挡,布局仍需查看截图。

可选工具:用 katalepsis 整理检查与证据

前面的流程不需要 katalepsis。原作者先用 Skill 让 Agent 真正操作应用,后来仍希望拿到便于 PR 审查的报告,于是开发了 MIT 开源的 katalepsis。browser-review 是流程 Skill,katalepsis 是执行检查和整理报告的命令行工具。

它把结果写入 artifacts/katalepsis/<run-id>/:HTML 报告供浏览器查看,Markdown 摘要可贴入 PR,manifest.json 保存结构化结果与证据文件的 SHA-256 哈希。截图、视频和 Playwright trace 按执行路径、配置及结果收集,不能假定每项检查都有全套证据。

哈希可用于检查文件一致性,不保证文件不可篡改,也不证明测试目标选对。trace 则能逐步查看动作、当时的 DOM 快照及网络信息,帮助还原失败过程,参见 Trace Viewer 文档。

两条执行路径:已有测试用 run,自然语言检查用 verify

katalepsis run katalepsis verify
输入 项目已有 Playwright 测试 写明操作意图和成功条件的 checks.json
模型 不需要模型密钥 自备 Anthropic、OpenAI 或 OpenRouter 密钥
执行 项目自己的 Playwright 运行器 模型调用内部 Playwright 浏览器工具,不依赖 Playwright MCP
判定 保留 Playwright 的原始断言结果,再分类整理 模型提交结论与断言编号,程序核对证据门槛

verify 的断言范围比普通 Playwright 测试窄,不能直接覆盖前面示例中的全部字段、持久化和布局检查;具体边界在后文说明。

安装与第一次使用

katalepsis 尚未发布到 npm。安装器从仓库获取源码并构建,需要 Node.js 22.12+、Git、pnpm 10 或可用的 corepack。以下为官方安装方式,本文没有在本机代为安装或运行它:

curl -fsSL https://www.katalepsis.glamboyosa.xyz/install.sh | sh

安装器将 katalepsis、katalepsis-mcp 放到 ~/.local/bin,需确保该目录在终端 PATH 中。

已有 Playwright 测试时,先将下列字段合并进项目已有 playwright.config.ts 的 use 配置,保留其他设置:

use: {
  baseURL: process.env.KATALEPSIS_BASE_URL ?? "http://localhost:3000",
  screenshot: "only-on-failure",
  video: "retain-on-failure",
  trace: "retain-on-failure",
},

项目须有 @playwright/test 和实际测试用例。启动应用后,在其根目录运行;将示例地址替换为真实运行的本地或预览地址:

katalepsis run --cwd . --url http://127.0.0.1:3000

浏览器无法启动且提示版本缺失时,可在同一命令加 --install-browsers,让工具安装与项目 Playwright 匹配的浏览器。verify 则会在首次运行时下载它使用的 Chromium。

地址接线要核对实际用法。 配置没有引用 KATALEPSIS_BASE_URL 时,工具会警告;出现变量名也不保证每条测试都使用它。测试中若写死 page.goto("http://localhost:8080/login"),仍可能跑错服务器。原作者在自己的两个项目中遇到过这种情况。

没有现成测试时,可在项目根目录保存 checks.json。下面是自拟的空表单检查,/signup、按钮描述和成功条件要按真实应用修改:

{
  "checks": [
    {
      "id": "empty-signup-validation",
      "name": "空表单提交检查",
      "startPath": "/signup",
      "intent": "不填写输入项,点击提交注册按钮。",
      "passCondition": "必填字段错误提示可见,且注册成功确认没有显示。"
    }
  ]
}

同时写明应出现和不应出现的结果,能把验收目标说清;复查报告时,仍需检查模型拿出的断言是否真在回答这个目标。

数据边界也要在使用前知道:verify 将页面结构和文字发送给模型提供商,截图不发送给该模型,而是留作报告证据。文本报告会脱敏 URL 查询值,但截图、视频、trace 不会自动脱敏。应使用适合外发与共享的测试数据;原作者在真实工作分支上,先换成合成种子数据并遵守自己的许可规则,再做模型检查。

以 OpenRouter 为例,先保存密钥、选择提供商并查询真实可用的模型 ID:

katalepsis auth set openrouter
katalepsis config provider openrouter
katalepsis models openrouter
katalepsis config model '替换为上方列出的模型ID'
katalepsis verify --cwd . --url http://127.0.0.1:3000 --checks checks.json

这里同样要先启动应用、替换地址。auth set 将密钥存入系统钥匙串,也可按工具支持的环境变量配置;不要把密钥放进命令行参数或 MCP 工具参数。

让 Coding Agent 调用检查,并读回报告

用 katalepsis 的 MCP 服务,可以让编码 Agent 在改完后自行运行检查、读取报告。以 Codex 为例,将 --root 后的占位符替换为项目的实际绝对路径:

codex mcp add katalepsis -- katalepsis-mcp --root /path/to/your-app

重载客户端连接,确认出现三个工具:verification_run_tests(已有测试)、verification_check_browser(自然语言检查)、verification_get_report(读取报告)。服务的项目目录边界由 --root 指定,模型认证先用前面的 auth 配好。

浏览器检查可能比一般工具调用耗时更长。Codex 可在 ~/.codex/config.toml 已有的 [mcp_servers.katalepsis] 配置节内加入 tool_timeout_sec = 600;不要放成全局配置,也不要覆盖该节原有启动参数。其他客户端参见 官方配置说明。

报告里的四种情况要分清

  • passed:满足该执行路径的通过规则。已有 Playwright 测试若重试后才通过,仍归 passed,同时保留 flaky 标记和每次尝试。
  • failed:检查实际失败。真实第三方 API 故障导致业务失败,也保留 failed;它说明这个环境中的流程失败,不自动证明根因在当前改动。
  • blocked:无法形成有效结论。例如预览探活发生网络错误、返回 502/503/504,浏览器无法启动,或模型检查遇到证据不足、工具错误、步骤/token/时间预算耗尽。
  • not tested:没有运行,例如被过滤或跳过。工具将其另列为 notTested 并注明原因,不能算进通过数量。

预览本身不可达时,工具会在浏览器测试前阻断所选检查,避免把环境离线误报成多个功能缺陷。已经运行后发现的业务失败,则需按实际证据判断。

模型说“通过”,程序怎样检查它的证据?

在 verify 中,模型可以调用 navigate、snapshot、click、fill、press、assert 和 finish。assert 由工具在真实浏览器中执行,记录结果、截图和编号,例如 a1;模型最后用 finish 声明结论,并引用断言编号。

模型的文字判断不能自行盖章。程序函数 decideOutcome 核对声明和执行记录:

  1. 引用必须对应实际执行过的断言。没有结束结论、没有引用或引用未知编号,都不能通过。
  2. 声称通过时,引用的断言必须全部通过,并至少有一条可见性断言;只证明 URL 变化或某元素隐藏还不够。
  3. 如果引用之后又出现未被引用的断言失败,不能忽略较新的矛盾证据继续报通过。
  4. 声称失败也需要引用真正失败的断言;没有失败证据的失败声明同样会受阻。

这些不符合证据要求的声明会归为 blocked: no-evidence。它约束的是模型提交的证据,不是在自动审核全部业务需求。

页面本来就有的标签,不能独自证明操作成功

原作者曾遇到一个模型用“邮箱输入框的标签可见”证明表单有效。但标签在点击前就有,断言即使为真,也没说明提交产生了什么结果。

因此,每项检查会使用分开的浏览器上下文:模型操作一份页面,另一份加载同样地址但不执行这些交互,用作未操作对照。模型通过 navigate 直接打开的新 URL,也会建立相应对照副本。

执行可见性断言时,工具检查同一元素是否也在这些未操作副本中成立,并记录 trueAtStart。对于通常的交互检查,至少要有一条通过的可见断言,在这些对照里原先不成立;如果引用的可见内容全都原先存在,就不能凭此通过。

检查“页面初始状态”的用例可在 checks.json 对应检查对象中加 "observeOnly": true,跳过上述新变化要求,但仍需真实执行并通过的可见性断言。“初始状态”不等于只检查首屏。

模型说通过,证据规则会接受吗?

改变声明与断言条件,观察 passed、failed、blocked 如何分流。这演示证据门槛,不代替对用户要求的判断。

仲裁引擎裁决状态: passed
【通过证据门槛】引用断言已通过,且至少有一项可见结果不在未操作的页面副本中;这还不能证明它满足本项用户要求。

对照页会再次请求网址,浏览器上下文隔离不等于后端数据隔离。一次性激活链接、访问就改变服务端状态的页面,可能因第二次加载而不同;对照加载失败也可能使检查受阻。

断言为真,也可能没有回答需求

假设要求是“提交空表单后显示错误”。模型没有检查错误,而是点击普通链接去了“关于我们”,再证明新标题可见。这个标题是实际出现的新内容,可能满足可见性和变化门槛,却与表单校验无关。

所以,人复查报告时仍要把成功条件、实际动作、所引断言放在一起看。真实执行的断言能约束无证据的声明,不能自动保证断言与需求相关。

verify 当前只提供 visible、hidden、URL 包含三类模型断言。前面保存案例的输入框当前值、开关状态、刷新后的持久化,以及控制台、网络和多视口布局,应由普通浏览器工具或 Playwright 测试补足;这是该工具适配层的范围,不是 Playwright 本身做不到。

固定的是证据判定规则,模型选择的操作仍会随模型和运行变化。快速消失的提示可能在断言前消失,因此失败时还要回看截图、动作和 trace,区分产品失败与检查没有捕捉到状态。仓库的实现状态文档自报:外部开发者独立安装验收和跨平台覆盖仍未完整;原作者的试用结果不能当作普遍可靠性保证。

测对地址后,还要确认预览是哪次代码

代码已改,预览可能尚未更新。旧预览的绿灯不能证明本次改动。katalepsis 会按顺序读取预览的提交标识,再与当前检出代码的 HEAD 比较:

  1. 响应头 x-commit-sha;
  2. HTML 的 <head> 前 512KB 中的 <meta name="commit-sha">;
  3. 调用方传入的 --preview-commit <sha>。

第三种只应传已知实际部署的 SHA,不能拿期望部署的 pushed SHA 或 GITHUB_SHA 冒充。结果分三种:

  • confirmed:与 checkout HEAD 匹配,也允许至少 7 位的有效短 SHA 前缀。这仍不能证明工作区未提交的修改已进入预览。
  • unknown:无法确认版本;报告注明未知,检查仍可运行。
  • mismatched:明确不匹配。检查仍执行,本来会通过的运行改为 blocked,已发生的 failed 保留。

动作按序执行,并限制每项检查的消耗

作者在试用中见过两个并行 fill 争用焦点、把姓名填进邮箱字段的问题。工具因此让浏览器动作通过串行队列,上一项结束才执行下一项;这不表示页面所有网络请求都串行。

每项模型检查使用独立浏览器上下文并开启 trace,默认最多 15 步、200,000 token、120 秒;触及配置预算后报告 blocked 和原因。顶层导航只允许预览 origin 及显式 --allow-origin 列出的 origin(协议、主机和端口)。外部子资源仍可加载,这不是全网络沙箱。

在宣布完成之前,交出对应的运行结果

这套流程用于用户可见的运行行为:表单、筛选、弹窗、导航、响应式布局和刷新后的状态等。修文档错字、不影响页面的后端改动,不必为此启动浏览器;按改动选择合适的检查。

已有测试、浏览器验收、代码审查和重要改动的人工查看各有作用。回到最初的设置页:Agent 交付的应当包括它改了什么值、怎样保存和刷新、最终读到了什么、遇到了什么问题,以及你能在哪里复查证据。这样的交接,才有机会减少人反复截图、传话和催它重试的来回。

来源
How to Make Your Coding Agent Check Its Work in the BrowserTimothy Ogbemudia·查看主材料
本站说明
本文结合原文方法、官方文档与开源实现解释;未将作者的工具运行结果当成本次实测。
↑ 正文结束
✓ 本篇全文免费开放

会员可复制、下载全文 Markdown,还能让你的 AI 订阅和提问。

阅读原文 ↗
📮 新解读第一时间进邮箱

读完觉得有用?留个邮箱,每篇新解读发布就送达,随时退订。