Microsoft/playwright (@playwright/test)
### [`v1.37.1`](https://togithub.com/microsoft/playwright/releases/tag/v1.37.1)
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.37.0...v1.37.1)
##### Highlights
[https://github.com/microsoft/playwright/issues/26496](https://togithub.com/microsoft/playwright/issues/26496) - \[REGRESSION] webServer stdout is always getting printed[https://github.com/microsoft/playwright/issues/26492](https://togithub.com/microsoft/playwright/issues/26492)2 - \[REGRESSION] test.only with project dependency is not working
#### Browser Versions
- Chromium 116.0.5845.82
- Mozilla Firefox 115.0
- WebKit 17.0
This version was also tested against the following stable channels:
- Google Chrome 115
- Microsoft Edge 115
### [`v1.37.0`](https://togithub.com/microsoft/playwright/releases/tag/v1.37.0)
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.36.2...v1.37.0)
#### ✨ New tool to merge reports
If you run tests on multiple shards, you can now merge all reports in a single HTML report (or any other report)
using the new `merge-reports` CLI tool.
Using `merge-reports` tool requires the following steps:
1. Adding a new "blob" reporter to the config when running on CI:
```js title="playwright.config.ts"
export default defineConfig({
testDir: './tests',
reporter: process.env.CI ? 'blob' : 'html',
});
```
The "blob" reporter will produce ".zip" files that contain all the information
about the test run.
2. Copying all "blob" reports in a single shared location and running `npx playwright merge-reports`:
```bash
npx playwright merge-reports --reporter html ./all-blob-reports
```
Read more in [our documentation](https://playwright.dev/docs/test-sharding).
#### 📚 Debian 12 Bookworm Support
Playwright now supports Debian 12 Bookworm on both x86\_64 and arm64 for Chromium, Firefox and WebKit.
Let us know if you encounter any issues!
Linux support looks like this:
| | Ubuntu 20.04 | Ubuntu 22.04 | Debian 11 | Debian 12 |
| :--- | :---: | :---: | :---: | :---: |
| Chromium | ✅ | ✅ | ✅ | ✅ |
| WebKit | ✅ | ✅ | ✅ | ✅ |
| Firefox | ✅ | ✅ | ✅ | ✅ |
#### 🌈 UI Mode Updates
- UI Mode now respects project dependencies. You can control which dependencies to respect by checking/unchecking them in a projects list.
- Console logs from the test are now displayed in the Console tab.
#### Browser Versions
- Chromium 116.0.5845.82
- Mozilla Firefox 115.0
- WebKit 17.0
This version was also tested against the following stable channels:
- Google Chrome 115
- Microsoft Edge 115
### [`v1.36.2`](https://togithub.com/microsoft/playwright/releases/tag/v1.36.2): 1.36.2
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.36.1...v1.36.2)
##### Highlights
[https://github.com/microsoft/playwright/issues/24316](https://togithub.com/microsoft/playwright/issues/24316) - \[REGRESSION] Character classes are not working in globs in 1.36
##### Browser Versions
- Chromium 115.0.5790.75
- Mozilla Firefox 115.0
- WebKit 17.0
This version was also tested against the following stable channels:
- Google Chrome 114
- Microsoft Edge 114
### [`v1.36.1`](https://togithub.com/microsoft/playwright/releases/tag/v1.36.1)
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.36.0...v1.36.1)
##### Highlights
[https://github.com/microsoft/playwright/issues/24184](https://togithub.com/microsoft/playwright/issues/24184) - \[REGRESSION]: Snapshot name contains some random string after test name when tests are run in container
##### Browser Versions
- Chromium 115.0.5790.75
- Mozilla Firefox 115.0
- WebKit 17.0
This version was also tested against the following stable channels:
- Google Chrome 114
- Microsoft Edge 114
### [`v1.36.0`](https://togithub.com/microsoft/playwright/releases/tag/v1.36.0)
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.35.1...v1.36.0)
##### Highlights
🏝️ Summer maintenance release.
##### Browser Versions
- Chromium 115.0.5790.75
- Mozilla Firefox 115.0
- WebKit 17.0
This version was also tested against the following stable channels:
- Google Chrome 114
- Microsoft Edge 114
### [`v1.35.1`](https://togithub.com/microsoft/playwright/releases/tag/v1.35.1)
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.35.0...v1.35.1)
##### Highlights
[https://github.com/microsoft/playwright/issues/23622](https://togithub.com/microsoft/playwright/issues/23622) - \[Docs] Provide a description how to correctly use expect.configure with poll parameter[https://github.com/microsoft/playwright/issues/23666](https://togithub.com/microsoft/playwright/issues/23666)6 - \[BUG] Live Trace does not work with Codespace[https://github.com/microsoft/playwright/issues/23693](https://togithub.com/microsoft/playwright/issues/23693)93 - \[BUG] attachment steps are not hidden inside expect.toHaveScreenshot()
##### Browser Versions
- Chromium 115.0.5790.13
- Mozilla Firefox 113.0
- WebKit 16.4
This version was also tested against the following stable channels:
- Google Chrome 114
- Microsoft Edge 114
### [`v1.35.0`](https://togithub.com/microsoft/playwright/releases/tag/v1.35.0)
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.34.3...v1.35.0)
##### Highlights
- UI mode is now available in VSCode Playwright extension via a new "Show trace viewer" button:
![Playwright UI Mode](https://togithub.com/microsoft/playwright/assets/746130/13094128-259b-477a-8bbb-c1181178e8a2)
- UI mode and trace viewer mark network requests handled with [`page.route()`](https://playwright.dev/docs/api/class-page#page-route) and [`browserContext.route()`](https://playwright.dev/docs/api/class-browsercontext#browser-context-route) handlers, as well as those issued via the [API testing](https://playwright.dev/docs/api-testing):
![Trace Viewer](https://togithub.com/microsoft/playwright/assets/746130/0df2d4b6-faa3-465c-aff3-c435b430bfe1)
- New option `maskColor` for methods [`page.screenshot()`](https://playwright.dev/docs/api/class-page#page-screenshot), [`locator.screenshot()`](https://playwright.dev/docs/api/class-locator#locator-screenshot), [`expect(page).toHaveScreenshot()`](https://playwright.dev/docs/api/class-pageassertions#page-assertions-to-have-screenshot-1) and [`expect(locator).toHaveScreenshot()`](https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-have-screenshot-1) to change default masking color:
```js
await page.goto('https://playwright.dev');
await expect(page).toHaveScreenshot({
mask: [page.locator('img')],
maskColor: '#00FF00', // green
});
```
- New `uninstall` CLI command to uninstall browser binaries:
```bash
$ npx playwright uninstall # remove browsers installed by this installation
$ npx playwright uninstall --all # remove all ever-install Playwright browsers
```
- Both UI mode and trace viewer now could be opened in a browser tab:
```bash
$ npx playwright test --ui-port 0 # open UI mode in a tab on a random port
$ npx playwright show-trace --port 0 # open trace viewer in tab on a random port
```
##### ⚠️ Breaking changes
- `playwright-core` binary got renamed from `playwright` to `playwright-core`. So if you use `playwright-core` CLI, make sure to update the name:
```bash
$ npx playwright-core install # the new way to install browsers when using playwright-core
```
This change **does not** affect `@playwright/test` and `playwright` package users.
##### Browser Versions
- Chromium 115.0.5790.13
- Mozilla Firefox 113.0
- WebKit 16.4
This version was also tested against the following stable channels:
- Google Chrome 114
- Microsoft Edge 114
### [`v1.34.3`](https://togithub.com/microsoft/playwright/releases/tag/v1.34.3)
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.34.2...v1.34.3)
#### Highlights
[https://github.com/microsoft/playwright/issues/23228](https://togithub.com/microsoft/playwright/issues/23228) - \[BUG] Getting "Please install [@playwright/test](https://togithub.com/playwright/test) package..." after upgrading from 1.34.0 to 1.34.1
#### Browser Versions
- Chromium 114.0.5735.26
- Mozilla Firefox 113.0
- WebKit 16.4
This version was also tested against the following stable channels:
- Google Chrome 113
- Microsoft Edge 113
### [`v1.34.2`](https://togithub.com/microsoft/playwright/releases/tag/v1.34.2)
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.34.1...v1.34.2)
#### Highlights
[https://github.com/microsoft/playwright/issues/23225](https://togithub.com/microsoft/playwright/issues/23225) - \[BUG] VSCode Extension broken with Playwright 1.34.1
#### Browser Versions
- Chromium 114.0.5735.26
- Mozilla Firefox 113.0
- WebKit 16.4
This version was also tested against the following stable channels:
- Google Chrome 113
- Microsoft Edge 113
### [`v1.34.1`](https://togithub.com/microsoft/playwright/releases/tag/v1.34.1)
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.34.0...v1.34.1)
#### Highlights
[https://github.com/microsoft/playwright/issues/23186](https://togithub.com/microsoft/playwright/issues/23186) - \[BUG] Container image for v1.34.0 missing library for webkit[https://github.com/microsoft/playwright/issues/23206](https://togithub.com/microsoft/playwright/issues/23206)6 - \[BUG] Unable to install supported browsers for v1.34.0 from playwright-cor[https://github.com/microsoft/playwright/issues/23207](https://togithub.com/microsoft/playwright/issues/23207)07 - \[BUG] importing ES Module JSX component is broken since 1.34
#### Browser Versions
- Chromium 114.0.5735.26
- Mozilla Firefox 113.0
- WebKit 16.4
This version was also tested against the following stable channels:
- Google Chrome 113
- Microsoft Edge 113
### [`v1.34.0`](https://togithub.com/microsoft/playwright/releases/tag/v1.34.0)
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.33.0...v1.34.0)
##### Highlights
- UI Mode now shows steps, fixtures and attachments:
- New property [`testProject.teardown`](https://playwright.dev/docs/api/class-testproject#test-project-teardown) to specify a project that needs to run after this
and all dependent projects have finished. Teardown is useful to cleanup any resources acquired by this project.
A common pattern would be a `setup` dependency with a corresponding `teardown`:
```js
// playwright.config.ts
import { defineConfig } from '@playwright/test';
export default defineConfig({
projects: [
{
name: 'setup',
testMatch: /global.setup\.ts/,
teardown: 'teardown',
},
{
name: 'teardown',
testMatch: /global.teardown\.ts/,
},
{
name: 'chromium',
use: devices['Desktop Chrome'],
dependencies: ['setup'],
},
{
name: 'firefox',
use: devices['Desktop Firefox'],
dependencies: ['setup'],
},
{
name: 'webkit',
use: devices['Desktop Safari'],
dependencies: ['setup'],
},
],
});
```
- New method [`expect.configure`](https://playwright.dev/docs/test-assertions#expectconfigure) to create pre-configured expect instance with its own defaults such as `timeout` and `soft`.
```js
const slowExpect = expect.configure({ timeout: 10000 });
await slowExpect(locator).toHaveText('Submit');
// Always do soft assertions.
const softExpect = expect.configure({ soft: true });
```
- New options `stderr` and `stdout` in [`testConfig.webServer`](https://playwright.dev/docs/api/class-testconfig#test-config-web-server) to configure output handling:
```js
// playwright.config.ts
import { defineConfig } from '@playwright/test';
export default defineConfig({
// Run your local dev server before starting the tests
webServer: {
command: 'npm run start',
url: 'http://127.0.0.1:3000',
reuseExistingServer: !process.env.CI,
stdout: 'pipe',
stderr: 'pipe',
},
});
```
- New [`locator.and()`](https://playwright.dev/docs/api/class-locator#locator-and) to create a locator that matches both locators.
```js
const button = page.getByRole('button').and(page.getByTitle('Subscribe'));
```
- New events [`browserContext.on('console')`](https://playwright.dev/docs/api/class-browsercontext#browser-context-event-console) and [`browserContext.on('dialog')`](https://playwright.dev/docs/api/class-browsercontext#browser-context-event-dialog) to subscribe to any dialogs
and console messages from any page from the given browser context. Use the new methods [`consoleMessage.page()`](https://playwright.dev/docs/api/class-consolemessage#console-message-page)
and [`dialog.page()`](https://playwright.dev/docs/api/class-dialog#dialog-page) to pin-point event source.
##### ⚠️ Breaking changes
- `npx playwright test` no longer works if you install both `playwright` and `@playwright/test`. There's no need
to install both, since you can always import browser automation APIs from `@playwright/test` directly:
```js
// automation.ts
import { chromium, firefox, webkit } from '@playwright/test';
/* ... */
```
- Node.js 14 is no longer supported since it [reached its end-of-life](https://nodejs.dev/en/about/releases/) on April 30, 2023.
##### Browser Versions
- Chromium 114.0.5735.26
- Mozilla Firefox 113.0
- WebKit 16.4
This version was also tested against the following stable channels:
- Google Chrome 113
- Microsoft Edge 113
### [`v1.33.0`](https://togithub.com/microsoft/playwright/releases/tag/v1.33.0)
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.32.3...v1.33.0)
##### Locators Update
- Use [`locator.or()`][locator.or()] to create a locator that matches either of the two locators.
Consider a scenario where you'd like to click on a "New email" button, but sometimes a security settings dialog shows up instead.
In this case, you can wait for either a "New email" button, or a dialog and act accordingly:
```js
const newEmail = page.getByRole('button', { name: 'New' });
const dialog = page.getByText('Confirm security settings');
await expect(newEmail.or(dialog)).toBeVisible();
if (await dialog.isVisible())
await page.getByRole('button', { name: 'Dismiss' }).click();
await newEmail.click();
```
- Use new options `hasNot` and `hasNotText` in [`locator.filter()`][locator.filter()]
to find elements that **do not match** certain conditions.
```js
const rowLocator = page.locator('tr');
await rowLocator
.filter({ hasNotText: 'text in column 1' })
.filter({ hasNot: page.getByRole('button', { name: 'column 2 button' }) })
.screenshot();
```
- Use new web-first assertion [`locatorAssertions.toBeAttached()`][locatorAssertions.toBeAttached()] to ensure that the element
is present in the page's DOM. Do not confuse with the [`locatorAssertions.toBeVisible()`][locatorAssertions.toBeVisible()] that ensures that
element is both attached & visible.
##### New APIs
- [`locator.or()`][locator.or()]
- New option `hasNot` in [`locator.filter()`][locator.filter()]
- New option `hasNotText` in [`locator.filter()`][locator.filter()]
- [`locatorAssertions.toBeAttached()`][locatorAssertions.toBeAttached()]
- New option `timeout` in [`route.fetch()`][route.fetch()]
- [`reporter.onExit()`][reporter.onExit()]
##### ⚠️ Breaking change
- The `mcr.microsoft.com/playwright:v1.33.0` now serves a Playwright image based on Ubuntu Jammy.
To use the focal-based image, please use `mcr.microsoft.com/playwright:v1.33.0-focal` instead.
##### Browser Versions
- Chromium 113.0.5672.53
- Mozilla Firefox 112.0
- WebKit 16.4
This version was also tested against the following stable channels:
- Google Chrome 112
- Microsoft Edge 112
[`locator.or()`]: https://playwright.dev/docs/api/class-locator#locator-or
[`reporter.onExit()`]: https://playwright.dev/docs/api/class-reporter#reporter-on-exit
[`locator.filter()`]: https://playwright.dev/docs/api/class-locator#locator-filter
[`locatorAssertions.toBeAttached()`]: https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-be-attached
[`locatorAssertions.toBeVisible()`]: https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-be-visible
[`route.fetch()`]: https://playwright.dev/docs/api/class-route#route-fetch
### [`v1.32.3`](https://togithub.com/microsoft/playwright/releases/tag/v1.32.3)
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.32.2...v1.32.3)
#### Highlights
[https://github.com/microsoft/playwright/issues/22144](https://togithub.com/microsoft/playwright/issues/22144) - \[BUG] WebServer only starting after timeout[https://github.com/microsoft/playwright/pull/22191](https://togithub.com/microsoft/playwright/pull/22191)1 - chore: allow reusing browser between the tests[https://github.com/microsoft/playwright/issues/22215](https://togithub.com/microsoft/playwright/issues/22215)5 - \[BUG] Tests failing in toPass often marked as passed
#### Browser Versions
- Chromium 112.0.5615.29
- Mozilla Firefox 111.0
- WebKit 16.4
This version was also tested against the following stable channels:
- Google Chrome 111
- Microsoft Edge 111
### [`v1.32.2`](https://togithub.com/microsoft/playwright/releases/tag/v1.32.2)
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.32.1...v1.32.2)
#### Highlights
[https://github.com/microsoft/playwright/issues/21993](https://togithub.com/microsoft/playwright/issues/21993) - \[BUG] Browser crash when using Playwright VSC extension and trace-viewer enabled in config[https://github.com/microsoft/playwright/issues/22003](https://togithub.com/microsoft/playwright/issues/22003)3 - \[Feature] Make Vue component mount props less restrictiv[https://github.com/microsoft/playwright/issues/22089](https://togithub.com/microsoft/playwright/issues/22089)89 - \[REGRESSION]: Tests failing with "Error: tracing.stopChunk"
#### Browser Versions
- Chromium 112.0.5615.29
- Mozilla Firefox 111.0
- WebKit 16.4
This version was also tested against the following stable channels:
- Google Chrome 111
- Microsoft Edge 111
### [`v1.32.1`](https://togithub.com/microsoft/playwright/releases/tag/v1.32.1)
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.32.0...v1.32.1)
#### Highlights
[https://github.com/microsoft/playwright/issues/21832](https://togithub.com/microsoft/playwright/issues/21832) - \[BUG] Trace is not opening on specific broken locator[https://github.com/microsoft/playwright/issues/21897](https://togithub.com/microsoft/playwright/issues/21897)7 - \[BUG] --ui fails to open with error reading mainFrame from an undefined this.\_pa[https://github.com/microsoft/playwright/issues/21918](https://togithub.com/microsoft/playwright/issues/21918)918 - \[BUG]: UI mode, skipped tests not being fo[https://github.com/microsoft/playwright/issues/21941](https://togithub.com/microsoft/playwright/issues/21941)1941 - \[BUG] UI mode does not show webServer startup er[https://github.com/microsoft/playwright/issues/21953](https://togithub.com/microsoft/playwright/issues/21953)21953 - \[BUG] Parameterized tests are not displayed in the UI mode
#### Browser Versions
- Chromium 112.0.5615.29
- Mozilla Firefox 111.0
- WebKit 16.4
This version was also tested against the following stable channels:
- Google Chrome 111
- Microsoft Edge 111
### [`v1.32.0`](https://togithub.com/microsoft/playwright/releases/tag/v1.32.0)
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.31.2...v1.32.0)
#### 📣 Introducing UI Mode (preview)
Playwright v1.32 updates
New UI Mode lets you explore, run and debug tests. Comes with a built-in watch mode.
![Playwright UI Mode](https://user-images.githubusercontent.com/746130/227004851-3901a691-4f8e-43d6-8d6b-cbfeafaeb999.png)
Engage with a new flag `--ui`:
```sh
npx playwright test --ui
```
#### New APIs
- New options `option: updateMode` and `option: updateContent` in [`page.routeFromHAR()`](https://playwright.dev/docs/api/class-page#page-route-from-har) and [`browserContext.routeFromHAR()`](https://playwright.dev/docs/api/class-browsercontext#browser-context-route-from-har).
- Chaining existing locator objects, see [locator docs](https://playwright.dev/docs/locators#chaining-locators) for details.
- New property [`TestInfo.testId`](https://playwright.dev/docs/api/class-testinfo#test-info-test-id).
- New option `name` in method [`Tracing.startChunk()`](https://playwright.dev/docs/api/class-tracing#tracing-start-chunk).
#### ⚠️ Breaking change in component tests
Note: **component tests only**, does not affect end-to-end tests.
- `@playwright/experimental-ct-react` now supports **React 18 only**.
- If you're running component tests with React 16 or 17, please replace
`@playwright/experimental-ct-react` with `@playwright/experimental-ct-react17`.
#### Browser Versions
- Chromium 112.0.5615.29
- Mozilla Firefox 111.0
- WebKit 16.4
This version was also tested against the following stable channels:
- Google Chrome 111
- Microsoft Edge 111
### [`v1.31.2`](https://togithub.com/microsoft/playwright/releases/tag/v1.31.2)
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.31.1...v1.31.2)
#### Highlights
[https://github.com/microsoft/playwright/issues/20784](https://togithub.com/microsoft/playwright/issues/20784) - \[BUG] ECONNREFUSED on GitHub Actions with Node 18[https://github.com/microsoft/playwright/issues/21145](https://togithub.com/microsoft/playwright/issues/21145)5 - \[REGRESSION]: firefox-1378 times out on await page.reload() when URL contains a #has[https://github.com/microsoft/playwright/issues/21226](https://togithub.com/microsoft/playwright/issues/21226)26 - \[BUG] Playwright seems to get stuck when using shard option and last test is skipp[https://github.com/microsoft/playwright/issues/21227](https://togithub.com/microsoft/playwright/issues/21227)227 - Using the webServer config with a Vite dev serve[https://github.com/microsoft/playwright/issues/21312](https://togithub.com/microsoft/playwright/issues/21312)312 - throw if defineConfig is not used for component testing
#### Browser Versions
- Chromium 111.0.5563.19
- Mozilla Firefox 109.0
- WebKit 16.4
This version was also tested against the following stable channels:
- Google Chrome 110
- Microsoft Edge 110
### [`v1.31.1`](https://togithub.com/microsoft/playwright/releases/tag/v1.31.1)
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.31.0...v1.31.1)
#### Highlights
[https://github.com/microsoft/playwright/issues/21093](https://togithub.com/microsoft/playwright/issues/21093) - \[Regression v1.31] Headless Windows shows cascading cmd windows[https://github.com/microsoft/playwright/pull/21106](https://togithub.com/microsoft/playwright/pull/21106)6 - fix(loader): experimentalLoader with node@18
#### Browser Versions
- Chromium 111.0.5563.19
- Mozilla Firefox 109.0
- WebKit 16.4
This version was also tested against the following stable channels:
- Google Chrome 110
- Microsoft Edge 110
### [`v1.31.0`](https://togithub.com/microsoft/playwright/releases/tag/v1.31.0)
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.30.0...v1.31.0)
#### New APIs
- New property [`TestProject.dependencies`](https://playwright.dev/docs/api/class-testproject#test-project-dependencies) to configure dependencies between projects.
Using dependencies allows global setup to produce traces and other artifacts,
see the setup steps in the test report and more.
```js
// playwright.config.ts
import { defineConfig } from '@playwright/test';
export default defineConfig({
projects: [
{
name: 'setup',
testMatch: /global.setup\.ts/,
},
{
name: 'chromium',
use: devices['Desktop Chrome'],
dependencies: ['setup'],
},
{
name: 'firefox',
use: devices['Desktop Firefox'],
dependencies: ['setup'],
},
{
name: 'webkit',
use: devices['Desktop Safari'],
dependencies: ['setup'],
},
],
});
```
- New assertion [`expect(locator).toBeInViewport()`](https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-be-in-viewport) ensures that locator points to an element that intersects viewport, according to the [intersection observer API](https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API).
```js
const button = page.getByRole('button');
// Make sure at least some part of element intersects viewport.
await expect(button).toBeInViewport();
// Make sure element is fully outside of viewport.
await expect(button).not.toBeInViewport();
// Make sure that at least half of the element intersects viewport.
await expect(button).toBeInViewport({ ratio: 0.5 });
```
#### Miscellaneous
- DOM snapshots in trace viewer can be now opened in a separate window.
- New method `defineConfig` to be used in `playwright.config`.
- New option `maxRedirects` for method [`Route.fetch`](https://playwright.dev/docs/api/class-route#route-fetch).
- Playwright now supports Debian 11 arm64.
- Official [docker images](https://playwright.dev/docs/docker) now include Node 18 instead of Node 16.
#### ⚠️ Breaking change in component tests
Note: **component tests only**, does not affect end-to-end tests.
`playwright-ct.config` configuration file for [component testing](https://playwright.dev/docs/test-components) now requires calling `defineConfig`.
```js
// Before
import { type PlaywrightTestConfig, devices } from '@playwright/experimental-ct-react';
const config: PlaywrightTestConfig = {
// ... config goes here ...
};
export default config;
```
Replace `config` variable definition with `defineConfig` call:
```js
// After
import { defineConfig, devices } from '@playwright/experimental-ct-react';
export default defineConfig({
// ... config goes here ...
});
```
#### Browser Versions
- Chromium 111.0.5563.19
- Mozilla Firefox 109.0
- WebKit 16.4
This version was also tested against the following stable channels:
- Google Chrome 110
- Microsoft Edge 110
### [`v1.30.0`](https://togithub.com/microsoft/playwright/releases/tag/v1.30.0)
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.29.2...v1.30.0)
##### 🎉 Happy New Year 🎉
Maintenance release with bugfixes and new browsers only. We are baking some nice features for v1.31.
##### Browser Versions
- Chromium 110.0.5481.38
- Mozilla Firefox 108.0.2
- WebKit 16.4
This version was also tested against the following stable channels:
- Google Chrome 109
- Microsoft Edge 109
### [`v1.29.2`](https://togithub.com/microsoft/playwright/releases/tag/v1.29.2)
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.29.1...v1.29.2)
#### Highlights
[https://github.com/microsoft/playwright/issues/19661](https://togithub.com/microsoft/playwright/issues/19661) - \[BUG] 1.29.1 browserserver + page.goto = net::ERR_SOCKS_CONNECTION_FAILED
#### Browser Versions
- Chromium 109.0.5414.46
- Mozilla Firefox 107.0
- WebKit 16.4
This version was also tested against the following stable channels:
- Google Chrome 108
- Microsoft Edge 108
### [`v1.29.1`](https://togithub.com/microsoft/playwright/releases/tag/v1.29.1)
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.29.0...v1.29.1)
#### Highlights
[https://github.com/microsoft/playwright/issues/18928](https://togithub.com/microsoft/playwright/issues/18928) - \[BUG] Electron firstWindow times out after upgrading to 1.28.0[https://github.com/microsoft/playwright/issues/19246](https://togithub.com/microsoft/playwright/issues/19246)6 - \[BUG] Electron firstWindow times out after upgrading to 1.28.[https://github.com/microsoft/playwright/issues/19412](https://togithub.com/microsoft/playwright/issues/19412)12 - \[REGRESSION]: 1.28 does not work with electron-serve anymor[https://github.com/microsoft/playwright/issues/19540](https://togithub.com/microsoft/playwright/issues/19540)540 - \[BUG] electron.app.getAppPath() returns the path one level higher if you run electron pointing to the direct[https://github.com/microsoft/playwright/issues/19548](https://togithub.com/microsoft/playwright/issues/19548)9548 - \[REGRESSION]: Ubuntu 18 LTS not supported anymore
#### Browser Versions
- Chromium 109.0.5414.46
- Mozilla Firefox 107.0
- WebKit 16.4
This version was also tested against the following stable channels:
- Google Chrome 108
- Microsoft Edge 108
### [`v1.29.0`](https://togithub.com/microsoft/playwright/releases/tag/v1.29.0)
[Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.28.1...v1.29.0)
#### New APIs
- New method [`route.fetch()`](https://playwright.dev/docs/api/class-route#route-fetch) and new option `json` for [`route.fulfill()`](https://playwright.dev/docs/api/class-route#route-fulfill):
```js
await page.route('**/api/settings', async route => {
// Fetch original settings.
const response = await route.fetch();
// Force settings theme to a predefined value.
const json = await response.json();
json.theme = 'Solorized';
// Fulfill with modified data.
await route.fulfill({ json });
});
```
- New method [`locator.all()`](https://playwright.dev/docs/api/class-locator#locator-all) to iterate over all matching elements:
```js
// Check all checkboxes!
const checkboxes = page.getByRole('checkbox');
for (const checkbox of await checkboxes.all())
await checkbox.check();
```
- [`Locator.selectOption`](https://playwright.dev/docs/api/class-locator#locator-select-option) matches now by value or label:
```html
This PR contains the following updates:
1.25.0
->1.37.1
Release Notes
Microsoft/playwright (@playwright/test)
### [`v1.37.1`](https://togithub.com/microsoft/playwright/releases/tag/v1.37.1) [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.37.0...v1.37.1) ##### Highlights [https://github.com/microsoft/playwright/issues/26496](https://togithub.com/microsoft/playwright/issues/26496) - \[REGRESSION] webServer stdout is always getting printed[https://github.com/microsoft/playwright/issues/26492](https://togithub.com/microsoft/playwright/issues/26492)2 - \[REGRESSION] test.only with project dependency is not working #### Browser Versions - Chromium 116.0.5845.82 - Mozilla Firefox 115.0 - WebKit 17.0 This version was also tested against the following stable channels: - Google Chrome 115 - Microsoft Edge 115 ### [`v1.37.0`](https://togithub.com/microsoft/playwright/releases/tag/v1.37.0) [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.36.2...v1.37.0) #### ✨ New tool to merge reports If you run tests on multiple shards, you can now merge all reports in a single HTML report (or any other report) using the new `merge-reports` CLI tool. Using `merge-reports` tool requires the following steps: 1. Adding a new "blob" reporter to the config when running on CI: ```js title="playwright.config.ts" export default defineConfig({ testDir: './tests', reporter: process.env.CI ? 'blob' : 'html', }); ``` The "blob" reporter will produce ".zip" files that contain all the information about the test run. 2. Copying all "blob" reports in a single shared location and running `npx playwright merge-reports`: ```bash npx playwright merge-reports --reporter html ./all-blob-reports ``` Read more in [our documentation](https://playwright.dev/docs/test-sharding). #### 📚 Debian 12 Bookworm Support Playwright now supports Debian 12 Bookworm on both x86\_64 and arm64 for Chromium, Firefox and WebKit. Let us know if you encounter any issues! Linux support looks like this: | | Ubuntu 20.04 | Ubuntu 22.04 | Debian 11 | Debian 12 | | :--- | :---: | :---: | :---: | :---: | | Chromium | ✅ | ✅ | ✅ | ✅ | | WebKit | ✅ | ✅ | ✅ | ✅ | | Firefox | ✅ | ✅ | ✅ | ✅ | #### 🌈 UI Mode Updates - UI Mode now respects project dependencies. You can control which dependencies to respect by checking/unchecking them in a projects list. - Console logs from the test are now displayed in the Console tab. #### Browser Versions - Chromium 116.0.5845.82 - Mozilla Firefox 115.0 - WebKit 17.0 This version was also tested against the following stable channels: - Google Chrome 115 - Microsoft Edge 115 ### [`v1.36.2`](https://togithub.com/microsoft/playwright/releases/tag/v1.36.2): 1.36.2 [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.36.1...v1.36.2) ##### Highlights [https://github.com/microsoft/playwright/issues/24316](https://togithub.com/microsoft/playwright/issues/24316) - \[REGRESSION] Character classes are not working in globs in 1.36 ##### Browser Versions - Chromium 115.0.5790.75 - Mozilla Firefox 115.0 - WebKit 17.0 This version was also tested against the following stable channels: - Google Chrome 114 - Microsoft Edge 114 ### [`v1.36.1`](https://togithub.com/microsoft/playwright/releases/tag/v1.36.1) [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.36.0...v1.36.1) ##### Highlights [https://github.com/microsoft/playwright/issues/24184](https://togithub.com/microsoft/playwright/issues/24184) - \[REGRESSION]: Snapshot name contains some random string after test name when tests are run in container ##### Browser Versions - Chromium 115.0.5790.75 - Mozilla Firefox 115.0 - WebKit 17.0 This version was also tested against the following stable channels: - Google Chrome 114 - Microsoft Edge 114 ### [`v1.36.0`](https://togithub.com/microsoft/playwright/releases/tag/v1.36.0) [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.35.1...v1.36.0) ##### Highlights 🏝️ Summer maintenance release. ##### Browser Versions - Chromium 115.0.5790.75 - Mozilla Firefox 115.0 - WebKit 17.0 This version was also tested against the following stable channels: - Google Chrome 114 - Microsoft Edge 114 ### [`v1.35.1`](https://togithub.com/microsoft/playwright/releases/tag/v1.35.1) [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.35.0...v1.35.1) ##### Highlights [https://github.com/microsoft/playwright/issues/23622](https://togithub.com/microsoft/playwright/issues/23622) - \[Docs] Provide a description how to correctly use expect.configure with poll parameter[https://github.com/microsoft/playwright/issues/23666](https://togithub.com/microsoft/playwright/issues/23666)6 - \[BUG] Live Trace does not work with Codespace[https://github.com/microsoft/playwright/issues/23693](https://togithub.com/microsoft/playwright/issues/23693)93 - \[BUG] attachment steps are not hidden inside expect.toHaveScreenshot() ##### Browser Versions - Chromium 115.0.5790.13 - Mozilla Firefox 113.0 - WebKit 16.4 This version was also tested against the following stable channels: - Google Chrome 114 - Microsoft Edge 114 ### [`v1.35.0`](https://togithub.com/microsoft/playwright/releases/tag/v1.35.0) [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.34.3...v1.35.0) ##### Highlights - UI mode is now available in VSCode Playwright extension via a new "Show trace viewer" button: ![Playwright UI Mode](https://togithub.com/microsoft/playwright/assets/746130/13094128-259b-477a-8bbb-c1181178e8a2) - UI mode and trace viewer mark network requests handled with [`page.route()`](https://playwright.dev/docs/api/class-page#page-route) and [`browserContext.route()`](https://playwright.dev/docs/api/class-browsercontext#browser-context-route) handlers, as well as those issued via the [API testing](https://playwright.dev/docs/api-testing): ![Trace Viewer](https://togithub.com/microsoft/playwright/assets/746130/0df2d4b6-faa3-465c-aff3-c435b430bfe1) - New option `maskColor` for methods [`page.screenshot()`](https://playwright.dev/docs/api/class-page#page-screenshot), [`locator.screenshot()`](https://playwright.dev/docs/api/class-locator#locator-screenshot), [`expect(page).toHaveScreenshot()`](https://playwright.dev/docs/api/class-pageassertions#page-assertions-to-have-screenshot-1) and [`expect(locator).toHaveScreenshot()`](https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-have-screenshot-1) to change default masking color: ```js await page.goto('https://playwright.dev'); await expect(page).toHaveScreenshot({ mask: [page.locator('img')], maskColor: '#00FF00', // green }); ``` - New `uninstall` CLI command to uninstall browser binaries: ```bash $ npx playwright uninstall # remove browsers installed by this installation $ npx playwright uninstall --all # remove all ever-install Playwright browsers ``` - Both UI mode and trace viewer now could be opened in a browser tab: ```bash $ npx playwright test --ui-port 0 # open UI mode in a tab on a random port $ npx playwright show-trace --port 0 # open trace viewer in tab on a random port ``` ##### ⚠️ Breaking changes - `playwright-core` binary got renamed from `playwright` to `playwright-core`. So if you use `playwright-core` CLI, make sure to update the name: ```bash $ npx playwright-core install # the new way to install browsers when using playwright-core ``` This change **does not** affect `@playwright/test` and `playwright` package users. ##### Browser Versions - Chromium 115.0.5790.13 - Mozilla Firefox 113.0 - WebKit 16.4 This version was also tested against the following stable channels: - Google Chrome 114 - Microsoft Edge 114 ### [`v1.34.3`](https://togithub.com/microsoft/playwright/releases/tag/v1.34.3) [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.34.2...v1.34.3) #### Highlights [https://github.com/microsoft/playwright/issues/23228](https://togithub.com/microsoft/playwright/issues/23228) - \[BUG] Getting "Please install [@playwright/test](https://togithub.com/playwright/test) package..." after upgrading from 1.34.0 to 1.34.1 #### Browser Versions - Chromium 114.0.5735.26 - Mozilla Firefox 113.0 - WebKit 16.4 This version was also tested against the following stable channels: - Google Chrome 113 - Microsoft Edge 113 ### [`v1.34.2`](https://togithub.com/microsoft/playwright/releases/tag/v1.34.2) [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.34.1...v1.34.2) #### Highlights [https://github.com/microsoft/playwright/issues/23225](https://togithub.com/microsoft/playwright/issues/23225) - \[BUG] VSCode Extension broken with Playwright 1.34.1 #### Browser Versions - Chromium 114.0.5735.26 - Mozilla Firefox 113.0 - WebKit 16.4 This version was also tested against the following stable channels: - Google Chrome 113 - Microsoft Edge 113 ### [`v1.34.1`](https://togithub.com/microsoft/playwright/releases/tag/v1.34.1) [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.34.0...v1.34.1) #### Highlights [https://github.com/microsoft/playwright/issues/23186](https://togithub.com/microsoft/playwright/issues/23186) - \[BUG] Container image for v1.34.0 missing library for webkit[https://github.com/microsoft/playwright/issues/23206](https://togithub.com/microsoft/playwright/issues/23206)6 - \[BUG] Unable to install supported browsers for v1.34.0 from playwright-cor[https://github.com/microsoft/playwright/issues/23207](https://togithub.com/microsoft/playwright/issues/23207)07 - \[BUG] importing ES Module JSX component is broken since 1.34 #### Browser Versions - Chromium 114.0.5735.26 - Mozilla Firefox 113.0 - WebKit 16.4 This version was also tested against the following stable channels: - Google Chrome 113 - Microsoft Edge 113 ### [`v1.34.0`](https://togithub.com/microsoft/playwright/releases/tag/v1.34.0) [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.33.0...v1.34.0) ##### Highlights - UI Mode now shows steps, fixtures and attachments: - New property [`testProject.teardown`](https://playwright.dev/docs/api/class-testproject#test-project-teardown) to specify a project that needs to run after this and all dependent projects have finished. Teardown is useful to cleanup any resources acquired by this project. A common pattern would be a `setup` dependency with a corresponding `teardown`: ```js // playwright.config.ts import { defineConfig } from '@playwright/test'; export default defineConfig({ projects: [ { name: 'setup', testMatch: /global.setup\.ts/, teardown: 'teardown', }, { name: 'teardown', testMatch: /global.teardown\.ts/, }, { name: 'chromium', use: devices['Desktop Chrome'], dependencies: ['setup'], }, { name: 'firefox', use: devices['Desktop Firefox'], dependencies: ['setup'], }, { name: 'webkit', use: devices['Desktop Safari'], dependencies: ['setup'], }, ], }); ``` - New method [`expect.configure`](https://playwright.dev/docs/test-assertions#expectconfigure) to create pre-configured expect instance with its own defaults such as `timeout` and `soft`. ```js const slowExpect = expect.configure({ timeout: 10000 }); await slowExpect(locator).toHaveText('Submit'); // Always do soft assertions. const softExpect = expect.configure({ soft: true }); ``` - New options `stderr` and `stdout` in [`testConfig.webServer`](https://playwright.dev/docs/api/class-testconfig#test-config-web-server) to configure output handling: ```js // playwright.config.ts import { defineConfig } from '@playwright/test'; export default defineConfig({ // Run your local dev server before starting the tests webServer: { command: 'npm run start', url: 'http://127.0.0.1:3000', reuseExistingServer: !process.env.CI, stdout: 'pipe', stderr: 'pipe', }, }); ``` - New [`locator.and()`](https://playwright.dev/docs/api/class-locator#locator-and) to create a locator that matches both locators. ```js const button = page.getByRole('button').and(page.getByTitle('Subscribe')); ``` - New events [`browserContext.on('console')`](https://playwright.dev/docs/api/class-browsercontext#browser-context-event-console) and [`browserContext.on('dialog')`](https://playwright.dev/docs/api/class-browsercontext#browser-context-event-dialog) to subscribe to any dialogs and console messages from any page from the given browser context. Use the new methods [`consoleMessage.page()`](https://playwright.dev/docs/api/class-consolemessage#console-message-page) and [`dialog.page()`](https://playwright.dev/docs/api/class-dialog#dialog-page) to pin-point event source. ##### ⚠️ Breaking changes - `npx playwright test` no longer works if you install both `playwright` and `@playwright/test`. There's no need to install both, since you can always import browser automation APIs from `@playwright/test` directly: ```js // automation.ts import { chromium, firefox, webkit } from '@playwright/test'; /* ... */ ``` - Node.js 14 is no longer supported since it [reached its end-of-life](https://nodejs.dev/en/about/releases/) on April 30, 2023. ##### Browser Versions - Chromium 114.0.5735.26 - Mozilla Firefox 113.0 - WebKit 16.4 This version was also tested against the following stable channels: - Google Chrome 113 - Microsoft Edge 113 ### [`v1.33.0`](https://togithub.com/microsoft/playwright/releases/tag/v1.33.0) [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.32.3...v1.33.0) ##### Locators Update - Use [`locator.or()`][locator.or()] to create a locator that matches either of the two locators. Consider a scenario where you'd like to click on a "New email" button, but sometimes a security settings dialog shows up instead. In this case, you can wait for either a "New email" button, or a dialog and act accordingly: ```js const newEmail = page.getByRole('button', { name: 'New' }); const dialog = page.getByText('Confirm security settings'); await expect(newEmail.or(dialog)).toBeVisible(); if (await dialog.isVisible()) await page.getByRole('button', { name: 'Dismiss' }).click(); await newEmail.click(); ``` - Use new options `hasNot` and `hasNotText` in [`locator.filter()`][locator.filter()] to find elements that **do not match** certain conditions. ```js const rowLocator = page.locator('tr'); await rowLocator .filter({ hasNotText: 'text in column 1' }) .filter({ hasNot: page.getByRole('button', { name: 'column 2 button' }) }) .screenshot(); ``` - Use new web-first assertion [`locatorAssertions.toBeAttached()`][locatorAssertions.toBeAttached()] to ensure that the element is present in the page's DOM. Do not confuse with the [`locatorAssertions.toBeVisible()`][locatorAssertions.toBeVisible()] that ensures that element is both attached & visible. ##### New APIs - [`locator.or()`][locator.or()] - New option `hasNot` in [`locator.filter()`][locator.filter()] - New option `hasNotText` in [`locator.filter()`][locator.filter()] - [`locatorAssertions.toBeAttached()`][locatorAssertions.toBeAttached()] - New option `timeout` in [`route.fetch()`][route.fetch()] - [`reporter.onExit()`][reporter.onExit()] ##### ⚠️ Breaking change - The `mcr.microsoft.com/playwright:v1.33.0` now serves a Playwright image based on Ubuntu Jammy. To use the focal-based image, please use `mcr.microsoft.com/playwright:v1.33.0-focal` instead. ##### Browser Versions - Chromium 113.0.5672.53 - Mozilla Firefox 112.0 - WebKit 16.4 This version was also tested against the following stable channels: - Google Chrome 112 - Microsoft Edge 112 [`locator.or()`]: https://playwright.dev/docs/api/class-locator#locator-or [`reporter.onExit()`]: https://playwright.dev/docs/api/class-reporter#reporter-on-exit [`locator.filter()`]: https://playwright.dev/docs/api/class-locator#locator-filter [`locatorAssertions.toBeAttached()`]: https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-be-attached [`locatorAssertions.toBeVisible()`]: https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-be-visible [`route.fetch()`]: https://playwright.dev/docs/api/class-route#route-fetch ### [`v1.32.3`](https://togithub.com/microsoft/playwright/releases/tag/v1.32.3) [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.32.2...v1.32.3) #### Highlights [https://github.com/microsoft/playwright/issues/22144](https://togithub.com/microsoft/playwright/issues/22144) - \[BUG] WebServer only starting after timeout[https://github.com/microsoft/playwright/pull/22191](https://togithub.com/microsoft/playwright/pull/22191)1 - chore: allow reusing browser between the tests[https://github.com/microsoft/playwright/issues/22215](https://togithub.com/microsoft/playwright/issues/22215)5 - \[BUG] Tests failing in toPass often marked as passed #### Browser Versions - Chromium 112.0.5615.29 - Mozilla Firefox 111.0 - WebKit 16.4 This version was also tested against the following stable channels: - Google Chrome 111 - Microsoft Edge 111 ### [`v1.32.2`](https://togithub.com/microsoft/playwright/releases/tag/v1.32.2) [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.32.1...v1.32.2) #### Highlights [https://github.com/microsoft/playwright/issues/21993](https://togithub.com/microsoft/playwright/issues/21993) - \[BUG] Browser crash when using Playwright VSC extension and trace-viewer enabled in config[https://github.com/microsoft/playwright/issues/22003](https://togithub.com/microsoft/playwright/issues/22003)3 - \[Feature] Make Vue component mount props less restrictiv[https://github.com/microsoft/playwright/issues/22089](https://togithub.com/microsoft/playwright/issues/22089)89 - \[REGRESSION]: Tests failing with "Error: tracing.stopChunk" #### Browser Versions - Chromium 112.0.5615.29 - Mozilla Firefox 111.0 - WebKit 16.4 This version was also tested against the following stable channels: - Google Chrome 111 - Microsoft Edge 111 ### [`v1.32.1`](https://togithub.com/microsoft/playwright/releases/tag/v1.32.1) [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.32.0...v1.32.1) #### Highlights [https://github.com/microsoft/playwright/issues/21832](https://togithub.com/microsoft/playwright/issues/21832) - \[BUG] Trace is not opening on specific broken locator[https://github.com/microsoft/playwright/issues/21897](https://togithub.com/microsoft/playwright/issues/21897)7 - \[BUG] --ui fails to open with error reading mainFrame from an undefined this.\_pa[https://github.com/microsoft/playwright/issues/21918](https://togithub.com/microsoft/playwright/issues/21918)918 - \[BUG]: UI mode, skipped tests not being fo[https://github.com/microsoft/playwright/issues/21941](https://togithub.com/microsoft/playwright/issues/21941)1941 - \[BUG] UI mode does not show webServer startup er[https://github.com/microsoft/playwright/issues/21953](https://togithub.com/microsoft/playwright/issues/21953)21953 - \[BUG] Parameterized tests are not displayed in the UI mode #### Browser Versions - Chromium 112.0.5615.29 - Mozilla Firefox 111.0 - WebKit 16.4 This version was also tested against the following stable channels: - Google Chrome 111 - Microsoft Edge 111 ### [`v1.32.0`](https://togithub.com/microsoft/playwright/releases/tag/v1.32.0) [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.31.2...v1.32.0) #### 📣 Introducing UI Mode (preview) Playwright v1.32 updates New UI Mode lets you explore, run and debug tests. Comes with a built-in watch mode. ![Playwright UI Mode](https://user-images.githubusercontent.com/746130/227004851-3901a691-4f8e-43d6-8d6b-cbfeafaeb999.png) Engage with a new flag `--ui`: ```sh npx playwright test --ui ``` #### New APIs - New options `option: updateMode` and `option: updateContent` in [`page.routeFromHAR()`](https://playwright.dev/docs/api/class-page#page-route-from-har) and [`browserContext.routeFromHAR()`](https://playwright.dev/docs/api/class-browsercontext#browser-context-route-from-har). - Chaining existing locator objects, see [locator docs](https://playwright.dev/docs/locators#chaining-locators) for details. - New property [`TestInfo.testId`](https://playwright.dev/docs/api/class-testinfo#test-info-test-id). - New option `name` in method [`Tracing.startChunk()`](https://playwright.dev/docs/api/class-tracing#tracing-start-chunk). #### ⚠️ Breaking change in component tests Note: **component tests only**, does not affect end-to-end tests. - `@playwright/experimental-ct-react` now supports **React 18 only**. - If you're running component tests with React 16 or 17, please replace `@playwright/experimental-ct-react` with `@playwright/experimental-ct-react17`. #### Browser Versions - Chromium 112.0.5615.29 - Mozilla Firefox 111.0 - WebKit 16.4 This version was also tested against the following stable channels: - Google Chrome 111 - Microsoft Edge 111 ### [`v1.31.2`](https://togithub.com/microsoft/playwright/releases/tag/v1.31.2) [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.31.1...v1.31.2) #### Highlights [https://github.com/microsoft/playwright/issues/20784](https://togithub.com/microsoft/playwright/issues/20784) - \[BUG] ECONNREFUSED on GitHub Actions with Node 18[https://github.com/microsoft/playwright/issues/21145](https://togithub.com/microsoft/playwright/issues/21145)5 - \[REGRESSION]: firefox-1378 times out on await page.reload() when URL contains a #has[https://github.com/microsoft/playwright/issues/21226](https://togithub.com/microsoft/playwright/issues/21226)26 - \[BUG] Playwright seems to get stuck when using shard option and last test is skipp[https://github.com/microsoft/playwright/issues/21227](https://togithub.com/microsoft/playwright/issues/21227)227 - Using the webServer config with a Vite dev serve[https://github.com/microsoft/playwright/issues/21312](https://togithub.com/microsoft/playwright/issues/21312)312 - throw if defineConfig is not used for component testing #### Browser Versions - Chromium 111.0.5563.19 - Mozilla Firefox 109.0 - WebKit 16.4 This version was also tested against the following stable channels: - Google Chrome 110 - Microsoft Edge 110 ### [`v1.31.1`](https://togithub.com/microsoft/playwright/releases/tag/v1.31.1) [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.31.0...v1.31.1) #### Highlights [https://github.com/microsoft/playwright/issues/21093](https://togithub.com/microsoft/playwright/issues/21093) - \[Regression v1.31] Headless Windows shows cascading cmd windows[https://github.com/microsoft/playwright/pull/21106](https://togithub.com/microsoft/playwright/pull/21106)6 - fix(loader): experimentalLoader with node@18 #### Browser Versions - Chromium 111.0.5563.19 - Mozilla Firefox 109.0 - WebKit 16.4 This version was also tested against the following stable channels: - Google Chrome 110 - Microsoft Edge 110 ### [`v1.31.0`](https://togithub.com/microsoft/playwright/releases/tag/v1.31.0) [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.30.0...v1.31.0) #### New APIs - New property [`TestProject.dependencies`](https://playwright.dev/docs/api/class-testproject#test-project-dependencies) to configure dependencies between projects. Using dependencies allows global setup to produce traces and other artifacts, see the setup steps in the test report and more. ```js // playwright.config.ts import { defineConfig } from '@playwright/test'; export default defineConfig({ projects: [ { name: 'setup', testMatch: /global.setup\.ts/, }, { name: 'chromium', use: devices['Desktop Chrome'], dependencies: ['setup'], }, { name: 'firefox', use: devices['Desktop Firefox'], dependencies: ['setup'], }, { name: 'webkit', use: devices['Desktop Safari'], dependencies: ['setup'], }, ], }); ``` - New assertion [`expect(locator).toBeInViewport()`](https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-be-in-viewport) ensures that locator points to an element that intersects viewport, according to the [intersection observer API](https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API). ```js const button = page.getByRole('button'); // Make sure at least some part of element intersects viewport. await expect(button).toBeInViewport(); // Make sure element is fully outside of viewport. await expect(button).not.toBeInViewport(); // Make sure that at least half of the element intersects viewport. await expect(button).toBeInViewport({ ratio: 0.5 }); ``` #### Miscellaneous - DOM snapshots in trace viewer can be now opened in a separate window. - New method `defineConfig` to be used in `playwright.config`. - New option `maxRedirects` for method [`Route.fetch`](https://playwright.dev/docs/api/class-route#route-fetch). - Playwright now supports Debian 11 arm64. - Official [docker images](https://playwright.dev/docs/docker) now include Node 18 instead of Node 16. #### ⚠️ Breaking change in component tests Note: **component tests only**, does not affect end-to-end tests. `playwright-ct.config` configuration file for [component testing](https://playwright.dev/docs/test-components) now requires calling `defineConfig`. ```js // Before import { type PlaywrightTestConfig, devices } from '@playwright/experimental-ct-react'; const config: PlaywrightTestConfig = { // ... config goes here ... }; export default config; ``` Replace `config` variable definition with `defineConfig` call: ```js // After import { defineConfig, devices } from '@playwright/experimental-ct-react'; export default defineConfig({ // ... config goes here ... }); ``` #### Browser Versions - Chromium 111.0.5563.19 - Mozilla Firefox 109.0 - WebKit 16.4 This version was also tested against the following stable channels: - Google Chrome 110 - Microsoft Edge 110 ### [`v1.30.0`](https://togithub.com/microsoft/playwright/releases/tag/v1.30.0) [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.29.2...v1.30.0) ##### 🎉 Happy New Year 🎉 Maintenance release with bugfixes and new browsers only. We are baking some nice features for v1.31. ##### Browser Versions - Chromium 110.0.5481.38 - Mozilla Firefox 108.0.2 - WebKit 16.4 This version was also tested against the following stable channels: - Google Chrome 109 - Microsoft Edge 109 ### [`v1.29.2`](https://togithub.com/microsoft/playwright/releases/tag/v1.29.2) [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.29.1...v1.29.2) #### Highlights [https://github.com/microsoft/playwright/issues/19661](https://togithub.com/microsoft/playwright/issues/19661) - \[BUG] 1.29.1 browserserver + page.goto = net::ERR_SOCKS_CONNECTION_FAILED #### Browser Versions - Chromium 109.0.5414.46 - Mozilla Firefox 107.0 - WebKit 16.4 This version was also tested against the following stable channels: - Google Chrome 108 - Microsoft Edge 108 ### [`v1.29.1`](https://togithub.com/microsoft/playwright/releases/tag/v1.29.1) [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.29.0...v1.29.1) #### Highlights [https://github.com/microsoft/playwright/issues/18928](https://togithub.com/microsoft/playwright/issues/18928) - \[BUG] Electron firstWindow times out after upgrading to 1.28.0[https://github.com/microsoft/playwright/issues/19246](https://togithub.com/microsoft/playwright/issues/19246)6 - \[BUG] Electron firstWindow times out after upgrading to 1.28.[https://github.com/microsoft/playwright/issues/19412](https://togithub.com/microsoft/playwright/issues/19412)12 - \[REGRESSION]: 1.28 does not work with electron-serve anymor[https://github.com/microsoft/playwright/issues/19540](https://togithub.com/microsoft/playwright/issues/19540)540 - \[BUG] electron.app.getAppPath() returns the path one level higher if you run electron pointing to the direct[https://github.com/microsoft/playwright/issues/19548](https://togithub.com/microsoft/playwright/issues/19548)9548 - \[REGRESSION]: Ubuntu 18 LTS not supported anymore #### Browser Versions - Chromium 109.0.5414.46 - Mozilla Firefox 107.0 - WebKit 16.4 This version was also tested against the following stable channels: - Google Chrome 108 - Microsoft Edge 108 ### [`v1.29.0`](https://togithub.com/microsoft/playwright/releases/tag/v1.29.0) [Compare Source](https://togithub.com/Microsoft/playwright/compare/v1.28.1...v1.29.0) #### New APIs - New method [`route.fetch()`](https://playwright.dev/docs/api/class-route#route-fetch) and new option `json` for [`route.fulfill()`](https://playwright.dev/docs/api/class-route#route-fulfill): ```js await page.route('**/api/settings', async route => { // Fetch original settings. const response = await route.fetch(); // Force settings theme to a predefined value. const json = await response.json(); json.theme = 'Solorized'; // Fulfill with modified data. await route.fulfill({ json }); }); ``` - New method [`locator.all()`](https://playwright.dev/docs/api/class-locator#locator-all) to iterate over all matching elements: ```js // Check all checkboxes! const checkboxes = page.getByRole('checkbox'); for (const checkbox of await checkboxes.all()) await checkbox.check(); ``` - [`Locator.selectOption`](https://playwright.dev/docs/api/class-locator#locator-select-option) matches now by value or label: ```html