用途
cdp-verification 用于通过 Chrome DevTools Protocol(CDP)驱动正在运行的桌面应用,对 UI 行为进行端到端验证、复现或确认。它面向需要验证 bug 修复、回归问题或新功能行为的场景,强调以真实用户交互和可核对证据作为验证依据。
主要能力
- 通过 CDP 连接到 Electron 渲染进程,定位正确的工作区、渲染器 URL/端口和当前路由。
- 使用真实浏览器输入和可见 UI 导航复现用户操作步骤,而非仅调用内部 API 或修改 DOM。
- 采集操作前后的截图,并配合相关 CDP 测量值(scrollTop、焦点元素、路由、持久化状态)进行核对。
- 覆盖路由切换、工作区/窗格/文件切换、重新挂载、关闭重开等生命周期行为。
- 对拖拽、缩放、滚动联动等连续交互进行边界、往返、停留、长扫、重复和主线程卡顿等对抗性测试。
- 捕获 console.error 并断言为空,识别“Maximum update depth exceeded”等回归信号。
- 支持在真实布局和用户实际数据形态下验证,避免因临时调整布局而掩盖依赖布局的失败。
- 提供 CDP 认证修复说明,包括本地开发环境使用 DEV_EMAIL/DEV_PASSWORD 建立会话 cookie,以及非本地环境通过 authClient.getSession 验证 bearer 会话。
使用方式
资料提供了 mechanics 说明,适用于 apps/desktop 中的 Electron 桌面应用。典型方式是以未占用端口启动开发应用,例如 RENDERER_REMOTE_DEBUG_PORT=9222 bun dev,然后通过页面目标的 webSocketDebuggerUrl 以 WebSocket 连接(Bun 内置,无依赖)。示例脚本为 apps/desktop/scripts/cdp-smoke-integrations.ts。测试前需从根 .env 读取本工作区的 DESKTOP_VITE_PORT 和 NEXT_PUBLIC_API_URL,确认 Electron 进程和渲染器属于当前工作区,并在渲染器内验证 /api/auth/get-session。使用脚本时需显式传入匹配值,例如 RENDERER_REMOTE_DEBUG_PORT=<port> NEXT_PUBLIC_API_URL=<api-origin> bun run apps/desktop/scripts/cdp-smoke-integrations.ts。
认证修复方面,setup.local.sh 创建的工作区需在本地 localhost API 环境下,从 @superset/shared/dev-credentials 导入 DEV_EMAIL 和 DEV_PASSWORD,通过 Runtime.evaluate 向 ${NEXT_PUBLIC_API_URL}/api/auth/sign-in/email 发起 POST(JSON、credentials: "include"),再以 credentials: "include" 重新获取会话并确认 session 与 session.activeOrganizationId。非本地工作区应使用应用正常登录流程,或通过 Runtime.evaluate 导入 /lib/auth-client.ts 并调用 authClient.getSession({ fetchOptions: { throw: false } })。不得将本地开发凭据用于远程或共享 API,不得打印令牌或响应体。
适用场景
- 验证报告中的 UI bug 或回归是否被修复。
- 确认新功能在真实用户旅程中的行为。
- 对拖拽排序、窗格切换、滚动联动等易受布局和时序影响的交互做稳定性验证。
- 需要截图与数值证据共同支撑的端到端验收。
限制
资料明确要求:不能假设端口 9222 或连接其他工作区的渲染器;仅 CDP 端点响应不足以证明归属。合成流程不能替代报告的交互;测试通过但用户仍观察到 bug 时,应视为复现不完整。不得通过调整 UI 布局使坐标便利后再泛化结论。对于连续交互,仅 A 到 B 的脚本化手势不足以证明稳定性。认证方面,原始 Runtime.evaluate 的 fetch 无法读取内存中的 bearer-token closure;本地开发登录按钮持久化 bearer token 但使用 credentials: "omit",不保证原始 CDP 探测所需的 cookie。修复认证时不应仅因 cookie 缺失、连接字符串过期或 Next.js 缓存损坏而使用 setup --force;资料仅列出一种明确例外:会话恢复卡在“Restoring your session”、Local Admin 登录按钮返回无响应体 500、get-session 返回 200 且数据库 select 1 可能成功时,可考虑 ./.superset/setup.sh --force,但会清除手动 .env 修改并重置 superset-dev-data/。资料未提供该技能的收费、价格、平台支持范围或效果保证信息。