diff --git a/dotnet/docs/api/class-locator.mdx b/dotnet/docs/api/class-locator.mdx
index 09347b2184..c332803441 100644
--- a/dotnet/docs/api/class-locator.mdx
+++ b/dotnet/docs/api/class-locator.mdx
@@ -1782,7 +1782,7 @@ Returns locator to the last matching element.
**Usage**
```csharp
-var banana = await page.GetByRole(AriaRole.Listitem).Last(1);
+var banana = page.GetByRole(AriaRole.Listitem).Last;
```
**Returns**
diff --git a/dotnet/docs/api/class-screencast.mdx b/dotnet/docs/api/class-screencast.mdx
index 8be1a8b355..f5c0deac37 100644
--- a/dotnet/docs/api/class-screencast.mdx
+++ b/dotnet/docs/api/class-screencast.mdx
@@ -191,9 +191,7 @@ Starts the screencast. When [Path](/api/class-screencast.mdx#screencast-start-op
Max frame height in pixels.
- Specifies the dimensions of screencast frames. The actual frame is scaled to preserve the page's aspect ratio and may be smaller than these bounds. If not specified the size will be equal to page viewport scaled down to fit into 800×800.
-
- A page is captured only once, and all consumers share that single capture. Tracing captures screenshots this way as well, so with tracing or the `recordVideo` context option already active this option is ignored, and both the frames and any recorded video use the size of the running capture.
+ Specifies the dimensions of screencast frames. The actual frame is scaled to preserve the page's aspect ratio and may be smaller than these bounds. If a screencast is already active (e.g. started by tracing or video recording), the existing configuration takes precedence and the frame size may exceed these bounds or this option may be ignored. If not specified the size will be equal to page viewport scaled down to fit into 800×800.
**Returns**
- [Disposable]#
diff --git a/dotnet/docs/codegen.mdx b/dotnet/docs/codegen.mdx
index 0a5ffda372..f5eb3bd6d2 100644
--- a/dotnet/docs/codegen.mdx
+++ b/dotnet/docs/codegen.mdx
@@ -147,6 +147,14 @@ Run `codegen` with `--user-data-dir` to set a fixed [user data directory](https:
pwsh bin/Debug/netX/playwright.ps1 codegen --user-data-dir=/path/to/your/browser/data/ github.com/microsoft/playwright
```
+#### Authenticate with HTTP credentials
+
+Run `codegen` with `--http-credentials` to authenticate with [HTTP Basic Authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Authentication). Unlike credentials embedded in the URL, they are sent to any origin that requests them during the recording session and are included in the generated code.
+
+```bash
+pwsh bin/Debug/netX/playwright.ps1 codegen --http-credentials="username:password" example.com
+```
+
## Record using custom setup
If you would like to use codegen in some non-standard setup (for example, use [BrowserContext.RouteAsync()](/api/class-browsercontext.mdx#browser-context-route)), it is possible to call [Page.PauseAsync()](/api/class-page.mdx#page-pause) that will open a separate window with codegen controls.
diff --git a/dotnet/docs/getting-started-cli.mdx b/dotnet/docs/getting-started-cli.mdx
index 7081a524ca..2e526e707a 100644
--- a/dotnet/docs/getting-started-cli.mdx
+++ b/dotnet/docs/getting-started-cli.mdx
@@ -17,30 +17,25 @@ Playwright comes with `playwright-cli`, a command-line interface for browser aut
## Prerequisites
Before you begin, make sure you have the following installed:
-- Playwright for your language, **or** [Node.js](https://nodejs.org/) 20+ for the standalone `@playwright/cli` package
+- [Node.js](https://nodejs.org/) 20 or newer
- A coding agent: Claude Code, GitHub Copilot, or similar
## Installation
-Install the standalone CLI globally (works with any language):
+Install `playwright-cli` globally:
```bash
npm install -g @playwright/cli@latest
playwright-cli --help
```
-Or use the CLI bundled with your Playwright install:
+Alternatively, install `@playwright/cli` as a local dependency and use `npx`:
```bash
-# JavaScript / TypeScript
-npx playwright cli --help
-
-# Python
-python -m playwright cli --help
+npm install -D @playwright/cli@latest
+npx playwright-cli --help
```
-When using a bundled entry point, replace `playwright-cli` with `npx playwright cli` or `python -m playwright cli` in the commands below.
-
### Installing skills
Coding agents like Claude Code and GitHub Copilot can use locally installed skills for richer context about available commands:
@@ -300,29 +295,11 @@ playwright-cli attach --extension
This requires the [Playwright Extension](https://github.com/microsoft/playwright/blob/main/packages/extension/README.md) to be installed.
-## Debugging tests
-
-Coding agents can pause a test at the start, attach with `playwright-cli`, and explore the live browser — useful for diagnosing and fixing failures.
-
-```bash
-# JavaScript / TypeScript
-PLAYWRIGHT_HTML_OPEN=never npx playwright test --debug=cli
-# → Debugging Instructions with session name, e.g. tw-abcdef
-playwright-cli attach tw-abcdef
-
-# Python (pytest-playwright; -s keeps the attach line visible)
-pytest --playwright-debug=cli -s
-playwright-cli attach tw-abcdef
-```
-
-Keep the test running in the background while you attach. The installed skill documents this workflow for agents.
-
## Quick Reference
| Action | Command |
| ------------------------- | --------------------------------------------------- |
| **Install CLI** | `npm install -g @playwright/cli@latest` |
-| **Use bundled CLI** | `npx playwright cli …` / `python -m playwright cli …` |
| **Install skills** | `playwright-cli install --skills` |
| **Open a page** | `playwright-cli open https://example.com` |
| **Click an element** | `playwright-cli click e15` |
@@ -332,8 +309,6 @@ Keep the test running in the background while you attach. The installed skill do
| **Run headed** | `playwright-cli open https://example.com --headed` |
| **Use Firefox** | `playwright-cli open --browser=firefox` |
| **Monitor sessions** | `playwright-cli show` |
-| **Debug JS test** | `npx playwright test --debug=cli` |
-| **Debug Python test** | `pytest --playwright-debug=cli -s` |
## What's Next
- [Write tests using web-first assertions, page fixtures, and locators](./writing-tests.mdx)
diff --git a/dotnet/docs/test-assertions.mdx b/dotnet/docs/test-assertions.mdx
index 70afa39a03..7bf052f82e 100644
--- a/dotnet/docs/test-assertions.mdx
+++ b/dotnet/docs/test-assertions.mdx
@@ -6,7 +6,21 @@ import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import HTMLCard from '@site/src/components/HTMLCard';
-## List of assertions
+## Introduction
+
+Playwright includes web-specific assertions that automatically retry until the expected condition is met. Consider the following example:
+
+```csharp
+await Expect(Page.GetByTestId("status")).ToHaveTextAsync("Submitted");
+```
+
+Playwright will re-test the element with the test ID of `status` until it has the `"Submitted"` text. It will re-fetch the element and check it repeatedly until the condition is met or the timeout is reached.
+
+By default, the timeout for assertions is 5 seconds.
+
+## Auto-retrying assertions
+
+The following assertions will retry until the assertion passes or the assertion timeout is reached.
| Assertion | Description |
| :- | :- |
diff --git a/java/docs/api/class-screencast.mdx b/java/docs/api/class-screencast.mdx
index 4ccabf4b10..28c334b809 100644
--- a/java/docs/api/class-screencast.mdx
+++ b/java/docs/api/class-screencast.mdx
@@ -194,9 +194,7 @@ Starts the screencast. When [setPath](/api/class-screencast.mdx#screencast-start
Max frame height in pixels.
- Specifies the dimensions of screencast frames. The actual frame is scaled to preserve the page's aspect ratio and may be smaller than these bounds. If not specified the size will be equal to page viewport scaled down to fit into 800×800.
-
- A page is captured only once, and all consumers share that single capture. Tracing captures screenshots this way as well, so with tracing or the `recordVideo` context option already active this option is ignored, and both the frames and any recorded video use the size of the running capture.
+ Specifies the dimensions of screencast frames. The actual frame is scaled to preserve the page's aspect ratio and may be smaller than these bounds. If a screencast is already active (e.g. started by tracing or video recording), the existing configuration takes precedence and the frame size may exceed these bounds or this option may be ignored. If not specified the size will be equal to page viewport scaled down to fit into 800×800.
**Returns**
- [Disposable]#
diff --git a/java/docs/codegen.mdx b/java/docs/codegen.mdx
index 9966510e50..d17ec5d6ef 100644
--- a/java/docs/codegen.mdx
+++ b/java/docs/codegen.mdx
@@ -147,6 +147,14 @@ Run `codegen` with `--user-data-dir` to set a fixed [user data directory](https:
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="codegen --user-data-dir=/path/to/your/browser/data/ github.com/microsoft/playwright"
```
+#### Authenticate with HTTP credentials
+
+Run `codegen` with `--http-credentials` to authenticate with [HTTP Basic Authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Authentication). Unlike credentials embedded in the URL, they are sent to any origin that requests them during the recording session and are included in the generated code.
+
+```bash
+mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args='codegen --http-credentials="username:password" example.com'
+```
+
## Record using custom setup
If you would like to use codegen in some non-standard setup (for example, use [BrowserContext.route()](/api/class-browsercontext.mdx#browser-context-route)), it is possible to call [Page.pause()](/api/class-page.mdx#page-pause) that will open a separate window with codegen controls.
diff --git a/java/docs/getting-started-cli.mdx b/java/docs/getting-started-cli.mdx
index 6f815e4d98..7474caea16 100644
--- a/java/docs/getting-started-cli.mdx
+++ b/java/docs/getting-started-cli.mdx
@@ -17,30 +17,25 @@ Playwright comes with `playwright-cli`, a command-line interface for browser aut
## Prerequisites
Before you begin, make sure you have the following installed:
-- Playwright for your language, **or** [Node.js](https://nodejs.org/) 20+ for the standalone `@playwright/cli` package
+- [Node.js](https://nodejs.org/) 20 or newer
- A coding agent: Claude Code, GitHub Copilot, or similar
## Installation
-Install the standalone CLI globally (works with any language):
+Install `playwright-cli` globally:
```bash
npm install -g @playwright/cli@latest
playwright-cli --help
```
-Or use the CLI bundled with your Playwright install:
+Alternatively, install `@playwright/cli` as a local dependency and use `npx`:
```bash
-# JavaScript / TypeScript
-npx playwright cli --help
-
-# Python
-python -m playwright cli --help
+npm install -D @playwright/cli@latest
+npx playwright-cli --help
```
-When using a bundled entry point, replace `playwright-cli` with `npx playwright cli` or `python -m playwright cli` in the commands below.
-
### Installing skills
Coding agents like Claude Code and GitHub Copilot can use locally installed skills for richer context about available commands:
@@ -300,29 +295,11 @@ playwright-cli attach --extension
This requires the [Playwright Extension](https://github.com/microsoft/playwright/blob/main/packages/extension/README.md) to be installed.
-## Debugging tests
-
-Coding agents can pause a test at the start, attach with `playwright-cli`, and explore the live browser — useful for diagnosing and fixing failures.
-
-```bash
-# JavaScript / TypeScript
-PLAYWRIGHT_HTML_OPEN=never npx playwright test --debug=cli
-# → Debugging Instructions with session name, e.g. tw-abcdef
-playwright-cli attach tw-abcdef
-
-# Python (pytest-playwright; -s keeps the attach line visible)
-pytest --playwright-debug=cli -s
-playwright-cli attach tw-abcdef
-```
-
-Keep the test running in the background while you attach. The installed skill documents this workflow for agents.
-
## Quick Reference
| Action | Command |
| ------------------------- | --------------------------------------------------- |
| **Install CLI** | `npm install -g @playwright/cli@latest` |
-| **Use bundled CLI** | `npx playwright cli …` / `python -m playwright cli …` |
| **Install skills** | `playwright-cli install --skills` |
| **Open a page** | `playwright-cli open https://example.com` |
| **Click an element** | `playwright-cli click e15` |
@@ -332,8 +309,6 @@ Keep the test running in the background while you attach. The installed skill do
| **Run headed** | `playwright-cli open https://example.com --headed` |
| **Use Firefox** | `playwright-cli open --browser=firefox` |
| **Monitor sessions** | `playwright-cli show` |
-| **Debug JS test** | `npx playwright test --debug=cli` |
-| **Debug Python test** | `pytest --playwright-debug=cli -s` |
## What's Next
- [Write tests using web-first assertions, page fixtures, and locators](./writing-tests.mdx)
diff --git a/java/docs/mock.mdx b/java/docs/mock.mdx
index f4b7dfc341..2dfc07f26d 100644
--- a/java/docs/mock.mdx
+++ b/java/docs/mock.mdx
@@ -16,7 +16,7 @@ The following code will intercept all the calls to `*/**/api/v1/fruits` and will
```java
// Intercept the route to the fruit API
-page.route("https://fruit.ceo/api/breeds/image/random", route -> {
+page.route("*/**/api/v1/fruits", route -> {
List> data = new ArrayList>();
Hashtable dict = new Hashtable();
dict.put("name", "Strawberry");
diff --git a/java/docs/test-assertions.mdx b/java/docs/test-assertions.mdx
index 1d9fc5d623..813f8edc33 100644
--- a/java/docs/test-assertions.mdx
+++ b/java/docs/test-assertions.mdx
@@ -6,7 +6,21 @@ import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import HTMLCard from '@site/src/components/HTMLCard';
-## List of assertions
+## Introduction
+
+Playwright includes web-specific assertions that automatically retry until the expected condition is met. Consider the following example:
+
+```java
+assertThat(page.getByTestId("status")).hasText("Submitted");
+```
+
+Playwright will re-test the element with the test ID of `status` until it has the `"Submitted"` text. It will re-fetch the element and check it repeatedly until the condition is met or the timeout is reached.
+
+By default, the timeout for assertions is 5 seconds.
+
+## Auto-retrying assertions
+
+The following assertions will retry until the assertion passes or the assertion timeout is reached.
| Assertion | Description |
| :- | :- |
@@ -39,6 +53,29 @@ import HTMLCard from '@site/src/components/HTMLCard';
| [assertThat(page).hasURL()](/api/class-pageassertions.mdx#page-assertions-to-have-url) | Page has a URL |
| [assertThat(response).isOK()](/api/class-apiresponseassertions.mdx#api-response-assertions-to-be-ok) | Response has an OK status |
+## Setting a custom timeout
+
+You can specify a custom timeout for assertions either globally or per assertion. The default timeout is 5 seconds.
+
+### Global timeout
+
+```java
+import com.microsoft.playwright.assertions.PlaywrightAssertions;
+
+PlaywrightAssertions.setDefaultAssertionTimeout(10_000);
+```
+
+### Per assertion timeout
+
+```java
+import com.microsoft.playwright.assertions.LocatorAssertions;
+
+import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
+
+assertThat(page.getByText("Name")).isVisible(
+ new LocatorAssertions.IsVisibleOptions().setTimeout(10_000));
+```
+
[APIRequest]: /api/class-apirequest.mdx "APIRequest"
[APIRequestContext]: /api/class-apirequestcontext.mdx "APIRequestContext"
diff --git a/nodejs/docs/accessibility-testing.mdx b/nodejs/docs/accessibility-testing.mdx
index dfad404b78..3a1f39e910 100644
--- a/nodejs/docs/accessibility-testing.mdx
+++ b/nodejs/docs/accessibility-testing.mdx
@@ -341,7 +341,6 @@ test('example using custom fixture', async ({ page, makeAxeBuilder }) => {
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/actionability.mdx b/nodejs/docs/actionability.mdx
index 8a2b2fedea..900585a789 100644
--- a/nodejs/docs/actionability.mdx
+++ b/nodejs/docs/actionability.mdx
@@ -131,7 +131,6 @@ For example, consider a scenario where Playwright will click `Sign Up` button re
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api-testing.mdx b/nodejs/docs/api-testing.mdx
index dbde55037e..f0938cc717 100644
--- a/nodejs/docs/api-testing.mdx
+++ b/nodejs/docs/api-testing.mdx
@@ -382,7 +382,6 @@ test('global context request has isolated cookie storage', async ({
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-android.mdx b/nodejs/docs/api/class-android.mdx
index cebb0b488c..116a20d5a3 100644
--- a/nodejs/docs/api/class-android.mdx
+++ b/nodejs/docs/api/class-android.mdx
@@ -252,7 +252,6 @@ android.setDefaultTimeout(timeout);
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-androiddevice.mdx b/nodejs/docs/api/class-androiddevice.mdx
index 3e351d31f7..49d2a8ed67 100644
--- a/nodejs/docs/api/class-androiddevice.mdx
+++ b/nodejs/docs/api/class-androiddevice.mdx
@@ -950,7 +950,6 @@ androidDevice.on('webview', data => {});
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-androidinput.mdx b/nodejs/docs/api/class-androidinput.mdx
index cb50556da2..a5fac605e5 100644
--- a/nodejs/docs/api/class-androidinput.mdx
+++ b/nodejs/docs/api/class-androidinput.mdx
@@ -166,7 +166,6 @@ await androidInput.type(text);
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-androidsocket.mdx b/nodejs/docs/api/class-androidsocket.mdx
index 0d50a6c5f6..dff843aa45 100644
--- a/nodejs/docs/api/class-androidsocket.mdx
+++ b/nodejs/docs/api/class-androidsocket.mdx
@@ -93,7 +93,6 @@ androidSocket.on('data', data => {});
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-androidwebview.mdx b/nodejs/docs/api/class-androidwebview.mdx
index 7041c048b1..09b1237099 100644
--- a/nodejs/docs/api/class-androidwebview.mdx
+++ b/nodejs/docs/api/class-androidwebview.mdx
@@ -88,7 +88,6 @@ androidWebView.on('close', data => {});
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-apirequest.mdx b/nodejs/docs/api/class-apirequest.mdx
index 51c73ddfbe..c56362531a 100644
--- a/nodejs/docs/api/class-apirequest.mdx
+++ b/nodejs/docs/api/class-apirequest.mdx
@@ -178,7 +178,6 @@ await apiRequest.newContext(options);
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-apirequestcontext.mdx b/nodejs/docs/api/class-apirequestcontext.mdx
index 8049655d3c..ab4dd4c323 100644
--- a/nodejs/docs/api/class-apirequestcontext.mdx
+++ b/nodejs/docs/api/class-apirequestcontext.mdx
@@ -676,7 +676,6 @@ apiRequestContext.tracing
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-apiresponse.mdx b/nodejs/docs/api/class-apiresponse.mdx
index b041469b81..0378facd66 100644
--- a/nodejs/docs/api/class-apiresponse.mdx
+++ b/nodejs/docs/api/class-apiresponse.mdx
@@ -297,7 +297,6 @@ apiResponse.url();
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-apiresponseassertions.mdx b/nodejs/docs/api/class-apiresponseassertions.mdx
index 1d13fb2b99..7a9f8ca9f1 100644
--- a/nodejs/docs/api/class-apiresponseassertions.mdx
+++ b/nodejs/docs/api/class-apiresponseassertions.mdx
@@ -69,7 +69,6 @@ await expect(response).not.toBeOK();
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-browser.mdx b/nodejs/docs/api/class-browser.mdx
index 263cbaa239..f3dc631ddf 100644
--- a/nodejs/docs/api/class-browser.mdx
+++ b/nodejs/docs/api/class-browser.mdx
@@ -946,7 +946,6 @@ browser.on('disconnected', data => {});
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-browsercontext.mdx b/nodejs/docs/api/class-browsercontext.mdx
index f7c28e01ad..ff18e106ff 100644
--- a/nodejs/docs/api/class-browsercontext.mdx
+++ b/nodejs/docs/api/class-browsercontext.mdx
@@ -1579,7 +1579,6 @@ await browserContext.setHTTPCredentials(httpCredentials);
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-browserserver.mdx b/nodejs/docs/api/class-browserserver.mdx
index 59ddeaf585..e84cbf8b05 100644
--- a/nodejs/docs/api/class-browserserver.mdx
+++ b/nodejs/docs/api/class-browserserver.mdx
@@ -105,7 +105,6 @@ browserServer.on('close', data => {});
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-browsertype.mdx b/nodejs/docs/api/class-browsertype.mdx
index d890b9f207..f1eab13e53 100644
--- a/nodejs/docs/api/class-browsertype.mdx
+++ b/nodejs/docs/api/class-browsertype.mdx
@@ -735,7 +735,6 @@ browserType.name();
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-by.mdx b/nodejs/docs/api/class-by.mdx
deleted file mode 100644
index 64adf1abc8..0000000000
--- a/nodejs/docs/api/class-by.mdx
+++ /dev/null
@@ -1,565 +0,0 @@
----
-id: class-by
-title: "By"
----
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-import HTMLCard from '@site/src/components/HTMLCard';
-
-
-[By] describes an element without being bound to a [Page] or a [Frame]. It is built with the top-level [playwright.by](/api/class-playwright.mdx#playwright-by) object and turned into a regular [Locator] with [page.get()](/api/class-page.mdx#page-get), [frame.get()](/api/class-frame.mdx#frame-get) or [locator.get()](/api/class-locator.mdx#locator-get).
-
-Since a [By] carries no page, it can be defined once at module scope and reused by every test, which makes it a natural fit for page objects.
-
-**Usage**
-
-```js
-import { by, expect, test } from '@playwright/test';
-
-const saveButton = by.role('button', { name: 'Save' });
-const todoItems = by.testId('todo-list').role('listitem');
-
-test('saves a todo', async ({ page }) => {
- await page.get(saveButton).click();
- await expect(page.get(todoItems)).toHaveCount(1);
-});
-```
-
-A [By] chain resolves to the same element as the matching [Locator] chain, so `page.get(by.testId('list').text('Row'))` and `page.getByTestId('list').getByText('Row')` are interchangeable. Chaining composes rather than replaces: `page.get(outer.get(inner))` and `page.get(outer).get(inner)` describe the same element.
-
-
----
-
-## Methods
-
-### altText {/* #by-alt-text */}
-
-Added in: v1.63 by.altText
-
-Matches a descendant element by its `alt` text.
-
-**Usage**
-
-```js
-by.altText(text);
-by.altText(text, options);
-```
-
-**Arguments**
-- `text` [string] | [RegExp] Added in: v1.27 #
-
- Text to locate the element for.
-- `options` [Object] *(optional)*
- - `exact` [boolean] *(optional)* Added in: v1.27 #
-
- Whether to find an exact match: case-sensitive and whole-string. Default to false. Ignored when locating by a regular expression. Note that exact match still trims whitespace.
-
-**Returns**
-- [By]#
-
----
-
-### and {/* #by-and */}
-
-Added in: v1.63 by.and
-
-Narrows down the match to elements that match both this and the given [By].
-
-**Usage**
-
-```js
-const saveButton = by.role('button').and(by.title('Subscribe'));
-```
-
-**Arguments**
-- `by` [By]#
-
- Additional locator to match.
-
-**Returns**
-- [By]#
-
----
-
-### describe {/* #by-describe */}
-
-Added in: v1.63 by.describe
-
-Describes the element, the description is used in the trace viewer and the reports.
-
-**Usage**
-
-```js
-by.describe(description);
-```
-
-**Arguments**
-- `description` [string]#
-
- Locator description.
-
-**Returns**
-- [By]#
-
----
-
-### filter {/* #by-filter */}
-
-Added in: v1.63 by.filter
-
-Narrows down the match according to the options, for example filters by text. It can be chained to filter multiple times.
-
-**Usage**
-
-```js
-const rowWithButton = by.get('tr')
- .filter({ hasText: 'text in column 1' })
- .filter({ has: by.role('button', { name: 'column 2 button' }) });
-```
-
-**Arguments**
-- `options` [Object] *(optional)*
- - `has` [By] *(optional)*#
-
- Narrows down the results to those which contain elements matching this relative [By]. The inner [By] is queried starting with the outer match, not the document root.
- - `hasNot` [By] *(optional)*#
-
- Matches elements that do not contain an element matching this relative [By]. The inner [By] is queried starting with the outer match, not the document root.
- - `hasNotText` [string] | [RegExp] *(optional)*#
-
- Matches elements that do not contain specified text somewhere inside, possibly in a child or a descendant element. When passed a [string], matching is case-insensitive and searches for a substring.
- - `hasText` [string] | [RegExp] *(optional)*#
-
- Matches elements containing specified text somewhere inside, possibly in a child or a descendant element. When passed a [string], matching is case-insensitive and searches for a substring. For example, `"Playwright"` matches `Playwright
`.
- - `visible` [boolean] *(optional)*#
-
- Only matches visible or invisible elements.
-
-**Returns**
-- [By]#
-
----
-
-### first {/* #by-first */}
-
-Added in: v1.63 by.first
-
-Matches the first matching element.
-
-**Usage**
-
-```js
-by.first();
-```
-
-**Returns**
-- [By]#
-
----
-
-### get {/* #by-get */}
-
-Added in: v1.63 by.get
-
-Matches a descendant element by a selector or by another [By].
-
-**Usage**
-
-```js
-const firstCell = by.get('table').get('td').first();
-
-const listItem = by.role('listitem');
-const unread = by.testId('inbox').get(listItem).filter({ hasText: 'Unread' });
-```
-
-**Arguments**
-- `selectorOrBy` [string] | [By]#
-
- A selector or a [By] to match inside this one.
-
-**Returns**
-- [By]#
-
-**Details**
-
-Passing a [By] composes rather than replaces, so `outer.get(inner.get(innermost))` and `outer.get(inner).get(innermost)` describe the same element.
-
----
-
-### label {/* #by-label */}
-
-Added in: v1.63 by.label
-
-Matches an input element by the text of the associated `` or `aria-label` attribute.
-
-**Usage**
-
-```js
-by.label(text);
-by.label(text, options);
-```
-
-**Arguments**
-- `text` [string] | [RegExp] Added in: v1.27 #
-
- Text to locate the element for.
-- `options` [Object] *(optional)*
- - `exact` [boolean] *(optional)* Added in: v1.27 #
-
- Whether to find an exact match: case-sensitive and whole-string. Default to false. Ignored when locating by a regular expression. Note that exact match still trims whitespace.
-
-**Returns**
-- [By]#
-
----
-
-### last {/* #by-last */}
-
-Added in: v1.63 by.last
-
-Matches the last matching element.
-
-**Usage**
-
-```js
-by.last();
-```
-
-**Returns**
-- [By]#
-
----
-
-### nth {/* #by-nth */}
-
-Added in: v1.63 by.nth
-
-Matches the n-th matching element. It is zero based, `nth(0)` selects the first element.
-
-**Usage**
-
-```js
-by.nth(index);
-```
-
-**Arguments**
-- `index` [number]#
-
-**Returns**
-- [By]#
-
----
-
-### or {/* #by-or */}
-
-Added in: v1.63 by.or
-
-Matches elements matching either this or the given [By].
-
-**Usage**
-
-```js
-const dialogOrButton = by.role('dialog').or(by.role('button'));
-```
-
-**Arguments**
-- `by` [By]#
-
- Alternative locator to match.
-
-**Returns**
-- [By]#
-
----
-
-### placeholder {/* #by-placeholder */}
-
-Added in: v1.63 by.placeholder
-
-Matches an input element by the placeholder text.
-
-**Usage**
-
-```js
-by.placeholder(text);
-by.placeholder(text, options);
-```
-
-**Arguments**
-- `text` [string] | [RegExp] Added in: v1.27 #
-
- Text to locate the element for.
-- `options` [Object] *(optional)*
- - `exact` [boolean] *(optional)* Added in: v1.27 #
-
- Whether to find an exact match: case-sensitive and whole-string. Default to false. Ignored when locating by a regular expression. Note that exact match still trims whitespace.
-
-**Returns**
-- [By]#
-
----
-
-### role {/* #by-role */}
-
-Added in: v1.63 by.role
-
-Matches an element by its [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).
-
-**Usage**
-
-```js
-by.role(role);
-by.role(role, options);
-```
-
-**Arguments**
-- `role` "alert" | "alertdialog" | "application" | "article" | "banner" | "blockquote" | "button" | "caption" | "cell" | "checkbox" | "code" | "columnheader" | "combobox" | "complementary" | "contentinfo" | "definition" | "deletion" | "dialog" | "directory" | "document" | "emphasis" | "feed" | "figure" | "form" | "generic" | "grid" | "gridcell" | "group" | "heading" | "img" | "insertion" | "link" | "list" | "listbox" | "listitem" | "log" | "main" | "marquee" | "math" | "meter" | "menu" | "menubar" | "menuitem" | "menuitemcheckbox" | "menuitemradio" | "navigation" | "none" | "note" | "option" | "paragraph" | "presentation" | "progressbar" | "radio" | "radiogroup" | "region" | "row" | "rowgroup" | "rowheader" | "scrollbar" | "search" | "searchbox" | "separator" | "slider" | "spinbutton" | "status" | "strong" | "subscript" | "superscript" | "switch" | "tab" | "table" | "tablist" | "tabpanel" | "term" | "textbox" | "time" | "timer" | "toolbar" | "tooltip" | "tree" | "treegrid" | "treeitem"#
-
- Required aria role.
-- `options` [Object] *(optional)*
- - `checked` [boolean] *(optional)*#
-
- An attribute that is usually set by `aria-checked` or native ` ` controls.
-
- Learn more about [`aria-checked`](https://www.w3.org/TR/wai-aria-1.2/#aria-checked).
- - `description` [string] | [RegExp] *(optional)* Added in: v1.60 #
-
- Option to match the [accessible description](https://w3c.github.io/accname/#dfn-accessible-description). By default, matching is case-insensitive and searches for a substring, use [exact](/api/class-by.mdx#by-role-option-exact) to control this behavior.
-
- Learn more about [accessible description](https://w3c.github.io/accname/#dfn-accessible-description).
- - `disabled` [boolean] *(optional)*#
-
- An attribute that is usually set by `aria-disabled` or `disabled`.
-
- :::note
-
- Unlike most other attributes, `disabled` is inherited through the DOM hierarchy. Learn more about [`aria-disabled`](https://www.w3.org/TR/wai-aria-1.2/#aria-disabled).
- :::
-
- - `exact` [boolean] *(optional)* Added in: v1.28 #
-
- Whether [name](/api/class-by.mdx#by-role-option-name) and [description](/api/class-by.mdx#by-role-option-description) are matched exactly: case-sensitive and whole-string. Defaults to false. Ignored when the value is a regular expression. Note that exact match still trims whitespace.
- - `expanded` [boolean] *(optional)*#
-
- An attribute that is usually set by `aria-expanded`.
-
- Learn more about [`aria-expanded`](https://www.w3.org/TR/wai-aria-1.2/#aria-expanded).
- - `includeHidden` [boolean] *(optional)*#
-
- Option that controls whether hidden elements are matched. By default, only non-hidden elements, as [defined by ARIA](https://www.w3.org/TR/wai-aria-1.2/#tree_exclusion), are matched by role selector.
-
- Learn more about [`aria-hidden`](https://www.w3.org/TR/wai-aria-1.2/#aria-hidden).
- - `level` [number] *(optional)*#
-
- A number attribute that is usually present for roles `heading`, `listitem`, `row`, `treeitem`, with default values for `-` elements.
-
- Learn more about [`aria-level`](https://www.w3.org/TR/wai-aria-1.2/#aria-level).
- - `name` [string] | [RegExp] *(optional)*#
-
- Option to match the [accessible name](https://w3c.github.io/accname/#dfn-accessible-name). By default, matching is case-insensitive and searches for a substring, use [exact](/api/class-by.mdx#by-role-option-exact) to control this behavior.
-
- Learn more about [accessible name](https://w3c.github.io/accname/#dfn-accessible-name).
- - `pressed` [boolean] *(optional)*#
-
- An attribute that is usually set by `aria-pressed`.
-
- Learn more about [`aria-pressed`](https://www.w3.org/TR/wai-aria-1.2/#aria-pressed).
- - `selected` [boolean] *(optional)*#
-
- An attribute that is usually set by `aria-selected`.
-
- Learn more about [`aria-selected`](https://www.w3.org/TR/wai-aria-1.2/#aria-selected).
-
-**Returns**
-- [By]#
-
----
-
-### testId {/* #by-test-id */}
-
-Added in: v1.63 by.testId
-
-Matches an element by the test id. The test id attribute is resolved when the [By] is bound to a page, so a [By] built at module scope still honours [selectors.setTestIdAttribute()](/api/class-selectors.mdx#selectors-set-test-id-attribute) and the `testIdAttribute` option.
-
-**Usage**
-
-```js
-by.testId(testId);
-```
-
-**Arguments**
-- `testId` [string] | [RegExp] Added in: v1.27 #
-
- Id to locate the element by.
-
-**Returns**
-- [By]#
-
----
-
-### text {/* #by-text */}
-
-Added in: v1.63 by.text
-
-Matches an element containing the given text.
-
-**Usage**
-
-```js
-by.text(text);
-by.text(text, options);
-```
-
-**Arguments**
-- `text` [string] | [RegExp] Added in: v1.27 #
-
- Text to locate the element for.
-- `options` [Object] *(optional)*
- - `exact` [boolean] *(optional)* Added in: v1.27 #
-
- Whether to find an exact match: case-sensitive and whole-string. Default to false. Ignored when locating by a regular expression. Note that exact match still trims whitespace.
-
-**Returns**
-- [By]#
-
----
-
-### title {/* #by-title */}
-
-Added in: v1.63 by.title
-
-Matches an element by its `title` attribute.
-
-**Usage**
-
-```js
-by.title(text);
-by.title(text, options);
-```
-
-**Arguments**
-- `text` [string] | [RegExp] Added in: v1.27 #
-
- Text to locate the element for.
-- `options` [Object] *(optional)*
- - `exact` [boolean] *(optional)* Added in: v1.27 #
-
- Whether to find an exact match: case-sensitive and whole-string. Default to false. Ignored when locating by a regular expression. Note that exact match still trims whitespace.
-
-**Returns**
-- [By]#
-
-
-[APIRequest]: /api/class-apirequest.mdx "APIRequest"
-[APIRequestContext]: /api/class-apirequestcontext.mdx "APIRequestContext"
-[APIResponse]: /api/class-apiresponse.mdx "APIResponse"
-[APIResponseAssertions]: /api/class-apiresponseassertions.mdx "APIResponseAssertions"
-[Browser]: /api/class-browser.mdx "Browser"
-[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
-[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
-[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
-[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
-[Clock]: /api/class-clock.mdx "Clock"
-[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
-[Coverage]: /api/class-coverage.mdx "Coverage"
-[Credentials]: /api/class-credentials.mdx "Credentials"
-[Debugger]: /api/class-debugger.mdx "Debugger"
-[Dialog]: /api/class-dialog.mdx "Dialog"
-[Disposable]: /api/class-disposable.mdx "Disposable"
-[Download]: /api/class-download.mdx "Download"
-[ElementHandle]: /api/class-elementhandle.mdx "ElementHandle"
-[FileChooser]: /api/class-filechooser.mdx "FileChooser"
-[Frame]: /api/class-frame.mdx "Frame"
-[FrameLocator]: /api/class-framelocator.mdx "FrameLocator"
-[GenericAssertions]: /api/class-genericassertions.mdx "GenericAssertions"
-[JSHandle]: /api/class-jshandle.mdx "JSHandle"
-[Keyboard]: /api/class-keyboard.mdx "Keyboard"
-[Locator]: /api/class-locator.mdx "Locator"
-[LocatorAssertions]: /api/class-locatorassertions.mdx "LocatorAssertions"
-[Logger]: /api/class-logger.mdx "Logger"
-[Mouse]: /api/class-mouse.mdx "Mouse"
-[Page]: /api/class-page.mdx "Page"
-[PageAssertions]: /api/class-pageassertions.mdx "PageAssertions"
-[Playwright]: /api/class-playwright.mdx "Playwright"
-[PlaywrightAssertions]: /api/class-playwrightassertions.mdx "PlaywrightAssertions"
-[Request]: /api/class-request.mdx "Request"
-[Response]: /api/class-response.mdx "Response"
-[Route]: /api/class-route.mdx "Route"
-[Screencast]: /api/class-screencast.mdx "Screencast"
-[Selectors]: /api/class-selectors.mdx "Selectors"
-[SnapshotAssertions]: /api/class-snapshotassertions.mdx "SnapshotAssertions"
-[TimeoutError]: /api/class-timeouterror.mdx "TimeoutError"
-[Touchscreen]: /api/class-touchscreen.mdx "Touchscreen"
-[Tracing]: /api/class-tracing.mdx "Tracing"
-[Video]: /api/class-video.mdx "Video"
-[WebError]: /api/class-weberror.mdx "WebError"
-[WebSocket]: /api/class-websocket.mdx "WebSocket"
-[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
-[WebStorage]: /api/class-webstorage.mdx "WebStorage"
-[Worker]: /api/class-worker.mdx "Worker"
-[Electron]: /api/class-electron.mdx "Electron"
-[ElectronApplication]: /api/class-electronapplication.mdx "ElectronApplication"
-[Android]: /api/class-android.mdx "Android"
-[AndroidDevice]: /api/class-androiddevice.mdx "AndroidDevice"
-[AndroidInput]: /api/class-androidinput.mdx "AndroidInput"
-[AndroidSocket]: /api/class-androidsocket.mdx "AndroidSocket"
-[AndroidWebView]: /api/class-androidwebview.mdx "AndroidWebView"
-[Fixtures]: /api/class-fixtures.mdx "Fixtures"
-[FullConfig]: /api/class-fullconfig.mdx "FullConfig"
-[FullProject]: /api/class-fullproject.mdx "FullProject"
-[Location]: /api/class-location.mdx "Location"
-[Test]: /api/class-test.mdx "Test"
-[TestConfig]: /api/class-testconfig.mdx "TestConfig"
-[TestInfo]: /api/class-testinfo.mdx "TestInfo"
-[TestInfoError]: /api/class-testinfoerror.mdx "TestInfoError"
-[TestOptions]: /api/class-testoptions.mdx "TestOptions"
-[TestProject]: /api/class-testproject.mdx "TestProject"
-[TestStepInfo]: /api/class-teststepinfo.mdx "TestStepInfo"
-[WorkerInfo]: /api/class-workerinfo.mdx "WorkerInfo"
-[Reporter]: /api/class-reporter.mdx "Reporter"
-[Suite]: /api/class-suite.mdx "Suite"
-[TestCase]: /api/class-testcase.mdx "TestCase"
-[TestError]: /api/class-testerror.mdx "TestError"
-[TestResult]: /api/class-testresult.mdx "TestResult"
-[TestRun]: /api/class-testrun.mdx "TestRun"
-[TestStep]: /api/class-teststep.mdx "TestStep"
-[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
-[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
-[Promise]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise "Promise"
-[iterator]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols "Iterator"
-[origin]: https://developer.mozilla.org/en-US/docs/Glossary/Origin "Origin"
-[selector]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors "selector"
-[Serializable]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#Description "Serializable"
-[UIEvent.detail]: https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail "UIEvent.detail"
-[UnixTime]: https://en.wikipedia.org/wiki/Unix_time "Unix Time"
-[xpath]: https://developer.mozilla.org/en-US/docs/Web/XPath "xpath"
-
-[AbortSignal]: https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal "AbortSignal"
-[Array]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array "Array"
-[boolean]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type "Boolean"
-[Buffer]: https://nodejs.org/api/buffer.html#buffer_class_buffer "Buffer"
-[ChildProcess]: https://nodejs.org/api/child_process.html "ChildProcess"
-[Date]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date "Date"
-[Error]: https://nodejs.org/api/errors.html#errors_class_error "Error"
-[EventEmitter]: https://nodejs.org/api/events.html#events_class_eventemitter "EventEmitter"
-[function]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function "Function"
-[FormData]: https://developer.mozilla.org/en-US/docs/Web/API/FormData "FormData"
-[Map]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map "Map"
-[Metadata]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object "Object<string, any>"
-[null]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null "null"
-[number]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type "Number"
-[Object]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object "Object"
-[Promise]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise "Promise"
-[Readable]: https://nodejs.org/api/stream.html#stream_class_stream_readable "Readable"
-[ReadStream]: https://nodejs.org/api/fs.html#class-fsreadstream "ReadStream"
-[RegExp]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp "RegExp"
-[string]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type "string"
-[void]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined "void"
-[URL]: https://nodejs.org/api/url.html "URL"
-[URLPattern]: https://developer.mozilla.org/en-US/docs/Web/API/URLPattern "URLPattern"
-[URLSearchParams]: https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams "URLSearchParams"
-
-[all available image tags]: https://mcr.microsoft.com/en-us/product/playwright/about "all available image tags"
-[Microsoft Artifact Registry]: https://mcr.microsoft.com/en-us/product/playwright/about "Microsoft Artifact Registry"
-[Dockerfile.noble]: https://github.com/microsoft/playwright/blob/main/utils/docker/Dockerfile.noble "Dockerfile.noble"
diff --git a/nodejs/docs/api/class-cdpsession.mdx b/nodejs/docs/api/class-cdpsession.mdx
index 107903f218..5f114a4883 100644
--- a/nodejs/docs/api/class-cdpsession.mdx
+++ b/nodejs/docs/api/class-cdpsession.mdx
@@ -123,7 +123,6 @@ session.on('event', ({ method, params }) => {
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-clock.mdx b/nodejs/docs/api/class-clock.mdx
index 1c1f24671d..75df769d1b 100644
--- a/nodejs/docs/api/class-clock.mdx
+++ b/nodejs/docs/api/class-clock.mdx
@@ -207,7 +207,6 @@ await page.clock.setSystemTime('2020-02-02');
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-consolemessage.mdx b/nodejs/docs/api/class-consolemessage.mdx
index 1824ea05a4..eb1a0dcee3 100644
--- a/nodejs/docs/api/class-consolemessage.mdx
+++ b/nodejs/docs/api/class-consolemessage.mdx
@@ -173,7 +173,6 @@ consoleMessage.worker();
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-coverage.mdx b/nodejs/docs/api/class-coverage.mdx
index 98de18ca03..5145aa4815 100644
--- a/nodejs/docs/api/class-coverage.mdx
+++ b/nodejs/docs/api/class-coverage.mdx
@@ -196,7 +196,6 @@ await coverage.stopJSCoverage();
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-credentials.mdx b/nodejs/docs/api/class-credentials.mdx
index 70f6b39d46..8115885620 100644
--- a/nodejs/docs/api/class-credentials.mdx
+++ b/nodejs/docs/api/class-credentials.mdx
@@ -217,7 +217,6 @@ await credentials.install();
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-debugger.mdx b/nodejs/docs/api/class-debugger.mdx
index 39d3cf89e1..3d5bd7e669 100644
--- a/nodejs/docs/api/class-debugger.mdx
+++ b/nodejs/docs/api/class-debugger.mdx
@@ -152,7 +152,6 @@ debugger.on('pausedstatechanged', data => {});
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-dialog.mdx b/nodejs/docs/api/class-dialog.mdx
index 13702e04e5..98931f6a5b 100644
--- a/nodejs/docs/api/class-dialog.mdx
+++ b/nodejs/docs/api/class-dialog.mdx
@@ -150,7 +150,6 @@ dialog.type();
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-disposable.mdx b/nodejs/docs/api/class-disposable.mdx
index 7b2cab34f8..5dc11c5f69 100644
--- a/nodejs/docs/api/class-disposable.mdx
+++ b/nodejs/docs/api/class-disposable.mdx
@@ -38,7 +38,6 @@ await disposable.dispose();
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-download.mdx b/nodejs/docs/api/class-download.mdx
index a611b09a49..7c0bf5026f 100644
--- a/nodejs/docs/api/class-download.mdx
+++ b/nodejs/docs/api/class-download.mdx
@@ -200,7 +200,6 @@ download.url();
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-electron.mdx b/nodejs/docs/api/class-electron.mdx
index 57a68c75c8..1ef6fad819 100644
--- a/nodejs/docs/api/class-electron.mdx
+++ b/nodejs/docs/api/class-electron.mdx
@@ -234,7 +234,6 @@ await electron.launch(options);
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-electronapplication.mdx b/nodejs/docs/api/class-electronapplication.mdx
index 930a6c16ac..f287300060 100644
--- a/nodejs/docs/api/class-electronapplication.mdx
+++ b/nodejs/docs/api/class-electronapplication.mdx
@@ -319,7 +319,6 @@ electronApplication.on('window', data => {});
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-elementhandle.mdx b/nodejs/docs/api/class-elementhandle.mdx
index 59b0bcb1dd..92f27ac393 100644
--- a/nodejs/docs/api/class-elementhandle.mdx
+++ b/nodejs/docs/api/class-elementhandle.mdx
@@ -1675,7 +1675,6 @@ This method does not work across navigations, use [page.waitForSelector()](/api/
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-filechooser.mdx b/nodejs/docs/api/class-filechooser.mdx
index 1558de7096..00f7b30c7b 100644
--- a/nodejs/docs/api/class-filechooser.mdx
+++ b/nodejs/docs/api/class-filechooser.mdx
@@ -125,7 +125,6 @@ await fileChooser.setFiles(files, options);
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-fixtures.mdx b/nodejs/docs/api/class-fixtures.mdx
index f7e3aac3a6..85681cd365 100644
--- a/nodejs/docs/api/class-fixtures.mdx
+++ b/nodejs/docs/api/class-fixtures.mdx
@@ -203,7 +203,6 @@ test('basic test', async ({ request }) => {
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-frame.mdx b/nodejs/docs/api/class-frame.mdx
index 1cdf090e0b..468e84de80 100644
--- a/nodejs/docs/api/class-frame.mdx
+++ b/nodejs/docs/api/class-frame.mdx
@@ -359,48 +359,6 @@ await locator.click();
---
-### get {/* #frame-get */}
-
-Added in: v1.63 frame.get
-
-Binds a page-free [By] locator, returning a [Locator] scoped to this object.
-
-**Usage**
-
-Consider a page object that describes elements without a page:
-
-```js
-// todo-page.ts
-import { by } from '@playwright/test';
-
-export const newTodo = by.placeholder('What needs to be done?');
-export const todoItems = by.testId('todo-list').role('listitem');
-```
-
-```js
-import { expect, test } from '@playwright/test';
-import { newTodo, todoItems } from './todo-page';
-
-test('adds a todo', async ({ page }) => {
- await page.get(newTodo).fill('buy milk');
- await expect(page.get(todoItems)).toHaveCount(1);
-});
-```
-
-**Arguments**
-- `by` [By]#
-
- Page-free locator built with [playwright.by](/api/class-playwright.mdx#playwright-by).
-
-**Returns**
-- [Locator]#
-
-**Details**
-
-The resolved [Locator] is the same one the equivalent `getBy*` chain would produce, so `page.get(by.testId('list').text('Row'))` and `page.getByTestId('list').getByText('Row')` match the same element.
-
----
-
### getByAltText {/* #frame-get-by-alt-text */}
Added in: v1.27 frame.getByAltText
@@ -2862,7 +2820,6 @@ await frame.waitForTimeout(timeout);
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-framelocator.mdx b/nodejs/docs/api/class-framelocator.mdx
index de35efb2e8..a4d413e143 100644
--- a/nodejs/docs/api/class-framelocator.mdx
+++ b/nodejs/docs/api/class-framelocator.mdx
@@ -61,48 +61,6 @@ frameLocator.frameLocator(selector);
---
-### get {/* #frame-locator-get */}
-
-Added in: v1.63 frameLocator.get
-
-Binds a page-free [By] locator, returning a [Locator] scoped to this object.
-
-**Usage**
-
-Consider a page object that describes elements without a page:
-
-```js
-// todo-page.ts
-import { by } from '@playwright/test';
-
-export const newTodo = by.placeholder('What needs to be done?');
-export const todoItems = by.testId('todo-list').role('listitem');
-```
-
-```js
-import { expect, test } from '@playwright/test';
-import { newTodo, todoItems } from './todo-page';
-
-test('adds a todo', async ({ page }) => {
- await page.get(newTodo).fill('buy milk');
- await expect(page.get(todoItems)).toHaveCount(1);
-});
-```
-
-**Arguments**
-- `by` [By]#
-
- Page-free locator built with [playwright.by](/api/class-playwright.mdx#playwright-by).
-
-**Returns**
-- [Locator]#
-
-**Details**
-
-The resolved [Locator] is the same one the equivalent `getBy*` chain would produce, so `page.get(by.testId('list').text('Row'))` and `page.getByTestId('list').getByText('Row')` match the same element.
-
----
-
### getByAltText {/* #frame-locator-get-by-alt-text */}
Added in: v1.27 frameLocator.getByAltText
@@ -591,7 +549,6 @@ frameLocator.nth(index);
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-fullconfig.mdx b/nodejs/docs/api/class-fullconfig.mdx
index 94c5d0b1bb..3f2952d5f1 100644
--- a/nodejs/docs/api/class-fullconfig.mdx
+++ b/nodejs/docs/api/class-fullconfig.mdx
@@ -305,7 +305,7 @@ fullConfig.reporter
```
**Type**
-- [string] | [Array]<[Object]> | "list" | "dot" | "line" | "github" | "json" | "junit" | "null" | "html"
+- [string] | [Array]<[Object]> | "list" | "dot" | "line" | "github" | "json" | "junit" | "null" | "html" | "chrome-trace"
- `0` [string]
Reporter name or module or file path
@@ -464,7 +464,6 @@ fullConfig.workers
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-fullproject.mdx b/nodejs/docs/api/class-fullproject.mdx
index f6b92d5f70..7a6102cb0a 100644
--- a/nodejs/docs/api/class-fullproject.mdx
+++ b/nodejs/docs/api/class-fullproject.mdx
@@ -293,7 +293,6 @@ fullProject.use
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-genericassertions.mdx b/nodejs/docs/api/class-genericassertions.mdx
index 33b844f972..db33a4725f 100644
--- a/nodejs/docs/api/class-genericassertions.mdx
+++ b/nodejs/docs/api/class-genericassertions.mdx
@@ -841,7 +841,6 @@ expect(value).resolves
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-jshandle.mdx b/nodejs/docs/api/class-jshandle.mdx
index 910d786749..2672c8dd61 100644
--- a/nodejs/docs/api/class-jshandle.mdx
+++ b/nodejs/docs/api/class-jshandle.mdx
@@ -201,7 +201,6 @@ await jsHandle.jsonValue();
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-keyboard.mdx b/nodejs/docs/api/class-keyboard.mdx
index 8240aa34af..096234a119 100644
--- a/nodejs/docs/api/class-keyboard.mdx
+++ b/nodejs/docs/api/class-keyboard.mdx
@@ -234,7 +234,6 @@ await keyboard.up(key);
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-location.mdx b/nodejs/docs/api/class-location.mdx
index 0bf42c1a5f..2a7640391b 100644
--- a/nodejs/docs/api/class-location.mdx
+++ b/nodejs/docs/api/class-location.mdx
@@ -72,7 +72,6 @@ location.line
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-locator.mdx b/nodejs/docs/api/class-locator.mdx
index be4fdf548f..0f556a39e5 100644
--- a/nodejs/docs/api/class-locator.mdx
+++ b/nodejs/docs/api/class-locator.mdx
@@ -1161,48 +1161,6 @@ await locator.click();
---
-### get {/* #locator-get */}
-
-Added in: v1.63 locator.get
-
-Binds a page-free [By] locator, returning a [Locator] scoped to this object.
-
-**Usage**
-
-Consider a page object that describes elements without a page:
-
-```js
-// todo-page.ts
-import { by } from '@playwright/test';
-
-export const newTodo = by.placeholder('What needs to be done?');
-export const todoItems = by.testId('todo-list').role('listitem');
-```
-
-```js
-import { expect, test } from '@playwright/test';
-import { newTodo, todoItems } from './todo-page';
-
-test('adds a todo', async ({ page }) => {
- await page.get(newTodo).fill('buy milk');
- await expect(page.get(todoItems)).toHaveCount(1);
-});
-```
-
-**Arguments**
-- `by` [By]#
-
- Page-free locator built with [playwright.by](/api/class-playwright.mdx#playwright-by).
-
-**Returns**
-- [Locator]#
-
-**Details**
-
-The resolved [Locator] is the same one the equivalent `getBy*` chain would produce, so `page.get(by.testId('list').text('Row'))` and `page.getByTestId('list').getByText('Row')` match the same element.
-
----
-
### getAttribute {/* #locator-get-attribute */}
Added in: v1.14 locator.getAttribute
@@ -2957,7 +2915,6 @@ To press a special key, like `Control` or `ArrowDown`, use [locator.press()](/ap
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-locatorassertions.mdx b/nodejs/docs/api/class-locatorassertions.mdx
index 64971e2892..8b421e744d 100644
--- a/nodejs/docs/api/class-locatorassertions.mdx
+++ b/nodejs/docs/api/class-locatorassertions.mdx
@@ -1194,7 +1194,6 @@ await expect(locator).not.toContainText('error');
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-logger.mdx b/nodejs/docs/api/class-logger.mdx
index d13958f284..f1f6307def 100644
--- a/nodejs/docs/api/class-logger.mdx
+++ b/nodejs/docs/api/class-logger.mdx
@@ -93,7 +93,6 @@ logger.log(name, severity, message, args, hints);
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-mouse.mdx b/nodejs/docs/api/class-mouse.mdx
index 9079a980f8..8fbbe6d65c 100644
--- a/nodejs/docs/api/class-mouse.mdx
+++ b/nodejs/docs/api/class-mouse.mdx
@@ -222,7 +222,6 @@ await mouse.wheel(deltaX, deltaY);
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-page.mdx b/nodejs/docs/api/class-page.mdx
index 50c6afd7d5..e22ec51f59 100644
--- a/nodejs/docs/api/class-page.mdx
+++ b/nodejs/docs/api/class-page.mdx
@@ -914,48 +914,6 @@ page.frames();
---
-### get {/* #page-get */}
-
-Added in: v1.63 page.get
-
-Binds a page-free [By] locator, returning a [Locator] scoped to this object.
-
-**Usage**
-
-Consider a page object that describes elements without a page:
-
-```js
-// todo-page.ts
-import { by } from '@playwright/test';
-
-export const newTodo = by.placeholder('What needs to be done?');
-export const todoItems = by.testId('todo-list').role('listitem');
-```
-
-```js
-import { expect, test } from '@playwright/test';
-import { newTodo, todoItems } from './todo-page';
-
-test('adds a todo', async ({ page }) => {
- await page.get(newTodo).fill('buy milk');
- await expect(page.get(todoItems)).toHaveCount(1);
-});
-```
-
-**Arguments**
-- `by` [By]#
-
- Page-free locator built with [playwright.by](/api/class-playwright.mdx#playwright-by).
-
-**Returns**
-- [Locator]#
-
-**Details**
-
-The resolved [Locator] is the same one the equivalent `getBy*` chain would produce, so `page.get(by.testId('list').text('Row'))` and `page.getByTestId('list').getByText('Row')` match the same element.
-
----
-
### getByAltText {/* #page-get-by-alt-text */}
Added in: v1.27 page.getByAltText
@@ -4987,7 +4945,6 @@ await page.waitForTimeout(1000);
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-pageassertions.mdx b/nodejs/docs/api/class-pageassertions.mdx
index 36f368202f..06e771dbbc 100644
--- a/nodejs/docs/api/class-pageassertions.mdx
+++ b/nodejs/docs/api/class-pageassertions.mdx
@@ -362,7 +362,6 @@ await expect(page).not.toHaveURL('error');
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-playwright.mdx b/nodejs/docs/api/class-playwright.mdx
index 8064ebf715..14ec4a5c2a 100644
--- a/nodejs/docs/api/class-playwright.mdx
+++ b/nodejs/docs/api/class-playwright.mdx
@@ -26,33 +26,6 @@ const { chromium, firefox, webkit } = require('playwright');
## Properties
-### by {/* #playwright-by */}
-
-Added in: v1.63 playwright.by
-
-Builds page-free locators that are resolved with [page.get()](/api/class-page.mdx#page-get), [frame.get()](/api/class-frame.mdx#frame-get) or [locator.get()](/api/class-locator.mdx#locator-get). See [By] for details.
-
-```js
-import { by, test } from '@playwright/test';
-
-const saveButton = by.role('button', { name: 'Save' });
-
-test('saves', async ({ page }) => {
- await page.get(saveButton).click();
-});
-```
-
-**Usage**
-
-```js
-playwright.by
-```
-
-**Type**
-- [By]
-
----
-
### chromium {/* #playwright-chromium */}
Added before v1.9 playwright.chromium
@@ -212,7 +185,6 @@ playwright.webkit
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-playwrightassertions.mdx b/nodejs/docs/api/class-playwrightassertions.mdx
index 92b47d3c9e..17d0a6ba03 100644
--- a/nodejs/docs/api/class-playwrightassertions.mdx
+++ b/nodejs/docs/api/class-playwrightassertions.mdx
@@ -113,7 +113,6 @@ Creates a [PageAssertions] object for the given [Page].
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-reporter.mdx b/nodejs/docs/api/class-reporter.mdx
index a7b2d4a051..be89415a94 100644
--- a/nodejs/docs/api/class-reporter.mdx
+++ b/nodejs/docs/api/class-reporter.mdx
@@ -421,7 +421,6 @@ reporter.printsToStdio();
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-request.mdx b/nodejs/docs/api/class-request.mdx
index 21c9bd06c7..48727e8e53 100644
--- a/nodejs/docs/api/class-request.mdx
+++ b/nodejs/docs/api/class-request.mdx
@@ -476,7 +476,6 @@ request.url();
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-response.mdx b/nodejs/docs/api/class-response.mdx
index 725d76fad8..60e000af72 100644
--- a/nodejs/docs/api/class-response.mdx
+++ b/nodejs/docs/api/class-response.mdx
@@ -382,7 +382,6 @@ response.url();
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-route.mdx b/nodejs/docs/api/class-route.mdx
index 0f1119daac..be2c8d04b6 100644
--- a/nodejs/docs/api/class-route.mdx
+++ b/nodejs/docs/api/class-route.mdx
@@ -323,7 +323,6 @@ route.request();
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-screencast.mdx b/nodejs/docs/api/class-screencast.mdx
index 794503dc76..18bf822da3 100644
--- a/nodejs/docs/api/class-screencast.mdx
+++ b/nodejs/docs/api/class-screencast.mdx
@@ -213,9 +213,7 @@ await page.screencast.stop();
Max frame height in pixels.
- Specifies the dimensions of screencast frames. The actual frame is scaled to preserve the page's aspect ratio and may be smaller than these bounds. If not specified the size will be equal to page viewport scaled down to fit into 800×800.
-
- A page is captured only once, and all consumers share that single capture. Tracing captures screenshots this way as well, so with tracing or the `recordVideo` context option already active this option is ignored, and both the frames and any recorded video use the size of the running capture.
+ Specifies the dimensions of screencast frames. The actual frame is scaled to preserve the page's aspect ratio and may be smaller than these bounds. If a screencast is already active (e.g. started by tracing or video recording), the existing configuration takes precedence and the frame size may exceed these bounds or this option may be ignored. If not specified the size will be equal to page viewport scaled down to fit into 800×800.
**Returns**
- [Promise]<[Disposable]>#
@@ -246,7 +244,6 @@ await screencast.stop();
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-selectors.mdx b/nodejs/docs/api/class-selectors.mdx
index af99b8a841..3e68deb234 100644
--- a/nodejs/docs/api/class-selectors.mdx
+++ b/nodejs/docs/api/class-selectors.mdx
@@ -108,7 +108,6 @@ selectors.setTestIdAttribute(attributeName);
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-snapshotassertions.mdx b/nodejs/docs/api/class-snapshotassertions.mdx
index 3b899d4d22..17ca9b5138 100644
--- a/nodejs/docs/api/class-snapshotassertions.mdx
+++ b/nodejs/docs/api/class-snapshotassertions.mdx
@@ -126,7 +126,6 @@ Note that matching snapshots only work with Playwright test runner.
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-suite.mdx b/nodejs/docs/api/class-suite.mdx
index f35e02fd5b..8981288f95 100644
--- a/nodejs/docs/api/class-suite.mdx
+++ b/nodejs/docs/api/class-suite.mdx
@@ -212,7 +212,6 @@ suite.type
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-test.mdx b/nodejs/docs/api/class-test.mdx
index 7cc5dd5edf..4abfcc21b8 100644
--- a/nodejs/docs/api/class-test.mdx
+++ b/nodejs/docs/api/class-test.mdx
@@ -1456,6 +1456,9 @@ test('test', async ({ page }) => {
- `location` [Location] *(optional)* Added in: v1.48 #
Specifies a custom location for the step to be shown in test reports and trace viewer. By default, location of the [test.step()](/api/class-test.mdx#test-step) call is shown.
+ - `params` [Object]<[string], [Object]> *(optional)* Added in: v1.63 #
+
+ Arbitrary serializable parameters describing the step. They are reported to the reporters as `testStep.params` and are shown in the trace viewer.
- `timeout` [number] *(optional)* Added in: v1.50 #
The maximum time, in milliseconds, allowed for the step to complete. If the step does not complete within the specified timeout, the [test.step()](/api/class-test.mdx#test-step) method will throw a [TimeoutError]. Defaults to `0` (no timeout).
@@ -1629,6 +1632,9 @@ test('my test', async ({ page }) => {
- `location` [Location] *(optional)*#
Specifies a custom location for the step to be shown in test reports and trace viewer. By default, location of the [test.step()](/api/class-test.mdx#test-step) call is shown.
+ - `params` [Object]<[string], [Object]> *(optional)* Added in: v1.63 #
+
+ Arbitrary serializable parameters describing the step. They are reported to the reporters as `testStep.params` and are shown in the trace viewer.
- `timeout` [number] *(optional)*#
Maximum time in milliseconds for the step to finish. Defaults to `0` (no timeout).
@@ -1955,7 +1961,6 @@ test.describe.serial.only(() => {
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-testcase.mdx b/nodejs/docs/api/class-testcase.mdx
index b5e2ce234f..a900656918 100644
--- a/nodejs/docs/api/class-testcase.mdx
+++ b/nodejs/docs/api/class-testcase.mdx
@@ -298,7 +298,6 @@ testCase.type
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-testconfig.mdx b/nodejs/docs/api/class-testconfig.mdx
index d64b21467b..f31dcab669 100644
--- a/nodejs/docs/api/class-testconfig.mdx
+++ b/nodejs/docs/api/class-testconfig.mdx
@@ -626,7 +626,7 @@ export default defineConfig({
```
**Type**
-- [string] | [Array]<[Object]> | "list" | "dot" | "line" | "github" | "json" | "junit" | "null" | "html"
+- [string] | [Array]<[Object]> | "list" | "dot" | "line" | "github" | "json" | "junit" | "null" | "html" | "chrome-trace"
- `0` [string]
Reporter name or module or file path
@@ -1262,7 +1262,6 @@ This path will serve as the base directory for each test file snapshot directory
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-testerror.mdx b/nodejs/docs/api/class-testerror.mdx
index 47fb5c0110..5e72b0c7cc 100644
--- a/nodejs/docs/api/class-testerror.mdx
+++ b/nodejs/docs/api/class-testerror.mdx
@@ -123,7 +123,6 @@ testError.value
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-testinfo.mdx b/nodejs/docs/api/class-testinfo.mdx
index 2afb6612ed..11687c709e 100644
--- a/nodejs/docs/api/class-testinfo.mdx
+++ b/nodejs/docs/api/class-testinfo.mdx
@@ -869,7 +869,6 @@ testInfo.workerIndex
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-testinfoerror.mdx b/nodejs/docs/api/class-testinfoerror.mdx
index 6c98027c86..ac38eb7783 100644
--- a/nodejs/docs/api/class-testinfoerror.mdx
+++ b/nodejs/docs/api/class-testinfoerror.mdx
@@ -106,7 +106,6 @@ testInfoError.value
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-testoptions.mdx b/nodejs/docs/api/class-testoptions.mdx
index 6deb3e46ef..27bc294c5c 100644
--- a/nodejs/docs/api/class-testoptions.mdx
+++ b/nodejs/docs/api/class-testoptions.mdx
@@ -1081,21 +1081,6 @@ Learn more about [recording trace](../test-use-options.mdx#recording-options).
- `attachments` [boolean] *(optional)*
Whether to include test attachments. Defaults to true. Optional.
- - `screencast` [boolean] | [Object] *(optional)*
- - `size` [Object] *(optional)*
- - `width` [number]
-
- Max screenshot width in pixels.
- - `height` [number]
-
- Max screenshot height in pixels.
-
- Dimensions of the captured screenshots. Each screenshot is scaled down to preserve the page's aspect ratio and may be smaller than these bounds. If not specified the size will be equal to `viewport` scaled down to fit into 800x800. Optional.
- - `quality` [number] *(optional)*
-
- The quality of the screenshots, between 0-100. Defaults to 90. Optional.
-
- Whether to capture screenshots during tracing. Screenshots are used to build a timeline preview. Passing `true` is a shortcut for `{}`. Takes precedence over `screenshots`. Optional.
- `screenshots` [boolean] *(optional)*
Whether to capture screenshots during tracing. Screenshots are used to build a timeline preview. Defaults to true. Optional.
@@ -1309,7 +1294,6 @@ export default defineConfig({
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-testproject.mdx b/nodejs/docs/api/class-testproject.mdx
index 510b867648..8ab4446e6d 100644
--- a/nodejs/docs/api/class-testproject.mdx
+++ b/nodejs/docs/api/class-testproject.mdx
@@ -781,7 +781,6 @@ export default defineConfig({
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-testresult.mdx b/nodejs/docs/api/class-testresult.mdx
index cb7e303835..8cbc06d91d 100644
--- a/nodejs/docs/api/class-testresult.mdx
+++ b/nodejs/docs/api/class-testresult.mdx
@@ -274,7 +274,6 @@ testResult.workerIndex
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-testrun.mdx b/nodejs/docs/api/class-testrun.mdx
index fd5d8a3fd9..9883fde35e 100644
--- a/nodejs/docs/api/class-testrun.mdx
+++ b/nodejs/docs/api/class-testrun.mdx
@@ -123,7 +123,6 @@ testRun.skipSharding();
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-teststep.mdx b/nodejs/docs/api/class-teststep.mdx
index 0aecb7046f..3155399f40 100644
--- a/nodejs/docs/api/class-teststep.mdx
+++ b/nodejs/docs/api/class-teststep.mdx
@@ -162,6 +162,41 @@ testStep.location
---
+### params {/* #test-step-params */}
+
+Added in: v1.63 testStep.params
+
+Step-dependent parameters, when available. For example, steps produced by the Playwright API calls contain the target `locator` and the call arguments such as `url`, while [test.step()](/api/class-test.mdx#test-step) steps contain the parameters passed by the test author.
+
+```js
+// { locator: 'getByRole(\'button\')' }
+await page.getByRole('button').click();
+
+// { url: 'https://example.com' }
+await page.goto('https://example.com');
+
+// { locator: 'getByLabel(\'Password\')', value: 'secret' }
+await page.getByLabel('Password').fill('secret');
+
+// { orderId: 42 }
+await test.step('checkout', async () => {
+ // ...
+}, { params: { orderId: 42 } });
+```
+
+To keep the reports small, Playwright API calls only report a curated set of arguments per call, and long string values are truncated. Unbounded arguments such as the page content, evaluated expressions or request bodies are never reported.
+
+**Usage**
+
+```js
+testStep.params
+```
+
+**Type**
+- [Object]<[string], [Object]>
+
+---
+
### parent {/* #test-step-parent */}
Added in: v1.10 testStep.parent
@@ -237,7 +272,6 @@ testStep.title
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-teststepinfo.mdx b/nodejs/docs/api/class-teststepinfo.mdx
index edb8dc05b6..5fd3377b53 100644
--- a/nodejs/docs/api/class-teststepinfo.mdx
+++ b/nodejs/docs/api/class-teststepinfo.mdx
@@ -168,7 +168,6 @@ testStepInfo.titlePath
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-timeouterror.mdx b/nodejs/docs/api/class-timeouterror.mdx
index d747ab4da5..56f947c6aa 100644
--- a/nodejs/docs/api/class-timeouterror.mdx
+++ b/nodejs/docs/api/class-timeouterror.mdx
@@ -39,7 +39,6 @@ const playwright = require('playwright');
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-touchscreen.mdx b/nodejs/docs/api/class-touchscreen.mdx
index 7bb208056c..fd94d4b592 100644
--- a/nodejs/docs/api/class-touchscreen.mdx
+++ b/nodejs/docs/api/class-touchscreen.mdx
@@ -53,7 +53,6 @@ await touchscreen.tap(x, y);
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-tracing.mdx b/nodejs/docs/api/class-tracing.mdx
index 6e1b45beb7..0e8b503404 100644
--- a/nodejs/docs/api/class-tracing.mdx
+++ b/nodejs/docs/api/class-tracing.mdx
@@ -123,23 +123,6 @@ await context.tracing.stop({ path: 'trace.zip' });
- `name` [string] *(optional)*#
If specified, intermediate trace files are going to be saved into the files with the given name prefix inside the [tracesDir](/api/class-browsertype.mdx#browser-type-launch-option-traces-dir) directory specified in [browserType.launch()](/api/class-browsertype.mdx#browser-type-launch). To specify the final trace zip file name, you need to pass `path` option to [tracing.stop()](/api/class-tracing.mdx#tracing-stop) instead.
- - `screencast` [boolean] | [Object] *(optional)* Added in: v1.63 #
- - `size` [Object] *(optional)*
- - `width` [number]
-
- Max screenshot width in pixels.
- - `height` [number]
-
- Max screenshot height in pixels.
-
- Dimensions of the captured screenshots. Each screenshot is scaled down to preserve the page's aspect ratio and may be smaller than these bounds. If not specified the size will be equal to `viewport` scaled down to fit into 800x800. Optional.
- - `quality` [number] *(optional)*
-
- The quality of the screenshots, between 0-100. Defaults to 90. Optional.
-
- Whether to capture screenshots during tracing. Screenshots are used to build a timeline preview. Passing `true` is a shortcut for `{}`. Takes precedence over [screenshots](/api/class-tracing.mdx#tracing-start-option-screenshots).
-
- A page is captured only once, and tracing shares that capture with [screencast.start()](/api/class-screencast.mdx#screencast-start) and video recording. The trace viewer renders the timeline preview at a fixed size, so these settings only matter to those other consumers: raise them to keep tracing from capping what the others receive.
- `screenshots` [boolean] *(optional)*#
Whether to capture screenshots during tracing. Screenshots are used to build a timeline preview.
@@ -317,7 +300,6 @@ await tracing.stopHar();
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-video.mdx b/nodejs/docs/api/class-video.mdx
index 7ef8320abb..8185fdce02 100644
--- a/nodejs/docs/api/class-video.mdx
+++ b/nodejs/docs/api/class-video.mdx
@@ -81,7 +81,6 @@ await video.saveAs(path);
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-weberror.mdx b/nodejs/docs/api/class-weberror.mdx
index be34468e39..f789888afa 100644
--- a/nodejs/docs/api/class-weberror.mdx
+++ b/nodejs/docs/api/class-weberror.mdx
@@ -89,7 +89,6 @@ webError.page();
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-websocket.mdx b/nodejs/docs/api/class-websocket.mdx
index 784268b8b2..a100e24f4f 100644
--- a/nodejs/docs/api/class-websocket.mdx
+++ b/nodejs/docs/api/class-websocket.mdx
@@ -172,7 +172,6 @@ webSocket.on('socketerror', data => {});
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-websocketroute.mdx b/nodejs/docs/api/class-websocketroute.mdx
index 01ae351bea..b7608fb030 100644
--- a/nodejs/docs/api/class-websocketroute.mdx
+++ b/nodejs/docs/api/class-websocketroute.mdx
@@ -244,7 +244,6 @@ webSocketRoute.url();
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-webstorage.mdx b/nodejs/docs/api/class-webstorage.mdx
index 244b273730..52c857ceff 100644
--- a/nodejs/docs/api/class-webstorage.mdx
+++ b/nodejs/docs/api/class-webstorage.mdx
@@ -140,7 +140,6 @@ await webStorage.setItem(name, value);
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-worker.mdx b/nodejs/docs/api/class-worker.mdx
index af856a5a26..63c5771235 100644
--- a/nodejs/docs/api/class-worker.mdx
+++ b/nodejs/docs/api/class-worker.mdx
@@ -184,7 +184,6 @@ worker.on('console', data => {});
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/api/class-workerinfo.mdx b/nodejs/docs/api/class-workerinfo.mdx
index 24681554db..5dcd2b86b1 100644
--- a/nodejs/docs/api/class-workerinfo.mdx
+++ b/nodejs/docs/api/class-workerinfo.mdx
@@ -93,7 +93,6 @@ workerInfo.workerIndex
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/aria-snapshots.mdx b/nodejs/docs/aria-snapshots.mdx
index 26050aa611..1e0031abff 100644
--- a/nodejs/docs/aria-snapshots.mdx
+++ b/nodejs/docs/aria-snapshots.mdx
@@ -466,7 +466,6 @@ The `aria-invalid` value is surfaced directly. A value of `true` renders as `[in
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/auth.mdx b/nodejs/docs/auth.mdx
index d500130184..f520bfbfa7 100644
--- a/nodejs/docs/auth.mdx
+++ b/nodejs/docs/auth.mdx
@@ -535,7 +535,6 @@ test('not signed in test', async ({ page }) => {
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/best-practices.mdx b/nodejs/docs/best-practices.mdx
index f6f68efb82..253dad0ea1 100644
--- a/nodejs/docs/best-practices.mdx
+++ b/nodejs/docs/best-practices.mdx
@@ -519,7 +519,6 @@ await page.getByRole('link', { name: 'next page' }).click();
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/browser-contexts.mdx b/nodejs/docs/browser-contexts.mdx
index bd9b3df90a..36f256da86 100644
--- a/nodejs/docs/browser-contexts.mdx
+++ b/nodejs/docs/browser-contexts.mdx
@@ -123,7 +123,6 @@ const userPage = await userContext.newPage();
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/browsers.mdx b/nodejs/docs/browsers.mdx
index 3e66ecf435..7227e10d7c 100644
--- a/nodejs/docs/browsers.mdx
+++ b/nodejs/docs/browsers.mdx
@@ -651,7 +651,6 @@ npx playwright uninstall --all
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/canary-releases.mdx b/nodejs/docs/canary-releases.mdx
index 2856f38bb6..a2f3cb8935 100644
--- a/nodejs/docs/canary-releases.mdx
+++ b/nodejs/docs/canary-releases.mdx
@@ -49,7 +49,6 @@ The stable and the `next` documentation is published on [playwright.dev](https:/
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/chrome-extensions.mdx b/nodejs/docs/chrome-extensions.mdx
index 9e3faa1162..c0ec1544f8 100644
--- a/nodejs/docs/chrome-extensions.mdx
+++ b/nodejs/docs/chrome-extensions.mdx
@@ -124,7 +124,6 @@ test('popup page', async ({ page, extensionId }) => {
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/ci-intro.mdx b/nodejs/docs/ci-intro.mdx
index 2482a02b53..50af460031 100644
--- a/nodejs/docs/ci-intro.mdx
+++ b/nodejs/docs/ci-intro.mdx
@@ -172,7 +172,6 @@ Artifacts like trace files, HTML reports or even the console logs contain inform
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/ci.mdx b/nodejs/docs/ci.mdx
index 91054572d5..f92ae110cf 100644
--- a/nodejs/docs/ci.mdx
+++ b/nodejs/docs/ci.mdx
@@ -514,7 +514,6 @@ xvfb-run npx playwright test
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/clock.mdx b/nodejs/docs/clock.mdx
index 19d671c76f..c7c43a4f9d 100644
--- a/nodejs/docs/clock.mdx
+++ b/nodejs/docs/clock.mdx
@@ -185,7 +185,6 @@ await expect(page.getByTestId('current-time')).toHaveText('2/2/2024, 10:00:02 AM
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/codegen-intro.mdx b/nodejs/docs/codegen-intro.mdx
index c0652089f3..8b4619ac75 100644
--- a/nodejs/docs/codegen-intro.mdx
+++ b/nodejs/docs/codegen-intro.mdx
@@ -71,7 +71,6 @@ You can generate tests using emulation for specific viewports, devices, color sc
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/codegen.mdx b/nodejs/docs/codegen.mdx
index 514be05329..d92f53a690 100644
--- a/nodejs/docs/codegen.mdx
+++ b/nodejs/docs/codegen.mdx
@@ -197,6 +197,14 @@ Run `codegen` with `--user-data-dir` to set a fixed [user data directory](https:
npx playwright codegen --user-data-dir=/path/to/your/browser/data/ github.com/microsoft/playwright
```
+#### Authenticate with HTTP credentials
+
+Run `codegen` with `--http-credentials` to authenticate with [HTTP Basic Authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Authentication). Unlike credentials embedded in the URL, they are sent to any origin that requests them during the recording session and are included in the generated code.
+
+```bash
+npx playwright codegen --http-credentials="username:password" example.com
+```
+
## Record using custom setup
If you would like to use codegen in some non-standard setup (for example, use [browserContext.route()](/api/class-browsercontext.mdx#browser-context-route)), it is possible to call [page.pause()](/api/class-page.mdx#page-pause) that will open a separate window with codegen controls.
@@ -227,7 +235,6 @@ const { chromium } = require('@playwright/test');
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/debug.mdx b/nodejs/docs/debug.mdx
index 9833ebca8d..2f35bf301e 100644
--- a/nodejs/docs/debug.mdx
+++ b/nodejs/docs/debug.mdx
@@ -324,7 +324,6 @@ await chromium.launch({ headless: false, slowMo: 100 });
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/dialogs.mdx b/nodejs/docs/dialogs.mdx
index 8b068650f8..72e283dce8 100644
--- a/nodejs/docs/dialogs.mdx
+++ b/nodejs/docs/dialogs.mdx
@@ -77,7 +77,6 @@ This will wait for the print dialog to be opened after the button is clicked. Ma
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/docker.mdx b/nodejs/docs/docker.mdx
index d6d91e9dc3..41a297a37a 100644
--- a/nodejs/docs/docker.mdx
+++ b/nodejs/docs/docker.mdx
@@ -178,7 +178,6 @@ RUN npx -y playwright@1.62.1 install --with-deps
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/downloads.mdx b/nodejs/docs/downloads.mdx
index 29b2391f35..81a81ea33e 100644
--- a/nodejs/docs/downloads.mdx
+++ b/nodejs/docs/downloads.mdx
@@ -53,7 +53,6 @@ For uploading files, see the [uploading files](./input.mdx#upload-files) section
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/emulation.mdx b/nodejs/docs/emulation.mdx
index b74ff8bd95..55a13b655c 100644
--- a/nodejs/docs/emulation.mdx
+++ b/nodejs/docs/emulation.mdx
@@ -614,7 +614,6 @@ const context = await browser.newContext({
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/evaluating.mdx b/nodejs/docs/evaluating.mdx
index 108d807649..26192ead36 100644
--- a/nodejs/docs/evaluating.mdx
+++ b/nodejs/docs/evaluating.mdx
@@ -146,7 +146,6 @@ test.beforeEach(async ({ page }) => {
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/events.mdx b/nodejs/docs/events.mdx
index 04b824f1b7..6189696399 100644
--- a/nodejs/docs/events.mdx
+++ b/nodejs/docs/events.mdx
@@ -66,7 +66,6 @@ await page.evaluate("prompt('Enter a number:')");
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/extensibility.mdx b/nodejs/docs/extensibility.mdx
index 74b1f7f433..584b244e70 100644
--- a/nodejs/docs/extensibility.mdx
+++ b/nodejs/docs/extensibility.mdx
@@ -73,7 +73,6 @@ test('selector engine test', async ({ page }) => {
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/frames.mdx b/nodejs/docs/frames.mdx
index 6ccd4086ad..833372628b 100644
--- a/nodejs/docs/frames.mdx
+++ b/nodejs/docs/frames.mdx
@@ -42,7 +42,6 @@ await frame.fill('#username-input', 'John');
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/getting-started-cli.mdx b/nodejs/docs/getting-started-cli.mdx
index ee45ffcccf..d3b2b3752b 100644
--- a/nodejs/docs/getting-started-cli.mdx
+++ b/nodejs/docs/getting-started-cli.mdx
@@ -17,30 +17,25 @@ Playwright comes with `playwright-cli`, a command-line interface for browser aut
## Prerequisites
Before you begin, make sure you have the following installed:
-- Playwright for your language, **or** [Node.js](https://nodejs.org/) 20+ for the standalone `@playwright/cli` package
+- [Node.js](https://nodejs.org/) 20 or newer
- A coding agent: Claude Code, GitHub Copilot, or similar
## Installation
-Install the standalone CLI globally (works with any language):
+Install `playwright-cli` globally:
```bash
npm install -g @playwright/cli@latest
playwright-cli --help
```
-Or use the CLI bundled with your Playwright install:
+Alternatively, install `@playwright/cli` as a local dependency and use `npx`:
```bash
-# JavaScript / TypeScript
-npx playwright cli --help
-
-# Python
-python -m playwright cli --help
+npm install -D @playwright/cli@latest
+npx playwright-cli --help
```
-When using a bundled entry point, replace `playwright-cli` with `npx playwright cli` or `python -m playwright cli` in the commands below.
-
### Installing skills
Coding agents like Claude Code and GitHub Copilot can use locally installed skills for richer context about available commands:
@@ -300,29 +295,11 @@ playwright-cli attach --extension
This requires the [Playwright Extension](https://github.com/microsoft/playwright/blob/main/packages/extension/README.md) to be installed.
-## Debugging tests
-
-Coding agents can pause a test at the start, attach with `playwright-cli`, and explore the live browser — useful for diagnosing and fixing failures.
-
-```bash
-# JavaScript / TypeScript
-PLAYWRIGHT_HTML_OPEN=never npx playwright test --debug=cli
-# → Debugging Instructions with session name, e.g. tw-abcdef
-playwright-cli attach tw-abcdef
-
-# Python (pytest-playwright; -s keeps the attach line visible)
-pytest --playwright-debug=cli -s
-playwright-cli attach tw-abcdef
-```
-
-Keep the test running in the background while you attach. The installed skill documents this workflow for agents.
-
## Quick Reference
| Action | Command |
| ------------------------- | --------------------------------------------------- |
| **Install CLI** | `npm install -g @playwright/cli@latest` |
-| **Use bundled CLI** | `npx playwright cli …` / `python -m playwright cli …` |
| **Install skills** | `playwright-cli install --skills` |
| **Open a page** | `playwright-cli open https://example.com` |
| **Click an element** | `playwright-cli click e15` |
@@ -332,8 +309,6 @@ Keep the test running in the background while you attach. The installed skill do
| **Run headed** | `playwright-cli open https://example.com --headed` |
| **Use Firefox** | `playwright-cli open --browser=firefox` |
| **Monitor sessions** | `playwright-cli show` |
-| **Debug JS test** | `npx playwright test --debug=cli` |
-| **Debug Python test** | `pytest --playwright-debug=cli -s` |
## What's Next
- [Write tests using web-first assertions, page fixtures, and locators](./writing-tests.mdx)
@@ -349,7 +324,6 @@ Keep the test running in the background while you attach. The installed skill do
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/getting-started-mcp.mdx b/nodejs/docs/getting-started-mcp.mdx
index c81c7d9ee8..905294dd39 100644
--- a/nodejs/docs/getting-started-mcp.mdx
+++ b/nodejs/docs/getting-started-mcp.mdx
@@ -236,7 +236,6 @@ Then point your MCP client to the HTTP endpoint:
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/getting-started-vscode.mdx b/nodejs/docs/getting-started-vscode.mdx
index 50f6b9f74d..fb9c662b2e 100644
--- a/nodejs/docs/getting-started-vscode.mdx
+++ b/nodejs/docs/getting-started-vscode.mdx
@@ -152,7 +152,6 @@ If you have multiple `playwright.config.ts` files, you can switch between them u
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/handles.mdx b/nodejs/docs/handles.mdx
index 04a7f42a7d..ac4df98e24 100644
--- a/nodejs/docs/handles.mdx
+++ b/nodejs/docs/handles.mdx
@@ -126,7 +126,6 @@ await locator.click();
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/input.mdx b/nodejs/docs/input.mdx
index c600095ae6..3fc9741c48 100644
--- a/nodejs/docs/input.mdx
+++ b/nodejs/docs/input.mdx
@@ -273,7 +273,6 @@ await page.getByTestId('scrolling-container').evaluate(e => e.scrollTop += 100);
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/intro.mdx b/nodejs/docs/intro.mdx
index 2f8b0c722c..dfa3d2d4b4 100644
--- a/nodejs/docs/intro.mdx
+++ b/nodejs/docs/intro.mdx
@@ -278,7 +278,6 @@ pnpm exec playwright --version
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/languages.mdx b/nodejs/docs/languages.mdx
index 9ac8741ba5..6fa454e482 100644
--- a/nodejs/docs/languages.mdx
+++ b/nodejs/docs/languages.mdx
@@ -43,7 +43,6 @@ Playwright for .NET comes with MSTest, NUnit, xUnit, and xUnit v3 [base classes]
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/library.mdx b/nodejs/docs/library.mdx
index f8714745cb..b45dd8c709 100644
--- a/nodejs/docs/library.mdx
+++ b/nodejs/docs/library.mdx
@@ -430,7 +430,6 @@ let page: import('playwright').Page;
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/locators.mdx b/nodejs/docs/locators.mdx
index 9be087704e..edcd5bae5b 100644
--- a/nodejs/docs/locators.mdx
+++ b/nodejs/docs/locators.mdx
@@ -911,39 +911,6 @@ await page.getByRole('button').count();
You can explicitly opt-out from strictness check by telling Playwright which element to use when multiple elements match, through [locator.first()](/api/class-locator.mdx#locator-first), [locator.last()](/api/class-locator.mdx#locator-last), and [locator.nth()](/api/class-locator.mdx#locator-nth). These methods are **not recommended** because when your page changes, Playwright may click on an element you did not intend. Instead, follow best practices above to create a locator that uniquely identifies the target element.
-## Page-free locators
-
-A [Locator] is bound to a page, so it can only be created once a page exists. [By] describes the same element without a page, which means it can be defined once at module scope and shared between tests. Build one with the top-level `by` object and bind it with [page.get()](/api/class-page.mdx#page-get), [frame.get()](/api/class-frame.mdx#frame-get) or [locator.get()](/api/class-locator.mdx#locator-get).
-
-```js
-// todo-page.ts
-import { by } from '@playwright/test';
-
-export const newTodo = by.placeholder('What needs to be done?');
-export const todoItems = by.testId('todo-list').role('listitem');
-```
-
-```js
-import { expect, test } from '@playwright/test';
-import { newTodo, todoItems } from './todo-page';
-
-test('adds a todo', async ({ page }) => {
- await page.get(newTodo).fill('buy milk');
- await page.get(newTodo).press('Enter');
- await expect(page.get(todoItems)).toHaveCount(1);
-});
-```
-
-A [By] supports the same chaining, filtering and operators as a [Locator], and resolves to exactly the same element, so `page.get(by.testId('list').text('Row'))` and `page.getByTestId('list').getByText('Row')` are interchangeable. Since a [By] is immutable, scoping one never changes the original:
-
-```js
-const list = by.testId('todo-list');
-const first = list.role('listitem').first();
-const active = list.filter({ has: by.get('.active') });
-```
-
-Test ids are resolved when the [By] is bound to a page, so a module-scope [By] still honours the `testIdAttribute` option from the config.
-
## More Locators
For less commonly used locators, look at the [other locators](./other-locators.mdx) guide.
@@ -957,7 +924,6 @@ For less commonly used locators, look at the [other locators](./other-locators.m
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/mock-browser.mdx b/nodejs/docs/mock-browser.mdx
index 88f5154726..fa799f5a11 100644
--- a/nodejs/docs/mock-browser.mdx
+++ b/nodejs/docs/mock-browser.mdx
@@ -173,7 +173,6 @@ test('update battery status (no golden)', async ({ page }) => {
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/mock.mdx b/nodejs/docs/mock.mdx
index f4b9abeef4..841dc6a438 100644
--- a/nodejs/docs/mock.mdx
+++ b/nodejs/docs/mock.mdx
@@ -186,7 +186,6 @@ For more details, see [WebSocketRoute].
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/navigations.mdx b/nodejs/docs/navigations.mdx
index 455603bae7..99d58c60fe 100644
--- a/nodejs/docs/navigations.mdx
+++ b/nodejs/docs/navigations.mdx
@@ -95,7 +95,6 @@ Playwright splits the process of showing a new document in a page into **navigat
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/network.mdx b/nodejs/docs/network.mdx
index f4e625e3bd..8f43e6da27 100644
--- a/nodejs/docs/network.mdx
+++ b/nodejs/docs/network.mdx
@@ -350,7 +350,6 @@ If you're interested in not solely using Service Workers for testing and network
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/other-locators.mdx b/nodejs/docs/other-locators.mdx
index 1b233d6344..73debe85bb 100644
--- a/nodejs/docs/other-locators.mdx
+++ b/nodejs/docs/other-locators.mdx
@@ -413,7 +413,6 @@ For example, `css=article >> text=Hello` captures the element with the text `Hel
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/pages.mdx b/nodejs/docs/pages.mdx
index 1def465281..23cd80da3e 100644
--- a/nodejs/docs/pages.mdx
+++ b/nodejs/docs/pages.mdx
@@ -99,7 +99,6 @@ page.on('popup', async popup => {
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/pom.mdx b/nodejs/docs/pom.mdx
index c5a42742f4..c710190404 100644
--- a/nodejs/docs/pom.mdx
+++ b/nodejs/docs/pom.mdx
@@ -175,7 +175,6 @@ await expect(playwrightDev.tocList).toHaveText([
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/protractor.mdx b/nodejs/docs/protractor.mdx
index b3fab1aca2..4efe66970e 100644
--- a/nodejs/docs/protractor.mdx
+++ b/nodejs/docs/protractor.mdx
@@ -175,7 +175,6 @@ Learn more about Playwright Test runner:
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/puppeteer.mdx b/nodejs/docs/puppeteer.mdx
index 290e6e0dff..ca1026dd43 100644
--- a/nodejs/docs/puppeteer.mdx
+++ b/nodejs/docs/puppeteer.mdx
@@ -180,7 +180,6 @@ Learn more about Playwright Test runner:
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/release-notes.mdx b/nodejs/docs/release-notes.mdx
index 6f13897c63..a2922b2d22 100644
--- a/nodejs/docs/release-notes.mdx
+++ b/nodejs/docs/release-notes.mdx
@@ -3723,7 +3723,6 @@ This version of Playwright was also tested against the following stable channels
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/running-tests.mdx b/nodejs/docs/running-tests.mdx
index b7a42b2dfe..ae2bfb3abd 100644
--- a/nodejs/docs/running-tests.mdx
+++ b/nodejs/docs/running-tests.mdx
@@ -186,7 +186,6 @@ You can filter and search for tests as well as click on each test to see the tes
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/screenshots.mdx b/nodejs/docs/screenshots.mdx
index 6803f7d2b5..3dba14ce65 100644
--- a/nodejs/docs/screenshots.mdx
+++ b/nodejs/docs/screenshots.mdx
@@ -50,7 +50,6 @@ await page.locator('.header').screenshot({ path: 'screenshot.png' });
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/selenium-grid.mdx b/nodejs/docs/selenium-grid.mdx
index 1e4a80d7a6..293a05548f 100644
--- a/nodejs/docs/selenium-grid.mdx
+++ b/nodejs/docs/selenium-grid.mdx
@@ -132,7 +132,6 @@ This means that Selenium 3 is supported in a best-effort manner, where Playwrigh
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/service-workers.mdx b/nodejs/docs/service-workers.mdx
index 116e8c5182..6a7bad9617 100644
--- a/nodejs/docs/service-workers.mdx
+++ b/nodejs/docs/service-workers.mdx
@@ -138,7 +138,6 @@ Requests for updated Service Worker main script code currently cannot be routed
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/test-agents.mdx b/nodejs/docs/test-agents.mdx
index 9c671b83a3..59c474c552 100644
--- a/nodejs/docs/test-agents.mdx
+++ b/nodejs/docs/test-agents.mdx
@@ -270,7 +270,6 @@ Seed tests provide a ready-to-use `page` context to bootstrap execution.
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/test-annotations.mdx b/nodejs/docs/test-annotations.mdx
index 596bc71523..3ee741152a 100644
--- a/nodejs/docs/test-annotations.mdx
+++ b/nodejs/docs/test-annotations.mdx
@@ -326,7 +326,6 @@ test('example test', async ({ page, browser }) => {
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/test-assertions.mdx b/nodejs/docs/test-assertions.mdx
index 1347713db2..e706ce8a8d 100644
--- a/nodejs/docs/test-assertions.mdx
+++ b/nodejs/docs/test-assertions.mdx
@@ -376,7 +376,6 @@ test('passes', async ({ database }) => {
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/test-cli.mdx b/nodejs/docs/test-cli.mdx
index c1b402512f..e2dda936cd 100644
--- a/nodejs/docs/test-cli.mdx
+++ b/nodejs/docs/test-cli.mdx
@@ -341,7 +341,6 @@ npx playwright clear-cache
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/test-components.mdx b/nodejs/docs/test-components.mdx
index b0bc77e012..8566d379fb 100644
--- a/nodejs/docs/test-components.mdx
+++ b/nodejs/docs/test-components.mdx
@@ -354,7 +354,6 @@ Ask your coding agent to implement the gallery contract for your framework: reso
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/test-configuration.mdx b/nodejs/docs/test-configuration.mdx
index 89f46ae175..3a98c2e385 100644
--- a/nodejs/docs/test-configuration.mdx
+++ b/nodejs/docs/test-configuration.mdx
@@ -162,7 +162,6 @@ export default defineConfig({
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/test-fixtures.mdx b/nodejs/docs/test-fixtures.mdx
index 98ddf16889..944c99a59b 100644
--- a/nodejs/docs/test-fixtures.mdx
+++ b/nodejs/docs/test-fixtures.mdx
@@ -865,7 +865,6 @@ Note that the fixtures will still run once per [worker process](./test-parallel.
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/test-global-setup-teardown.mdx b/nodejs/docs/test-global-setup-teardown.mdx
index 5590e3d01e..03d93089c1 100644
--- a/nodejs/docs/test-global-setup-teardown.mdx
+++ b/nodejs/docs/test-global-setup-teardown.mdx
@@ -283,7 +283,6 @@ export default globalSetup;
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/test-parallel.mdx b/nodejs/docs/test-parallel.mdx
index f5c4fe351a..b426f49bc7 100644
--- a/nodejs/docs/test-parallel.mdx
+++ b/nodejs/docs/test-parallel.mdx
@@ -366,7 +366,6 @@ Do not define your tests directly in a helper file. This could lead to unexpecte
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/test-parameterize.mdx b/nodejs/docs/test-parameterize.mdx
index 858182e6ea..ed9e692720 100644
--- a/nodejs/docs/test-parameterize.mdx
+++ b/nodejs/docs/test-parameterize.mdx
@@ -428,7 +428,6 @@ for (const record of records) {
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/test-projects.mdx b/nodejs/docs/test-projects.mdx
index 873f792c4a..5b911ddafe 100644
--- a/nodejs/docs/test-projects.mdx
+++ b/nodejs/docs/test-projects.mdx
@@ -235,7 +235,6 @@ Projects can be also used to parametrize tests with your custom configuration -
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/test-reporters.mdx b/nodejs/docs/test-reporters.mdx
index 1e1c605ed2..6be0cc5d3e 100644
--- a/nodejs/docs/test-reporters.mdx
+++ b/nodejs/docs/test-reporters.mdx
@@ -464,6 +464,32 @@ JUnit report supports following configuration options and environment variables:
| `PLAYWRIGHT_JUNIT_SUITE_ID` | | Value of the `id` attribute on the root ` ` report entry. | Empty string.
| `PLAYWRIGHT_JUNIT_SUITE_NAME` | | Value of the `name` attribute on the root ` ` report entry. | Empty string.
+### Chrome tracing reporter
+
+Chrome tracing reporter produces a [Trace Event Format](https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/preview) json file that can be opened in [`chrome://tracing`](chrome://tracing) or in the [Perfetto UI](https://ui.perfetto.dev). It renders the test run as a timeline with a lane per worker, where every test is a slice containing its before/after hooks, fixtures and steps as nested slices. Every slice carries the details of the test or step in its trace event arguments, including source locations, [testStep.params](/api/class-teststep.mdx#test-step-params), tags, annotations, errors, stdio and paths to the attachment files.
+
+```bash
+npx playwright test --reporter=chrome-trace
+```
+
+By default the report is written to `test-results/chrome-trace.json`. When the output file name ends with `.gz`, the report is gzipped on the fly, which both viewers accept and which is worth it for large test runs.
+
+```js title="playwright.config.ts"
+import { defineConfig } from '@playwright/test';
+
+export default defineConfig({
+ reporter: [['chrome-trace', { outputFile: 'chrome-trace.json.gz' }]],
+});
+```
+
+Chrome tracing report supports following configuration options and environment variables:
+
+| Environment Variable Name | Reporter Config Option| Description | Default
+|---|---|---|---|
+| `PLAYWRIGHT_CHROME_TRACE_OUTPUT_DIR` | | Directory to save the output file. Ignored if output file is specified. | `test-results`
+| `PLAYWRIGHT_CHROME_TRACE_OUTPUT_NAME` | | Base file name for the output, relative to the output dir. | `chrome-trace.json`
+| `PLAYWRIGHT_CHROME_TRACE_OUTPUT_FILE` | `outputFile` | Full path to the output file. If defined, `PLAYWRIGHT_CHROME_TRACE_OUTPUT_DIR` and `PLAYWRIGHT_CHROME_TRACE_OUTPUT_NAME` will be ignored. | `undefined`
+
### GitHub Actions annotations
You can use the built in `github` reporter to get automatic failure annotations when running in GitHub actions.
@@ -544,7 +570,6 @@ Here's a short list of open source reporter implementations that you can take a
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/test-retries.mdx b/nodejs/docs/test-retries.mdx
index e959a9f9e8..b8ac7a7628 100644
--- a/nodejs/docs/test-retries.mdx
+++ b/nodejs/docs/test-retries.mdx
@@ -251,7 +251,6 @@ test('runs second', async () => {
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/test-sharding.mdx b/nodejs/docs/test-sharding.mdx
index 1074257bb7..3c0d5363d3 100644
--- a/nodejs/docs/test-sharding.mdx
+++ b/nodejs/docs/test-sharding.mdx
@@ -218,7 +218,6 @@ Supported options:
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/test-snapshots.mdx b/nodejs/docs/test-snapshots.mdx
index 5eb110b6d7..1cb0e3fbcc 100644
--- a/nodejs/docs/test-snapshots.mdx
+++ b/nodejs/docs/test-snapshots.mdx
@@ -154,7 +154,6 @@ Snapshots are stored next to the test file, in a separate directory. For example
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/test-timeouts.mdx b/nodejs/docs/test-timeouts.mdx
index ea066945ff..dd678135ff 100644
--- a/nodejs/docs/test-timeouts.mdx
+++ b/nodejs/docs/test-timeouts.mdx
@@ -219,7 +219,6 @@ API reference: [test.extend()](/api/class-test.mdx#test-extend).
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/test-typescript.mdx b/nodejs/docs/test-typescript.mdx
index cd1cb03222..e9e835c16e 100644
--- a/nodejs/docs/test-typescript.mdx
+++ b/nodejs/docs/test-typescript.mdx
@@ -147,7 +147,6 @@ Then `npm run test` will build the tests and run them.
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/test-ui-mode.mdx b/nodejs/docs/test-ui-mode.mdx
index 6f6c604664..997cdd69dc 100644
--- a/nodejs/docs/test-ui-mode.mdx
+++ b/nodejs/docs/test-ui-mode.mdx
@@ -141,7 +141,6 @@ Be aware that when specifying the `--ui-host=0.0.0.0` flag, UI Mode with your tr
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/test-use-options.mdx b/nodejs/docs/test-use-options.mdx
index e498f7df78..35b450be5d 100644
--- a/nodejs/docs/test-use-options.mdx
+++ b/nodejs/docs/test-use-options.mdx
@@ -262,7 +262,7 @@ However, most common ones like `headless` or `viewport` are available directly i
### Explicit Context Creation and Option Inheritance
-If using the built-in `browser` fixture, calling [browser.newContext()](/api/class-browser.mdx#browser-new-context) will create a context with options inherited from the config:
+While a test or hook runs, every browser context created through the Playwright instance used by the test runner inherits context options from the `use` section. This includes contexts created with the built-in `browser` fixture, a separately launched browser, [browserType.launchPersistentContext()](/api/class-browsertype.mdx#browser-type-launch-persistent-context), or a direct `playwright-core` import that resolves to the same instance. Explicit context options take precedence:
```js title="playwright.config.ts"
import { defineConfig } from '@playwright/test';
@@ -408,7 +408,6 @@ test('no base url', async ({ page }) => {
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/test-webserver.mdx b/nodejs/docs/test-webserver.mdx
index 4a6d1c7062..2ab46ef6a7 100644
--- a/nodejs/docs/test-webserver.mdx
+++ b/nodejs/docs/test-webserver.mdx
@@ -140,7 +140,6 @@ export default defineConfig({
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/testing-library.mdx b/nodejs/docs/testing-library.mdx
index 9d52d6d7ad..be37017d9d 100644
--- a/nodejs/docs/testing-library.mdx
+++ b/nodejs/docs/testing-library.mdx
@@ -174,7 +174,6 @@ Learn more about Playwright Test runner:
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/touch-events.mdx b/nodejs/docs/touch-events.mdx
index 64adca7ebd..ded3c1ccfa 100644
--- a/nodejs/docs/touch-events.mdx
+++ b/nodejs/docs/touch-events.mdx
@@ -151,7 +151,6 @@ test(`pinch in gesture to zoom out the map`, async ({ page }) => {
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/trace-viewer-intro.mdx b/nodejs/docs/trace-viewer-intro.mdx
index 46b019b12b..55b1f55860 100644
--- a/nodejs/docs/trace-viewer-intro.mdx
+++ b/nodejs/docs/trace-viewer-intro.mdx
@@ -83,7 +83,6 @@ To learn more about traces, check out our detailed guide on [Trace Viewer](/trac
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/trace-viewer.mdx b/nodejs/docs/trace-viewer.mdx
index e695aec935..3836a63d52 100644
--- a/nodejs/docs/trace-viewer.mdx
+++ b/nodejs/docs/trace-viewer.mdx
@@ -220,7 +220,6 @@ The "Attachments" tab allows you to explore attachments. If you're doing [visual
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/videos.mdx b/nodejs/docs/videos.mdx
index fba740bbf1..057774f1fd 100644
--- a/nodejs/docs/videos.mdx
+++ b/nodejs/docs/videos.mdx
@@ -102,7 +102,6 @@ Note that the video is only available after the page or browser context is close
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/webview2.mdx b/nodejs/docs/webview2.mdx
index 0db9124ce9..3dad44afa2 100644
--- a/nodejs/docs/webview2.mdx
+++ b/nodejs/docs/webview2.mdx
@@ -124,7 +124,6 @@ For debugging tests, see the Playwright [Debugging guide](./debug).
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/nodejs/docs/writing-tests.mdx b/nodejs/docs/writing-tests.mdx
index 433a4f87d0..0cc7faad4f 100644
--- a/nodejs/docs/writing-tests.mdx
+++ b/nodejs/docs/writing-tests.mdx
@@ -179,7 +179,6 @@ test.describe('navigation', () => {
[BrowserContext]: /api/class-browsercontext.mdx "BrowserContext"
[BrowserServer]: /api/class-browserserver.mdx "BrowserServer"
[BrowserType]: /api/class-browsertype.mdx "BrowserType"
-[By]: /api/class-by.mdx "By"
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
diff --git a/python/docs/api/class-screencast.mdx b/python/docs/api/class-screencast.mdx
index 23edd2d281..f95ed42a81 100644
--- a/python/docs/api/class-screencast.mdx
+++ b/python/docs/api/class-screencast.mdx
@@ -190,9 +190,7 @@ Starts the screencast. When [path](/api/class-screencast.mdx#screencast-start-op
Max frame height in pixels.
- Specifies the dimensions of screencast frames. The actual frame is scaled to preserve the page's aspect ratio and may be smaller than these bounds. If not specified the size will be equal to page viewport scaled down to fit into 800×800.
-
- A page is captured only once, and all consumers share that single capture. Tracing captures screenshots this way as well, so with tracing or the `recordVideo` context option already active this option is ignored, and both the frames and any recorded video use the size of the running capture.
+ Specifies the dimensions of screencast frames. The actual frame is scaled to preserve the page's aspect ratio and may be smaller than these bounds. If a screencast is already active (e.g. started by tracing or video recording), the existing configuration takes precedence and the frame size may exceed these bounds or this option may be ignored. If not specified the size will be equal to page viewport scaled down to fit into 800×800.
**Returns**
- [Disposable]#
diff --git a/python/docs/codegen.mdx b/python/docs/codegen.mdx
index f7895c033b..691eaa992d 100644
--- a/python/docs/codegen.mdx
+++ b/python/docs/codegen.mdx
@@ -147,6 +147,14 @@ Run `codegen` with `--user-data-dir` to set a fixed [user data directory](https:
playwright codegen --user-data-dir=/path/to/your/browser/data/ github.com/microsoft/playwright
```
+#### Authenticate with HTTP credentials
+
+Run `codegen` with `--http-credentials` to authenticate with [HTTP Basic Authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Authentication). Unlike credentials embedded in the URL, they are sent to any origin that requests them during the recording session and are included in the generated code.
+
+```bash
+playwright codegen --http-credentials="username:password" example.com
+```
+
## Record using custom setup
If you would like to use codegen in some non-standard setup (for example, use [browser_context.route()](/api/class-browsercontext.mdx#browser-context-route)), it is possible to call [page.pause()](/api/class-page.mdx#page-pause) that will open a separate window with codegen controls.
diff --git a/python/docs/getting-started-cli.mdx b/python/docs/getting-started-cli.mdx
index 1ecb3cfa5a..b411d37f2b 100644
--- a/python/docs/getting-started-cli.mdx
+++ b/python/docs/getting-started-cli.mdx
@@ -17,30 +17,25 @@ Playwright comes with `playwright-cli`, a command-line interface for browser aut
## Prerequisites
Before you begin, make sure you have the following installed:
-- Playwright for your language, **or** [Node.js](https://nodejs.org/) 20+ for the standalone `@playwright/cli` package
+- [Node.js](https://nodejs.org/) 20 or newer
- A coding agent: Claude Code, GitHub Copilot, or similar
## Installation
-Install the standalone CLI globally (works with any language):
+Install `playwright-cli` globally:
```bash
npm install -g @playwright/cli@latest
playwright-cli --help
```
-Or use the CLI bundled with your Playwright install:
+Alternatively, install `@playwright/cli` as a local dependency and use `npx`:
```bash
-# JavaScript / TypeScript
-npx playwright cli --help
-
-# Python
-python -m playwright cli --help
+npm install -D @playwright/cli@latest
+npx playwright-cli --help
```
-When using a bundled entry point, replace `playwright-cli` with `npx playwright cli` or `python -m playwright cli` in the commands below.
-
### Installing skills
Coding agents like Claude Code and GitHub Copilot can use locally installed skills for richer context about available commands:
@@ -300,29 +295,11 @@ playwright-cli attach --extension
This requires the [Playwright Extension](https://github.com/microsoft/playwright/blob/main/packages/extension/README.md) to be installed.
-## Debugging tests
-
-Coding agents can pause a test at the start, attach with `playwright-cli`, and explore the live browser — useful for diagnosing and fixing failures.
-
-```bash
-# JavaScript / TypeScript
-PLAYWRIGHT_HTML_OPEN=never npx playwright test --debug=cli
-# → Debugging Instructions with session name, e.g. tw-abcdef
-playwright-cli attach tw-abcdef
-
-# Python (pytest-playwright; -s keeps the attach line visible)
-pytest --playwright-debug=cli -s
-playwright-cli attach tw-abcdef
-```
-
-Keep the test running in the background while you attach. The installed skill documents this workflow for agents.
-
## Quick Reference
| Action | Command |
| ------------------------- | --------------------------------------------------- |
| **Install CLI** | `npm install -g @playwright/cli@latest` |
-| **Use bundled CLI** | `npx playwright cli …` / `python -m playwright cli …` |
| **Install skills** | `playwright-cli install --skills` |
| **Open a page** | `playwright-cli open https://example.com` |
| **Click an element** | `playwright-cli click e15` |
@@ -332,8 +309,6 @@ Keep the test running in the background while you attach. The installed skill do
| **Run headed** | `playwright-cli open https://example.com --headed` |
| **Use Firefox** | `playwright-cli open --browser=firefox` |
| **Monitor sessions** | `playwright-cli show` |
-| **Debug JS test** | `npx playwright test --debug=cli` |
-| **Debug Python test** | `pytest --playwright-debug=cli -s` |
## What's Next
- [Write tests using web-first assertions, page fixtures, and locators](./writing-tests.mdx)
diff --git a/python/docs/library.mdx b/python/docs/library.mdx
index 0141e22eac..44fb77ae43 100644
--- a/python/docs/library.mdx
+++ b/python/docs/library.mdx
@@ -214,6 +214,10 @@ On Windows Python 3.7, Playwright sets the default event loop to `ProactorEventL
Playwright's API is not thread-safe. If you are using Playwright in a multi-threaded environment, you should create a playwright instance per thread. See [threading issue](https://github.com/microsoft/playwright-python/issues/623) for more details.
+### Cancelling `asyncio` tasks
+
+Cancelling a task that is running a Playwright call is not supported and results in undefined behavior. If an operation has to outlive its caller, run it in a separate task and protect it with [`asyncio.shield()`](https://docs.python.org/3/library/asyncio-task.html#asyncio.shield).
+
[APIRequest]: /api/class-apirequest.mdx "APIRequest"
[APIRequestContext]: /api/class-apirequestcontext.mdx "APIRequestContext"
diff --git a/python/docs/test-assertions.mdx b/python/docs/test-assertions.mdx
index 66d32cdf77..c527c49a9f 100644
--- a/python/docs/test-assertions.mdx
+++ b/python/docs/test-assertions.mdx
@@ -6,7 +6,21 @@ import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import HTMLCard from '@site/src/components/HTMLCard';
-## List of assertions
+## Introduction
+
+Playwright includes web-specific assertions that automatically retry until the expected condition is met. Consider the following example:
+
+```python
+expect(page.get_by_test_id("status")).to_have_text("Submitted")
+```
+
+Playwright will re-test the element with the test ID of `status` until it has the `"Submitted"` text. It will re-fetch the element and check it repeatedly until the condition is met or the timeout is reached.
+
+By default, the timeout for assertions is 5 seconds.
+
+## Auto-retrying assertions
+
+The following assertions will retry until the assertion passes or the assertion timeout is reached.
| Assertion | Description |
| :- | :- |
diff --git a/src/components/GitHubStarButton/index.tsx b/src/components/GitHubStarButton/index.tsx
index 83a9ea3c9b..6d17bd8c71 100644
--- a/src/components/GitHubStarButton/index.tsx
+++ b/src/components/GitHubStarButton/index.tsx
@@ -6,7 +6,7 @@ type StarButtonProps = {
repo: string
}
-const STARS = '94k+'; // NOTE: this line is generated by src/generate.js. Do not change!
+const STARS = '95k+'; // NOTE: this line is generated by src/generate.js. Do not change!
const StarButton: React.FC = ({owner, repo}) => {
if (!repo)