Releases: microsoft/playwright
v1.41.1
Highlights
#29067 - [REGRESSION] Codegen/Recorder: not all clicks are being actioned nor recorded
#29028 - [REGRESSION] React component tests throw type error when passing null/undefined to component
#29027 - [REGRESSION] React component tests not passing Date prop values
#29023 - [REGRESSION] React component tests not rendering children prop
#29019 - [REGRESSION] trace.playwright.dev does not currently support the loading from URL
Browser Versions
- Chromium 121.0.6167.57
- Mozilla Firefox 121.0
- WebKit 17.4
This version was also tested against the following stable channels:
- Google Chrome 120
- Microsoft Edge 120
v1.41.0
New APIs
- New method page.unrouteAll([options]) removes all routes registered by page.route(url, handler, handler[, options]) and page.routeFromHAR(har[, options]). Optionally allows to wait for ongoing routes to finish, or ignore any errors from them.
- New method browserContext.unrouteAll([options]) removes all routes registered by browserContext.route(url, handler, handler[, options]) and browserContext.routeFromHAR(har[, options]). Optionally allows to wait for ongoing routes to finish, or ignore any errors from them.
- New option
style
in page.screenshot([options]) and locator.screenshot([options]) to add custom CSS to the page before taking a screenshot. - New option
stylePath
for methods expect(page).toHaveScreenshot(name[, options]) and expect(locator).toHaveScreenshot(name[, options]) to apply a custom stylesheet while making the screenshot. - New
fileName
option for Blob reporter, to specify the name of the report to be created.
Browser Versions
- Chromium 121.0.6167.57
- Mozilla Firefox 121.0
- WebKit 17.4
This version was also tested against the following stable channels:
- Google Chrome 120
- Microsoft Edge 120
v1.40.1
Highlights
#28319 - [REGRESSION]: Version 1.40.0 Produces corrupted traces
#28371 - [BUG] The color of the 'ok' text did not change to green in the vs code test results section
#28321 - [BUG] Ambiguous test outcome and status for serial mode
#28362 - [BUG] Merging blobs ends up in Error: Cannot create a string longer than 0x1fffffe8 characters
#28239 - fix: collect all errors in removeFolders
Browser Versions
- Chromium 120.0.6099.28
- Mozilla Firefox 119.0
- WebKit 17.4
This version was also tested against the following stable channels:
- Google Chrome 119
- Microsoft Edge 119
v1.40.0
Test Generator Update
New tools to generate assertions:
- "Assert visibility" tool generates expect(locator).toBeVisible().
- "Assert value" tool generates expect(locator).toHaveValue(value).
- "Assert text" tool generates expect(locator).toContainText(text).
Here is an example of a generated test with assertions:
import { test, expect } from '@playwright/test';
test('test', async ({ page }) => {
await page.goto('https://playwright.dev/');
await page.getByRole('link', { name: 'Get started' }).click();
await expect(page.getByLabel('Breadcrumbs').getByRole('list')).toContainText('Installation');
await expect(page.getByLabel('Search')).toBeVisible();
await page.getByLabel('Search').click();
await page.getByPlaceholder('Search docs').fill('locator');
await expect(page.getByPlaceholder('Search docs')).toHaveValue('locator');
});
New APIs
- Option
reason
in page.close(), browserContext.close() and browser.close(). Close reason is reported for all operations interrupted by the closure. - Option
firefoxUserPrefs
in browserType.launchPersistentContext(userDataDir).
Other Changes
- Methods download.path() and download.createReadStream() throw an error for failed and cancelled downloads.
- Playwright docker image now comes with Node.js v20.
Browser Versions
- Chromium 120.0.6099.28
- Mozilla Firefox 119.0
- WebKit 17.4
This version was also tested against the following stable channels:
- Google Chrome 119
- Microsoft Edge 119
v1.39.0
Add custom matchers to your expect
You can extend Playwright assertions by providing custom matchers. These matchers will be available on the expect object.
import { expect as baseExpect } from '@playwright/test';
export const expect = baseExpect.extend({
async toHaveAmount(locator: Locator, expected: number, options?: { timeout?: number }) {
// ... see documentation for how to write matchers.
},
});
test('pass', async ({ page }) => {
await expect(page.getByTestId('cart')).toHaveAmount(5);
});
See the documentation for a full example.
Merge test fixtures
You can now merge test fixtures from multiple files or modules:
import { mergeTests } from '@playwright/test';
import { test as dbTest } from 'database-test-utils';
import { test as a11yTest } from 'a11y-test-utils';
export const test = mergeTests(dbTest, a11yTest);
import { test } from './fixtures';
test('passes', async ({ database, page, a11y }) => {
// use database and a11y fixtures.
});
Merge custom expect matchers
You can now merge custom expect matchers from multiple files or modules:
import { mergeTests, mergeExpects } from '@playwright/test';
import { test as dbTest, expect as dbExpect } from 'database-test-utils';
import { test as a11yTest, expect as a11yExpect } from 'a11y-test-utils';
export const test = mergeTests(dbTest, a11yTest);
export const expect = mergeExpects(dbExpect, a11yExpect);
import { test, expect } from './fixtures';
test('passes', async ({ page, database }) => {
await expect(database).toHaveDatabaseUser('admin');
await expect(page).toPassA11yAudit();
});
Hide implementation details: box test steps
You can mark a test.step()
as "boxed" so that errors inside it point to the step call site.
async function login(page) {
await test.step('login', async () => {
// ...
}, { box: true }); // Note the "box" option here.
}
Error: Timed out 5000ms waiting for expect(locator).toBeVisible()
... error details omitted ...
14 | await page.goto('https://github.com/login');
> 15 | await login(page);
| ^
16 | });
See test.step()
documentation for a full example.
New APIs
Browser Versions
- Chromium 119.0.6045.9
- Mozilla Firefox 118.0.1
- WebKit 17.4
This version was also tested against the following stable channels:
- Google Chrome 118
- Microsoft Edge 118
v1.38.1
Highlights
#27071 - expect(value).toMatchSnapshot() deprecation announcement on V1.38
#27072 - [BUG] PWT trace viewer fails to load trace and throws TypeError
#27073 - [BUG] RangeError: Invalid time value
#27087 - [REGRESSION]: npx playwright test --list prints all tests twice
#27113 - [REGRESSION]: No longer able to extend PlaywrightTest.Matchers type for locators and pages
#27144 - [BUG]can not display trace
#27163 - [REGRESSION] Single Quote Wrongly Escaped by Locator When Using Unicode Flag
#27181 - [BUG] evaluate serializing fails at 1.38
Browser Versions
- Chromium 117.0.5938.62
- Mozilla Firefox 117.0
- WebKit 17.0
This version was also tested against the following stable channels:
- Google Chrome 116
- Microsoft Edge 116
v1.38.0
UI Mode Updates
- Zoom into time range.
- Network panel redesign.
New APIs
browserContext.on('weberror')
locator.pressSequentially()
- The
reporter.onEnd()
now reportsstartTime
and total runduration
.
Deprecations
- The following methods were deprecated:
page.type()
,frame.type()
,locator.type()
andelementHandle.type()
.
Please uselocator.fill()
instead which is much faster. Uselocator.pressSequentially()
only if there is a
special keyboard handling on the page, and you need to press keys one-by-one.
Breaking Changes: Playwright no longer downloads browsers automatically
Note
If you are using @playwright/test
package, this change does not affect you.
Playwright recommends to use @playwright/test
package and download browsers via npx playwright install
command. If you are following this recommendation, nothing has changed for you.
However, up to v1.38, installing the playwright
package instead of @playwright/test
did automatically download browsers. This is no longer the case, and we recommend to explicitly download browsers via npx playwright install
command.
v1.37 and earlier
playwright
package was downloading browsers during npm install
, while @playwright/test
was not.
v1.38 and later
playwright
and @playwright/test
packages do not download browsers during npm install
.
Recommended migration
Run npx playwright install
to download browsers after npm install
. For example, in your CI configuration:
- run: npm ci
- run: npx playwright install --with-deps
Alternative migration option - not recommended
Add @playwright/browser-chromium
, @playwright/browser-firefox
and @playwright/browser-webkit
as a dependency. These packages download respective browsers during npm install
. Make sure you keep the version of all playwright packages in sync:
// package.json
{
"devDependencies": {
"playwright": "1.38.0",
"@playwright/browser-chromium": "1.38.0",
"@playwright/browser-firefox": "1.38.0",
"@playwright/browser-webkit": "1.38.0"
}
}
Browser Versions
- Chromium 117.0.5938.62
- Mozilla Firefox 117.0
- WebKit 17.0
This version was also tested against the following stable channels:
- Google Chrome 116
- Microsoft Edge 116
v1.37.1
Highlights
#26496 - [REGRESSION] webServer stdout is always getting printed
#26492 - [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
Watch the overview: Playwright 1.36 & 1.37
✨ 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:
-
Adding a new "blob" reporter to the config when running on CI:
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. -
Copying all "blob" reports in a single shared location and running
npx playwright merge-reports
:npx playwright merge-reports --reporter html ./all-blob-reports
Read more in our documentation.
📚 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