Playwright 介绍和 AI 用法
Playwright 是微软维护的浏览器自动化和端到端测试工具。它可以驱动 Chromium、Firefox、WebKit,适合做前端页面测试、跨浏览器验证、截图、录制、调试和 CI 自动化。
在 AI 编程培训里,Playwright 有两个完全不同的角色:
- 作为测试框架:写进项目代码里,形成可重复运行的端到端测试。
- 作为 AI 浏览器工具:让 Claude Code、Codex 这类代理打开页面、点击、输入、截图、读取页面状态。
这两个角色不要混在一起。前者是“项目质量资产”,后者是“AI 临时验证工具”。
Playwright 能做什么
| 能力 | 适合场景 |
|---|---|
| 打开页面并点击输入 | 验证登录、表单、筛选、管理后台操作 |
| 多浏览器测试 | Chromium、Firefox、WebKit 兼容性 |
| 截图和视频 | 记录 UI 问题,留课堂演示证据 |
| Trace Viewer | 回放失败步骤,定位失败原因 |
| Codegen | 手动操作页面并生成测试脚本 |
| MCP / Agent CLI | 让 AI 通过工具操作浏览器 |
形态一:项目里的 Playwright Test
这是最标准、最推荐沉淀下来的形态。它会在项目中生成测试配置和测试文件。
安装:
bash
npm init playwright@latest运行测试:
bash
npx playwright test打开 HTML 报告:
bash
npx playwright show-report录制测试:
bash
npx playwright codegen http://127.0.0.1:5173/适合写入仓库的内容:
text
playwright.config.ts
tests/
admin-login.spec.ts
ai-training-nav.spec.ts课堂建议:当示例项目有稳定页面后,再让 AI 帮忙补 Playwright Test。不要在页面结构还没稳定时过早写大量 E2E 测试。
形态二:Playwright MCP
Playwright MCP 是把浏览器能力暴露给 AI 工具的方式。AI 会通过 MCP 工具打开网页、读取 accessibility snapshot、点击元素、输入文本、截图。
通用 MCP 配置示例:
json
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"]
}
}
}MCP 交互通常是这条链路:
browser_navigate打开 URL。browser_snapshot读取页面可访问性树。browser_click、browser_type、browser_fill_form操作页面。- 再次 snapshot 或截图,确认结果。
这适合做“AI 看得见页面”的验证,例如:
text
打开 http://127.0.0.1:5173/ai-training/,确认左侧有课程导航和环境与杂项知识点两个分组,并截图。形态三:Playwright Agent CLI
Playwright Agent CLI 是给编码代理使用的浏览器命令行工具。它可以全局安装,也可以用 npx 临时运行。
安装:
bash
npm install -g @playwright/cli@latest
playwright-cli --help不全局安装也可以:
bash
npx playwright-cli --help安装浏览器:
bash
playwright-cli install-browser
playwright-cli install-browser --with-deps给支持本地 skills 的编码代理安装 Playwright 技能:
bash
playwright-cli install --skills技能安装后,AI 可以更好地理解 playwright-cli 的命令、快照、截图、会话和调试流程。没有安装 skills 时,也可以让 AI 先读取 playwright-cli --help 再操作。
在 Claude Code 里的用法
Claude Code 可以通过三种方式使用 Playwright。
| 形态 | 用法 | 适合场景 |
|---|---|---|
| Playwright Test | 让 Claude 修改项目,新增 tests/*.spec.ts | 稳定功能的自动化回归 |
| Playwright MCP | 用 claude mcp add 或 .mcp.json 连接 MCP server | 让 Claude 直接操作本地网页 |
| Agent CLI + Skills | 安装 playwright-cli 和 skills | 让 Claude 按命令行工具进行浏览器验证 |
Claude Code 添加 MCP 的典型命令形式:
bash
claude mcp add playwright -- npx -y @playwright/mcp@latest也可以在项目 .mcp.json 中配置,方便团队共享:
json
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["-y", "@playwright/mcp@latest"]
}
}
}课堂提示词示例:
text
请用 Playwright 打开本地页面,验证登录后能进入后台,并把失败点和截图保存下来。如果要沉淀成正式测试:
text
请为后台登录和文档分类筛选补 Playwright Test,先写最小可用用例,再运行 npx playwright test。在 Codex 里的用法
Codex 也有三种常见形态。
| 形态 | 用法 | 适合场景 |
|---|---|---|
| 项目测试 | 让 Codex 安装 @playwright/test 并写测试文件 | 长期回归测试 |
| MCP server | 在 ~/.codex/config.toml 或项目 .codex/config.toml 配置 MCP | 让 Codex CLI / IDE 使用浏览器工具 |
| Codex App 浏览器能力 | 在 Codex App 内用可用的浏览器插件或 in-app browser 验证页面 | 本地前端人工/AI 联合验收 |
Codex MCP CLI 形式:
bash
codex mcp add playwright -- npx -y @playwright/mcp@latestCodex config.toml 形式:
toml
[mcp_servers.playwright]
command = "npx"
args = ["-y", "@playwright/mcp@latest"]Codex App 中的提示词可以更直接:
text
用浏览器打开 http://127.0.0.1:4175/ai-training/,检查左侧导航是否包含环境与杂项知识点。如果当前 Codex 会话已经有 Browser Use 或 Playwright 工具,优先用当前工具验证,不一定要在项目里安装 Playwright Test。只有需要长期回归时,才把测试文件写进仓库。
Claude Code 和 Codex 的差异
| 对比项 | Claude Code | Codex |
|---|---|---|
| MCP 配置习惯 | claude mcp add、.mcp.json、/mcp 查看状态 | codex mcp add、~/.codex/config.toml 或项目 .codex/config.toml |
| 技能入口 | Claude Skills、slash 命令、插件 | Codex Skills、插件、$skill 或自动触发 |
| 浏览器验证 | 常用 Playwright MCP 或 Agent CLI | Codex App 可用 in-app browser,也可接 Playwright MCP |
| 测试沉淀 | 写入 tests/*.spec.ts 并由项目命令运行 | 同样写入项目测试,适合 CI 和后续回归 |
| 课堂演示重点 | 让 Claude 通过 MCP 看页面、写 E2E 测试 | 让 Codex 用浏览器验证本地页面,并把验证证据写进最终汇报 |
什么时候用哪一种
| 目标 | 推荐形态 |
|---|---|
| 课堂上快速验证页面是否能点 | Playwright MCP、Agent CLI 或 Codex in-app browser |
| 要把登录流程长期保留下来 | Playwright Test |
| AI 需要看页面后再改 UI | MCP / in-app browser |
| CI 中每次构建都跑 | Playwright Test |
| 临时抓一张页面截图 | MCP、Agent CLI 或当前浏览器工具 |
安全与稳定性提醒
- 不要让 AI 在真实生产后台随意点击删除、支付、发短信、发邮件等操作。
- Playwright MCP 是工具,不是测试资产;正式回归仍要写
tests/*.spec.ts。 - E2E 测试不要覆盖所有细节,优先覆盖登录、关键业务流、权限边界和发布前冒烟路径。
- 选择稳定 locator:优先角色、文本、
data-testid,少用脆弱 CSS 路径。 - 本地服务端口要写清楚,例如
http://127.0.0.1:4175/,避免 AI 打错环境。