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.
In plain terms
- 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.
Must act 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).
What you must change
Breaking32
--update-snapshots=missing now passes the run; the unspecified mode is renamed 'default' and still fails on missing snapshots.
--update-snapshotstestConfig.updateSnapshotsmissingdefaultRemoves 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.exposeBindinghandleRemoves the long-deprecated logger option on BrowserType.connect and BrowserType.connectOverCDP; use tracing instead.
BrowserType.connectBrowserType.connectOverCDPloggerRemoves the long-deprecated context options videosPath and videoSize; use recordVideo instead.
videosPathvideoSizerecordVideoRemoves macOS 14 support for WebKit.
Removes the _react and _vue selectors.
_react_vueRemoves the :light selector engine suffix.
:lightRemoves the devtools option from browserType.launch().
browserType.launch()devtoolsargsRemoves macOS 13 support for WebKit.
Removes the deprecated
Page#accessibility API.Page#accessibilityDeprecates 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:jammyForwards screen from device descriptors, so window.screen and media queries see the emulated screen size; opt out by setting screen to undefined.
screendeviceswindow.screenElements 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-svelteThe
junit reporter now differentiates error types, so some previous <failure>s are reported as <error>s.junitRemoves the
-gv option from npx playwright test; use --grep-invert instead.-gv--grep-invertnpx playwright open no longer opens the test recorder; use npx playwright codegen instead.npx playwright opennpx playwright codegenexpect(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.updateSnapshotsallchangedChannels 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-canaryPackage @playwright/experimental-ct-vue2 will no longer be updated.
@playwright/experimental-ct-vue2Package @playwright/experimental-ct-solid will no longer be updated.
@playwright/experimental-ct-solidCompiles JSX in test files according to tsconfig jsx options, defaulting to the automatic runtime from react/jsx-runtime.
jsxjsxFactoryjsxFragmentFactoryjsxImportSourcereact/jsx-runtimeComponent testing moves to a stories and galleries model with a new fixtures.mount() fixture.
fixtures.mount()LocatorFixture 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.
Deprecations to plan for
Deprecated6
Deprecates the fontSize option in favor of the new style option for action decorations.
fontSizestyleThe 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()StoriesconsoleMessage.location() now exposes line and column properties, and lineNumber and columnNumber are deprecated.
consoleMessage.location()linecolumnlineNumbercolumnNumberDeprecates 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()API changes
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'