Update Playwright to v1.65.0 #211

Merged
renovate-bot merged 2 commits from renovate/playwright into main 2026-11-09 00:01:08 +01:00
Collaborator

This PR contains the following updates:

Package Change Age Confidence Type Update
@playwright/test (source) 1.64.1 → 1.65.0 age confidence devDependencies minor
mcr.microsoft.com/playwright v1.64.1-noble → v1.65.0-noble age confidence final minor

Release Notes

microsoft/playwright (@​playwright/test)

v1.65.0

Compare Source

🥟 Run tests with Bun

The test runner now runs under Bun. Bun transpiles your TypeScript test files itself, so Playwright does not use Babel or its compilation cache. Pass the --bun flag, because without it bunx playwright test runs on Node.js:

bunx --bun playwright test

Our CI runs the test runner tests under Bun 1.4.3 on Linux. Some features work differently under Bun:

  • There is no watch mode. UI mode does not run tests again when files change, and --only-changed does not follow imports.
  • Bun loads modules itself, so --tsconfig and the JSX options in tsconfig.json have no effect, and custom ESM loaders are not supported.
  • Stack traces do not include async frames, and API names do not include the class name: click instead of locator.click. This changes some step locations, step titles and error messages.
  • Console output of a test does not get into the trace and UI mode.

🚨 Reports with only failures

New failures reporter prints failures and successful retries as they occur, followed by a summary, without progress output.

New onlyFailures option of the HTML, JSON and JUnit reporters keeps only tests with unexpected outcomes, flaky tests and interrupted tests:

// playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
  reporter: [
    ['failures'],
    ['html', { onlyFailures: true }],
  ],
});

🎯 Test runner

  • New built-in -exclusive- test lock runs a test only when no other tests are running. All other tests continue to run in parallel with each other:

    test('restart the server', { lock: '-exclusive-' }, async () => {
      // No other test runs while this one is running.
    });
    
  • test.skip(), test.fixme(), test.fail() and test.slow() now accept only a description. It is recorded in the test annotation:

    test('upload a file', async ({ page }) => {
      test.skip('Not implemented yet');
    });
    
  • New PLAYWRIGHT_TRANSFORM_CACHE_DIR environment variable sets the directory for transpiled test files, for example on a Linux machine shared with other users.

New APIs

Breaking Changes ⚠️

  • TypeScript class fields now follow useDefineForClassFields from your tsconfig.json, the same as tsc. It is enabled for ES2022 and later targets, and when target is not specified. A field initializer that reads a constructor parameter property now fails, because the initializer runs first:

    class LoginPage {
      // TypeError: Cannot read properties of undefined (reading 'getByRole')
      readonly submit = this.page.getByRole('button', { name: 'Submit' });
    
      constructor(private readonly page: Page) {}
    }
    

    Move the initialization to the constructor, or set "useDefineForClassFields": false in your tsconfig.json.

  • Actions such as locator.click(), locator.check(), locator.tap(), locator.fill(), locator.clear() and locator.selectOption() now wait for the element to be not inert. An action on an element with the inert attribute, or inside such an element, now times out if the element stays inert.

  • A sharded run now fails with "No tests found" when no tests match across all shards. Pass --pass-with-no-tests to allow this. An empty shard still passes when other shards have tests.

  • Cookie matching now follows RFC 6265. With a URL, browserContext.cookies() and apiRequestContext.cookies() no longer return host-only cookies for subdomains or Path=/api cookies for /apiv2, and a Path=/foo/ cookie does not match /foo. APIRequestContext sends a cookie without a name as Cookie: x instead of Cookie: =x, and stores Set-Cookie: token as a cookie without a name.

  • Proxy credentials are no longer sent to websites. The credentials in the proxy option now answer only proxy challenges. To authenticate on a website, use httpCredentials.

  • Text that the browser does not render, such as text that is not assigned to a slot or text directly inside a closed <details>, is no longer part of accessible names and aria snapshots. This can change the results of page.getByRole() with a name, locator.ariaSnapshot() and expect(locator).toMatchAriaSnapshot().

  • String and URLSearchParams values of the params option in APIRequestContext requests are now appended to the query that the URL already has, instead of replacing it.

  • .css, .less and .scss imports in test files now load as empty modules instead of being removed, so the imported file must exist.

  • The blob reporter again deletes the content of its output directory before it writes the report. Playwright 1.64 kept reports with other names.

  • Test locations of imported calls such as test( in CommonJS output now point to the start of the callee, for example a.spec.ts:3:7 instead of a.spec.ts:3:11. This is the same as in ESM.

Announcements

  • ⚠️ Playwright no longer tests on Node.js 20. Use Node.js 22, 24 or 26, as listed in the system requirements.
  • 🐳 Docker images now include Node.js 26 instead of Node.js 24, and the latest patch of Chromium on the same branch.

Browser Versions

  • Chromium 158.0.8127.18
  • Mozilla Firefox 159.0
  • WebKit 27.2

This version was also tested against the following stable channels:

  • Google Chrome 157
  • Microsoft Edge 156

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Enabled.

♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate CLI.

This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | Type | Update | |---|---|---|---|---|---| | [@playwright/test](https://playwright.dev) ([source](https://github.com/microsoft/playwright)) | [`1.64.1` → `1.65.0`](https://renovatebot.com/diffs/npm/@playwright%2ftest/1.64.1/1.65.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@playwright%2ftest/1.65.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@playwright%2ftest/1.64.1/1.65.0?slim=true) | devDependencies | minor | | mcr.microsoft.com/playwright | `v1.64.1-noble` → `v1.65.0-noble` | ![age](https://developer.mend.io/api/mc/badges/age/docker/mcr.microsoft.com%2fplaywright/v1.65.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/mcr.microsoft.com%2fplaywright/v1.64.1/v1.65.0?slim=true) | final | minor | --- ### Release Notes <details> <summary>microsoft/playwright (@&#8203;playwright/test)</summary> ### [`v1.65.0`](https://github.com/microsoft/playwright/releases/tag/v1.65.0) [Compare Source](https://github.com/microsoft/playwright/compare/v1.64.1...v1.65.0) #### 🥟 Run tests with Bun The test runner now runs under [Bun](https://bun.com). Bun transpiles your TypeScript test files itself, so Playwright does not use Babel or its compilation cache. Pass the `--bun` flag, because without it `bunx playwright test` runs on Node.js: ```bash bunx --bun playwright test ``` Our CI runs the test runner tests under Bun 1.4.3 on Linux. Some features work differently under Bun: - There is no watch mode. UI mode does not run tests again when files change, and `--only-changed` does not follow imports. - Bun loads modules itself, so `--tsconfig` and the JSX options in `tsconfig.json` have no effect, and custom ESM loaders are not supported. - Stack traces do not include async frames, and API names do not include the class name: `click` instead of `locator.click`. This changes some step locations, step titles and error messages. - Console output of a test does not get into the trace and UI mode. #### 🚨 Reports with only failures New [`failures`](https://playwright.dev/docs/test-reporters#failures-reporter) reporter prints failures and successful retries as they occur, followed by a summary, without progress output. New `onlyFailures` option of the HTML, JSON and JUnit reporters [keeps only](https://playwright.dev/docs/test-reporters#report-only-failures) tests with unexpected outcomes, flaky tests and interrupted tests: ```js // playwright.config.ts import { defineConfig } from '@playwright/test'; export default defineConfig({ reporter: [ ['failures'], ['html', { onlyFailures: true }], ], }); ``` #### 🎯 Test runner - New built-in `-exclusive-` [test lock](https://playwright.dev/docs/test-parallel#test-locks) runs a test only when no other tests are running. All other tests continue to run in parallel with each other: ```js test('restart the server', { lock: '-exclusive-' }, async () => { // No other test runs while this one is running. }); ``` - [test.skip()](https://playwright.dev/docs/api/class-test#test-skip), [test.fixme()](https://playwright.dev/docs/api/class-test#test-fixme), [test.fail()](https://playwright.dev/docs/api/class-test#test-fail) and [test.slow()](https://playwright.dev/docs/api/class-test#test-slow) now accept only a description. It is recorded in the test annotation: ```js test('upload a file', async ({ page }) => { test.skip('Not implemented yet'); }); ``` - New `PLAYWRIGHT_TRANSFORM_CACHE_DIR` environment variable sets the directory for transpiled test files, for example on a Linux machine shared with other users. #### New APIs - New options [`timeout`](https://playwright.dev/docs/api/class-cdpsession#cdp-session-send-option-timeout) and [`signal`](https://playwright.dev/docs/api/class-cdpsession#cdp-session-send-option-signal) in [cdpSession.send()](https://playwright.dev/docs/api/class-cdpsession#cdp-session-send). - New [testRun.mode()](https://playwright.dev/docs/api/class-testrun#test-run-mode) returns the execution mode of a suite during [reporter.preprocess()](https://playwright.dev/docs/api/class-reporter#reporter-preprocess). #### Breaking Changes ⚠️ - TypeScript class fields now follow [`useDefineForClassFields`](https://playwright.dev/docs/test-typescript#tsconfig-class-fields) from your `tsconfig.json`, the same as `tsc`. It is enabled for `ES2022` and later targets, and when `target` is not specified. A field initializer that reads a constructor parameter property now fails, because the initializer runs first: ```js class LoginPage { // TypeError: Cannot read properties of undefined (reading 'getByRole') readonly submit = this.page.getByRole('button', { name: 'Submit' }); constructor(private readonly page: Page) {} } ``` Move the initialization to the constructor, or set `"useDefineForClassFields": false` in your `tsconfig.json`. - Actions such as [locator.click()](https://playwright.dev/docs/api/class-locator#locator-click), [locator.check()](https://playwright.dev/docs/api/class-locator#locator-check), [locator.tap()](https://playwright.dev/docs/api/class-locator#locator-tap), [locator.fill()](https://playwright.dev/docs/api/class-locator#locator-fill), [locator.clear()](https://playwright.dev/docs/api/class-locator#locator-clear) and [locator.selectOption()](https://playwright.dev/docs/api/class-locator#locator-select-option) now wait for the element to be [not inert](https://playwright.dev/docs/actionability#not-inert). An action on an element with the `inert` attribute, or inside such an element, now times out if the element stays inert. - A sharded run now fails with "No tests found" when no tests match across all shards. Pass `--pass-with-no-tests` to allow this. An empty shard still passes when other shards have tests. - Cookie matching now follows RFC 6265. With a URL, [browserContext.cookies()](https://playwright.dev/docs/api/class-browsercontext#browser-context-cookies) and [apiRequestContext.cookies()](https://playwright.dev/docs/api/class-apirequestcontext#api-request-context-cookies) no longer return host-only cookies for subdomains or `Path=/api` cookies for `/apiv2`, and a `Path=/foo/` cookie does not match `/foo`. [APIRequestContext](https://playwright.dev/docs/api/class-apirequestcontext) sends a cookie without a name as `Cookie: x` instead of `Cookie: =x`, and stores `Set-Cookie: token` as a cookie without a name. - Proxy credentials are no longer sent to websites. The credentials in the [`proxy`](https://playwright.dev/docs/api/class-browsertype#browser-type-launch-option-proxy) option now answer only proxy challenges. To authenticate on a website, use [`httpCredentials`](https://playwright.dev/docs/api/class-browser#browser-new-context-option-http-credentials). - Text that the browser does not render, such as text that is not assigned to a slot or text directly inside a closed `<details>`, is no longer part of accessible names and aria snapshots. This can change the results of [page.getByRole()](https://playwright.dev/docs/api/class-page#page-get-by-role) with a name, [locator.ariaSnapshot()](https://playwright.dev/docs/api/class-locator#locator-aria-snapshot) and [expect(locator).toMatchAriaSnapshot()](https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-match-aria-snapshot). - String and `URLSearchParams` values of the `params` option in [APIRequestContext](https://playwright.dev/docs/api/class-apirequestcontext) requests are now appended to the query that the URL already has, instead of replacing it. - `.css`, `.less` and `.scss` imports in test files now load as empty modules instead of being removed, so the imported file must exist. - The blob reporter again deletes the content of its output directory before it writes the report. Playwright 1.64 kept reports with other names. - Test locations of imported calls such as `test(` in CommonJS output now point to the start of the callee, for example `a.spec.ts:3:7` instead of `a.spec.ts:3:11`. This is the same as in ESM. #### Announcements - ⚠️ Playwright no longer tests on Node.js 20. Use Node.js 22, 24 or 26, as listed in the [system requirements](https://playwright.dev/docs/intro#system-requirements). - 🐳 [Docker images](https://playwright.dev/docs/docker) now include Node.js 26 instead of Node.js 24, and the latest patch of Chromium on the same branch. #### Browser Versions - Chromium 158.0.8127.18 - Mozilla Firefox 159.0 - WebKit 27.2 This version was also tested against the following stable channels: - Google Chrome 157 - Microsoft Edge 156 </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xOTkuMiIsInVwZGF0ZWRJblZlciI6IjQ0LjE5OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
renovate-bot scheduled this pull request to auto merge when all checks succeed 2026-11-06 05:18:56 +01:00
renovate-bot force-pushed renovate/playwright from b7b6c85a70 to 316ec7f1da 2026-11-07 05:18:54 +01:00 Compare
renovate-bot force-pushed renovate/playwright from 316ec7f1da to affa38f583 2026-11-08 05:18:55 +01:00 Compare
lilleman force-pushed renovate/playwright from affa38f583 to e1b4610331 2026-11-08 23:04:41 +01:00 Compare
lilleman force-pushed renovate/playwright from e1b4610331 to 3a9c684f5e 2026-11-08 23:17:35 +01:00 Compare
lilleman added 8 commits 2026-11-08 23:26:32 +01:00
Update renovate/renovate Docker tag to v44.222.3
CI / full-gate (push) Successful in 3m51s
Mirror / github-mirror (push) Successful in 4s
2f75995b3d
Release-Bump: major
Refuse a malformed admin DSN before postgres 4 connects to the host it misreads
CI / full-gate (push) Successful in 3m58s
Mirror / github-mirror (push) Successful in 3s
0a9c79d08f
Release-Bump: major
Give the JsonWebKey alias the kid a JWKS selects a key by
CI / full-gate (push) Successful in 3m51s
Mirror / github-mirror (push) Successful in 3s
1fc6033dd5
Expect WebKit's plain-http cross-origin-isolation warning in the console guard
CI / full-gate (push) Successful in 4m21s
Mirror / github-mirror (push) Successful in 4s
2a0ae084ac
lilleman force-pushed renovate/playwright from 3a9c684f5e to 2a0ae084ac 2026-11-08 23:26:32 +01:00 Compare
renovate-bot merged commit 2a0ae084ac into main 2026-11-09 00:01:08 +01:00
renovate-bot deleted branch renovate/playwright 2026-11-09 00:01:08 +01:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: larvit/plainpages#211