Technical overview of the most significant release in Playwright's 2026 roadmap — virtual passkey authentication, native Web Storage API access, and a substantially improved test runner.
Playwright 1.61, released on June 15, 2026, is one of the most impactful updates to the popular browser automation framework this year. The release tackles three areas that directly affect how teams write and maintain E2E tests: WebAuthn passkey authentication, Web Storage API utilities, and a major test runner refresh.
If you're maintaining CI pipelines or writing integration tests for applications that use passkeys, localStorage-based state, or complex retry logic — this release changes how you approach each of those tasks. Below I walk through every new feature with working code examples, practical migration notes, and the browser versions shipped with this release.
The headline feature in Playwright 1.61 is the virtual authenticator — a built-in
WebAuthn credential manager accessible via browserContext.credentials. This is the
first time Playwright offers native support for testing passkey registration and authentication
flows without external hardware or platform authenticator emulation.
You can provision a passkey that your backend has already created for a test user. Playwright's
virtual authenticator answers navigator.credentials.create() and
navigator.credentials.get() calls transparently:
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.
await page.waitForURL('https://example.com/dashboard');
You can also let the application register a passkey naturally during a setup test, read the
credential back with credentials.get(), and seed it into subsequent test suites.
This enables realistic passkey lifecycle testing — registration in one step, authentication in
another — without managing persistent credential state externally.
For full API details, see the Credentials API documentation.
Playwright 1.61 introduces page.localStorage and page.sessionStorage
— direct accessors that let you read and write Web Storage for the current origin without
executing JavaScript in the page context.
// Set a token for authentication flows
await page.localStorage.setItem('token', 'abc');
// Read it back
const token = await page.localStorage.getItem('token');
// List all session storage entries
const items = await page.sessionStorage.items();
// Clear specific item
await page.localStorage.removeItem('token');
// Clear all storage
await page.localStorage.clear();
This API is particularly valuable for state injection in test setup. Instead of navigating through a multi-step login flow to set application state, you can inject the necessary tokens and preferences directly into localStorage before the page loads. This reduces test flakiness and speeds up suite execution.
Methods available: setItem(), getItem(), removeItem(),
clear(), and items() for both localStorage and sessionStorage.
The test runner received several meaningful upgrades in 1.61. These aren't headline-grabbing features, but they improve the developer experience significantly when debugging flaky tests and configuring CI pipelines.
The testOptions.video option now supports the same granular mode set as trace:
on-all-retries — record video for every retry attemptretain-on-first-failure — keep the video only for the first failure, discard successful runsretain-on-failure-and-retries — keep video for the first failure plus all subsequent retries
These modes give precise control over disk usage in CI environments. If you only care about
what went wrong, retain-on-first-failure saves significant storage compared to
recording everything.
Soft assertions now support polling via expect.soft.poll(...). Like standard
soft assertions, these do not immediately fail the test — they collect errors and report them
after the test completes. The polling variant is useful for conditions that take time to
stabilise, such as async UI updates or server-side state changes. Combined with soft assertions,
this allows non-critical checks to verify themselves without blocking execution or causing
premature test failures.
fullConfig.argv provides a snapshot of process.argv from the runner
process, making custom CLI arguments passed after the -- separator accessible in
configuration files and custom reporters.
fullConfig.failOnFlakyTests mirrors the configuration option of the same name,
making it readable inside reporters. This means your custom reporter can explain why a flaky
test run failed or surface flaky detection context in CI dashboards.
Two new properties on APIResponse mirror their browser-side counterparts:
apiResponse.securityDetails() — returns TLS security details (protocol, cipher, certificate issuer) for the response, useful for verifying HTTPS configuration in test environmentsapiResponse.serverAddr() — returns the resolved server IP address and port, helpful for debugging DNS routing and load balancer configurations
A new artifactsDir option in browserType.connectOverCDP() controls
where artifacts (traces, downloads, screenshots) are stored when Playwright connects to an
existing browser instance via the Chrome DevTools Protocol. Previously, artifact paths were
harder to control in CDP mode — this change brings parity with the standard launch workflow.
The screencast API also gains a cursor option in
screencast.showActions() that displays an on-screen cursor indicator. This is
useful for demo recordings and debugging videos where you want viewers to see exactly which
element Playwright is interacting with.
Playwright 1.61 ships with the latest browser engines:
This version was also tested against Google Chrome 149 and Microsoft Edge 149 stable channels.
Setting up robust E2E testing pipelines requires thoughtful architecture — choosing the right tools, structuring test suites for maintainability, and configuring CI for reliable execution. If you're planning an automation strategy or need help migrating to Playwright 1.61, reach out to me for a free consultation.
I'm a full-stack developer with extensive experience building and testing production web applications. Based in Minsk and working worldwide, let's discuss your project.
Need help with test automation or Playwright migration? Tell me about your project — I'll provide a preliminary estimate. Free of charge.