☰
Playwright MCP 实战分享:AI 时代的浏览器自动化测试
2026/10/8 5:54:32 网站建设 项目流程

1. 从一次大屏数据对不上说起:Playwright MCP 到底是什么

去年底我接手一个充电桩运营大屏的测试工作,运营概览页写着「已解决 19 个报警」,切到智能运维页却显示「已解决 0 个报警」。两个页面调的是同一套后端接口,前端却给出了完全不同的数字。这种问题用传统脚本测很难覆盖——你得先写定位器、再写断言、再跑一遍,等脚本写完,需求可能都改了。

Playwright MCP 解决的正是这个场景。MCP 全称 Model Context Protocol,是一套让 AI 模型安全调用外部工具的标准协议;Playwright MCP 则是微软 Playwright 团队把浏览器自动化能力封装成 AI 可调用工具集的服务器实现。简单说,它让 AI 助手能直接开浏览器、点按钮、读页面结构、抓网络请求,而你只需要用自然语言描述要测什么。

它适合三类人:一是测试同学,想快速验证页面数据一致性又不想写一堆脚本;二是前端开发,调 bug 时想让 AI 帮忙看控制台报错和慢接口;三是做 AI Agent 的工程师,需要一个可靠的浏览器操作层。核心检索词就三个:Playwright、MCP、浏览器自动化测试。这篇文章我会从环境准备讲到第一个端到端用例跑通,配置片段和测试脚本都能直接复制。

2. 前置准备:TaoToken 接入与 Playwright MCP 环境搭建

2.1 为什么需要 TaoToken 这一层

Playwright MCP 本身只负责浏览器操作,真正理解你「验证两个页面报警数据是否一致」这句话、并规划出导航加快照加对比步骤的,是背后的大模型。所以你需要一个能稳定调用模型的入口。TaoToken 在这里扮演的是模型接入层:它提供统一的 API 地址和 Key,兼容主流模型的调用格式,你不用为每个模型单独配一套鉴权。

官网入口在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,注册后在控制台生成 API Key。API 基础地址是 https://taotoken.net/api ,注意这个地址不带任何查询参数,配置时直接填这个。

2.2 安装 Node 与 Playwright MCP

Playwright MCP 通过 npx 拉起,前提是本机有 Node.js 18 以上。先确认版本:

node -v npm -v

如果版本太低,去 Node 官网下 LTS 包重装即可。然后不需要全局安装 Playwright MCP,npx 会自动拉取指定版本。我实测用 0.0.29 比较稳:

npx @playwright/mcp@0.0.29 --help

第一次执行会下载包,稍等片刻能看到帮助信息就说明环境通了。如果卡在下载,检查 npm 源,换成国内镜像再试。

2.3 浏览器内核安装

Playwright MCP 默认用 Chromium。如果启动时报「browser not installed」,直接让 AI 助手调用 browser_install 工具,或者手动执行:

npx playwright install chromium

这一步会下载约 150MB 的内核,装完后浏览器就绪。验证方式很简单:让 AI 打开一个页面并截图,能看到图就说明整条链路通了。

3. 可复制配置:mcp.json 与模型参数怎么写

3.1 Cursor 中的 MCP 配置

在 Cursor 里,MCP 服务器配置放在~/.cursor/mcp.json。下面是我实际在用的片段,直接复制改路径即可:

{ "mcpServers": { "Playwright": { "command": "npx", "args": ["@playwright/mcp@0.0.29"], "env": { "PLAYWRIGHT_HEADLESS": "false" } } } }

PLAYWRIGHT_HEADLESS设为 false 是为了能看到浏览器窗口,调试时直观。跑 CI 时改成 true 省资源。

3.2 模型接入配置(Base URL + Key + Model ID 三件套)

如果你用的是支持自定义模型端点的客户端(比如 Cline、Continue 或 Codex 类工具),需要填全三件套。以 Cline 的 MCP 加模型配置为例,模型侧这样填:

{ "provider": "openai-compatible", "baseUrl": "https://taotoken.net/api", "apiKey": "sk-你的TaoToken密钥", "modelId": "claude-sonnet-4-20250514" }

三个字段缺一不可:Base URL 指向 TaoToken 的 API 地址,apiKey 是控制台生成的密钥,modelId 按你实际开通的模型填。填错任何一个都会在调用时报 401 或 model not found。

3.3 Codex 的 auth.json 写法

如果你用 Codex 类 CLI 工具,鉴权信息放在~/.codex/auth.json:

{ "OPENAI_API_KEY": "sk-你的TaoToken密钥", "OPENAI_BASE_URL": "https://taotoken.net/api" }

注意这里没有 modelId 字段,模型在调用时通过参数指定。改完文件记得重启 CLI 进程,否则读的还是旧配置。

3.4 配置检查清单

配完别急着跑,先核对三件事:MCP 服务器能否被客户端识别(看客户端日志有没有 Playwright 已连接)、模型 Key 是否有效(发一条简单对话测试)、浏览器内核是否装好(截图验证)。这三步都过,再进下一步。

4. 跑通第一个端到端用例:从导航到断言

4.1 用自然语言驱动一次完整测试

配置就绪后,在 AI 助手里输入这样一段指令:

打开 http://localhost:3000/overview,截图,读取页面结构,找到「已解决报警数」的文本,然后导航到 /smart-operation,同样读取该数字,对比两者是否一致,输出结论。

AI 助手会依次调用 browser_navigate、browser_take_screenshot、browser_snapshot,最后给出对比结果。整个过程你不需要写一行定位代码。

4.2 对应的 Playwright 脚本版本

如果你想把这次验证固化成可重复执行的脚本,用传统 Playwright 写出来是这样:

const { test, expect } = require('@playwright/test'); test('报警数据跨页面一致性', async ({ page }) => { await page.goto('http://localhost:3000/overview'); await page.waitForLoadState('networkidle'); const overviewText = await page.locator('[data-testid="alarm-resolved"]').innerText(); await page.goto('http://localhost:3000/smart-operation'); await page.waitForLoadState('networkidle'); const operationText = await page.locator('[data-testid="alarm-resolved"]').innerText(); console.log('概览页:', overviewText, '运维页:', operationText); expect(overviewText).toBe(operationText); });

跑起来用:

npx playwright test consistency.spec.js --headed

--headed让你看到浏览器实际操作过程。实测下来,MCP 适合探索性验证,脚本适合回归固化,两者配合用效率最高。

4.3 网络请求与性能监控

数据对不上往往出在接口层。让 AI 执行「监控页面所有网络请求,找出响应超过 1 秒的接口」,它会调用 browser_network_requests 返回列表。我那次就抓到/api/charging-facilities耗时 1.2 秒,/api/alarm-summary耗时 800 毫秒。对应的脚本写法:

page.on('response', async (response) => { const timing = response.request().timing(); if (timing.responseEnd - timing.requestStart > 1000) { console.log('慢接口:', response.url(), timing.responseEnd - timing.requestStart); } });

4.4 控制台错误捕获

页面显示「暂无数据」但接口有返回,八成是前端处理逻辑出错。让 AI「检查页面 JavaScript 错误」,它会调 browser_console_messages。我遇到过Cannot read property 'length' of undefined,根因是接口返回对象而代码按数组处理:

// 错误写法 if (res && res.length > 0) { /* ... */ } // 正确写法 if (res && Object.keys(res).length > 0) { /* ... */ }

这类问题用 MCP 排查比翻日志快得多,因为 AI 能直接把报错和代码上下文关联起来。

5. 常见报错排查:401、local proxy failed 与 OAuth 问题

5.1 401 Unauthorized

最常见。原因通常是 Key 填错、Key 过期,或者 Base URL 写成了带路径的形式。检查两点:apiKey 是否完整复制(别漏了 sk- 前缀),baseUrl 是否严格是https://taotoken.net/api不带多余斜杠。改完重启客户端。

5.2 local proxy failed

这个报错一般出现在 MCP 服务器启动阶段,说明客户端连不上本地拉起的 Playwright 进程。排查顺序:先确认 npx 能单独跑起来(前面--help那步),再看端口有没有被占用,最后检查防火墙是否拦了本地回环。我踩过的坑是同时开了两个客户端,端口冲突,关掉一个就好。

5.3 reading 'choices' of undefined

这是模型返回格式解析失败,通常因为 Base URL 指向了一个不兼容 OpenAI 格式的端点。确认你填的是 TaoToken 的 API 地址,且 modelId 是实际开通的模型。如果换了模型还报,检查客户端是否缓存了旧配置。

5.4 OAuth 相关报错

有些客户端默认走 OAuth 流程,但 TaoToken 用的是 API Key 鉴权。遇到 OAuth 报错,去客户端设置里把鉴权方式从 OAuth 改成 API Key,重新填三件套。这个切换在 Cline 和 Codex 里位置不同,Cline 在 Provider 设置里,Codex 直接改 auth.json。

5.5 浏览器启动失败

报「Executable doesn't exist」说明内核没装好。执行npx playwright install chromium重装。如果公司网络限制下载,配置 npm 代理或手动下载内核放到缓存目录。

6. 把 AI 浏览器测试接进日常工作流

跑通第一个用例后,下一步是让它产生持续价值。我的做法是分两层:探索层用 Playwright MCP,遇到新需求或线上问题时,用自然语言快速验证假设;回归层用固化的 Playwright 脚本,把验证过的场景写成测试用例,接进 CI。

模型对话入口在 https://taotoken.net/api-keys ,接入文档在 https://taotoken.net/doc ,需要长期跑编码和 Agent 任务的可以看 Coding Plan:https://taotoken.net/coding-plan 。Claude Code 相关配置参考 https://taotoken.net/ClaudeCodeAnthropic 。

一个实用技巧:把常用的验证指令存成片段,比如「检查首页所有接口响应时间并列出超过 800ms 的」,下次直接调用,省去重复描述。另外,MCP 的浏览器实例是隔离的,用的是临时数据目录,不会碰你本机的 Cookie 和密码,这点在测需要登录的系统时特别省心——每次都是干净会话,不用担心测试污染真实账号。

最后说个真实体会:AI 驱动的浏览器测试不是替代传统脚本,而是补上了「快速探索」这一环。以前发现数据不一致要花半小时写脚本复现,现在两分钟就能定位到是接口问题还是前端渲染问题。把省下的时间用来设计更完整的测试策略,这才是它真正的价值所在。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询