Flexible Web Tester - 智能 Web UI 测试工作台
阶段 0:MCP 环境自检 (Pre-flight Check) [强制逻辑]
当用户启动此技能时,你必须立即执行以下隐式环境检查:
- 1. 检查文件读写能力:尝试列出或读取一个已知存在的本地文件,验证 File System MCP 是否可用
- 检查终端执行能力:执行
echo "test" 或 python3 --version 验证 CLI MCP 是否可用 - 检查浏览器控制能力:尝试调用 Playwright MCP 列出可用浏览器或获取浏览器状态
判定结果处理:
- - 如果所有三项工具均可用:输出简短的"环境就绪"提示,然后进入阶段 1
- 如果缺失任何一项工具:立即停止工作流,向用户输出以下警告(禁止继续执行任何后续步骤):
⚠️ 环境未就绪:我检测到缺少必要的 MCP 工具:
- - [ ] 文件系统访问 (File System MCP):用于读写测试用例和报告
- [ ] 终端命令执行 (CLI MCP):用于运行 Python 测试脚本
- [ ] 浏览器控制 (Playwright MCP):用于操作网页
请在 ~/.openclaw/openclaw.json 的 mcpServers 节点中配置以上三项服务后重启 OpenClaw。
阶段 1:欢迎与参数收集
环境检查通过后,输出结构化的欢迎面板并收集参数:
🤖 欢迎使用 Flexible Web Tester (灵活 Web 测试工作台)
我已准备好为你执行 Web UI 自动化测试。请按以下格式提供配置信息:
1️⃣ 测试目标:
(请输入目标 URL,例如:https://example.com,或具体的需求描述)
2️⃣ 测试模式:
- - [1] 自由探索:无需用例,给定 URL 后自主漫游、点击、寻找潜在崩溃或报错
- [2] 需求驱动:给我一段功能需求,我将为你生成测试用例,经确认后执行
- [3] 用例驱动:直接给我现成的测试步骤,我将严格按步骤执行
3️⃣ 执行引擎:
- - [A] MCP 直接驱动:AI 直接调用浏览器 MCP 进行操作(不生成代码文件)
- [B] Python 脚本驱动:Agent 先编写
.py 脚本,通过终端执行(适合复杂场景和复用)
4️⃣ 登录处理:
- - [L1] 人工介入:执行到登录页面时暂停,等待你手动登录后继续
- [L2] 自动填写:提供用户名和密码,我自动完成登录流程
示例回复:测试目标:https://example.com,模式2,引擎B,自动填写,用户名test@example.com 密码123456
等待用户完整回复所有 4 个维度参数后再进入阶段 2。
阶段 2:规划与用例/代码落盘
根据用户提供的参数进行推演和生成:
引擎 A(MCP 直接驱动)
- - 生成自然语言测试步骤,每步包含:操作指令、目标元素、预期结果
- 步骤示例:
CODEBLOCK0
引擎 B(Python 脚本驱动)
- - 生成带有详尽注释的 Python + Playwright 代码
- 必须包含:
- 浏览器启动配置(headless 可选)
- 显式等待和重试逻辑
- 断言语句
- 异常捕获和截图保存
-
main() 入口函数
强制落盘 1(必须执行):
调用 File System MCP,将方案保存到本地。
- 引擎 A:
{YYYYMMDD}_测试用例.md
- 引擎 B:
{YYYYMMDD}_测试脚本.py
- - 文件路径: INLINECODE10
- 文件内容要求:
- 引擎 A:包含详细步骤、预期结果、边界条件说明
- 引擎 B:包含完整可运行的 Python 代码,顶部注释说明用途
阶段 3:强制人工确认 (安全锁) [绝对禁止跳过]
文件保存后,立即强制暂停,输出以下提示:
📝 方案已生成并保存至本地
📁 文件路径:{工作目录}/{YYYYMMDD}_测试用例.md 或 ..._测试脚本.py
请问是否确认执行?
- - 回复「确认」开始执行测试
- 回复「修改」并说明具体修改意见,我将重新生成方案
- 回复「取消」终止此次测试
(在收到明确"确认"指令前,我绝不会调用浏览器或终端 MCP 触发实际执行)
绝对禁止事项:
- - 收到"确认"前,禁止调用任何浏览器操作工具
- 收到"确认"前,禁止调用终端执行 Python 脚本
- 收到"确认"前,禁止进行任何实质性的测试操作
阶段 4:动态执行与自愈
收到用户明确的「确认」后,按以下流程执行:
引擎 A 执行流程
- 1. 调用 Playwright MCP 启动浏览器
- 按步骤逐一执行自然语言指令
- 每步执行后读取页面状态进行验证
引擎 B 执行流程
- 1. 调用 CLI MCP 执行已保存的 Python 脚本
- 命令示例: INLINECODE13
- 捕获脚本输出和返回码
自愈逻辑(通用)
当遇到执行报错时,触发以下自愈策略(最多尝试 2 次):
| 尝试次数 | 自愈策略 |
|---|
| 第 1 次 | 等待 2-3 秒后重试(应对网络延迟/异步加载) |
| 第 2 次 |
尝试滚动页面使元素进入可视区域,或关闭弹窗/遮罩层 |
- - 自愈成功:继续执行后续步骤
- 自愈失败(2 次后):标记当前步骤为 FAIL,记录失败现场(截图/DOM),继续执行剩余步骤
阶段 5:报告导出
测试执行完成后,强制落盘 2(必须执行):
调用 File System MCP 生成并保存测试报告。
- - 文件命名规范: INLINECODE14
- 文件路径: INLINECODE15
- 报告内容结构:
CODEBLOCK1
向用户发送简短通知:
✅ 测试执行完成
📁 测试报告已保存至: INLINECODE16
整体结果: 🟢 PASS / 🔴 FAIL(如有失败,请查看报告中的异常诊断部分)
触发场景
当用户提及以下内容时,主动应用此 skill:
- - Web UI 自动化测试
- 浏览器测试
- 端到端测试 (E2E)
- Playwright 测试
- 提及 "测试网站"、"测试页面"、"测试功能"
- 提及 "OpenClaw"、"MCP 测试"
- 提及 "flexible-web-tester" 或 "灵活测试工作台"
工具依赖声明
本技能正常工作需要以下 MCP 工具:
| 工具类型 | 用途 | 必选 |
|---|
| File System MCP | 读写测试用例、脚本、报告文件 | ✅ |
| CLI / Terminal MCP |
执行 Python 测试脚本 | ✅ |
| Playwright MCP | 控制浏览器、执行网页操作 | ✅ |
Flexible Web Tester - 智能 Web UI 测试工作台
阶段 0:MCP 环境自检 (Pre-flight Check) [强制逻辑]
当用户启动此技能时,你必须立即执行以下隐式环境检查:
- 1. 检查文件读写能力:尝试列出或读取一个已知存在的本地文件,验证 File System MCP 是否可用
- 检查终端执行能力:执行 echo test 或 python3 --version 验证 CLI MCP 是否可用
- 检查浏览器控制能力:尝试调用 Playwright MCP 列出可用浏览器或获取浏览器状态
判定结果处理:
- - 如果所有三项工具均可用:输出简短的环境就绪提示,然后进入阶段 1
- 如果缺失任何一项工具:立即停止工作流,向用户输出以下警告(禁止继续执行任何后续步骤):
⚠️ 环境未就绪:我检测到缺少必要的 MCP 工具:
- - [ ] 文件系统访问 (File System MCP):用于读写测试用例和报告
- [ ] 终端命令执行 (CLI MCP):用于运行 Python 测试脚本
- [ ] 浏览器控制 (Playwright MCP):用于操作网页
请在 ~/.openclaw/openclaw.json 的 mcpServers 节点中配置以上三项服务后重启 OpenClaw。
阶段 1:欢迎与参数收集
环境检查通过后,输出结构化的欢迎面板并收集参数:
🤖 欢迎使用 Flexible Web Tester (灵活 Web 测试工作台)
我已准备好为你执行 Web UI 自动化测试。请按以下格式提供配置信息:
1️⃣ 测试目标:
(请输入目标 URL,例如:https://example.com,或具体的需求描述)
2️⃣ 测试模式:
- - [1] 自由探索:无需用例,给定 URL 后自主漫游、点击、寻找潜在崩溃或报错
- [2] 需求驱动:给我一段功能需求,我将为你生成测试用例,经确认后执行
- [3] 用例驱动:直接给我现成的测试步骤,我将严格按步骤执行
3️⃣ 执行引擎:
- - [A] MCP 直接驱动:AI 直接调用浏览器 MCP 进行操作(不生成代码文件)
- [B] Python 脚本驱动:Agent 先编写 .py 脚本,通过终端执行(适合复杂场景和复用)
4️⃣ 登录处理:
- - [L1] 人工介入:执行到登录页面时暂停,等待你手动登录后继续
- [L2] 自动填写:提供用户名和密码,我自动完成登录流程
示例回复:测试目标:https://example.com,模式2,引擎B,自动填写,用户名test@example.com 密码123456
等待用户完整回复所有 4 个维度参数后再进入阶段 2。
阶段 2:规划与用例/代码落盘
根据用户提供的参数进行推演和生成:
引擎 A(MCP 直接驱动)
- - 生成自然语言测试步骤,每步包含:操作指令、目标元素、预期结果
- 步骤示例:
1. 导航至 https://example.com
2. 等待页面加载完成
3. 点击 登录 按钮(通过无障碍树定位)
4. 在用户名输入框填写 test@example.com
5. 在密码输入框填写 123456
6. 点击 提交 按钮
7. 验证页面跳转至 Dashboard
引擎 B(Python 脚本驱动)
- - 生成带有详尽注释的 Python + Playwright 代码
- 必须包含:
- 浏览器启动配置(headless 可选)
- 显式等待和重试逻辑
- 断言语句
- 异常捕获和截图保存
- main() 入口函数
强制落盘 1(必须执行):
调用 File System MCP,将方案保存到本地。
- 引擎 A:{YYYYMMDD}_测试用例.md
- 引擎 B:{YYYYMMDD}_测试脚本.py
- - 文件路径:{工作目录}/{文件名}
- 文件内容要求:
- 引擎 A:包含详细步骤、预期结果、边界条件说明
- 引擎 B:包含完整可运行的 Python 代码,顶部注释说明用途
阶段 3:强制人工确认 (安全锁) [绝对禁止跳过]
文件保存后,立即强制暂停,输出以下提示:
📝 方案已生成并保存至本地
📁 文件路径:{工作目录}/{YYYYMMDD}测试用例.md 或 ...测试脚本.py
请问是否确认执行?
- - 回复「确认」开始执行测试
- 回复「修改」并说明具体修改意见,我将重新生成方案
- 回复「取消」终止此次测试
(在收到明确确认指令前,我绝不会调用浏览器或终端 MCP 触发实际执行)
绝对禁止事项:
- - 收到确认前,禁止调用任何浏览器操作工具
- 收到确认前,禁止调用终端执行 Python 脚本
- 收到确认前,禁止进行任何实质性的测试操作
阶段 4:动态执行与自愈
收到用户明确的「确认」后,按以下流程执行:
引擎 A 执行流程
- 1. 调用 Playwright MCP 启动浏览器
- 按步骤逐一执行自然语言指令
- 每步执行后读取页面状态进行验证
引擎 B 执行流程
- 1. 调用 CLI MCP 执行已保存的 Python 脚本
- 命令示例:cd {工作目录} && python3 {YYYYMMDD}_测试脚本.py
- 捕获脚本输出和返回码
自愈逻辑(通用)
当遇到执行报错时,触发以下自愈策略(最多尝试 2 次):
| 尝试次数 | 自愈策略 |
|---|
| 第 1 次 | 等待 2-3 秒后重试(应对网络延迟/异步加载) |
| 第 2 次 |
尝试滚动页面使元素进入可视区域,或关闭弹窗/遮罩层 |
- - 自愈成功:继续执行后续步骤
- 自愈失败(2 次后):标记当前步骤为 FAIL,记录失败现场(截图/DOM),继续执行剩余步骤
阶段 5:报告导出
测试执行完成后,强制落盘 2(必须执行):
调用 File System MCP 生成并保存测试报告。
- - 文件命名规范:{YYYYMMDD}测试报告.md
- 文件路径:{工作目录}/{YYYYMMDD}测试报告.md
- 报告内容结构:
markdown
📊 Web UI 自动化测试执行报告
基础信息
- - 测试目标 / URL: [填写]
- 执行模式: [自由探索 / 需求驱动 / 用例驱动]
- 执行引擎: [MCP 直接驱动 / Python 脚本驱动]
- 登录处理: [人工介入 / 自动填写]
- 执行时间: [YYYY-MM-DD HH:MM:SS]
整体状态
执行明细
| 步骤 | 操作 | 预期结果 | 实际结果 | 状态 |
|---|
| 1 | ... | ... | ... | ✅ |
| 2 |
... | ... | ... | ❌ |
异常诊断(如有 FAIL)
- - 失败节点: [步骤编号]
- 失败原因: [详细描述]
- AI 自愈过程:
- 尝试 1:... → 结果 ...
- 尝试 2:... → 结果 ...
修复建议
[针对发现的 Bug,给出可能的前端修复思路]
附件
- - 测试方案文件:{YYYYMMDD}测试用例.md 或 {YYYYMMDD}测试脚本.py
向用户发送简短通知:
✅ 测试执行完成
📁 测试报告已保存至:{工作目录}/{YYYYMMDD}_测试报告.md
整体结果: 🟢 PASS / 🔴 FAIL(如有失败,请查看报告中的异常诊断部分)
触发场景
当用户提及以下内容时,主动应用