Skip to content

3.5 Playwright MCP 与 Claude Code 深度集成指南

来源: Microsoft Playwright MCP、Simon Willison's TIL、Testomat.io 等多个技术博客 整理日期: 2025-12-17

概述

Playwright MCP(Model Context Protocol)是由微软开发的一款革命性工具,它让大语言模型(LLM)能够直接控制浏览器进行自动化操作。与传统的截图识别方式不同,Playwright MCP 采用**可访问性树(Accessibility Tree)**作为交互基础,这是一种结构化的文本表示方式,能够提供确定性、高效的浏览器控制能力。

核心优势

特性传统截图方案Playwright MCP
速度慢(需要图像处理)快(纯文本交互)
资源占用高(需要视觉模型)低(减少 70% 内存)
准确性不确定(像素识别)确定性(语义理解)
可维护性差(UI 变化影响大)好(基于元素语义)

核心洞察

  1. 可访问性树是浏览器为辅助技术(如屏幕阅读器)提供的页面结构化表示
  2. MCP 协议让 AI 能够像人类一样"理解"按钮是按钮,而非仅仅识别像素
  3. 这种方法在 CI/CD 环境中特别高效,可大幅降低基础设施成本

1. 环境准备与安装

1.1 系统要求

  • Node.js: 18 或更高版本
  • Claude Code: 已安装并配置
  • 支持的浏览器: Chrome、Firefox、WebKit、Edge

1.2 Claude Code 安装方法

在 Claude Code 中添加 Playwright MCP 最简单的方式是使用命令行:

bash
# 推荐:添加 Playwright MCP 到 Claude Code
claude mcp add playwright npx @playwright/mcp@latest

这条命令会:

  1. 自动下载最新版本的 Playwright MCP
  2. 将配置持久化到 ~/.claude.json 文件
  3. 仅对当前目录生效(本地作用域)

1.3 作用域选项

Playwright MCP 支持三种作用域,适用于不同场景:

bash
# 本地作用域:仅当前项目可用(推荐用于测试框架)
claude mcp add playwright -s local npx '@playwright/mcp@latest'

# 项目作用域:相关目录共享
claude mcp add playwright -s project npx '@playwright/mcp@latest'

# 用户作用域:全局可用
claude mcp add playwright -s user npx '@playwright/mcp@latest'

1.4 验证安装

安装完成后,在 Claude Code 中运行:

/mcp

然后导航到 playwright 查看所有可用工具列表。


2. 配置详解

2.1 基础配置

配置存储在 ~/.claude.json 文件中,结构如下:

json
{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": ["@playwright/mcp@latest"]
    }
  }
}

2.2 高级配置选项

Playwright MCP 支持丰富的命令行参数:

参数说明示例
--browser选择浏览器类型chromefirefoxwebkitmsedge
--headless无头模式运行用于 CI/CD 环境
--viewport-size设置视口大小1280x720
--device模拟特定设备iPhone 15Pixel 7
--user-data-dir浏览器配置文件路径保持登录状态
--storage-state加载认证状态文件预设 Cookie 和 localStorage
--proxy-server代理服务器配置企业网络环境
--timeout-action操作超时时间默认 5000ms
--timeout-navigation导航超时时间默认 60000ms

2.3 配置文件示例

创建 playwright-mcp.config.json

json
{
  "browser": {
    "type": "chromium",
    "launchOptions": {
      "headless": false,
      "args": ["--disable-blink-features=AutomationControlled"]
    }
  },
  "server": {
    "port": 3000
  },
  "capabilities": {
    "core": true,
    "pdf": true,
    "vision": false
  },
  "network": {
    "allowedOrigins": ["*.example.com"],
    "blockedOrigins": ["ads.example.com"]
  }
}

使用配置文件启动:

bash
claude mcp add playwright npx @playwright/mcp@latest -- --config playwright-mcp.config.json

3. 核心工具与功能

Playwright MCP 提供 25+ 个强大的浏览器控制工具:

3.1 导航工具

工具名称功能描述
browser_navigate导航到指定 URL
browser_go_back返回上一页
browser_go_forward前进到下一页
browser_reload刷新当前页面

3.2 交互工具

工具名称功能描述
browser_click点击页面元素
browser_type在输入框中输入文本
browser_hover悬停在元素上
browser_select选择下拉菜单选项
browser_handle_dialog处理弹窗对话框

3.3 观察工具

工具名称功能描述
browser_take_screenshot截取页面截图
browser_get_content获取页面内容
browser_evaluate执行 JavaScript 代码
browser_wait_for等待特定条件

3.4 高级工具

工具名称功能描述
browser_generate_playwright_test生成 Playwright 测试代码
browser_network_monitor监控网络请求
browser_console_logs获取控制台日志

使用技巧

  1. 你不需要记住这些工具名称,Claude 会根据任务描述自动选择合适的工具
  2. browser_generate_playwright_test 是将手动探索转化为自动化测试的关键
  3. 结合 browser_evaluate 可以执行任意 JavaScript,实现复杂的页面操作

4. 实战使用场景

4.1 基础浏览器控制

首次使用时,建议明确指定 "playwright mcp",避免 Claude 尝试使用 Bash 命令:

使用 playwright mcp 打开浏览器访问 https://example.com

Claude 会启动一个可见的 Chrome 窗口,你可以实时观察 AI 的操作过程。

4.2 身份认证处理

由于 Playwright 使用可见浏览器窗口,认证变得非常简单:

  1. 让 Claude 导航到登录页面
  2. 你手动输入凭据完成登录
  3. Cookie 在整个会话期间保持有效
  4. 告诉 Claude 继续执行后续操作
请使用 playwright mcp 访问 https://app.example.com/login,
我会手动登录,登录完成后帮我导航到仪表板页面

4.3 表单自动填写

使用 playwright mcp 完成以下操作:
1. 访问 https://forms.example.com/signup
2. 填写姓名字段为 "张三"
3. 填写邮箱字段为 "zhangsan@example.com"
4. 选择国家下拉菜单中的 "中国"
5. 勾选同意条款复选框
6. 点击提交按钮
7. 截图保存结果

4.4 竞品分析

使用 playwright mcp 访问以下三个竞品网站,
对每个网站截图并分析其首页设计特点:
- https://competitor1.com
- https://competitor2.com
- https://competitor3.com

5. 自动化测试工作流

5.1 AI 辅助测试流程

Playwright MCP 与 Claude Code 结合,可以实现智能化的测试工作流:

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│  需求定义       │ ──▶ │  手动探索       │ ──▶ │  测试验证       │
│  (自然语言)     │     │  (AI 驱动)      │     │  (自动生成)     │
└─────────────────┘     └─────────────────┘     └─────────────────┘
         │                      │                      │
         ▼                      ▼                      ▼
┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│  结果分析       │ ◀── │  代码优化       │ ◀── │  故障调试       │
│  (AI 报告)      │     │  (选择器重构)   │     │  (根因分析)     │
└─────────────────┘     └─────────────────┘     └─────────────────┘

5.2 生成测试代码

创建自定义命令 .claude/commands/generate-test.md

markdown
# 生成 Playwright 测试

使用 Playwright MCP 工具执行以下步骤:

1. 导航到 $URL
2. 执行用户描述的操作流程
3. 使用 browser_generate_playwright_test 生成测试代码
4. 遵循 @playwright/test 的最佳实践
5. 使用 Page Object Model 模式组织代码

使用方式:

/generate-test https://myapp.com/login 测试用户登录流程,
包括正确密码登录和错误密码提示

5.3 测试代码示例

Claude 生成的测试代码通常遵循以下结构:

typescript
import { test, expect } from '@playwright/test';

test.describe('用户登录功能', () => {
  test('使用正确凭据登录成功', async ({ page }) => {
    // 导航到登录页面
    await page.goto('https://myapp.com/login');

    // 填写登录表单
    await page.getByLabel('邮箱').fill('user@example.com');
    await page.getByLabel('密码').fill('password123');

    // 点击登录按钮
    await page.getByRole('button', { name: '登录' }).click();

    // 验证登录成功
    await expect(page).toHaveURL(/.*dashboard/);
    await expect(page.getByText('欢迎回来')).toBeVisible();
  });

  test('使用错误密码显示错误提示', async ({ page }) => {
    await page.goto('https://myapp.com/login');

    await page.getByLabel('邮箱').fill('user@example.com');
    await page.getByLabel('密码').fill('wrongpassword');
    await page.getByRole('button', { name: '登录' }).click();

    // 验证错误提示
    await expect(page.getByText('密码错误')).toBeVisible();
  });
});

6. 高级应用:AI QA 工程师

6.1 构建智能测试代理

可以创建一个名为 "Quinn" 的 AI QA 工程师,它具备以下特点:

测试哲学

"不要相信任何东西。开发者说能用?证明给我看。"

核心能力

  • 像真实用户一样操作浏览器
  • 测试快乐路径和边缘情况
  • 自动生成详细的测试报告
  • 截图记录发现的问题

6.2 GitHub Actions 集成

创建 .github/workflows/ai-qa.yml

yaml
name: AI QA Testing

on:
  pull_request:
    types: [labeled]

jobs:
  ai-qa:
    if: contains(github.event.label.name, 'needs-qa')
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Install dependencies
        run: npm ci

      - name: Start dev server
        run: npm run dev &

      - name: Run AI QA
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          npx @anthropic/claude-code --headless \
            --mcp playwright \
            --prompt "作为 QA 工程师测试此 PR 的更改..."

6.3 测试报告格式

AI QA 生成的报告包含:

markdown
# QA 测试报告

## 测试概要
- 测试日期: 2025-12-17
- 测试范围: 用户认证模块
- 测试状态: 通过 (8/10)

## 验证结果

| 需求 | 状态 | 备注 |
|------|------|------|
| 登录表单验证 | 通过 | 正常工作 |
| 密码强度检查 | 通过 | 符合要求 |
| 记住我功能 | 警告 | Cookie 过期时间过短 |
| 忘记密码流程 | 失败 | 邮件发送失败 |

## 发现的问题

### Bug #1: 邮件服务超时
![邮件错误截图](./screenshots/email-error.png)

**严重程度**: 高
**复现步骤**: ...
**建议修复**: ...

## 合并建议
建议在修复邮件服务问题后合并此 PR。

7. 自动化代码审查

7.1 结合 Notion 的工作流

可以创建一个自动化代码审查系统,集成 Playwright 截图和 Notion 报告:

┌─────────────────┐
│   Claude Code   │ ◀─── MCP 客户端
└────────┬────────┘

    ┌────┴────┐
    ▼         ▼
┌────────┐  ┌────────┐
│Playwright│  │ Notion │
│(本地服务)│  │(远程服务)│
└────────┘  └────────┘
     │           │
     ▼           ▼
  截图捕获    报告存储

7.2 设置步骤

1. 添加 Playwright MCP(本地)

bash
claude mcp add playwright -- npx @playwright/mcp@latest

2. 添加 Notion MCP(远程)

bash
claude mcp add notion \
  --env 'OPENAPI_MCP_HEADERS={"Authorization":"Bearer secret_xxx"}' \
  -- npx -y @notionhq/notion-mcp-server

3. 创建审查命令 .claude/commands/review-component.md

markdown
# 组件审查命令

执行以下步骤:

1. 使用 Playwright 截取 $URL 上的组件截图
2. 与参考设计图 $REFERENCE 进行对比
3. 分析 HTML 结构、JavaScript 逻辑、UI/UX 质量
4. 将发现保存到 Notion 数据库

输出格式:
- 视觉一致性评分
- 代码质量评估
- 改进建议列表

8. 最佳实践与注意事项

8.1 推荐做法

  1. 从简单开始:先测试基础导航,再尝试复杂工作流
  2. 使用快照模式:默认的可访问性树模式是最快最可靠的
  3. CI/CD 使用无头模式:节省资源,提高效率
  4. 采用 Page Object Model:保持测试代码组织清晰
  5. 提供充足上下文:包含文档、自定义指令和框架指南

8.2 常见陷阱

陷阱说明解决方案
模糊指令导致模糊的测试用例提供具体、明确的测试目标
跳过人工审查AI 可能找到错误的成功路径始终验证生成的测试代码
依赖 AI 了解业务AI 可能遗漏业务特定的边缘情况提供业务规则文档
配置问题JSON 配置或防火墙阻断检查网络和配置文件

8.3 安全考虑

json
{
  "security": {
    "allowedHosts": ["*.mycompany.com"],
    "blockedOrigins": ["*.external-ads.com"],
    "maskSecrets": true,
    "httpsOnly": true
  }
}
  • DNS 重绑定保护:使用 --allowed-hosts 限制访问范围
  • 敏感数据屏蔽:自动屏蔽密码、API 密钥等
  • HTTPS 强制:生产环境建议开启

8.4 局限性

Playwright MCP 不适合以下场景:

  • 需要亚 100ms 响应的实时应用
  • 大规模数据处理场景
  • 包含机密代码的项目(IP/NDA 限制)
  • 网络连接不稳定的环境

重要提醒

  1. AI 生成的测试仍需人工监督,AI 不了解你的产品细节
  2. Playwright MCP 是补充而非替代传统单元测试和集成测试
  3. 在探索性测试和用户流程验证方面,AI 测试表现最佳

9. 故障排除

9.1 常见问题

Q: Claude 尝试使用 Bash 而非 Playwright MCP?

A: 首次使用时明确指定 "playwright mcp":

使用 playwright mcp 打开浏览器访问 example.com

Q: 浏览器窗口不显示?

A: 检查是否使用了 --headless 参数,移除该参数以显示窗口。

Q: 认证状态丢失?

A: 使用 --storage-state 加载预保存的认证状态:

bash
claude mcp add playwright npx @playwright/mcp@latest -- --storage-state auth.json

Q: 页面加载超时?

A: 增加导航超时时间:

bash
claude mcp add playwright npx @playwright/mcp@latest -- --timeout-navigation 120000

9.2 调试技巧

  1. 启用追踪--save-trace 记录执行轨迹
  2. 保存视频--save-video 录制操作过程
  3. 检查控制台:使用 browser_console_logs 获取错误信息

总结

Playwright MCP 与 Claude Code 的结合,开创了 AI 驱动的浏览器自动化新时代:

  • 开发效率提升:自然语言描述需求,AI 自动执行操作
  • 测试质量改进:AI 能够发现人类容易忽略的边缘情况
  • 维护成本降低:基于语义的交互方式对 UI 变化更具弹性
  • 工作流整合:通过 MCP 协议无缝连接多个开发工具

随着 AI 技术的发展,这种人机协作的测试模式将成为软件质量保障的重要组成部分。


参考资料

基于 MIT 许可证发布。内容版权归作者所有。