v1.64.12026-10-14
本次修复两处问题。一是自 1.64.0 起,electron.launch 启动打包后的应用时,偶尔会取不到首个窗口,导致后续依赖窗口句柄的操作直接失败,现已稳定复现并修复。二是 Chromium 155 引入的回归:只要项目中注册了任意路由,预检请求(preflight)遇到跨域重定向就会被中止,报 net::ERRABORTED,影响所有走网络拦截的接口请求,这次也一并解决了。
v1.64.02026-10-07
WebMCP:新增 page.webmcp 与 frame.webmcp,可读取页面通过实验性 WebMCP 注册的工具并直接调用,让这类工具像普通应用代码一样可测:
``js
const browser = await chromium.launch({ args: ['--enable-features=WebMCP'] });
const page = await browser.newPage();
await page.goto('https://example.com');
for (const tool of await page.webmcp.tools())
console.log(tool.name, tool.description);
const result = await page.webmcp.callTool('add', { a: 2, b: 40 });
console.log(result.content[0].text); // "42"
`
Playwright MCP 默认支持 WebMCP,页面工具会以 webmcp_<tool> 的形式交给 agent,加 --no-webmcp 可关闭;playwright-cli 也提供了 webmcp-list 与 webmcp-call 两个子命令。
录屏更灵活:新增 fps 自定义帧率(Firefox 与 WebKit 目前上限 25 帧),操作标注改用 style 写纯 CSS,分别控制 point、highlight 和 title,原 fontSize 选项已弃用。光标会停在最后一个动作处、跨页面跳转不消失,并沿缓动路径移动;视频编码由 VP8 换成 VP9,CPU 占用更低、体积更小:
`js
// playwright.config.ts
import { defineConfig } from '@playwright/test';
export default defineConfig({
use: {
video: {
mode: 'on',
size: { width: 1920, height: 1080 },
fps: 60,
show: {
actions: {
style: {
point: 'width: 20px; height: 20px; border-radius: 50%; background: red',
highlight: 'outline: 2px solid #333; background: rgba(0, 128, 255, .15)',
title: 'font-size: 16px',
},
},
},
},
},
});
`
测试运行器:新增 testProject.default,可以把多个浏览器写进配置,用 default: false 标记不参与默认运行的项目,npx playwright test 只跑你最常用的那一个,需要时再用 --project 指定:
``js
// playwright.config.ts
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
projects: [
{ name: 'chromium', use: devices['Desktop Chrome'] },
{ name: 'firefox', use: devices['Desktop Firefox'], default: false },
{ name: 'webkit', use: devices['Desktop Safari'], default: false
v1.63.02026-09-04
这版的核心是让并行更可控、定位更省事。新增测试锁:共享同名 lock 的测试不再并发执行(跨文件、worker、项目皆然),其余测试照常并行,适合访问外部服务或全局账号设置的用例;单个测试可持多把锁,test.describe() 也支持整组加锁。page.frameLocator() 省去选择器时会在子树的任意 frame 中查找,不必先定位 iframe,后续解析仍限定在单个 frame。新增 locator.visible(),只匹配可见元素,替代 :visible 伪类。步骤信息升级:test.step() 支持 subtitle 与 params,API 步骤自动带上目标定位器和调用参数,在 trace 查看器与 HTML 报告中随步骤标题渲染。tracing 的 snapshots 选项可分别开关 dom、aria、screen,配合新的 Display Aria 模式并排查看截图与 aria 快照。此外 httpCredentials 支持凭据数组,storageState 新增 opfs,新增 dialogclosed 事件。
v1.62.12026-07-30
本次为 1.62 后的回归修复版本,共解决五处问题:tsconfig 的 extends 写成裸标识符时,不再像 tsc 那样沿 node_modules 逐级向上查找,导致项目直接启动失败;目录形式的 tsconfig 项目引用(如 "path": "../pkg")同样无法解析,自 1.62 起致命。可访问性快照方面,按钮文本嵌在带 aria-hidden 的 SVG 与 span 中时会丢失名称,图片类可操作元素也未被纳入快照。另有类型回归:page.evaluate() 传入 string & { brand } 这类品牌化原始类型不再通过类型检查。升级到 1.62 后遇到上述任一情况,建议尽快更新。
v1.62.02026-07-24
组件测试改用「故事 + 画廊」模型:story 用固定 props 和 mock 数据包住一个场景,gallery 页面按需渲染它。新增的 fixtures.mount() 夹具会打开画廊、按 id 挂载 story 并返回限定在根元素的 Locator,配合 update(props) / unmount() 可在测试中重渲染或卸载;把 story 类型作为模板参数传入,还能对 props 做类型检查。
``js
test('click should expand', async ({ mount }) => {
const component = await mount('components/Expandable/Stateful');
await component.getByRole('button').click();
await expect(component.getByTestId('expanded')).toHaveValue('true');
});
``
多数操作与 web 断言现在接受 signal 选项,可传 AbortSignal 取消耗时的点击、导航、等待和断言;传了 signal 并不会关闭默认超时,要禁用得显式写 timeout: 0。
截图支持 WebP:toHaveScreenshot() 只要基线文件名以 .webp 结尾即按该格式存储,page.screenshot() 与 locator.screenshot() 也可把 type 设为 webp,quality 100 为无损,数值越低体积越小。
reporter 新增 preprocess() 钩子,在配置解析后、onBegin() 前执行,可借 TestRun 把单个用例标记为跳过、排除、已修复或失败,实现自定义过滤。testConfig.retryStrategy 决定失败用例何时重试:默认 'immediate' 空出 worker 就重跑,'isolated' 则把全部重试攒到末
v1.61.12026-06-23
本轮修复了五处问题。Expect.Extend 新增的匹配器若与内置匹配器同名,会覆盖原实现,现已修正;UI 模式下 apiRequestContext._wrapApiCall 报告的字节数不正确,与 headed 模式表现不一致,也一并解决。Trace viewer 中 WebSocket 消息的时间戳被错误缩小了 1000 倍,现已恢复正常显示。此外修复了两个回归:Node 22.15 上同步 loader 报错 context.conditions?.includes is not a function,以及同步 ESM loader(registerHooks)在 pnpm workspace 软链下无法解析无扩展名的 .ts 子路径导入。
v1.61.02026-06-15
这版 Playwright 补了两块关键测试能力:新增 Credentials 虚拟认证器,测试中即可注册 passkey 并响应页面的 navigator.credentials.create() / get() 调用,无需实体安全密钥,各浏览器通用;新增 WebStorage API,通过 page.localStorage / page.sessionStorage 直接读写当前源的存储。
其余更新:apiResponse 补上 securityDetails() 与 serverAddr();connectOverCDP() 新增 artifactsDir 控制产物存放位置;testOptions.video 对齐 trace 的重试模式,新增 on-all-retries 等取值,并支持 expect.soft.poll(...);testInfo.errors 会把 AggregateError 的子错误逐条列出;另加 -G 作为 --grep-invert 简写。平台方面支持 Ubuntu 26.04,HAR 与 trace 录制纳入 WebSocket。
v1.60.02026-05-11
本次更新围绕录制、拖放与断言展开。tracing 新增 startHar() / stopHar(),HAR 录制升格为 tracing 的一等 API,沿用 recordHar 的 content、mode、urlFilter 选项;返回的 Disposable 配合 await using,离开作用域即自动收尾:
``js
await using har = await context.tracing.startHar('trace.har');
const page = await context.newPage();
await page.goto('https://playwright.dev');
// har 离开作用域时,HAR 文件即完成写入。
`
新增 locator.drop(),可模拟向元素拖入文件或剪贴板式数据,内部派发 dragenter、dragover、drop 及合成的 DataTransfer,跨浏览器一致,测试上传区域很方便。
Aria 快照这边,expect(page).toMatchAriaSnapshot() 现在支持 Page(等同于断言 page.locator('body'));ariaSnapshot() 新增 boxes 选项,为每个元素附上 [box=x,y,width,height] 边界框,方便 AI 消费。
test.abort() 可在 fixture、钩子或路由处理中立即中止当前测试,用于发现不可恢复的误用时快速失败。
此外还有一批新 API:browser.on('context') 事件、BrowserContext 转发所属页面的下载与帧生命周期等事件、getByRole() 的 description` 选项等。
v1.59.12026-04-01
修复了 Windows 上的一个回归问题:此前版本在拉起浏览器进程时会隐藏控制台窗口,结果连带弄坏了 codegen、--ui 和 show 等命令,现已回退该改动,相关功能恢复正常。
v1.59.02026-04-01
Playwright 1.59 带来两处重点更新。
新增 page.screencast API,把录屏能力收拢到一个接口下:可用 start/stop 精确控制录制,替代原先的 recordVideo 选项;showActions 会在画面里标出正在操作的元素与动作标题,位置、停留时长、字号均可配置,测试中也能通过 video 选项统一开启。showChapter 和 showOverlay 支持在页面上叠加章节标题与自定义 HTML,做讲解视频更顺手;onFrame 则以 JPEG 帧流实时输出画面,方便生成缩略图、直播预览或交给视觉模型分析。面向编码智能体,官方还示范了「视频回执」:任务完成后录一段带章节和标注的走查视频,复核起来比翻文本日志快得多。
另一项是 browser.bind():启动的浏览器可绑定给 playwright-cli、@playwright/mcp 等客户端接入,一条 attach 命令即可连上正在运行的浏览器。