Skip to content

Upgrading @playwright/test 0.1111 to 1

Breaking0.1111.0 → 1.64.1Breaking32Platform1Deprecated6New223Changed69Fixed69Other13

Fetching 3361 releases from GitHub…435 / 3361
BreakingUpgrade verdict

32 breaking changes and a platform requirement change.

  • Running with --update-snapshots=missing no longer fails tests that only created new snapshots, so CI can create and verify snapshots in one run.
  • Code calling Locator.ariaRef() must switch to locator.ariaSnapshot().
  • The handle option of exposeBinding is gone; bindings no longer accept it.
  • The logger option of connect and connectOverCDP is gone; use tracing for debugging.
Top 5 of 39 that need code or config changes

Node.js requirement changed in 1.62.0-alpha-2026-06-30: >=10.17.0 → >=20.

Drops folio, rimraf.

Installs 2 packages in all (was 223).

Breaking32
--update-snapshots=missing now passes the run; the unspecified mode is renamed 'default' and still fails on missing snapshots.
--update-snapshotstestConfig.updateSnapshotsmissingdefault
Removes the long-deprecated Locator.ariaRef() method; use the locator.ariaSnapshot() pipeline instead.
Locator.ariaRef()locator.ariaSnapshot()
Removes the long-deprecated handle option on BrowserContext.exposeBinding and Page.exposeBinding.
BrowserContext.exposeBindingPage.exposeBindinghandle
Removes the long-deprecated logger option on BrowserType.connect and BrowserType.connectOverCDP; use tracing instead.
BrowserType.connectBrowserType.connectOverCDPlogger
Removes the long-deprecated context options videosPath and videoSize; use recordVideo instead.
videosPathvideoSizerecordVideo
Removes macOS 14 support for WebKit.
Removes the _react and _vue selectors.
_react_vue
Removes the :light selector engine suffix.
:light
Removes the devtools option from browserType.launch().
browserType.launch()devtoolsargs
Removes macOS 13 support for WebKit.
Removes the deprecated Page#accessibility API.
Page#accessibility
Deprecates the browserContext 'backgroundpage' event, which will no longer be emitted, and backgroundPages() now returns an empty list.
browserContext.on('backgroundpage')browserContext.backgroundPages()
Drops support for Chromium extension manifest v2.
Glob URL patterns no longer support the ? wildcard, which now matches a literal question mark.
page.route()
Glob URL patterns no longer support ranges/sets [], and regular expressions are recommended instead.
page.route()
route.continue() no longer allows overriding the Cookie header; provided Cookie headers are ignored and cookies load from the browser cookie store.
route.continue()CookiebrowserContext.addCookies()
WebKit will no longer be updated for Ubuntu 20.04 and Debian 11.
The :latest/:focal/:jammy tags for Playwright Docker images are no longer published.
:latest:focal:jammy
Forwards screen from device descriptors, so window.screen and media queries see the emulated screen size; opt out by setting screen to undefined.
screendeviceswindow.screen
Elements inside hidden iframes are now considered hidden by actions, locator.isVisible() and expect(locator).toBeVisible().
locator.isVisible()expect(locator).toBeVisible()
Removes the @playwright/experimental-ct-svelte package.
@playwright/experimental-ct-svelte
The junit reporter now differentiates error types, so some previous <failure>s are reported as <error>s.
junit
Removes the -gv option from npx playwright test; use --grep-invert instead.
-gv--grep-invert
npx playwright open no longer opens the test recorder; use npx playwright codegen instead.
npx playwright opennpx playwright codegen
expect(locator).toBeEditable() and locator.isEditable() now throw if the target element is not an editable element.
expect(locator).toBeEditable()locator.isEditable()
testConfig.updateSnapshots set to all now updates all snapshots; use the new changed enum to keep updating only changed snapshots.
testConfig.updateSnapshotsallchanged
Channels chrome, chrome-dev, chrome-beta, chrome-canary, msedge, msedge-dev, msedge-beta and msedge-canary switch to new headless mode.
chromechrome-devchrome-betachrome-canarymsedgemsedge-devmsedge-betamsedge-canary
Package @playwright/experimental-ct-vue2 will no longer be updated.
@playwright/experimental-ct-vue2
Package @playwright/experimental-ct-solid will no longer be updated.
@playwright/experimental-ct-solid
Compiles JSX in test files according to tsconfig jsx options, defaulting to the automatic runtime from react/jsx-runtime.
jsxjsxFactoryjsxFragmentFactoryjsxImportSourcereact/jsx-runtime
Component testing moves to a stories and galleries model with a new fixtures.mount() fixture.
fixtures.mount()Locator
Fixture values that are arrays of objects, when specified in test.use(), may require being wrapped into a fixture tuple.
test.use()
Platform1
Removes support for Node.js 16.
Deprecated6
Deprecates the fontSize option in favor of the new style option for action decorations.
fontSizestyle
The experimental @playwright/experimental-ct-react, -ct-react17 and -ct-vue packages will no longer be updated.
@playwright/experimental-ct-react@playwright/experimental-ct-react17@playwright/experimental-ct-vuefixtures.mount()Stories
consoleMessage.location() now exposes line and column properties, and lineNumber and columnNumber are deprecated.
consoleMessage.location()linecolumnlineNumbercolumnNumber
Deprecates support for Node.js 18, which will be removed in the future.
macOS 13 is deprecated and will no longer receive WebKit updates; upgrade to a more recent macOS version.
Deprecates noWaitAfter in locator.selectOption().
noWaitAfterlocator.selectOption()

Generated by DepDelta from published .d.ts files. Not mixed with prose notes.

  • added: export * from 'playwright/test'
  • added: export { default } from 'playwright/test'
  • removed: const afterAll: (inner: (fixtures: { testWorkerIndex: number } & PlaywrightWorkerFixtures) => Promise<void>) => void
  • removed: const afterEach: (inner: (fixtures: PlaywrightParameters & { testWorkerIndex: number } & PlaywrightWorkerFixtures & { testInfo: import('folio').TestInfo; testParametersPathSegm…
  • removed: const beforeAll: (inner: (fixtures: { testWorkerIndex: number } & PlaywrightWorkerFixtures) => Promise<void>) => void
  • removed: const beforeEach: (inner: (fixtures: PlaywrightParameters & { testWorkerIndex: number } & PlaywrightWorkerFixtures & { testInfo: import('folio').TestInfo; testParametersPathSegm…
  • removed: const describe: { (name: string, inner: () => void): void; (name: string, modifierFn: (modifier: import('folio/out/testModifier').TestModifier, parameters: PlaywrightParameter…
  • removed: const fit: { (name: string, inner: (fixtures: PlaywrightParameters & { testWorkerIndex: number } & PlaywrightWorkerFixtures & { testInfo: import('folio').TestInfo; testPa…
  • removed: const folio: import('folio').Folio<{ testInfo: import('folio').TestInfo; testParametersPathSegment: string } & PlaywrightTestFixtures, { testWorkerIndex: number } & Playwri…
  • removed: const it: { (name: string, inner: (fixtures: PlaywrightParameters & { testWorkerIndex: number } & PlaywrightWorkerFixtures & { testInfo: import('folio').TestInfo; testPa…
  • removed: const test: { (name: string, inner: (fixtures: PlaywrightParameters & { testWorkerIndex: number } & PlaywrightWorkerFixtures & { testInfo: import('folio').TestInfo; testPa…
  • removed: const xit: { (name: string, inner: (fixtures: PlaywrightParameters & { testWorkerIndex: number } & PlaywrightWorkerFixtures & { testInfo: import('folio').TestInfo; testPa…
  • removed: export { config } from 'folio'
  • removed: export { expect } from 'folio'
  • added: export * from 'playwright/types/testReporter'