Skip to content

chore(deps): update dependency @playwright/test to v1.65.0 - #5521

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/rhdh-theme-dependencies-(minor)
Open

renovate[bot] wants to merge 1 commit into
mainfrom
renovate/rhdh-theme-dependencies-(minor)

Conversation

@renovate

@renovate renovate Bot commented Nov 11, 2026

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Change Age Confidence
@playwright/test (source) 1.63.0 → 1.65.0 age confidence

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

Notable 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

v1.64.1

Compare Source

Bug Fixes
  • #​43247 [Bug]: _electron.launch intermittently loses a packaged app's first window since 1.64.0
  • #​43242 [Regression]: Chromium 155+ aborts a preflighted cross-origin redirect whenever any route is registered (net::ERR_ABORTED)

v1.64.0

Compare Source

🧰 WebMCP

New page.webmcp and frame.webmcp give access to the tools that a page registers through the experimental WebMCP browser API, so you can test them like any other part of your app:

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 also supports WebMCP by default, with page-defined tools offered to the agent as webmcp_<tool>. Pass --no-webmcp to opt out.

playwright-cli exposes them as well:

playwright-cli webmcp-list
playwright-cli webmcp-call search_catalog --params '{"query":"cats"}'

🎬 Better videos

Videos can now be recorded at a custom frame rate, and the decorations for actions are styled with plain CSS:

// 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 #&#8203;333; background: rgba(0, 128, 255, .15)',
            title: 'font-size: 16px',
          },
        },
      },
    },
  },
});
  • New fps option in testOptions.video, recordVideo and
    screencast.start(). Firefox and WebKit currently capture up to 25 frames per second.
  • New style option takes CSS declarations for the point marker, the target
    highlight and the action title. It replaces the fontSize option, which is now deprecated.
  • The cursor stays visible at the last action point, survives navigations and travels along a natural, eased path.
  • Videos are encoded with VP9 instead of VP8, which takes less CPU and produces smaller files of the same or better
    quality.
  • All video options are also available in Playwright MCP and playwright-cli.

🎯 Test runner

  • New testProject.default option keeps a project in the config without running it by default. You can configure every browser you care about, and let a plain npx playwright test run just your favourite one:

    // 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 },
      ],
    });
    npx playwright test                     # runs chromium only
    npx playwright test --project=firefox   # runs firefox
    npx playwright test --project="*"       # runs all three, for example on CI
  • New --shuffle command line option schedules tests in a random order, which helps to find tests that accidentally depend on each other.

    npx playwright test --shuffle
    # Running 42 tests using 4 workers, shuffle seed 271828182
    # ...
    
    # Pass the seed to reproduce the same order.
    npx playwright test --shuffle 271828182
  • New lock option in test.describe.configure() adds test locks to all tests in a file or a group:

    test.describe.configure({ lock: 'user-settings' });
  • New type option of toHaveScreenshot in testConfig.expect stores all unnamed screenshots as WebP:

    // playwright.config.ts
    export default defineConfig({
      expect: {
        toHaveScreenshot: { type: 'webp' },
      },
    });

🪆 Locator.within()

New locator.within() combines two locators that you already have, reading in the natural order —
"this button, within that dialog":

const saveButton = page.getByRole('button', { name: 'Save' });
const dialog = page.getByTestId('settings-dialog');

await saveButton.within(dialog).click();

Relative locators such as locator.nth() or locator.first() are resolved inside each parent
separately, which makes column-like queries straightforward:

// The third cell of every row, not the third cell in the table.
const thirdColumn = page.getByRole('cell').nth(2).within(page.getByRole('row'));
await expect(thirdColumn).toHaveText(['Apple', 'Banana', 'Cherry']);

New APIs

Breaking changes ⚠️

  • screen property is now forwarded from the device descriptors. If you use ...devices['Desktop Chrome'] and alike, window.screen and media queries now see the emulated screen size. You can opt-out by explicitly setting screen to undefined:

    // playwright.config.ts
    export default defineConfig({
      use: {
        ...devices['Desktop Chrome'],
        screen: undefined,
      },
    });
  • JSX in your test files now follows your tsconfig.json. Playwright compiles JSX in test files according to the jsx, jsxFactory, jsxFragmentFactory and jsxImportSource tsconfig options, and defaults to the automatic runtime from react/jsx-runtime.

  • --update-snapshots=missing now passes the test run. Tests that only create missing snapshots now pass in the 'missing' mode of testConfig.updateSnapshots, so that CI can generate new snapshots and verify the existing ones in a single run. The mode used when the option is not specified is now called 'default' and behaves as before: missing snapshots are written and the test fails.

  • Elements inside hidden iframes are considered hidden. Elements inside an iframe that is not visible, for example with visibility: hidden, are now considered hidden by actions, locator.isVisible() and expect(locator).toBeVisible().

Browser Versions

  • Chromium 156.0.8078.4
  • Mozilla Firefox 157.0
  • WebKit 27.2

This version was also tested against the following stable channels:

  • Google Chrome 155
  • Microsoft Edge 155

Configuration

📅 Schedule: (UTC)

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

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ 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 this update again.


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

This PR was generated by Mend Renovate. View the repository job log.

@renovate
renovate Bot requested review from a team, ciiay and logonoff as code owners November 11, 2026 14:37
@renovate renovate Bot added dependencies Pull requests that update a dependency file team/rhdh labels Nov 11, 2026
@renovate
renovate Bot requested a review from a team as a code owner November 11, 2026 14:37
@renovate renovate Bot added the theme label Nov 11, 2026
@renovate
renovate Bot requested a review from divyanshiGupta November 11, 2026 14:37
@rhdh-gh-app

rhdh-gh-app Bot commented Nov 11, 2026

Copy link
Copy Markdown

Changed Packages

Package Name Package Path Changeset Bump Current Version
app-legacy workspaces/theme/packages/app-legacy none v0.0.0
app workspaces/theme/packages/app none v0.0.0

@codecov

codecov Bot commented Nov 11, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 65.69%. Comparing base (c1b8451) to head (94f28e1).
⚠️ Report is 1 commits behind head on main.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #5521   +/-   ##
=======================================
  Coverage   65.69%   65.69%           
=======================================
  Files        2779     2779           
  Lines      111684   111684           
  Branches    31385    31387    +2     
=======================================
  Hits        73366    73366           
  Misses      37769    37769           
  Partials      549      549           
Flag Coverage Δ *Carryforward flag
adoption-insights 87.31% <ø> (ø) Carriedforward from c1b8451
ai-integrations 90.79% <ø> (ø) Carriedforward from c1b8451
app-defaults 75.43% <ø> (ø) Carriedforward from c1b8451
augment 46.67% <ø> (ø) Carriedforward from c1b8451
boost 93.78% <ø> (ø) Carriedforward from c1b8451
bulk-import 73.13% <ø> (ø) Carriedforward from c1b8451
cost-management 13.56% <ø> (ø) Carriedforward from c1b8451
dcm 74.35% <ø> (ø) Carriedforward from c1b8451
e2e-adoption-insights 60.00% <ø> (ø) Carriedforward from c1b8451
e2e-extensions 62.87% <ø> (ø) Carriedforward from c1b8451
e2e-global-header 52.43% <ø> (ø) Carriedforward from c1b8451
e2e-homepage 61.25% <ø> (ø) Carriedforward from c1b8451
e2e-intelligent-assistant 46.04% <ø> (ø) Carriedforward from c1b8451
e2e-orchestrator 49.86% <ø> (ø) Carriedforward from c1b8451
e2e-orchestrator-plugin 49.85% <ø> (ø) Carriedforward from c1b8451
e2e-quickstart 54.83% <ø> (ø) Carriedforward from c1b8451
e2e-scorecard 49.88% <ø> (ø) Carriedforward from c1b8451
e2e-theme 16.43% <ø> (ø) Carriedforward from c1b8451
extensions 60.42% <ø> (ø) Carriedforward from c1b8451
global-floating-action-button 71.18% <ø> (ø) Carriedforward from c1b8451
global-header 69.15% <ø> (ø) Carriedforward from c1b8451
homepage 86.65% <ø> (ø) Carriedforward from c1b8451
install-dynamic-plugins 86.58% <ø> (ø) Carriedforward from c1b8451
intelligent-assistant 79.78% <ø> (ø) Carriedforward from c1b8451
konflux 91.98% <ø> (ø) Carriedforward from c1b8451
lightspeed 69.02% <ø> (ø) Carriedforward from c1b8451
mcp-integrations 84.46% <ø> (ø) Carriedforward from c1b8451
orchestrator 78.13% <ø> (ø) Carriedforward from c1b8451
quickstart 65.83% <ø> (ø) Carriedforward from c1b8451
sandbox 79.56% <ø> (ø) Carriedforward from c1b8451
scorecard 92.32% <ø> (ø) Carriedforward from c1b8451
theme 88.56% <ø> (ø)
translations 7.91% <ø> (ø) Carriedforward from c1b8451
x2a 79.43% <ø> (ø) Carriedforward from c1b8451

*This pull request uses carry forward flags. Click here to find out more.


Continue to review full report in Codecov by Harness.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update c1b8451...94f28e1. Read the comment docs.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@renovate
renovate Bot force-pushed the renovate/rhdh-theme-dependencies-(minor) branch 2 times, most recently from 573dba2 to d5be8bf Compare November 11, 2026 18:14
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
@renovate
renovate Bot force-pushed the renovate/rhdh-theme-dependencies-(minor) branch from d5be8bf to 94f28e1 Compare November 11, 2026 18:23
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file team/rhdh theme workspace/theme

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants