UI端到端控制技能

385697 80138 更新时间: 2026-07-15 13:27:33

这是一个用于端到端控制用户界面的Agent技能,基于OpenClaw项目开发。它允许AI助手通过命令行或脚本直接操控图形用户界面元素,实现自动化测试、界面操作和流程控制。核心功能包括:模拟鼠标点击、键盘输入、窗口管理、元素定位与状态检测。适用于需要跨平台、跨操作系统进行UI自动化操作的场景,如软件测试、数据录入、重复性界面任务自动化等。该技能强调安全性和可控性,支持自定义脚本扩展,适合开发者和测试工程师集成到工作流中。

安装
bunx skills add https://github.com/openclaw/openclaw --skill control-ui-e2e
技能详情 readonly

一、技能概述

该技能适用于 Control UI 相关的变更,这些变更需要通过真实的浏览器流程配合确定性的 Gateway 数据进行验证。它能够模拟完整的用户交互路径,从应用启动、Gateway 握手到请求发送和 UI 状态变化,提供端到端的可信验证。

核心原则:保持场景确定性,不使用真实的 provider 密钥、真实的通道凭证或真实的 Gateway,除非用户明确要求实时证明。


二、核心功能

1. 测试结构

  • 使用 ui/src/**/*.e2e.test.ts 编写完整的 GUI 流程测试

  • 使用 ui/src/test-helpers/control-ui-e2e.ts 启动 Vite Control UI 并安装模拟的 Gateway WebSocket

  • 优先使用现有的 *.browser.test.ts 或单元测试处理窄化的渲染逻辑;E2E 测试用于覆盖路由、应用启动、Gateway 握手、请求和可见 UI 行为的组合证明

2. 运行命令

针对单个 E2E 测试(在 Codex worktree 中):

node scripts/run-vitest.mjs run --config test/vitest/vitest.ui-e2e.config.ts --configLoader runner ui/src/ui/e2e/chat-flow.e2e.test.ts

运行完整本地测试

pnpm test:ui:e2e

依赖缺失时:在 Codex worktree 中执行 pnpm install 安装一次;对于广泛的 GUI 证明或依赖密集型检查,使用 Testbox/Crabbox 而非在本地运行完整的 pnpm 测试。

3. 可视化证明(Visual Proof)

运行模拟 Control UI/仪表盘验证以支持用户可见功能时,默认生成可视化证明,除非用户明确选择退出。

工作流程

  1. 保持 Vitest E2E 断言确定性;不提交生成的截图或视频

  2. E2E 测试之后或同时,运行模拟 Control UI 应用:pnpm dev:ui:mock -- --port .

  3. 使用 Playwright 驱动 Chromium 访问本地模拟 URL,为每个有意义的状态捕获视频和截图

  4. 使用 browser.newContext({ recordVideo: { dir, size }, viewport })page.screenshot({ path }),并在关闭上下文前报告视频路径

  5. 产物放在 .artifacts/control-ui-e2e/ 下,在最终回答中报告绝对路径

重要原则

  • 将录制视为验证,而非仅演示捕获

  • 如果录制器失败或显示意外行为,停止、修复行为、添加或更新回归测试,然后重新录制

  • 如果可视化证明被阻塞,陈述确切的阻塞原因,并仍报告文本 E2E 证据

4. Mock 模式

启动应用服务器,在 page.goto 之前安装 mock,然后同时断言 Gateway 流量和可见 UI

const server = await startControlUiE2eServer();
const page = await context.newPage();
const gateway = await installMockGateway(page, {
  historyMessages: [{ role: "assistant", content: [{ type: "text", text: "Ready." }] }],
});
await page.goto(`${server.baseUrl}chat`);
await page.locator(".agent-chat__composer-combobox textarea").fill("hello");
await page.getByRole("button", { name: "Send message" }).click();
const request = await gateway.waitForRequest("chat.send");
await gateway.emitChatFinal({ runId: String(request.params.idempotencyKey), text: "Done." });
await page.getByText("Done.").waitFor();

通过 installMockGateway 扩展类型化的场景选项或方法响应,以支持新的 Gateway 表面需求。

5. 独立录制(Standalone Recording)

当需要对已运行的模拟 Control UI URL 进行录制时,使用临时 Playwright 脚本或 playwright test spec,保持录制流程聚焦

  • 打开模拟 URL,通过稳定的 data-* 选择器或面向用户角色的选择器进行交互,等待断言的状态而非依赖固定 sleep

  • 同时断言可见 UI 状态和模拟 Gateway 流量(针对请求驱动的流程)

  • 仅在断言后使用短 sleep,使录制的视频可读

  • 生成的视频存放在 .artifacts/control-ui-e2e/ 下,不提交


三、主要用途

  1. Control UI 变更的端到端验证
    当修改了 Control UI 的路由、应用启动、Gateway 握手或请求/响应流程时,通过真实浏览器环境验证整体行为。

  2. 可视化回归测试
    为面向用户的功能变更生成截图和视频证据,供 PR 审查时直观对比。

  3. 模拟 Gateway 通信测试
    在不依赖真实 Gateway 的情况下,通过 mock 验证 UI 与 Gateway 之间的完整通信链路。

  4. PR 审查中的浏览器证明
    在 PR 中提供可代理验证的浏览器录制证据,替代纯文本描述。

  5. 调试 Control UI 交互问题
    当发现 UI 行为异常时,通过录制视频定位具体的交互步骤和状态变化。


四、重要原则

  1. 保持确定性:不使用真实的 provider 密钥、通道凭证或真实 Gateway

  2. 默认生成可视化证明:除非用户明确选择退出

  3. 不提交产物:截图和视频不提交到仓库

  4. 录制即验证:如果录制失败或行为异常,先修复再重新录制

  5. 同时断言 UI 和流量:对请求驱动的流程,同时验证可见 UI 状态和模拟 Gateway 流量

  6. 优先使用选择器:使用稳定的 data-* 选择器或角色选择器,避免依赖固定 sleep


总结:Control UI E2E 是 OpenClaw Control UI 图形界面的端到端测试技能,通过 Vitest + Playwright 在真实浏览器中执行自动化测试,覆盖模拟 Gateway WebSocket、仪表盘运行、截图/录屏等完整流程。它默认生成可视化证明作为验证手段,适用于 Control UI 变更的回归测试、PR 审查和交互问题调试场景。