Impact Score: 5/10
Playwright v1.21.0 โ Release Notes & Engineering Impact
Source available โ automated, not human-reviewed
Component: playwright ยท Channel: stable. Automated analysis, not a compatibility certification. How this works.
Analysis updated: 2026-11-01.
โก Executive Summary (TL;DR)
Playwright v1.21.0. Source highlight: Playwright v1.21 updates
Who Does This Impact? (Role-Based Analysis)
๐ป Software Engineers & Devs
Check the source notes against the package and APIs you use before upgrading.
๐ Product & Engineering Leads
Use the documented changes to assess relevance to your product; release frequency alone is not a quality measure.
โ๏ธ DevOps & Security
Verify the target version, runtime requirements and rollback procedure in the official documentation.
๐ View Raw Release Notes (Original Developer Log)
<a href="https://youtu.be/45HZdbmgEw8"></a>
<a href="https://youtu.be/45HZdbmgEw8">Playwright v1.21 updates</a>
## Highlights
- New **experimental** role selectors that allow selecting elements by their [ARIA role](https://www.w3.org/TR/wai-aria-1.2/#roles), [ARIA attributes](https://www.w3.org/TR/wai-aria-1.2/#aria-attributes) and [accessible name](https://w3c.github.io/accname/#dfn-accessible-name).
```js
// Click a button with accessible name "log in"
await page.click('role=button[name="log in"]')
```
To use role selectors, make sure to pass `PLAYWRIGHT_EXPERIMENTAL_FEATURES=1` environment variable:
```js
// playwright.config.js
process.env.PLAYWRIGHT_EXPERIMENTAL_FEATURES = '1';
module.exports = {
/* ... */
};
```
Read more in [our documentation](https://playwright.dev/docs/selectors#role-selector).
- New `scale` option in [`Page.screenshot`](https://playwright.dev/docs/api/class-page#page-screenshot) for smaller sized screenshots.
- New `caret` option in [`Page.screenshot`](https://playwright.dev/docs/api/class-page#page-screenshot) to control text caret. Defaults to `"hide"`.
- New method `expect.poll` to wait for an arbitrary condition:
```js
// Poll the method until it returns an expected result.
await expect.poll(async () => {
const response = await page.request.get('https://api.example.com');
return response.status();
}).toBe(200);
```
`expect.poll` supports most synchronous matchers, like `.toBe()`, `.toContain()`, etc.
Read more in [our documentation](https://playwright.dev/docs/test-assertions#polling).
## Behavior Changes
- ESM support when running TypeScript tests is now enabled by default. The `PLAYWRIGHT_EXPERIMENTAL_TS_ESM` env variable is
no longer required.
- The `mcr.microsoft.com/playwright` docker image no longer contains Python. Please use `mcr.microsoft.com/playwright/python`
as a Playwright-ready docker image with pre-installed Python.
- Playwright now supports large file uploads (100s of MBs) via [`Locator.setInputFiles`](https://playwright.dev/docs/api/class-locator#locator-set-input-files) API.
## Browser Versions
- Chromium 101.0.4951.26
- Mozilla Firefox 98.0.2
- WebKit 15.4
This version was also tested against the following stable channels:
- Google Chrome 100
- Microsoft Edge 100