Playwright突然开始推CLI + Skills:AI写UI测试,为什么反而不想给Agent塞一堆MCP Tool了?

举报
霍格沃兹测试学社 发表于 2026/09/19 18:38:28 2026/09/19
【摘要】 Playwright正深度适配AI Coding Agent:推出`playwright-cli`与可安装Skills,GitHub Agentic Workflows已默认切换至CLI模式。核心动因是降低MCP工具Schema对Agent上下文的消耗,推动“按需加载能力”的新范式——测试开发需关注:工具数量≠能力提升,而应聚焦Context预算、业务断言与Oracle(正确性定义)的坚守。

摘要:

Playwright官方现在已经明确给Coding Agent提供playwright-cli和可安装Skills;GitHub Agentic Workflows甚至把内置Playwright从MCP模式切到了CLI模式。原因之一很现实:大量MCP Tool Schema本身就会消耗Agent上下文。对AI测试开发来说,这背后真正值得关注的不是CLI和MCP谁更高级,而是Agent应该获得多少工具、多少页面信息,以及测试能力如何按需进入Context。


最近Playwright有一个变化,我觉得测试开发的人值得认真看看。

不是又加了一个Locator。

也不是Trace Viewer更新了。

而是:

Playwright开始越来越认真地考虑“AI Coding Agent到底应该怎么操作浏览器”。

现在Playwright官方已经有专门面向Coding Agent的:

playwright-cli

甚至可以直接:

playwright-cli install --skills

把Playwright使用能力安装成Agent Skill。官方文档目前列出的支持对象包括Claude Code、GitHub Copilot、Cursor,以及其他支持本地Skills的Coding Agent。
image.png

更有意思的是另一件事。

GitHub Agentic Workflows之前内置的Playwright工具同时支持:

MCP

CLI。

现在它把内置方式改成:

CLI only。

需要MCP仍然可以显式配置,但已经不再是默认隐藏能力。([GitHub Docs][2])

为什么?

答案其实特别适合测试工程师研究。


一、问题可能不是Agent工具太少,而是工具太多

假设我们希望Coding Agent自动测试一个电商网站。

给它Playwright MCP以后,Agent可能看到很多浏览器工具:

navigate

snapshot

click

type

evaluate

trace

screenshot

……

每个Tool都有:

name

description

parameters

schema

这些信息都要进入模型能够理解的上下文。

GitHub解释这次变化时就直接指出:

Playwright MCP暴露了较大的浏览器自动化Tool Surface,这些Tool Schema会占用Context,即使Agent这一轮根本用不到其中绝大多数。([GitHub Docs][2])

这句话很值得琢磨。

因为我们以前设计自动化测试框架,通常觉得:

封装能力越多越好。

但Agent时代可能不是。

给Agent:

10个Tool

100个Tool

不是简单的“能力增加10倍”。

还可能意味着:

Tool Selection难度上升

Context占用增加

Token增加

错误调用增加

推理空间被压缩

这其实是一个新的测试变量:

Tool Surface Complexity。


二、Playwright CLI的思路恰恰相反

Playwright官方现在对Coding Agent的推荐思路很有意思。

Agent只需要知道一个入口:

playwright-cli

真正需要某个操作时,再使用:

playwright-cli --help

或者通过安装好的Skill找到对应能力。

例如:

playwright-cli open https://example.com
playwright-cli snapshot
playwright-cli click e15
playwright-cli type "hello world"
playwright-cli screenshot

官方将CLI定位为更适合需要兼顾大型代码库和推理Context的Coding Agent;而MCP更适合需要持续状态、反复理解页面结构的专门Agent Loop。([Playwright][4])

注意这里并不是:

CLI淘汰MCP。

真正有意思的是:

不同Agent任务开始需要不同的Tool Loading策略。


三、这其实和我们最近一直说的Skill是同一件事

Skill不是:

把整个世界一次性塞给模型。

而更像:

需要什么能力,再把对应知识拿进来。

Playwright自己的Skill现在就包含:

运行和Debug测试

Request Mocking

运行Playwright代码

Browser Session

Storage State

Test Generation

Tracing

Video Recording

Element Attributes

等等。([Playwright][3])

于是Coding Agent工作的时候可以变成:

当前任务:

“排查Checkout测试为什么失败。”

Agent首先知道:

我有Playwright能力。

发现需要Debug。

再读取:

Running and Debugging Playwright Tests

发现页面行为异常。

再调用:

snapshot / trace

而不是任务刚开始,就把几十个Tool Schema全部塞进Context。

这就是:

Capability Discovery。

对AI测试开发来说非常值得研究。


四、那到底应该怎么测这种“会自己使用Playwright”的Agent?

举一个实际业务。

我们让Agent测试:

电商Checkout。

业务要求:

加入商品

进入购物车

使用优惠券

提交订单

验证金额

Agent最后说:

“Checkout测试通过。”

传统做法可能验证:

最终订单创建成功。

但现在至少应该增加三个层面的测试。

第一层:Outcome

订单有没有成功创建?

assert order.status == "created"

第二层:UI Behavior

Agent有没有真的完成关键页面操作?

assert trace.has_action("add_to_cart")
assert trace.has_action("apply_coupon")
assert trace.has_action("submit_order")

第三层:Business Assertion

最关键:

优惠券到底有没有算对?

假设:

商品100元。

优惠券满100减20。

最终应付80元。

def assert_checkout_business_rules(result):
    assert result.subtotal == 100
    assert result.discount == 20
    assert result.payable == 80

这时候Playwright负责:

浏览器操作。

但测试开发负责:

什么才叫正确。

这个区别非常重要。


五、因为“Agent把页面点通了”不等于“测试通过”

以后很容易出现一种非常危险的AI自动化:

Agent:

打开网页。

找到按钮。

点击。

填表。

下单。

看到Success。

然后宣布:

PASS。

这其实只是:

Navigation Success。

不是:

Business Quality Pass。

比如优惠券本来应该减20。

系统Bug只减了10。

页面仍然:

Order Success。

Agent也成功:

点到了最后。

如果没有业务断言:

这套所谓AI Testing只是在帮我们更聪明地点击页面。

所以真正有价值的结构应该是:

Agent Browser Control

Deterministic Assertion

Business Rules

Trace

而不是:

Agent Browser Control = Testing。


六、Playwright自己现在甚至已经有Planner、Generator、Healer

image.png

这件事更有意思。

Playwright官方目前提供三个Test Agents:

Planner

Generator

Healer。

Planner负责探索应用并产生测试计划。

Generator把计划转换成Playwright Test。

Healer运行测试并尝试修复失败测试。([Playwright][5])

看起来很爽。

但测试工程师应该马上想到一个问题:

Healer到底是在修测试,还是在掩盖Bug?

假设原来的测试:

await expect(page.getByText("支付成功")).toBeVisible();

新版页面改成:

“支付处理中”。

测试失败。

Healer发现新的文字。

然后自动把断言改成:

await expect(page.getByText("支付处理中")).toBeVisible();

测试:

PASS。

但业务需求可能明确要求:

付款完成以后必须进入“支付成功”。

如果Agent只从UI现状推断测试应该怎么改:

它可能把:

Product Regression

修成:

Test Pass。

这就是AI Self-Healing Testing里非常值得警惕的问题。


七、所以Healer一定要有“禁止自动修复区”

我会把失败分成至少三类。

第一类:

Locator Drift。

比如:

#submit

变成:

button[data-testid=submit]

可以允许Agent自动修。

第二类:

Timing / Environment。

比如接口偶发慢。

可以允许Agent分析,但要保留证据。

第三类:

Business Assertion Change。

例如:

金额

状态

权限

库存

优惠规则

订单结果

这种不能让Agent自己决定“新页面看起来合理,所以修改Expected Result”。

代码里甚至可以明确:

AUTO_HEAL_ALLOWED = {
    "locator",
    "wait_strategy",
    "test_data_setup"
}

AUTO_HEAL_FORBIDDEN = {
    "expected_payment_amount",
    "order_status",
    "permission_rule",
    "inventory_rule",
    "refund_rule"
}

def can_auto_heal(change_type):
    return change_type in AUTO_HEAL_ALLOWED

这样Agent可以帮我们:

修测试代码。

但不能自己:

修改业务真相。


八、MCP还是CLI?其实这才是错误的问题

看到GitHub从内置Playwright MCP切到CLI,很容易写成:

“CLI要取代MCP了。”

我不建议这么理解。

GitHub自己的说明也明确表示MCP仍然可用,而且某些需要Persistent State和对页面结构持续推理的场景仍然适合MCP。([GitHub Docs][2])

真正应该问的是:

当前Agent任务到底需要多少工具能力进入Context?

Coding Agent:

代码已经很多。

Repository Context已经很大。

还要分析测试。

可能更适合:

CLI + Skills。

探索型Browser Agent:

需要持续理解页面。

频繁交互。

维护Browser State。

可能更适合:

MCP。

这就从:

“哪个技术更高级?”

变成:

Context Budget和Agent Architecture怎么设计?

这个问题明显更有工程价值。


九、甚至可以专门做一个实验

如果是AI测试开发课程,我特别想让学员做这样一个项目:

同一个Checkout测试任务。

做两个Agent。

Agent A:

Playwright MCP。

Agent B:

Playwright CLI + Skills。

固定:

同一个模型

同一个页面

同一组任务

同一组业务断言

然后比较:

Task Success

Tool Calls

Wrong Tool Calls

Input Tokens

Total Tokens

Latency

Cost

Business Assertion Pass

Recovery Attempts

最终不是为了证明:

MCP好。

或者:

CLI好。

而是研究:

不同Tool Interface会不会改变Agent测试行为。

这才是Agent时代很典型的测试开发实验。


十、测试开发真正应该抓住的是:AI可以接管操作,但不能接管“正确性的定义”

Playwright以后一定会越来越智能。

测试计划可以AI生成。

测试脚本可以AI生成。

Locator坏了可以AI修。

失败原因可以AI分析。

浏览器甚至可以直接交给Agent操作。

但有一样东西,我认为测试工程师不能轻易交出去:

Oracle。

也就是:

什么才算正确。

订单应该多少钱。

什么状态允许退款。

哪个角色能看到什么。

库存什么时候扣。

失败以后能不能重试。

哪些断言允许Agent修改。

哪些绝对不允许。

这些东西才是真正的软件质量。

所以我看到Playwright开始把:

CLI

Skills

Coding Agent

Test Agents

这些东西组合起来的时候,反而越来越确定一件事:

未来AI测试开发的重点,不是:

“会不会让AI帮我写Playwright。”

这个门槛会越来越低。

真正有价值的是:

当AI自己规划、自己写、自己运行、甚至自己修测试以后,你还能不能设计一套机制,证明它没有把Bug一起‘修’掉。

这个问题,才值得测试工程师现在开始研究。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。