This release adds 3 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
+9 more
Summary
AI summaryUpdates Test runner, Browser Versions, and Browser and Screencast across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Medium |
Adds Credentials API for virtual passkey authenticator in tests Adds Credentials API for virtual passkey authenticator in tests Source: llm_adapter@2026-06-15 Confidence: high |
— |
| Feature | Medium |
Adds WebStorage API to read/write page's localStorage and sessionStorage Adds WebStorage API to read/write page's localStorage and sessionStorage Source: llm_adapter@2026-06-15 Confidence: high |
— |
| Feature | Medium |
Adds apiResponse.securityDetails() and apiResponse.serverAddr() methods mirroring browser-side equivalents Adds apiResponse.securityDetails() and apiResponse.serverAddr() methods mirroring browser-side equivalents Source: llm_adapter@2026-06-15 Confidence: high |
— |
| Feature | Medium |
Adds `artifactsDir` option to browserType.connectOverCDP() for artifact storage control Adds `artifactsDir` option to browserType.connectOverCDP() for artifact storage control Source: llm_adapter@2026-06-15 Confidence: high |
— |
| Feature | Medium |
Adds `cursor` option to screencast.showActions() for cursor decoration control Adds `cursor` option to screencast.showActions() for cursor decoration control Source: llm_adapter@2026-06-15 Confidence: high |
— |
| Feature | Medium |
Adds `timestamp` field to onFrame callback in screencast.start() Adds `timestamp` field to onFrame callback in screencast.start() Source: llm_adapter@2026-06-15 Confidence: high |
— |
| Feature | Medium |
Adds new video modes 'on-all-retries', 'retain-on-first-failure', and 'retain-on-failure-and-retries' to testOptions.video Adds new video modes 'on-all-retries', 'retain-on-first-failure', and 'retain-on-failure-and-retries' to testOptions.video Source: llm_adapter@2026-06-15 Confidence: high |
— |
| Feature | Medium |
Adds support for `expect.soft.poll(...)` in test runner Adds support for `expect.soft.poll(...)` in test runner Source: llm_adapter@2026-06-15 Confidence: high |
— |
| Feature | Medium |
Adds fullConfig.argv snapshot of process.argv and fullConfig.failOnFlakyTests flag to test runner config Adds fullConfig.argv snapshot of process.argv and fullConfig.failOnFlakyTests flag to test runner config Source: llm_adapter@2026-06-15 Confidence: high |
— |
| Feature | Medium |
Adds `-G` shorthand command line option for `--grep-invert` in test runner Adds `-G` shorthand command line option for `--grep-invert` in test runner Source: llm_adapter@2026-06-15 Confidence: high |
— |
| Performance | Medium |
HAR and trace recordings now include WebSocket requests HAR and trace recordings now include WebSocket requests Source: granite4.1:30b@2026-06-15-audit Confidence: low |
— |
Full changelog
🔑 WebAuthn passkeys
New Credentials virtual authenticator, available via browserContext.credentials, lets tests register passkeys and answer navigator.credentials.create() / navigator.credentials.get() ceremonies in the page — no real hardware key required, works in all browsers:
const context = await browser.newContext();
// Seed a passkey your backend provisioned for a test user.
await context.credentials.create('example.com', {
id: credentialId,
userHandle,
privateKey,
publicKey,
});
await context.credentials.install();
const page = await context.newPage();
await page.goto('https://example.com/login');
// The page's navigator.credentials.get() is answered with the seeded passkey.
You can also let the app register a passkey once in a setup test, read it back with credentials.get(), and seed it into later tests — see Credentials for details.
🗃️ Web Storage
New WebStorage API, available via page.localStorage and page.sessionStorage, reads and writes the page's storage for the current origin:
await page.localStorage.setItem('token', 'abc');
const token = await page.localStorage.getItem('token');
const items = await page.sessionStorage.items();
New APIs
Network
- apiResponse.securityDetails() and apiResponse.serverAddr() mirror the browser-side response.securityDetails() and response.serverAddr().
Browser and Screencast
- New option
artifactsDirin browserType.connectOverCDP() controls where artifacts such as traces and downloads are stored when attached to an existing browser. - New option
cursorin screencast.showActions() controls the cursor decoration rendered for pointer actions. - The
onFramecallback in screencast.start() now receives atimestampof when the frame was presented by the browser.
Test runner
- The testOptions.video option now supports the same set of modes as
trace: new'on-all-retries','retain-on-first-failure'and'retain-on-failure-and-retries'values. See the video modes table for which runs are recorded and kept in each mode. - Supported
expect.soft.poll(...). - New fullConfig.argv — a snapshot of
process.argvfrom the runner process, handy for reading custom arguments passed after the--separator. - New fullConfig.failOnFlakyTests mirrors the config option, so reporters can explain why a flaky run failed.
- testInfo.errors now lists each sub-error of an
AggregateErroras a separate entry. - New
-Gcommand line shorthand for--grep-invert.
🛠️ Other improvements
- Playwright now supports Ubuntu 26.04.
- HAR and trace recordings now include WebSocket requests.
Browser Versions
- Chromium 149.0.7827.55
- Mozilla Firefox 151.0
- WebKit 26.5
This version was also tested against the following stable channels:
- Google Chrome 149
- Microsoft Edge 149
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About playwright
All releases →Beta — feedback welcome: [email protected]