基于充电桩大屏系统的 Playwright MCP 实际使用经验分享
Playwright MCP(Model Context Protocol)是微软 Playwright 项目推出的 MCP 服务器实现,它将强大的浏览器自动化能力包装成 AI 助手可以调用的工具集。通过 MCP 协议,AI 助手可以直接控制浏览器进行测试、调试和验证工作。
MCP (Model Context Protocol):
Playwright MCP 的独特价值:
Playwright MCP 最重要的特性之一是完全的数据隔离:
独立进程:启动全新的浏览器进程,与用户浏览器完全分离
临时数据:使用临时文件夹,会话结束后自动清理
内存隔离:完全分离的内存空间,无法访问用户数据
网络隔离:独立的网络会话,不共享任何认证状态
在我们的实际测试中,验证了以下隔离效果:
1. Cookie 隔离
用户浏览器:已登录系统,有认证 Cookie
MCP 浏览器:全新会话,需要重新登录
结果:✅ 完全隔离,互不影响
2. 密码和表单数据隔离
用户浏览器:保存了自动填充的密码
MCP 浏览器:无任何保存的密码信息
结果:✅ 完全隔离,保护用户隐私
3. 浏览历史隔离
用户浏览器:丰富的浏览历史记录
MCP 浏览器:空白的浏览历史
结果:✅ 完全隔离,无历史泄露
// Playwright MCP 的安全配置
{
// 临时用户数据目录
userDataDir: "/tmp/playwright-session-xxxx",
// 无痕模式
incognito: true,
// 禁用扩展
disableExtensions: true,
// 安全策略
ignoreHTTPSErrors: false,
// 自动清理
clearCookies: true,
clearLocalStorage: true
}
在 Cursor 中配置 Playwright MCP:
// ~/.cursor/mcp.json
{
"mcpServers": {
"Playwright": {
"command": "npx",
"args": ["@playwright/[email protected]"]
}
}
}
如果遇到浏览器未安装的错误,通过 AI 助手一键安装:
"请安装浏览器"
AI助手会自动调用 browser_install 工具
✅ 自动下载并配置 Chromium 浏览器
"打开百度首页并截图"
AI助手执行:
1. browser_navigate("https://baidu.com")
2. browser_take_screenshot()
✅ 看到截图说明安装成功
自然语言指令示例:
"导航到充电桩管理系统首页"
→ browser_navigate("http://your-system.com")
"回到上一个页面"
→ browser_navigate_back()
"前进到下一个页面"
→ browser_navigate_forward()
交互指令示例:
"点击登录按钮"
→ browser_click(element="登录按钮", ref="button-123")
"在用户名输入框输入 admin"
→ browser_type(element="用户名输入框", ref="input-456", text="admin")
"选择北京地区"
→ browser_select_option(element="地区选择", ref="select-789", values=["beijing"])
信息获取指令:
"获取当前页面的结构信息"
→ browser_snapshot()
"截取当前页面的图片"
→ browser_take_screenshot()
"查看网络请求日志"
→ browser_network_requests()
"查看控制台错误信息"
→ browser_console_messages()
Playwright MCP 支持完整的多标签页管理:
"打开新标签页并访问智能运维页面"
执行流程:
1. browser_tab_new() // 打开新标签
2. browser_navigate("/smart-operation") // 导航到目标页面
3. browser_tab_list() // 显示所有标签页状态
"切换到第一个标签页"
browser_tab_select(index=0)
"在第二个标签页中操作"
执行流程:
1. browser_tab_select(index=1) // 切换到标签页
2. browser_click(...) // 在该标签页中操作
// 标签页状态示例
{
"tabs": [
{
"index": 0,
"url": "http://localhost:3000/overview",
"title": "运营概览 - 充电桩管理系统",
"active": false
},
{
"index": 1,
"url": "http://localhost:3000/smart-operation",
"title": "智能运维 - 充电桩管理系统",
"active": true // 当前活动标签页
}
]
}
我们发现了一个真实的数据一致性问题:
问题描述:
MCP测试流程:
"验证两个页面的报警数据是否一致"
执行步骤:
1. browser_navigate("/overview")
2. browser_snapshot() → 发现"已解决19个报警"
3. browser_navigate("/smart-operation")
4. browser_snapshot() → 发现"已解决0个报警"
5. 报告数据不一致问题
发现充电设施组件显示"暂无数据":
MCP调试流程:
"分析充电设施组件为什么显示暂无数据"
执行步骤:
1. browser_navigate("/overview")
2. browser_snapshot() → 定位到充电设施组件
3. browser_network_requests() → 分析API调用
4. 发现API返回数据但组件显示异常
5. 通过代码分析找到数据处理逻辑问题
发现的问题:
// 问题代码:期望数组但API返回对象
if (res && res.length > 0) { // ❌ 错误:对象没有length属性
// 处理数据
}
// 修复方案:
if (res && Object.keys(res).length > 0) { // ✅ 正确
// 处理数据
}
"监控首页加载性能,看看有没有慢接口"
执行步骤:
1. browser_navigate("/overview")
2. browser_network_requests() → 分析网络请求
3. 发现慢接口和优化建议:
慢接口分析:
- /api/charging-facilities:1.2s ⚠️
- /api/alarm-summary:800ms ⚠️
- /api/user-analysis:500ms ✅
建议:
- 充电设施接口需要优化查询逻辑
- 报警汇总可以增加缓存机制
"监控页面的所有网络请求"
分析结果:
- 成功请求:15个
- 失败请求:2个
- 平均响应时间:650ms
- 慢请求:/api/statistics (1.2s)
"检查页面是否有JavaScript错误"
发现问题:
❌ Uncaught TypeError: Cannot read property 'length' of undefined
at charging-facilities.vue:45
❌ 404 Error: /api/missing-endpoint
建议修复:
1. 添加数据空值检查
2. 确认API端点是否正确
"对比首页当前截图与基准截图"
执行流程:
1. browser_take_screenshot() → 当前截图
2. 与基准图片对比
3. 识别视觉差异区域
4. 生成差异报告
"测试用户登录到查看数据的完整流程"
执行流程:
1. 导航到登录页面
2. 输入用户名密码
3. 点击登录按钮
4. 验证跳转到概览页面
5. 检查数据加载情况
6. 验证各个组件显示正常
7. 生成测试报告
针对我们的充电桩管理大屏系统,重点关注:
1. 数据准确性
验证点:
- 实时数据更新是否及时
- 不同页面数据是否一致
- 筛选条件是否生效
- 图表数据是否正确
2. 交互功能
验证点:
- 导航切换是否流畅
- 筛选器是否工作正常
- 弹窗显示是否正确
- 响应式布局是否适配
3. 性能表现
验证点:
- 页面加载速度
- API响应时间
- 内存使用情况
- 网络请求优化
E2E测试 (10%):Playwright MCP
├─ 核心业务流程测试
├─ 跨浏览器兼容性测试
└─ 用户场景端到端验证
集成测试 (20%):API + 组件
├─ API接口集成测试
├─ 组件集成测试
└─ 数据流测试
单元测试 (70%):Jest + Vue Test Utils
├─ 组件单元测试
├─ 工具函数测试
└─ 业务逻辑测试
特性 | Playwright MCP | 传统 Playwright |
---|---|---|
学习成本 | 自然语言交互 | 需要编程知识 |
开发速度 | 即时测试验证 | 编写-运行-调试 |
调试体验 | 实时交互调试 | 日志分析调试 |
维护成本 | 无需维护脚本 | 需要维护代码 |
扩展性 | 依赖AI能力 | 编程灵活性高 |
批量执行 | 单次交互模式 | 批量自动执行 |
特性 | Playwright MCP | Selenium |
---|---|---|
现代化 | AI驱动,现代架构 | 传统架构 |
浏览器支持 | 原生支持现代浏览器 | 需要驱动程序 |
安全性 | 沙箱隔离 | 共享浏览器环境 |
社区生态 | 新兴工具 | 成熟生态 |
学习内容:
- MCP概念理解
- 基础浏览器操作
- 元素定位方法
- 简单交互测试
实践目标:
- 能够进行基础的页面导航
- 完成简单的表单填写测试
- 进行基础的断言验证
学习内容:
- 多标签页管理
- 网络请求监控
- 性能测试方法
- 视觉测试技巧
实践目标:
- 构建复杂的测试场景
- 进行性能瓶颈分析
- 实现自动化回归测试
学习内容:
- 测试策略设计
- 持续集成结合
- 团队协作模式
- 最佳实践总结
实践目标:
- 建立完整测试体系
- 团队推广应用
- 持续优化测试流程
优先级顺序:
1. data-testid 属性(最推荐)
2. 唯一的 ID 或 class
3. 文本内容定位
4. XPath(最后选择)
示例指令:
"点击带有 data-testid='submit-btn' 的按钮"
"点击文本为'确认'的按钮"
智能等待:
- Playwright MCP 自动等待元素可见
- 自动等待网络请求完成
- 自动等待动画结束
示例指令:
"等待图表加载完成后截图"
"等待数据更新后验证结果"
调试方法:
1. 先截图查看当前状态
2. 检查控制台错误信息
3. 监控网络请求状态
4. 分析页面结构快照
示例指令:
"截图显示当前页面状态"
"检查是否有JavaScript错误"
"显示最近的网络请求"
性能监控:
- 定期检查页面加载时间
- 监控API响应速度
- 关注内存使用情况
- 分析网络请求数量
示例指令:
"分析首页加载性能"
"检查是否有慢接口"
"监控内存使用情况"
1. 降低测试门槛
2. 提升测试效率
3. 保障数据安全
技术演进:
应用拓展:
立即开始:
持续改进:
作者经验总结:在使用 Playwright MCP 测试我们的充电桩管理系统过程中,不仅发现了多个实际的数据一致性问题,更重要的是建立了一种新的测试思维模式。AI驱动的测试工具让我们能够更专注于业务逻辑的验证,而不是纠结于技术细节的实现。
这是测试领域的一个重要发展方向,值得每个开发团队深度尝试和应用。