
同一个 Playwright,微软给 AI 开了两扇门。选错的代价不是"不能用",而是上下文被撑爆、成本飙升,或者 AI 在关键时刻看不见页面。本文用官方说明和可复现的操作,讲清楚什么时候用哪个。

你让 AI 帮你跑一个浏览器测试。前几步很顺,页面打开了、表单填了、按钮点了。再往后,它开始反复问同一个页面的结构,回答越来越短,最后干脆忘了前面做过什么。
这类问题,大多不是模型"变笨"了,而是上下文被塞满了。页面的结构数据、工具的说明、每一步的返回,全都堆在对话里,留给你的代码、测试和推理的空间越来越小。
微软把 Playwright 做成了两种给 AI 用的形态:Playwright MCP 和 Playwright CLI。两者驱动的是同一个 Playwright,区别在于"AI 通过什么接口去碰浏览器"。这个区别,恰好决定了上面那个坑你会不会踩。
两个仓库的 README 开头,用几乎相同的文字回答了"该用哪个"。我用自己的话转述:
把这两段压缩成一句话:
写代码、跑测试,用 CLI;让 AI 持续"盯着页面想事情",用 MCP。
两者的核心差别,一句话就能说清:页面状态放在哪。
Playwright MCP | Playwright CLI | |
|---|---|---|
接入方式 | MCP 服务,任何支持 MCP 的客户端都能用(VS Code、Cursor、Windsurf、Claude Desktop 等) | 命令行工具,需要智能体有 shell 和文件系统(如 Claude Code、Copilot) |
页面状态 | 通过工具返回,进入模型上下文 | 每条命令后给出快照文件的位置,AI 需要时再读 |
默认运行方式 | 有头(能看到浏览器) | 无头(需要看时加 --headed) |
会话 | 由 MCP 服务维护连续上下文 | 用 -s=名称管理多个命名会话,list、show 查看 |
官方推荐场景 | 探索式、自愈、长时间自主流程 | 编码智能体里的测试编写与执行 |
用 CLI 时你会看到这样的输出:每条命令之后,返回的是一个快照文件的路径,而不是整页的结构树。AI 想细看,就去读文件,或者用 playwright-cli find "关键词"在快照里搜索,只取需要的片段。
1. 你在编码智能体里写、跑、调试 Playwright 测试。这是 CLI 的主场。官方 Skills 里直接带了几类参考指南:运行和调试测试、请求拦截、保存与恢复登录状态、测试的计划、生成与修复、追踪、录视频。
2. 上下文很紧张。你的智能体既要读大型代码库,又要看测试,还要推理,每一点上下文都珍贵。
3. 要进流水线,或者要留下可复查的产物。 CLI 的命令容易写进脚本,截图、追踪、视频、快照文件都落在磁盘上,出了问题可以回头看。
4. 要同时开多个浏览器。 命名会话加 playwright-cli show的可视化面板,可以一眼看到所有在后台跑的会话,必要时还能接管操作。
1. 你的客户端没有 shell。 比如聊天式的客户端。CLI 需要智能体能执行命令,没有这个条件,只能走 MCP。
2. 探索式测试。你不知道页面长什么样,也不知道有什么坑,需要 AI 每走一步就看一眼页面,再决定下一步。持续的页面上下文在这里是价值,不是负担。
3. 需要丰富的内省能力。 MCP 通过能力开关提供了网络请求拦截、存储读写、开发者工具、断言验证、生成定位器等工具,按需开启。
4. 长时间自主运行的流程。浏览器上下文需要一直保持,中间不能断。
误区一:"MCP 已经过时了。"不是。官方原话是它"仍然适用"于特定场景,两者是分工关系,不是替代关系。
误区二:"要连接已登录的浏览器,只能用 MCP。"两边都能做。MCP 有 --extension参数,通过浏览器扩展连接已打开的 Edge 或 Chrome;CLI 同样有 attach --extension=chrome 和 attach --cdp=...。别拿这一点做选择依据。
误区三:"MCP 一定很费 token。"默认配置下页面快照会随响应返回,确实偏重。但 MCP 也提供了瘦身手段:--snapshot-mode可设为不返回快照,快照工具支持限制深度和保存为文件,还有在快照里搜索的 browser_find,以及用 --caps只开启需要的能力。选 MCP 不等于接受默认配置。
这是官方 README 里的演示场景,你可以完整复现。
准备:
npm install -g @playwright/cli@latest
playwright-cli install --skills# 把 Skills 装进智能体的工作流给智能体的提示词(官方示例的中文版):
使用 playwright-cli 测试 https://demo.playwright.dev/todomvc/ 的"添加待办"流程。
成功和失败的场景都要截图。
可用命令请查看 playwright-cli --help。智能体实际在做的事,你也可以手动敲一遍(来自官方演示):
playwright-cli open https://demo.playwright.dev/todomvc/ --headed
playwright-cli type "Buy groceries"
playwright-cli press Enter
playwright-cli type "Water flowers"
playwright-cli press Enter
playwright-cli check e21 # e21 是快照里元素的引用编号
playwright-cli screenshot这个案例说明了什么:整个过程里,AI 面对的是"命令加文件"。页面的完整结构只在需要时才被读取,大部分上下文留给了测试本身。而且每一步都是可复现的命令,你可以把它沉淀成脚本。
场景:一个改版频繁、没有测试文档的页面。你不想先写脚本,想让 AI 先"摸一遍",找出哪里值得测。
配置(官方标准配置,加上断言验证能力):
{
"mcpServers":{
"playwright":{
"command":"npx",
"args":["@playwright/mcp@latest","--caps=testing"]
}
}
}Claude Code 用户也可以直接用 claude mcp add playwright npx @playwright/mcp@latest。
提示词:
你是探索式测试员。请打开注册页,先观察页面结构,列出所有表单项和可交互控件。
然后逐项尝试:空提交、超长输入、特殊字符、重复提交。
每发现一个异常,记录现象、复现步骤和页面当时的状态。不要修改任何代码。为什么这里适合 MCP:AI 每一步都要基于当前页面决定下一步,持续保持页面上下文是必要的。开启 testing能力后,它还能使用生成定位器、验证文本和元素可见性等工具,把探索中确认的东西固化下来。
一条我建议你记住的工作流(个人判断):
探索阶段用 MCP,回归阶段用脚本。
MCP 能生成定位器,也能把你手动演示的操作录成 Playwright 代码。把探索得到的结果沉淀成普通测试脚本,放进 CI 里稳定地跑。不要让 AI 每天晚上"现场探索"一遍当回归测试:它慢、贵、不可复现,而且每次可能走不同的路。
browser_run_code_unsafe可以在服务进程里执行任意 JavaScript,官方描述为等同于远程代码执行。给智能体授权时,别把它当普通工具放行。--isolated,或指定不同的--user-data-dir。CLI 则默认把配置放在内存里,需要保留时加--persistent。eval和run-code命令威力不小,在共享环境里同样要控制权限。遇到选择困难时,按顺序问自己:
两个都符合?用我上面的组合:MCP 探索,沉淀成脚本,CLI 或普通 Playwright 回归。
更靠谱的办法是拿你自己的真实任务各跑一次,用你所用工具的用量统计,对比两种方式消耗的上下文。别人的数字,永远替代不了你项目里的数字。
这种"命令行加技能"的形态,正在成为 AI 操作测试对象的一种通用做法。AltTester 给游戏测试做的 CLI,就明确把动机说成:让智能体不必理解图形界面,直接用结构化的命令操作;同时它也提供 MCP 和 Skills 两种接入方式。同一个能力,同时提供命令行和 MCP 两种接口,让用户按场景选,已经是工具厂商的共识。
选工具不必站队。问清楚"我的智能体长什么样、我的任务是什么",答案自然就出来了。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。