# Playwright v1.63.0 - Product: Playwright (https://whatsnew.fyi/product/playwright) - Vendor: Microsoft - Date: 2026-09-04 - Version: v1.63.0 - Original notes: https://github.com/microsoft/playwright/releases/tag/v1.63.0 - Permalink: https://whatsnew.fyi/product/playwright/releases/v1.63.0 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **added** — Tests can now declare a named lock to prevent concurrent execution of tests sharing the same lock name across files, workers, and projects - **added** — page.frameLocator() and frame.frameLocator() can be called without a selector to search in any frame of the subtree - **added** — New locator.visible() method returns a locator that matches only visible elements - **added** — test.step() now accepts subtitle and params options for structured step data in reporters - **added** — Playwright API steps now report the target locator and call arguments to reporters - **added** — tracing.start() and testOptions.trace now accept a snapshots object to select dom, aria, and screen snapshot capture - **added** — Trace viewer now has a Display Aria mode showing action screenshots side by side with aria snapshots - **added** — httpCredentials option now accepts an array of credentials with origin matching - **added** — New opfs option includes the origin private file system in the storage state for persistence and restoration - **added** — New page.on('dialogclosed') and browserContext.on('dialogclosed') events are emitted when a JavaScript dialog is accepted, dismissed, or closed - **added** — New locator.ariaSnapshotJSON() and page.ariaSnapshotJSON() methods return aria snapshot as JSON with mode, depth, and boxes options - **added** — apiRequestContext.get() and other request methods accept a type argument that types the response json() - **added** — New standalone testOptions.reducedMotion, testOptions.forcedColors, and testOptions.contrast options - **added** — New --add-reporter command line option appends a reporter instead of replacing configured reporters - **added** — New omitTags option for list, line, dot, github, and junit reporters suppresses automatically appended tags from test titles - **added** — npx playwright install --no-remove keeps browsers of other Playwright installations instead of removing them - **added** — npx playwright codegen --http-credentials records against pages behind HTTP authentication ##### 🔒 Test locks Tests that access a shared resource — an external service, a global account setting — can now declare a named `lock`. Tests that share a lock name never run concurrently, across files, workers and [projects](https://playwright.dev/docs/test-projects), while everything else keeps running in parallel: ```js test('update user settings', { lock: 'user-settings' }, async ({ page }) => { // never runs at the same time as other tests holding 'user-settings' }); ``` A test can hold multiple locks, and [test.describe()](https://playwright.dev/docs/api/class-test#test-describe) accepts a `lock` for the whole group. Learn more about [test locks](https://playwright.dev/docs/test-parallel#test-locks). ##### 🪟 Locate across frames [page.frameLocator()](https://playwright.dev/docs/api/class-page#page-frame-locator) and [frame.frameLocator()](https://playwright.dev/docs/api/class-frame#frame-frame-locator) called without a selector search in any frame of the subtree, so you no longer need to locate the iframe first: ```js // Finds the button in any frame on the page. await page.frameLocator().getByRole('button').click(); ``` The rest of the locator resolves inside a single frame, just like a regular locator, and an error is thrown when it matches elements in several frames. ##### 👁️ Visible-only locators New [locator.visible()](https://playwright.dev/docs/api/class-locator#locator-visible) returns a locator that matches only visible elements. It is the recommended replacement for the `:visible` CSS pseudo-class: ```js await page.locator('button').visible().click(); ``` ##### 🧾 Step params and subtitles Steps now carry structured data for reporters. Playwright API steps report the target locator and call arguments, and [test.step()](https://playwright.dev/docs/api/class-test#test-step) accepts `subtitle` and `params` options for your own steps: ```js await test.step('Login', async () => { // ... }, { subtitle: 'as admin', params: { user: 'admin' } }); ``` Reporters receive them via [testStep.subtitle](https://playwright.dev/docs/api/class-teststep#test-step-subtitle) and [testStep.params](https://playwright.dev/docs/api/class-teststep#test-step-params). For Playwright API steps, the subtitle is the locator or the navigation url — for example, `Click` with subtitle `getByRole('button')`. Both are rendered next to the step title in the trace viewer and the HTML report. ##### 🖼️ Aria and screen snapshots in traces The `snapshots` option of [tracing.start()](https://playwright.dev/docs/api/class-tracing#tracing-start) and the [testOptions.trace](https://playwright.dev/docs/api/class-testoptions#test-options-trace) fixture option now accept an object selecting what to capture on every action: ```js // playwright.config.ts export default defineConfig({ use: { trace: { mode: 'on', snapshots: { dom: true, aria: true, screen: true } }, }, }); ``` With aria and screen snapshots recorded, the new **Display Aria** mode in the trace viewer shows the action screenshot side by side with the aria snapshot, and hovering an aria node highlights it on the screenshot. ##### New APIs ###### Browser and Context - [`httpCredentials`](https://playwright.dev/docs/api/class-browser#browser-new-context-option-http-credentials) now also accepts an array of credentials. The first entry matching the request origin is used, and entries without an origin match any request. - New option [`opfs`](https://playwright.dev/docs/api/class-browsercontext#browser-context-storage-state-option-opfs) includes the [origin private file system](https://developer.mozilla.org/en-US/docs/Web/API/File_System_API/Origin_private_file_system) in the storage state, so it can be persisted and restored into later contexts. - New events [page.on('dialogclosed')](https://playwright.dev/docs/api/class-page#page-event-dialog-closed) and [browserContext.on(' _[Truncated at 4000 characters — full notes: https://github.com/microsoft/playwright/releases/tag/v1.63.0]_