From 8715ec0d933b46dec22818e1d67611b0cfaeeec7 Mon Sep 17 00:00:00 2001
From: "microsoft-playwright-automation[bot]"
<203992400+microsoft-playwright-automation[bot]@users.noreply.github.com>
Date: Fri, 17 Jul 2026 16:51:07 +0000
Subject: [PATCH] feat(roll): roll to ToT Playwright (17-07-26)
---
dotnet/docs/api/class-apiresponse.mdx | 44 ++++
dotnet/docs/api/class-frame.mdx | 5 -
dotnet/docs/api/class-framelocator.mdx | 5 -
dotnet/docs/api/class-locator.mdx | 5 -
dotnet/docs/api/class-page.mdx | 5 -
dotnet/docs/api/class-request.mdx | 16 +-
java/docs/api/class-apiresponse.mdx | 44 ++++
java/docs/api/class-frame.mdx | 5 -
java/docs/api/class-framelocator.mdx | 5 -
java/docs/api/class-locator.mdx | 5 -
java/docs/api/class-page.mdx | 5 -
java/docs/api/class-request.mdx | 16 +-
nodejs/docs/accessibility-testing.mdx | 1 +
nodejs/docs/actionability.mdx | 1 +
nodejs/docs/api-testing.mdx | 1 +
nodejs/docs/api/class-android.mdx | 1 +
nodejs/docs/api/class-androiddevice.mdx | 4 +
nodejs/docs/api/class-androidinput.mdx | 1 +
nodejs/docs/api/class-androidsocket.mdx | 1 +
nodejs/docs/api/class-androidwebview.mdx | 1 +
nodejs/docs/api/class-apirequest.mdx | 1 +
nodejs/docs/api/class-apirequestcontext.mdx | 1 +
nodejs/docs/api/class-apiresponse.mdx | 45 ++++
.../docs/api/class-apiresponseassertions.mdx | 1 +
nodejs/docs/api/class-browser.mdx | 7 +
nodejs/docs/api/class-browsercontext.mdx | 1 +
nodejs/docs/api/class-browserserver.mdx | 1 +
nodejs/docs/api/class-browsertype.mdx | 4 +
nodejs/docs/api/class-cdpsession.mdx | 1 +
nodejs/docs/api/class-clock.mdx | 1 +
nodejs/docs/api/class-consolemessage.mdx | 1 +
nodejs/docs/api/class-coverage.mdx | 1 +
nodejs/docs/api/class-credentials.mdx | 1 +
nodejs/docs/api/class-debugger.mdx | 1 +
nodejs/docs/api/class-dialog.mdx | 1 +
nodejs/docs/api/class-disposable.mdx | 1 +
nodejs/docs/api/class-download.mdx | 1 +
nodejs/docs/api/class-electron.mdx | 4 +
nodejs/docs/api/class-electronapplication.mdx | 1 +
nodejs/docs/api/class-elementhandle.mdx | 1 +
nodejs/docs/api/class-filechooser.mdx | 1 +
nodejs/docs/api/class-fixtures.mdx | 1 +
nodejs/docs/api/class-frame.mdx | 14 +-
nodejs/docs/api/class-framelocator.mdx | 6 +-
nodejs/docs/api/class-fullconfig.mdx | 1 +
nodejs/docs/api/class-fullproject.mdx | 1 +
nodejs/docs/api/class-genericassertions.mdx | 1 +
nodejs/docs/api/class-jshandle.mdx | 11 +-
nodejs/docs/api/class-keyboard.mdx | 1 +
nodejs/docs/api/class-location.mdx | 1 +
nodejs/docs/api/class-locator.mdx | 12 +-
nodejs/docs/api/class-locatorassertions.mdx | 1 +
nodejs/docs/api/class-logger.mdx | 1 +
nodejs/docs/api/class-mouse.mdx | 1 +
nodejs/docs/api/class-page.mdx | 14 +-
nodejs/docs/api/class-pageassertions.mdx | 1 +
nodejs/docs/api/class-playwright.mdx | 1 +
.../docs/api/class-playwrightassertions.mdx | 1 +
nodejs/docs/api/class-reporter.mdx | 32 +--
nodejs/docs/api/class-request.mdx | 17 +-
nodejs/docs/api/class-response.mdx | 1 +
nodejs/docs/api/class-route.mdx | 1 +
nodejs/docs/api/class-screencast.mdx | 1 +
nodejs/docs/api/class-selectors.mdx | 1 +
nodejs/docs/api/class-snapshotassertions.mdx | 1 +
nodejs/docs/api/class-suite.mdx | 75 +-----
nodejs/docs/api/class-test.mdx | 1 +
nodejs/docs/api/class-testcase.mdx | 75 +-----
nodejs/docs/api/class-testconfig.mdx | 105 +++++++-
nodejs/docs/api/class-testerror.mdx | 1 +
nodejs/docs/api/class-testinfo.mdx | 1 +
nodejs/docs/api/class-testinfoerror.mdx | 1 +
nodejs/docs/api/class-testoptions.mdx | 4 +
nodejs/docs/api/class-testproject.mdx | 1 +
nodejs/docs/api/class-testresult.mdx | 1 +
nodejs/docs/api/class-testrun.mdx | 229 ++++++++++++++++++
nodejs/docs/api/class-teststep.mdx | 3 +-
nodejs/docs/api/class-teststepinfo.mdx | 1 +
nodejs/docs/api/class-timeouterror.mdx | 1 +
nodejs/docs/api/class-touchscreen.mdx | 1 +
nodejs/docs/api/class-tracing.mdx | 1 +
nodejs/docs/api/class-video.mdx | 1 +
nodejs/docs/api/class-weberror.mdx | 1 +
nodejs/docs/api/class-websocket.mdx | 1 +
nodejs/docs/api/class-websocketroute.mdx | 1 +
nodejs/docs/api/class-webstorage.mdx | 1 +
nodejs/docs/api/class-worker.mdx | 1 +
nodejs/docs/api/class-workerinfo.mdx | 1 +
nodejs/docs/aria-snapshots.mdx | 1 +
nodejs/docs/auth.mdx | 1 +
nodejs/docs/best-practices.mdx | 1 +
nodejs/docs/browser-contexts.mdx | 1 +
nodejs/docs/browsers.mdx | 1 +
nodejs/docs/canary-releases.mdx | 1 +
nodejs/docs/chrome-extensions.mdx | 1 +
nodejs/docs/ci-intro.mdx | 1 +
nodejs/docs/ci.mdx | 1 +
nodejs/docs/clock.mdx | 1 +
nodejs/docs/codegen-intro.mdx | 1 +
nodejs/docs/codegen.mdx | 1 +
nodejs/docs/debug.mdx | 1 +
nodejs/docs/dialogs.mdx | 1 +
nodejs/docs/docker.mdx | 1 +
nodejs/docs/downloads.mdx | 1 +
nodejs/docs/emulation.mdx | 1 +
nodejs/docs/evaluating.mdx | 1 +
nodejs/docs/events.mdx | 1 +
nodejs/docs/extensibility.mdx | 1 +
nodejs/docs/frames.mdx | 1 +
nodejs/docs/getting-started-cli.mdx | 1 +
nodejs/docs/getting-started-mcp.mdx | 1 +
nodejs/docs/getting-started-vscode.mdx | 1 +
nodejs/docs/handles.mdx | 1 +
nodejs/docs/input.mdx | 1 +
nodejs/docs/intro.mdx | 1 +
nodejs/docs/languages.mdx | 1 +
nodejs/docs/library.mdx | 1 +
nodejs/docs/locators.mdx | 1 +
nodejs/docs/mock-browser.mdx | 1 +
nodejs/docs/mock.mdx | 1 +
nodejs/docs/navigations.mdx | 1 +
nodejs/docs/network.mdx | 1 +
nodejs/docs/other-locators.mdx | 1 +
nodejs/docs/pages.mdx | 1 +
nodejs/docs/pom.mdx | 1 +
nodejs/docs/protractor.mdx | 1 +
nodejs/docs/puppeteer.mdx | 1 +
nodejs/docs/release-notes.mdx | 1 +
nodejs/docs/running-tests.mdx | 1 +
nodejs/docs/screenshots.mdx | 1 +
nodejs/docs/selenium-grid.mdx | 1 +
nodejs/docs/service-workers.mdx | 1 +
nodejs/docs/test-agents.mdx | 1 +
nodejs/docs/test-annotations.mdx | 1 +
nodejs/docs/test-assertions.mdx | 1 +
nodejs/docs/test-cli.mdx | 1 +
nodejs/docs/test-components.mdx | 1 +
nodejs/docs/test-configuration.mdx | 1 +
nodejs/docs/test-fixtures.mdx | 1 +
nodejs/docs/test-global-setup-teardown.mdx | 1 +
nodejs/docs/test-parallel.mdx | 39 +++
nodejs/docs/test-parameterize.mdx | 1 +
nodejs/docs/test-projects.mdx | 1 +
nodejs/docs/test-reporters.mdx | 2 +
nodejs/docs/test-retries.mdx | 1 +
nodejs/docs/test-sharding.mdx | 1 +
nodejs/docs/test-snapshots.mdx | 1 +
nodejs/docs/test-timeouts.mdx | 1 +
nodejs/docs/test-typescript.mdx | 1 +
nodejs/docs/test-ui-mode.mdx | 1 +
nodejs/docs/test-use-options.mdx | 1 +
nodejs/docs/test-webserver.mdx | 1 +
nodejs/docs/testing-library.mdx | 1 +
nodejs/docs/touch-events.mdx | 1 +
nodejs/docs/trace-viewer-intro.mdx | 1 +
nodejs/docs/trace-viewer.mdx | 1 +
nodejs/docs/videos.mdx | 1 +
nodejs/docs/webview2.mdx | 1 +
nodejs/docs/writing-tests.mdx | 1 +
python/docs/api/class-apiresponse.mdx | 44 ++++
python/docs/api/class-clock.mdx | 8 +-
python/docs/api/class-frame.mdx | 5 -
python/docs/api/class-framelocator.mdx | 5 -
python/docs/api/class-locator.mdx | 5 -
python/docs/api/class-locatorassertions.mdx | 16 +-
python/docs/api/class-page.mdx | 5 -
python/docs/api/class-request.mdx | 16 +-
src/components/GitHubStarButton/index.tsx | 2 +-
168 files changed, 804 insertions(+), 291 deletions(-)
create mode 100644 nodejs/docs/api/class-testrun.mdx
diff --git a/dotnet/docs/api/class-apiresponse.mdx b/dotnet/docs/api/class-apiresponse.mdx
index 9a4ed66b68..fcfd8db6e5 100644
--- a/dotnet/docs/api/class-apiresponse.mdx
+++ b/dotnet/docs/api/class-apiresponse.mdx
@@ -229,6 +229,50 @@ await ApiResponse.TextAsync();
---
+### Timing {/* #api-response-timing */}
+
+Added in: v1.62apiResponse.Timing
+
+Returns resource timing information for given response. For redirected requests, returns the information for the last request in the redirect chain. When the response is served [from the HAR file](../mock.mdx#replaying-from-har), timing information is not available and all the values are -1. Find more information at [Resource Timing API](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming).
+
+**Usage**
+
+```csharp
+ApiResponse.Timing
+```
+
+**Returns**
+- Timing#
+ - `startTime` [float]
+
+ Request start time in milliseconds elapsed since January 1, 1970 00:00:00 UTC
+ - `domainLookupStart` [float]
+
+ Time immediately before the client starts the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `domainLookupEnd` [float]
+
+ Time immediately after the client ends the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `connectStart` [float]
+
+ Time immediately before the client starts establishing the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `secureConnectionStart` [float]
+
+ Time immediately before the client starts the handshake process to secure the current connection. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `connectEnd` [float]
+
+ Time immediately after the client establishes the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `requestStart` [float]
+
+ Time immediately before the client starts requesting the resource from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `responseStart` [float]
+
+ Time immediately after the client receives the first byte of the response from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `responseEnd` [float]
+
+ Time immediately after the client receives the last byte of the resource or immediately before the transport connection is closed, whichever comes first. The value is given in milliseconds relative to `startTime`, -1 if not available.
+
+---
+
### Url {/* #api-response-url */}
Added in: v1.16apiResponse.Url
diff --git a/dotnet/docs/api/class-frame.mdx b/dotnet/docs/api/class-frame.mdx
index 12e81e4d6b..98d4983459 100644
--- a/dotnet/docs/api/class-frame.mdx
+++ b/dotnet/docs/api/class-frame.mdx
@@ -492,11 +492,6 @@ await page
Required aria role.
- `options` `FrameGetByRoleOptions?` *(optional)*
- - `Busy` [bool]? *(optional)* Added in: v1.61#
-
- An attribute that is usually set by `aria-busy`.
-
- Learn more about [`aria-busy`](https://www.w3.org/TR/wai-aria-1.2/#aria-busy).
- `Checked` [bool]? *(optional)*#
An attribute that is usually set by `aria-checked` or native `` controls.
diff --git a/dotnet/docs/api/class-framelocator.mdx b/dotnet/docs/api/class-framelocator.mdx
index ea174e8d30..30a08b164e 100644
--- a/dotnet/docs/api/class-framelocator.mdx
+++ b/dotnet/docs/api/class-framelocator.mdx
@@ -206,11 +206,6 @@ await page
Required aria role.
- `options` `FrameLocatorGetByRoleOptions?` *(optional)*
- - `Busy` [bool]? *(optional)* Added in: v1.61#
-
- An attribute that is usually set by `aria-busy`.
-
- Learn more about [`aria-busy`](https://www.w3.org/TR/wai-aria-1.2/#aria-busy).
- `Checked` [bool]? *(optional)*#
An attribute that is usually set by `aria-checked` or native `` controls.
diff --git a/dotnet/docs/api/class-locator.mdx b/dotnet/docs/api/class-locator.mdx
index faecaa6288..09347b2184 100644
--- a/dotnet/docs/api/class-locator.mdx
+++ b/dotnet/docs/api/class-locator.mdx
@@ -1226,11 +1226,6 @@ await page
Required aria role.
- `options` `LocatorGetByRoleOptions?` *(optional)*
- - `Busy` [bool]? *(optional)* Added in: v1.61#
-
- An attribute that is usually set by `aria-busy`.
-
- Learn more about [`aria-busy`](https://www.w3.org/TR/wai-aria-1.2/#aria-busy).
- `Checked` [bool]? *(optional)*#
An attribute that is usually set by `aria-checked` or native `` controls.
diff --git a/dotnet/docs/api/class-page.mdx b/dotnet/docs/api/class-page.mdx
index c389de9065..0075e64141 100644
--- a/dotnet/docs/api/class-page.mdx
+++ b/dotnet/docs/api/class-page.mdx
@@ -1018,11 +1018,6 @@ await page
Required aria role.
- `options` `PageGetByRoleOptions?` *(optional)*
- - `Busy` [bool]? *(optional)* Added in: v1.61#
-
- An attribute that is usually set by `aria-busy`.
-
- Learn more about [`aria-busy`](https://www.w3.org/TR/wai-aria-1.2/#aria-busy).
- `Checked` [bool]? *(optional)*#
An attribute that is usually set by `aria-checked` or native `` controls.
diff --git a/dotnet/docs/api/class-request.mdx b/dotnet/docs/api/class-request.mdx
index 437188a9c6..1a97c0412b 100644
--- a/dotnet/docs/api/class-request.mdx
+++ b/dotnet/docs/api/class-request.mdx
@@ -394,28 +394,28 @@ Console.WriteLine(request.Timing.ResponseEnd);
Request start time in milliseconds elapsed since January 1, 1970 00:00:00 UTC
- `domainLookupStart` [float]
- Time immediately before the browser starts the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately before the client starts the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `domainLookupEnd` [float]
- Time immediately after the browser starts the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately after the client ends the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `connectStart` [float]
- Time immediately before the user agent starts establishing the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately before the client starts establishing the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `secureConnectionStart` [float]
- Time immediately before the browser starts the handshake process to secure the current connection. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately before the client starts the handshake process to secure the current connection. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `connectEnd` [float]
- Time immediately before the user agent starts establishing the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately after the client establishes the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `requestStart` [float]
- Time immediately before the browser starts requesting the resource from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately before the client starts requesting the resource from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `responseStart` [float]
- Time immediately after the browser receives the first byte of the response from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately after the client receives the first byte of the response from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `responseEnd` [float]
- Time immediately after the browser receives the last byte of the resource or immediately before the transport connection is closed, whichever comes first. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately after the client receives the last byte of the resource or immediately before the transport connection is closed, whichever comes first. The value is given in milliseconds relative to `startTime`, -1 if not available.
---
diff --git a/java/docs/api/class-apiresponse.mdx b/java/docs/api/class-apiresponse.mdx
index a6b413cc1f..fa1987bc93 100644
--- a/java/docs/api/class-apiresponse.mdx
+++ b/java/docs/api/class-apiresponse.mdx
@@ -210,6 +210,50 @@ APIResponse.text();
---
+### timing {/* #api-response-timing */}
+
+Added in: v1.62apiResponse.timing
+
+Returns resource timing information for given response. For redirected requests, returns the information for the last request in the redirect chain. When the response is served [from the HAR file](../mock.mdx#replaying-from-har), timing information is not available and all the values are -1. Find more information at [Resource Timing API](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming).
+
+**Usage**
+
+```java
+APIResponse.timing();
+```
+
+**Returns**
+- Timing#
+ - `startTime` [double]
+
+ Request start time in milliseconds elapsed since January 1, 1970 00:00:00 UTC
+ - `domainLookupStart` [double]
+
+ Time immediately before the client starts the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `domainLookupEnd` [double]
+
+ Time immediately after the client ends the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `connectStart` [double]
+
+ Time immediately before the client starts establishing the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `secureConnectionStart` [double]
+
+ Time immediately before the client starts the handshake process to secure the current connection. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `connectEnd` [double]
+
+ Time immediately after the client establishes the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `requestStart` [double]
+
+ Time immediately before the client starts requesting the resource from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `responseStart` [double]
+
+ Time immediately after the client receives the first byte of the response from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `responseEnd` [double]
+
+ Time immediately after the client receives the last byte of the resource or immediately before the transport connection is closed, whichever comes first. The value is given in milliseconds relative to `startTime`, -1 if not available.
+
+---
+
### url {/* #api-response-url */}
Added in: v1.16apiResponse.url
diff --git a/java/docs/api/class-frame.mdx b/java/docs/api/class-frame.mdx
index 27c0b84e8a..0479468040 100644
--- a/java/docs/api/class-frame.mdx
+++ b/java/docs/api/class-frame.mdx
@@ -492,11 +492,6 @@ page.getByRole(AriaRole.BUTTON,
Required aria role.
- `options` `Frame.GetByRoleOptions` *(optional)*
- - `setBusy` [boolean] *(optional)* Added in: v1.61#
-
- An attribute that is usually set by `aria-busy`.
-
- Learn more about [`aria-busy`](https://www.w3.org/TR/wai-aria-1.2/#aria-busy).
- `setChecked` [boolean] *(optional)*#
An attribute that is usually set by `aria-checked` or native `` controls.
diff --git a/java/docs/api/class-framelocator.mdx b/java/docs/api/class-framelocator.mdx
index 73c31b8d76..406f921089 100644
--- a/java/docs/api/class-framelocator.mdx
+++ b/java/docs/api/class-framelocator.mdx
@@ -204,11 +204,6 @@ page.getByRole(AriaRole.BUTTON,
Required aria role.
- `options` `FrameLocator.GetByRoleOptions` *(optional)*
- - `setBusy` [boolean] *(optional)* Added in: v1.61#
-
- An attribute that is usually set by `aria-busy`.
-
- Learn more about [`aria-busy`](https://www.w3.org/TR/wai-aria-1.2/#aria-busy).
- `setChecked` [boolean] *(optional)*#
An attribute that is usually set by `aria-checked` or native `` controls.
diff --git a/java/docs/api/class-locator.mdx b/java/docs/api/class-locator.mdx
index 24514c8911..4a7e76e686 100644
--- a/java/docs/api/class-locator.mdx
+++ b/java/docs/api/class-locator.mdx
@@ -1226,11 +1226,6 @@ page.getByRole(AriaRole.BUTTON,
Required aria role.
- `options` `Locator.GetByRoleOptions` *(optional)*
- - `setBusy` [boolean] *(optional)* Added in: v1.61#
-
- An attribute that is usually set by `aria-busy`.
-
- Learn more about [`aria-busy`](https://www.w3.org/TR/wai-aria-1.2/#aria-busy).
- `setChecked` [boolean] *(optional)*#
An attribute that is usually set by `aria-checked` or native `` controls.
diff --git a/java/docs/api/class-page.mdx b/java/docs/api/class-page.mdx
index 5cda5f2ec0..937d0287e3 100644
--- a/java/docs/api/class-page.mdx
+++ b/java/docs/api/class-page.mdx
@@ -1022,11 +1022,6 @@ page.getByRole(AriaRole.BUTTON,
Required aria role.
- `options` `Page.GetByRoleOptions` *(optional)*
- - `setBusy` [boolean] *(optional)* Added in: v1.61#
-
- An attribute that is usually set by `aria-busy`.
-
- Learn more about [`aria-busy`](https://www.w3.org/TR/wai-aria-1.2/#aria-busy).
- `setChecked` [boolean] *(optional)*#
An attribute that is usually set by `aria-checked` or native `` controls.
diff --git a/java/docs/api/class-request.mdx b/java/docs/api/class-request.mdx
index e229fbc34e..80f84ae2f8 100644
--- a/java/docs/api/class-request.mdx
+++ b/java/docs/api/class-request.mdx
@@ -374,28 +374,28 @@ page.navigate("http://example.com");
Request start time in milliseconds elapsed since January 1, 1970 00:00:00 UTC
- `domainLookupStart` [double]
- Time immediately before the browser starts the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately before the client starts the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `domainLookupEnd` [double]
- Time immediately after the browser starts the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately after the client ends the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `connectStart` [double]
- Time immediately before the user agent starts establishing the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately before the client starts establishing the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `secureConnectionStart` [double]
- Time immediately before the browser starts the handshake process to secure the current connection. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately before the client starts the handshake process to secure the current connection. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `connectEnd` [double]
- Time immediately before the user agent starts establishing the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately after the client establishes the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `requestStart` [double]
- Time immediately before the browser starts requesting the resource from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately before the client starts requesting the resource from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `responseStart` [double]
- Time immediately after the browser receives the first byte of the response from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately after the client receives the first byte of the response from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `responseEnd` [double]
- Time immediately after the browser receives the last byte of the resource or immediately before the transport connection is closed, whichever comes first. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately after the client receives the last byte of the resource or immediately before the transport connection is closed, whichever comes first. The value is given in milliseconds relative to `startTime`, -1 if not available.
---
diff --git a/nodejs/docs/accessibility-testing.mdx b/nodejs/docs/accessibility-testing.mdx
index 030ed604db..3a1f39e910 100644
--- a/nodejs/docs/accessibility-testing.mdx
+++ b/nodejs/docs/accessibility-testing.mdx
@@ -404,6 +404,7 @@ test('example using custom fixture', async ({ page, makeAxeBuilder }) => {
[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"
diff --git a/nodejs/docs/actionability.mdx b/nodejs/docs/actionability.mdx
index dcacda102c..900585a789 100644
--- a/nodejs/docs/actionability.mdx
+++ b/nodejs/docs/actionability.mdx
@@ -194,6 +194,7 @@ For example, consider a scenario where Playwright will click `Sign Up` button re
[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"
diff --git a/nodejs/docs/api-testing.mdx b/nodejs/docs/api-testing.mdx
index f520e9ac06..f0938cc717 100644
--- a/nodejs/docs/api-testing.mdx
+++ b/nodejs/docs/api-testing.mdx
@@ -445,6 +445,7 @@ test('global context request has isolated cookie storage', async ({
[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"
diff --git a/nodejs/docs/api/class-android.mdx b/nodejs/docs/api/class-android.mdx
index 7545a54ca1..116a20d5a3 100644
--- a/nodejs/docs/api/class-android.mdx
+++ b/nodejs/docs/api/class-android.mdx
@@ -315,6 +315,7 @@ android.setDefaultTimeout(timeout);
[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"
diff --git a/nodejs/docs/api/class-androiddevice.mdx b/nodejs/docs/api/class-androiddevice.mdx
index 9168cb54f1..0a062e0be7 100644
--- a/nodejs/docs/api/class-androiddevice.mdx
+++ b/nodejs/docs/api/class-androiddevice.mdx
@@ -344,6 +344,9 @@ await androidDevice.launchBrowser(options);
- `fontSize` [number] *(optional)*
Font size of the action title in pixels. Defaults to `24`.
+ - `cursor` "none" | "pointer" *(optional)*
+
+ Cursor decoration shown for pointer actions. `"pointer"` (the default) renders a mouse pointer that animates from the previous action point to the next one. `"none"` disables the cursor decoration.
If specified, enables visual annotations on interacted elements during video recording.
@@ -1005,6 +1008,7 @@ androidDevice.on('webview', data => {});
[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"
diff --git a/nodejs/docs/api/class-androidinput.mdx b/nodejs/docs/api/class-androidinput.mdx
index 70d665ea88..a5fac605e5 100644
--- a/nodejs/docs/api/class-androidinput.mdx
+++ b/nodejs/docs/api/class-androidinput.mdx
@@ -229,6 +229,7 @@ await androidInput.type(text);
[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"
diff --git a/nodejs/docs/api/class-androidsocket.mdx b/nodejs/docs/api/class-androidsocket.mdx
index 0fc32a0542..dff843aa45 100644
--- a/nodejs/docs/api/class-androidsocket.mdx
+++ b/nodejs/docs/api/class-androidsocket.mdx
@@ -156,6 +156,7 @@ androidSocket.on('data', data => {});
[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"
diff --git a/nodejs/docs/api/class-androidwebview.mdx b/nodejs/docs/api/class-androidwebview.mdx
index 67df6a3344..09b1237099 100644
--- a/nodejs/docs/api/class-androidwebview.mdx
+++ b/nodejs/docs/api/class-androidwebview.mdx
@@ -151,6 +151,7 @@ androidWebView.on('close', data => {});
[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"
diff --git a/nodejs/docs/api/class-apirequest.mdx b/nodejs/docs/api/class-apirequest.mdx
index 0194887fdf..79f824a0b8 100644
--- a/nodejs/docs/api/class-apirequest.mdx
+++ b/nodejs/docs/api/class-apirequest.mdx
@@ -239,6 +239,7 @@ await apiRequest.newContext(options);
[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"
diff --git a/nodejs/docs/api/class-apirequestcontext.mdx b/nodejs/docs/api/class-apirequestcontext.mdx
index a0a2a95c8c..65e383683e 100644
--- a/nodejs/docs/api/class-apirequestcontext.mdx
+++ b/nodejs/docs/api/class-apirequestcontext.mdx
@@ -737,6 +737,7 @@ apiRequestContext.tracing
[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"
diff --git a/nodejs/docs/api/class-apiresponse.mdx b/nodejs/docs/api/class-apiresponse.mdx
index 1fead65723..0378facd66 100644
--- a/nodejs/docs/api/class-apiresponse.mdx
+++ b/nodejs/docs/api/class-apiresponse.mdx
@@ -229,6 +229,50 @@ await apiResponse.text();
---
+### timing {/* #api-response-timing */}
+
+Added in: v1.62apiResponse.timing
+
+Returns resource timing information for given response. For redirected requests, returns the information for the last request in the redirect chain. When the response is served [from the HAR file](../mock.mdx#replaying-from-har), timing information is not available and all the values are -1. Find more information at [Resource Timing API](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming).
+
+**Usage**
+
+```js
+apiResponse.timing();
+```
+
+**Returns**
+- [Object]#
+ - `startTime` [number]
+
+ Request start time in milliseconds elapsed since January 1, 1970 00:00:00 UTC
+ - `domainLookupStart` [number]
+
+ Time immediately before the client starts the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `domainLookupEnd` [number]
+
+ Time immediately after the client ends the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `connectStart` [number]
+
+ Time immediately before the client starts establishing the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `secureConnectionStart` [number]
+
+ Time immediately before the client starts the handshake process to secure the current connection. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `connectEnd` [number]
+
+ Time immediately after the client establishes the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `requestStart` [number]
+
+ Time immediately before the client starts requesting the resource from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `responseStart` [number]
+
+ Time immediately after the client receives the first byte of the response from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `responseEnd` [number]
+
+ Time immediately after the client receives the last byte of the resource or immediately before the transport connection is closed, whichever comes first. The value is given in milliseconds relative to `startTime`, -1 if not available.
+
+---
+
### url {/* #api-response-url */}
Added in: v1.16apiResponse.url
@@ -316,6 +360,7 @@ apiResponse.url();
[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"
diff --git a/nodejs/docs/api/class-apiresponseassertions.mdx b/nodejs/docs/api/class-apiresponseassertions.mdx
index 1f094b4434..7a9f8ca9f1 100644
--- a/nodejs/docs/api/class-apiresponseassertions.mdx
+++ b/nodejs/docs/api/class-apiresponseassertions.mdx
@@ -132,6 +132,7 @@ await expect(response).not.toBeOK();
[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"
diff --git a/nodejs/docs/api/class-browser.mdx b/nodejs/docs/api/class-browser.mdx
index cd019629b1..fec045f621 100644
--- a/nodejs/docs/api/class-browser.mdx
+++ b/nodejs/docs/api/class-browser.mdx
@@ -379,6 +379,9 @@ If directly using this method to create [BrowserContext]s, it is best practice t
- `fontSize` [number] *(optional)*
Font size of the action title in pixels. Defaults to `24`.
+ - `cursor` "none" | "pointer" *(optional)*
+
+ Cursor decoration shown for pointer actions. `"pointer"` (the default) renders a mouse pointer that animates from the previous action point to the next one. `"none"` disables the cursor decoration.
If specified, enables visual annotations on interacted elements during video recording.
@@ -667,6 +670,9 @@ await browser.newPage(options);
- `fontSize` [number] *(optional)*
Font size of the action title in pixels. Defaults to `24`.
+ - `cursor` "none" | "pointer" *(optional)*
+
+ Cursor decoration shown for pointer actions. `"pointer"` (the default) renders a mouse pointer that animates from the previous action point to the next one. `"none"` disables the cursor decoration.
If specified, enables visual annotations on interacted elements during video recording.
@@ -993,6 +999,7 @@ browser.on('disconnected', data => {});
[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"
diff --git a/nodejs/docs/api/class-browsercontext.mdx b/nodejs/docs/api/class-browsercontext.mdx
index 60d0e70181..bda17d41ce 100644
--- a/nodejs/docs/api/class-browsercontext.mdx
+++ b/nodejs/docs/api/class-browsercontext.mdx
@@ -1618,6 +1618,7 @@ await browserContext.setHTTPCredentials(httpCredentials);
[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"
diff --git a/nodejs/docs/api/class-browserserver.mdx b/nodejs/docs/api/class-browserserver.mdx
index 3a484b69bf..e84cbf8b05 100644
--- a/nodejs/docs/api/class-browserserver.mdx
+++ b/nodejs/docs/api/class-browserserver.mdx
@@ -168,6 +168,7 @@ browserServer.on('close', data => {});
[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"
diff --git a/nodejs/docs/api/class-browsertype.mdx b/nodejs/docs/api/class-browsertype.mdx
index 102d21588a..ec53f95c99 100644
--- a/nodejs/docs/api/class-browsertype.mdx
+++ b/nodejs/docs/api/class-browsertype.mdx
@@ -522,6 +522,9 @@ await browserType.launchPersistentContext(userDataDir, options);
- `fontSize` [number] *(optional)*
Font size of the action title in pixels. Defaults to `24`.
+ - `cursor` "none" | "pointer" *(optional)*
+
+ Cursor decoration shown for pointer actions. `"pointer"` (the default) renders a mouse pointer that animates from the previous action point to the next one. `"none"` disables the cursor decoration.
If specified, enables visual annotations on interacted elements during video recording.
@@ -790,6 +793,7 @@ browserType.name();
[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"
diff --git a/nodejs/docs/api/class-cdpsession.mdx b/nodejs/docs/api/class-cdpsession.mdx
index a57f43485b..9ea3409d98 100644
--- a/nodejs/docs/api/class-cdpsession.mdx
+++ b/nodejs/docs/api/class-cdpsession.mdx
@@ -186,6 +186,7 @@ session.on('event', ({ name, params }) => {
[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"
diff --git a/nodejs/docs/api/class-clock.mdx b/nodejs/docs/api/class-clock.mdx
index c48e430f41..75df769d1b 100644
--- a/nodejs/docs/api/class-clock.mdx
+++ b/nodejs/docs/api/class-clock.mdx
@@ -270,6 +270,7 @@ await page.clock.setSystemTime('2020-02-02');
[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"
diff --git a/nodejs/docs/api/class-consolemessage.mdx b/nodejs/docs/api/class-consolemessage.mdx
index 33c3214a27..eb1a0dcee3 100644
--- a/nodejs/docs/api/class-consolemessage.mdx
+++ b/nodejs/docs/api/class-consolemessage.mdx
@@ -236,6 +236,7 @@ consoleMessage.worker();
[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"
diff --git a/nodejs/docs/api/class-coverage.mdx b/nodejs/docs/api/class-coverage.mdx
index 2dd1dc7647..5145aa4815 100644
--- a/nodejs/docs/api/class-coverage.mdx
+++ b/nodejs/docs/api/class-coverage.mdx
@@ -259,6 +259,7 @@ await coverage.stopJSCoverage();
[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"
diff --git a/nodejs/docs/api/class-credentials.mdx b/nodejs/docs/api/class-credentials.mdx
index adab6b0a62..8115885620 100644
--- a/nodejs/docs/api/class-credentials.mdx
+++ b/nodejs/docs/api/class-credentials.mdx
@@ -280,6 +280,7 @@ await credentials.install();
[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"
diff --git a/nodejs/docs/api/class-debugger.mdx b/nodejs/docs/api/class-debugger.mdx
index 2972638c57..3d5bd7e669 100644
--- a/nodejs/docs/api/class-debugger.mdx
+++ b/nodejs/docs/api/class-debugger.mdx
@@ -215,6 +215,7 @@ debugger.on('pausedstatechanged', data => {});
[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"
diff --git a/nodejs/docs/api/class-dialog.mdx b/nodejs/docs/api/class-dialog.mdx
index ee9403dead..98931f6a5b 100644
--- a/nodejs/docs/api/class-dialog.mdx
+++ b/nodejs/docs/api/class-dialog.mdx
@@ -213,6 +213,7 @@ dialog.type();
[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"
diff --git a/nodejs/docs/api/class-disposable.mdx b/nodejs/docs/api/class-disposable.mdx
index 8f229921e1..5dc11c5f69 100644
--- a/nodejs/docs/api/class-disposable.mdx
+++ b/nodejs/docs/api/class-disposable.mdx
@@ -101,6 +101,7 @@ await disposable.dispose();
[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"
diff --git a/nodejs/docs/api/class-download.mdx b/nodejs/docs/api/class-download.mdx
index 47de637650..7c0bf5026f 100644
--- a/nodejs/docs/api/class-download.mdx
+++ b/nodejs/docs/api/class-download.mdx
@@ -263,6 +263,7 @@ download.url();
[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"
diff --git a/nodejs/docs/api/class-electron.mdx b/nodejs/docs/api/class-electron.mdx
index 39620f84fe..6dcb32e52b 100644
--- a/nodejs/docs/api/class-electron.mdx
+++ b/nodejs/docs/api/class-electron.mdx
@@ -203,6 +203,9 @@ await electron.launch(options);
- `fontSize` [number] *(optional)*
Font size of the action title in pixels. Defaults to `24`.
+ - `cursor` "none" | "pointer" *(optional)*
+
+ Cursor decoration shown for pointer actions. `"pointer"` (the default) renders a mouse pointer that animates from the previous action point to the next one. `"none"` disables the cursor decoration.
If specified, enables visual annotations on interacted elements during video recording.
@@ -292,6 +295,7 @@ await electron.launch(options);
[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"
diff --git a/nodejs/docs/api/class-electronapplication.mdx b/nodejs/docs/api/class-electronapplication.mdx
index ced01b78ec..f287300060 100644
--- a/nodejs/docs/api/class-electronapplication.mdx
+++ b/nodejs/docs/api/class-electronapplication.mdx
@@ -382,6 +382,7 @@ electronApplication.on('window', data => {});
[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"
diff --git a/nodejs/docs/api/class-elementhandle.mdx b/nodejs/docs/api/class-elementhandle.mdx
index daf88bafbc..92f27ac393 100644
--- a/nodejs/docs/api/class-elementhandle.mdx
+++ b/nodejs/docs/api/class-elementhandle.mdx
@@ -1738,6 +1738,7 @@ This method does not work across navigations, use [page.waitForSelector()](/api/
[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"
diff --git a/nodejs/docs/api/class-filechooser.mdx b/nodejs/docs/api/class-filechooser.mdx
index 6ee9925a4c..00f7b30c7b 100644
--- a/nodejs/docs/api/class-filechooser.mdx
+++ b/nodejs/docs/api/class-filechooser.mdx
@@ -188,6 +188,7 @@ await fileChooser.setFiles(files, options);
[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"
diff --git a/nodejs/docs/api/class-fixtures.mdx b/nodejs/docs/api/class-fixtures.mdx
index d12be27a16..2a73900a9d 100644
--- a/nodejs/docs/api/class-fixtures.mdx
+++ b/nodejs/docs/api/class-fixtures.mdx
@@ -218,6 +218,7 @@ test('basic test', async ({ request }) => {
[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"
diff --git a/nodejs/docs/api/class-frame.mdx b/nodejs/docs/api/class-frame.mdx
index 7795c26a12..ca029255b8 100644
--- a/nodejs/docs/api/class-frame.mdx
+++ b/nodejs/docs/api/class-frame.mdx
@@ -250,6 +250,10 @@ await bodyHandle.dispose();
- `arg` [EvaluationArgument] *(optional)*#
Optional argument to pass to [pageFunction](/api/class-frame.mdx#frame-evaluate-option-expression).
+- `options` [Object] *(optional)*
+ - `exposeFunctions` [boolean] *(optional)* Added in: v1.62#
+
+ When set to `true`, functions passed inside [arg](/api/class-frame.mdx#frame-evaluate-option-arg) are exposed in the page and can be called from the page function. Calling one returns a [Promise] of its result. The page-side functions are scoped to the execution context they were passed to and disappear when the page navigates. Defaults to `false`, in which case functions are not serializable and passing one throws an error, as before.
**Returns**
- [Promise]<[Serializable]>#
@@ -297,6 +301,10 @@ await resultHandle.dispose();
- `arg` [EvaluationArgument] *(optional)*#
Optional argument to pass to [pageFunction](/api/class-frame.mdx#frame-evaluate-handle-option-expression).
+- `options` [Object] *(optional)*
+ - `exposeFunctions` [boolean] *(optional)* Added in: v1.62#
+
+ When set to `true`, functions passed inside [arg](/api/class-frame.mdx#frame-evaluate-handle-option-arg) are exposed in the page and can be called from the page function. Calling one returns a [Promise] of its result. The page-side functions are scoped to the execution context they were passed to and disappear when the page navigates. Defaults to `false`, in which case functions are not serializable and passing one throws an error, as before.
**Returns**
- [Promise]<[JSHandle]>#
@@ -488,11 +496,6 @@ await page.getByRole('button', { name: /submit/i }).click();
Required aria role.
- `options` [Object] *(optional)*
- - `busy` [boolean] *(optional)* Added in: v1.61#
-
- An attribute that is usually set by `aria-busy`.
-
- Learn more about [`aria-busy`](https://www.w3.org/TR/wai-aria-1.2/#aria-busy).
- `checked` [boolean] *(optional)*#
An attribute that is usually set by `aria-checked` or native `` controls.
@@ -2852,6 +2855,7 @@ await frame.waitForTimeout(timeout);
[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"
diff --git a/nodejs/docs/api/class-framelocator.mdx b/nodejs/docs/api/class-framelocator.mdx
index 3c83befafb..a4d413e143 100644
--- a/nodejs/docs/api/class-framelocator.mdx
+++ b/nodejs/docs/api/class-framelocator.mdx
@@ -198,11 +198,6 @@ await page.getByRole('button', { name: /submit/i }).click();
Required aria role.
- `options` [Object] *(optional)*
- - `busy` [boolean] *(optional)* Added in: v1.61#
-
- An attribute that is usually set by `aria-busy`.
-
- Learn more about [`aria-busy`](https://www.w3.org/TR/wai-aria-1.2/#aria-busy).
- `checked` [boolean] *(optional)*#
An attribute that is usually set by `aria-checked` or native `` controls.
@@ -617,6 +612,7 @@ frameLocator.nth(index);
[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"
diff --git a/nodejs/docs/api/class-fullconfig.mdx b/nodejs/docs/api/class-fullconfig.mdx
index 6a0910cf4d..58fb200d07 100644
--- a/nodejs/docs/api/class-fullconfig.mdx
+++ b/nodejs/docs/api/class-fullconfig.mdx
@@ -527,6 +527,7 @@ fullConfig.workers
[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"
diff --git a/nodejs/docs/api/class-fullproject.mdx b/nodejs/docs/api/class-fullproject.mdx
index 86a5f80079..7a6102cb0a 100644
--- a/nodejs/docs/api/class-fullproject.mdx
+++ b/nodejs/docs/api/class-fullproject.mdx
@@ -356,6 +356,7 @@ fullProject.use
[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"
diff --git a/nodejs/docs/api/class-genericassertions.mdx b/nodejs/docs/api/class-genericassertions.mdx
index 283cbdbdf8..db33a4725f 100644
--- a/nodejs/docs/api/class-genericassertions.mdx
+++ b/nodejs/docs/api/class-genericassertions.mdx
@@ -904,6 +904,7 @@ expect(value).resolves
[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"
diff --git a/nodejs/docs/api/class-jshandle.mdx b/nodejs/docs/api/class-jshandle.mdx
index b93deba0c8..abbff64d2b 100644
--- a/nodejs/docs/api/class-jshandle.mdx
+++ b/nodejs/docs/api/class-jshandle.mdx
@@ -81,6 +81,10 @@ expect(await tweetHandle.evaluate(node => node.innerText)).toBe('10 retweets');
- `arg` [EvaluationArgument] *(optional)*#
Optional argument to pass to [pageFunction](/api/class-jshandle.mdx#js-handle-evaluate-option-expression).
+- `options` [Object] *(optional)*
+ - `exposeFunctions` [boolean] *(optional)* Added in: v1.62#
+
+ When set to `true`, functions passed inside [arg](/api/class-jshandle.mdx#js-handle-evaluate-option-arg) are exposed in the page and can be called from the page function. Calling one returns a [Promise] of its result. The page-side functions are scoped to the execution context they were passed to and disappear when the page navigates. Defaults to `false`, in which case functions are not serializable and passing one throws an error, as before.
**Returns**
- [Promise]<[Serializable]>#
@@ -105,7 +109,7 @@ See [page.evaluateHandle()](/api/class-page.mdx#page-evaluate-handle) for more d
```js
await jsHandle.evaluateHandle(pageFunction);
-await jsHandle.evaluateHandle(pageFunction, arg);
+await jsHandle.evaluateHandle(pageFunction, arg, options);
```
**Arguments**
@@ -115,6 +119,10 @@ await jsHandle.evaluateHandle(pageFunction, arg);
- `arg` [EvaluationArgument] *(optional)*#
Optional argument to pass to [pageFunction](/api/class-jshandle.mdx#js-handle-evaluate-handle-option-expression).
+- `options` [Object] *(optional)*
+ - `exposeFunctions` [boolean] *(optional)* Added in: v1.62#
+
+ When set to `true`, functions passed inside [arg](/api/class-jshandle.mdx#js-handle-evaluate-handle-option-arg) are exposed in the page and can be called from the page function. Calling one returns a [Promise] of its result. The page-side functions are scoped to the execution context they were passed to and disappear when the page navigates. Defaults to `false`, in which case functions are not serializable and passing one throws an error, as before.
**Returns**
- [Promise]<[JSHandle]>#
@@ -256,6 +264,7 @@ await jsHandle.jsonValue();
[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"
diff --git a/nodejs/docs/api/class-keyboard.mdx b/nodejs/docs/api/class-keyboard.mdx
index aed63c6a94..096234a119 100644
--- a/nodejs/docs/api/class-keyboard.mdx
+++ b/nodejs/docs/api/class-keyboard.mdx
@@ -297,6 +297,7 @@ await keyboard.up(key);
[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"
diff --git a/nodejs/docs/api/class-location.mdx b/nodejs/docs/api/class-location.mdx
index 69e7deab7a..2a7640391b 100644
--- a/nodejs/docs/api/class-location.mdx
+++ b/nodejs/docs/api/class-location.mdx
@@ -135,6 +135,7 @@ location.line
[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"
diff --git a/nodejs/docs/api/class-locator.mdx b/nodejs/docs/api/class-locator.mdx
index e930534b97..1252521b5e 100644
--- a/nodejs/docs/api/class-locator.mdx
+++ b/nodejs/docs/api/class-locator.mdx
@@ -847,6 +847,9 @@ console.log(result); // prints "myId text 56"
Optional argument to pass to [pageFunction](/api/class-locator.mdx#locator-evaluate-option-expression).
- `options` [Object] *(optional)*
+ - `exposeFunctions` [boolean] *(optional)* Added in: v1.62#
+
+ When set to `true`, functions passed inside [arg](/api/class-locator.mdx#locator-evaluate-option-arg) are exposed in the page and can be called from the page function. Calling one returns a [Promise] of its result. The page-side functions are scoped to the execution context they were passed to and disappear when the page navigates. Defaults to `false`, in which case functions are not serializable and passing one throws an error, as before.
- `signal` [AbortSignal] *(optional)* Added in: v1.62#
Allows to cancel the operation using an [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal). If the signal is aborted, the operation will be aborted and throw an error. Note that providing a signal does not disable the default timeout, which can be changed using [browserContext.setDefaultTimeout()](/api/class-browsercontext.mdx#browser-context-set-default-timeout) or [page.setDefaultTimeout()](/api/class-page.mdx#page-set-default-timeout); pass `timeout: 0` to disable the timeout entirely.
@@ -922,6 +925,9 @@ await locator.evaluateHandle(pageFunction, arg, options);
Optional argument to pass to [pageFunction](/api/class-locator.mdx#locator-evaluate-handle-option-expression).
- `options` [Object] *(optional)*
+ - `exposeFunctions` [boolean] *(optional)* Added in: v1.62#
+
+ When set to `true`, functions passed inside [arg](/api/class-locator.mdx#locator-evaluate-handle-option-arg) are exposed in the page and can be called from the page function. Calling one returns a [Promise] of its result. The page-side functions are scoped to the execution context they were passed to and disappear when the page navigates. Defaults to `false`, in which case functions are not serializable and passing one throws an error, as before.
- `signal` [AbortSignal] *(optional)* Added in: v1.62#
Allows to cancel the operation using an [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal). If the signal is aborted, the operation will be aborted and throw an error. Note that providing a signal does not disable the default timeout, which can be changed using [browserContext.setDefaultTimeout()](/api/class-browsercontext.mdx#browser-context-set-default-timeout) or [page.setDefaultTimeout()](/api/class-page.mdx#page-set-default-timeout); pass `timeout: 0` to disable the timeout entirely.
@@ -1279,11 +1285,6 @@ await page.getByRole('button', { name: /submit/i }).click();
Required aria role.
- `options` [Object] *(optional)*
- - `busy` [boolean] *(optional)* Added in: v1.61#
-
- An attribute that is usually set by `aria-busy`.
-
- Learn more about [`aria-busy`](https://www.w3.org/TR/wai-aria-1.2/#aria-busy).
- `checked` [boolean] *(optional)*#
An attribute that is usually set by `aria-checked` or native `` controls.
@@ -2929,6 +2930,7 @@ To press a special key, like `Control` or `ArrowDown`, use [locator.press()](/ap
[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"
diff --git a/nodejs/docs/api/class-locatorassertions.mdx b/nodejs/docs/api/class-locatorassertions.mdx
index f697e0a01b..8b421e744d 100644
--- a/nodejs/docs/api/class-locatorassertions.mdx
+++ b/nodejs/docs/api/class-locatorassertions.mdx
@@ -1257,6 +1257,7 @@ await expect(locator).not.toContainText('error');
[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"
diff --git a/nodejs/docs/api/class-logger.mdx b/nodejs/docs/api/class-logger.mdx
index 1ccc47132e..f1f6307def 100644
--- a/nodejs/docs/api/class-logger.mdx
+++ b/nodejs/docs/api/class-logger.mdx
@@ -156,6 +156,7 @@ logger.log(name, severity, message, args, hints);
[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"
diff --git a/nodejs/docs/api/class-mouse.mdx b/nodejs/docs/api/class-mouse.mdx
index 4c0300d8eb..8fbbe6d65c 100644
--- a/nodejs/docs/api/class-mouse.mdx
+++ b/nodejs/docs/api/class-mouse.mdx
@@ -285,6 +285,7 @@ await mouse.wheel(deltaX, deltaY);
[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"
diff --git a/nodejs/docs/api/class-page.mdx b/nodejs/docs/api/class-page.mdx
index ff2f002f78..0c997395d8 100644
--- a/nodejs/docs/api/class-page.mdx
+++ b/nodejs/docs/api/class-page.mdx
@@ -633,6 +633,10 @@ await bodyHandle.dispose();
- `arg` [EvaluationArgument] *(optional)*#
Optional argument to pass to [pageFunction](/api/class-page.mdx#page-evaluate-option-expression).
+- `options` [Object] *(optional)*
+ - `exposeFunctions` [boolean] *(optional)* Added in: v1.62#
+
+ When set to `true`, functions passed inside [arg](/api/class-page.mdx#page-evaluate-option-arg) are exposed in the page and can be called from the page function. Calling one returns a [Promise] of its result. The page-side functions are scoped to the execution context they were passed to and disappear when the page navigates. Defaults to `false`, in which case functions are not serializable and passing one throws an error, as before.
**Returns**
- [Promise]<[Serializable]>#
@@ -678,6 +682,10 @@ await resultHandle.dispose();
- `arg` [EvaluationArgument] *(optional)*#
Optional argument to pass to [pageFunction](/api/class-page.mdx#page-evaluate-handle-option-expression).
+- `options` [Object] *(optional)*
+ - `exposeFunctions` [boolean] *(optional)* Added in: v1.62#
+
+ When set to `true`, functions passed inside [arg](/api/class-page.mdx#page-evaluate-handle-option-arg) are exposed in the page and can be called from the page function. Calling one returns a [Promise] of its result. The page-side functions are scoped to the execution context they were passed to and disappear when the page navigates. Defaults to `false`, in which case functions are not serializable and passing one throws an error, as before.
**Returns**
- [Promise]<[JSHandle]>#
@@ -1003,11 +1011,6 @@ await page.getByRole('button', { name: /submit/i }).click();
Required aria role.
- `options` [Object] *(optional)*
- - `busy` [boolean] *(optional)* Added in: v1.61#
-
- An attribute that is usually set by `aria-busy`.
-
- Learn more about [`aria-busy`](https://www.w3.org/TR/wai-aria-1.2/#aria-busy).
- `checked` [boolean] *(optional)*#
An attribute that is usually set by `aria-checked` or native `` controls.
@@ -4910,6 +4913,7 @@ await page.waitForTimeout(1000);
[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"
diff --git a/nodejs/docs/api/class-pageassertions.mdx b/nodejs/docs/api/class-pageassertions.mdx
index 79270651b6..06e771dbbc 100644
--- a/nodejs/docs/api/class-pageassertions.mdx
+++ b/nodejs/docs/api/class-pageassertions.mdx
@@ -425,6 +425,7 @@ await expect(page).not.toHaveURL('error');
[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"
diff --git a/nodejs/docs/api/class-playwright.mdx b/nodejs/docs/api/class-playwright.mdx
index e2392e423f..14ec4a5c2a 100644
--- a/nodejs/docs/api/class-playwright.mdx
+++ b/nodejs/docs/api/class-playwright.mdx
@@ -248,6 +248,7 @@ playwright.webkit
[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"
diff --git a/nodejs/docs/api/class-playwrightassertions.mdx b/nodejs/docs/api/class-playwrightassertions.mdx
index 9b97219f57..17d0a6ba03 100644
--- a/nodejs/docs/api/class-playwrightassertions.mdx
+++ b/nodejs/docs/api/class-playwrightassertions.mdx
@@ -176,6 +176,7 @@ Creates a [PageAssertions] object for the given [Page].
[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"
diff --git a/nodejs/docs/api/class-reporter.mdx b/nodejs/docs/api/class-reporter.mdx
index 82360408ae..be89415a94 100644
--- a/nodejs/docs/api/class-reporter.mdx
+++ b/nodejs/docs/api/class-reporter.mdx
@@ -364,35 +364,36 @@ reporter.onTestEnd(test, result);
---
-### preprocessSuite {/* #reporter-preprocess-suite */}
+### preprocess {/* #reporter-preprocess */}
-Added in: v1.61reporter.preprocessSuite
+Added in: v1.62reporter.preprocess
Called after the configuration has been resolved and before [reporter.onBegin()](/api/class-reporter.mdx#reporter-on-begin). Allows a reporter to mark individual tests as skipped, excluded, fixed or failing.
**Usage**
```js
-await reporter.preprocessSuite(config, suite);
+await reporter.preprocess(params);
```
**Arguments**
-- `config` [FullConfig]#
-
- Resolved configuration.
-- `suite` [Suite]#
-
- The root suite that contains the projects, files and test cases that will run.
+- `params` [Object]#
+ - `config` [FullConfig]
+
+ Resolved configuration.
+ - `suite` [Suite]
+
+ The root suite that contains the projects, files and test cases that will run.
+ - `testRun` [TestRun]
+
+ Control which tests will run and their expected status.
- The suite reflects `--project`, `--grep`/`--grep-invert` and `.only` filtering, so it only contains tests that match the current invocation. Setup and dependency projects are readonly and cannot be excluded from here.
+ The suite reflects `--project`, `--grep`/`--grep-invert` and `.only` filtering, so it only contains tests that match the current invocation. Setup and dependency projects are readonly and cannot be changed through [TestRun].
- The suite ignores the `--shard` argument: it always contains the full, un-sharded corpus. Playwright applies its built-in sharding after [reporter.preprocessSuite()](/api/class-reporter.mdx#reporter-preprocess-suite) returns, unless the returned `implementsSharding` is `true`.
+ The suite ignores the `--shard` argument: it always contains the full, un-sharded corpus. Playwright applies its built-in sharding after [reporter.preprocess()](/api/class-reporter.mdx#reporter-preprocess) returns, unless the reporter calls [testRun.skipSharding()](/api/class-testrun.mdx#test-run-skip-sharding).
**Returns**
-- [Promise]<[Object]>#
- - `implementsSharding` [boolean] *(optional)*
-
- When `true`, Playwright skips its built-in shard filter for this run, leaving sharding to the reporter (typically implemented by calling [testCase.exclude()](/api/class-testcase.mdx#test-case-exclude) on out-of-shard tests).
+- [Promise]<[void]>#
---
@@ -483,6 +484,7 @@ reporter.printsToStdio();
[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"
diff --git a/nodejs/docs/api/class-request.mdx b/nodejs/docs/api/class-request.mdx
index 54b3d03883..48727e8e53 100644
--- a/nodejs/docs/api/class-request.mdx
+++ b/nodejs/docs/api/class-request.mdx
@@ -427,28 +427,28 @@ console.log(request.timing());
Request start time in milliseconds elapsed since January 1, 1970 00:00:00 UTC
- `domainLookupStart` [number]
- Time immediately before the browser starts the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately before the client starts the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `domainLookupEnd` [number]
- Time immediately after the browser starts the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately after the client ends the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `connectStart` [number]
- Time immediately before the user agent starts establishing the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately before the client starts establishing the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `secureConnectionStart` [number]
- Time immediately before the browser starts the handshake process to secure the current connection. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately before the client starts the handshake process to secure the current connection. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `connectEnd` [number]
- Time immediately before the user agent starts establishing the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately after the client establishes the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `requestStart` [number]
- Time immediately before the browser starts requesting the resource from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately before the client starts requesting the resource from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `responseStart` [number]
- Time immediately after the browser receives the first byte of the response from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately after the client receives the first byte of the response from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `responseEnd` [number]
- Time immediately after the browser receives the last byte of the resource or immediately before the transport connection is closed, whichever comes first. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately after the client receives the last byte of the resource or immediately before the transport connection is closed, whichever comes first. The value is given in milliseconds relative to `startTime`, -1 if not available.
---
@@ -539,6 +539,7 @@ request.url();
[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"
diff --git a/nodejs/docs/api/class-response.mdx b/nodejs/docs/api/class-response.mdx
index 9c255cc5b3..60e000af72 100644
--- a/nodejs/docs/api/class-response.mdx
+++ b/nodejs/docs/api/class-response.mdx
@@ -445,6 +445,7 @@ response.url();
[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"
diff --git a/nodejs/docs/api/class-route.mdx b/nodejs/docs/api/class-route.mdx
index 75166eb122..be2c8d04b6 100644
--- a/nodejs/docs/api/class-route.mdx
+++ b/nodejs/docs/api/class-route.mdx
@@ -386,6 +386,7 @@ route.request();
[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"
diff --git a/nodejs/docs/api/class-screencast.mdx b/nodejs/docs/api/class-screencast.mdx
index c7a6e97aa1..18bf822da3 100644
--- a/nodejs/docs/api/class-screencast.mdx
+++ b/nodejs/docs/api/class-screencast.mdx
@@ -307,6 +307,7 @@ await screencast.stop();
[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"
diff --git a/nodejs/docs/api/class-selectors.mdx b/nodejs/docs/api/class-selectors.mdx
index ca2adbac00..3e68deb234 100644
--- a/nodejs/docs/api/class-selectors.mdx
+++ b/nodejs/docs/api/class-selectors.mdx
@@ -171,6 +171,7 @@ selectors.setTestIdAttribute(attributeName);
[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"
diff --git a/nodejs/docs/api/class-snapshotassertions.mdx b/nodejs/docs/api/class-snapshotassertions.mdx
index 562df30663..17ca9b5138 100644
--- a/nodejs/docs/api/class-snapshotassertions.mdx
+++ b/nodejs/docs/api/class-snapshotassertions.mdx
@@ -189,6 +189,7 @@ Note that matching snapshots only work with Playwright test runner.
[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"
diff --git a/nodejs/docs/api/class-suite.mdx b/nodejs/docs/api/class-suite.mdx
index eb11f22cad..8981288f95 100644
--- a/nodejs/docs/api/class-suite.mdx
+++ b/nodejs/docs/api/class-suite.mdx
@@ -63,60 +63,6 @@ suite.entries();
---
-### exclude {/* #suite-exclude */}
-
-Added in: v1.61suite.exclude
-
-Must be called from inside [reporter.preprocessSuite()](/api/class-reporter.mdx#reporter-preprocess-suite), exclude this suite from the run. Excluded tests do not appear in the report and their body is not executed.
-
-**Usage**
-
-```js
-suite.exclude();
-```
-
----
-
-### fail {/* #suite-fail */}
-
-Added in: v1.61suite.fail
-
-Must be called from inside [reporter.preprocessSuite()](/api/class-reporter.mdx#reporter-preprocess-suite). Mark every [TestCase] of this suite as expected-to-fail, see [testCase.fail()](/api/class-testcase.mdx#test-case-fail).
-
-**Usage**
-
-```js
-suite.fail();
-suite.fail(reason);
-```
-
-**Arguments**
-- `reason` [string] *(optional)*#
-
- Optional explanation surfaced as the annotation description.
-
----
-
-### fixme {/* #suite-fixme */}
-
-Added in: v1.61suite.fixme
-
-Must be called from inside [reporter.preprocessSuite()](/api/class-reporter.mdx#reporter-preprocess-suite). Mark every [TestCase] of this suite as fixme, see [testCase.fixme()](/api/class-testcase.mdx#test-case-fixme).
-
-**Usage**
-
-```js
-suite.fixme();
-suite.fixme(reason);
-```
-
-**Arguments**
-- `reason` [string] *(optional)*#
-
- Optional explanation surfaced as the annotation description.
-
----
-
### project {/* #suite-project */}
Added in: v1.10suite.project
@@ -134,26 +80,6 @@ suite.project();
---
-### skip {/* #suite-skip */}
-
-Added in: v1.61suite.skip
-
-Must be called from inside [reporter.preprocessSuite()](/api/class-reporter.mdx#reporter-preprocess-suite). Mark every [TestCase] of this suite as skipped, see [testCase.skip()](/api/class-testcase.mdx#test-case-skip).
-
-**Usage**
-
-```js
-suite.skip();
-suite.skip(reason);
-```
-
-**Arguments**
-- `reason` [string] *(optional)*#
-
- Optional explanation surfaced as the annotation description.
-
----
-
### titlePath {/* #suite-title-path */}
Added in: v1.10suite.titlePath
@@ -349,6 +275,7 @@ suite.type
[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"
diff --git a/nodejs/docs/api/class-test.mdx b/nodejs/docs/api/class-test.mdx
index 3d4eafc1ec..da9ffa1bdd 100644
--- a/nodejs/docs/api/class-test.mdx
+++ b/nodejs/docs/api/class-test.mdx
@@ -1975,6 +1975,7 @@ test.describe.serial.only(() => {
[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"
diff --git a/nodejs/docs/api/class-testcase.mdx b/nodejs/docs/api/class-testcase.mdx
index 96c7db0a53..a900656918 100644
--- a/nodejs/docs/api/class-testcase.mdx
+++ b/nodejs/docs/api/class-testcase.mdx
@@ -14,60 +14,6 @@ import HTMLCard from '@site/src/components/HTMLCard';
## Methods
-### exclude {/* #test-case-exclude */}
-
-Added in: v1.61testCase.exclude
-
-Must be called from inside [reporter.preprocessSuite()](/api/class-reporter.mdx#reporter-preprocess-suite), exclude this test from the run. Excluded tests do not appear in the report and their body is not executed.
-
-**Usage**
-
-```js
-testCase.exclude();
-```
-
----
-
-### fail {/* #test-case-fail */}
-
-Added in: v1.61testCase.fail
-
-Must be called from inside [reporter.preprocessSuite()](/api/class-reporter.mdx#reporter-preprocess-suite), mark this test as "should fail". Playwright runs the test and ensures it is actually failing, useful for documenting broken functionality until it is fixed.
-
-**Usage**
-
-```js
-testCase.fail();
-testCase.fail(reason);
-```
-
-**Arguments**
-- `reason` [string] *(optional)*#
-
- Optional explanation surfaced as the annotation description.
-
----
-
-### fixme {/* #test-case-fixme */}
-
-Added in: v1.61testCase.fixme
-
-Must be called from inside [reporter.preprocessSuite()](/api/class-reporter.mdx#reporter-preprocess-suite), mark this test as fixme. The test body is not executed and the test is reported as skipped, with the intention to fix it.
-
-**Usage**
-
-```js
-testCase.fixme();
-testCase.fixme(reason);
-```
-
-**Arguments**
-- `reason` [string] *(optional)*#
-
- Optional explanation surfaced as the annotation description.
-
----
-
### ok {/* #test-case-ok */}
Added in: v1.10testCase.ok
@@ -104,26 +50,6 @@ testCase.outcome();
---
-### skip {/* #test-case-skip */}
-
-Added in: v1.61testCase.skip
-
-Must be called from inside [reporter.preprocessSuite()](/api/class-reporter.mdx#reporter-preprocess-suite), skip this test. The test body is not executed and the test is reported as skipped.
-
-**Usage**
-
-```js
-testCase.skip();
-testCase.skip(reason);
-```
-
-**Arguments**
-- `reason` [string] *(optional)*#
-
- Optional explanation surfaced as the annotation description.
-
----
-
### titlePath {/* #test-case-title-path */}
Added in: v1.10testCase.titlePath
@@ -435,6 +361,7 @@ testCase.type
[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"
diff --git a/nodejs/docs/api/class-testconfig.mdx b/nodejs/docs/api/class-testconfig.mdx
index 3365fc2449..3c82e2bd99 100644
--- a/nodejs/docs/api/class-testconfig.mdx
+++ b/nodejs/docs/api/class-testconfig.mdx
@@ -359,6 +359,104 @@ export default defineConfig({
---
+### httpCache {/* #test-config-http-cache */}
+
+Added in: v1.62testConfig.httpCache
+
+Records network responses to disk and replays them on later runs, so large static dependencies are downloaded from a remote server once instead of on every run. This is most useful against a slow or remote environment such as staging.
+
+When `httpCache` is set, Playwright starts a caching proxy for the run and routes all browser traffic through it. On the first run, eligible responses are recorded under `dir`; on subsequent runs they are served from disk without reaching the network. A single proxy is shared by all workers, so a resource fetched by one worker is a cache hit for the rest, and the cache persists across runs until you delete `dir`.
+
+Loopback traffic (`localhost`, `127.0.0.1`) is never cached — a local dev server already serves from disk, so there is nothing to optimize. The cache targets remote origins.
+
+**What is cached by default**
+
+With no `match`, the cache stores only **shared static assets**: successful `GET` requests the browser makes for a static subresource — a script, stylesheet, image, font, or media element — as reported by the request's `Sec-Fetch-Dest` metadata. These bytes do not depend on who is signed in, so replaying them into a fresh browser context is always safe, which keeps tests that each create their own context isolated by construction.
+
+The following are therefore **not** cached by default:
+* `fetch`/`XMLHttpRequest` (API) requests and top-level documents — their request destination is not a static subresource. This is the dynamic, per-user surface.
+* Any response marked `Cache-Control: no-store`.
+* Any response carrying a personalization signal: `Cache-Control: private`, a `Set-Cookie` header, or `Vary: Cookie`/`Vary: Authorization`.
+
+The `Authorization` and `Cookie` request headers are deliberately ignored when deciding what to cache. On a gated staging environment these are a shared environment credential attached to every request, not a per-user identity, so caching on their presence would be wrong.
+
+Freshness directives (`max-age`, `no-cache`, `Expires`) are ignored: once a response is recorded it is replayed until `dir` is deleted, keeping runs deterministic. `Vary` is honored — responses are keyed by the request-header values they vary on, and `Vary: *` is never stored.
+
+**Customizing with `match`**
+
+A string or [RegExp] restricts caching to requests whose URL matches; other requests pass straight through to the network. For full control, pass a callback that returns a decision object per request:
+* `disposition` — `'cache'` force-stores the response and serves it back, `'no-cache'` bypasses the cache entirely, and `'default'` (or an empty object) applies the rules above.
+* `identity` — a stable principal id (such as a session token) that partitions the cache. Entries recorded under one identity are never served to a request with a different one, so per-user content can be cached without leaking across contexts. The value is hashed into the cache key and never written to disk.
+
+Set `proxy` to fetch cache misses through an upstream proxy — for example, to reach a staging environment that is only accessible behind one. Browsers connect to the caching proxy, which chains to `proxy` for anything not served from disk.
+
+**Usage**
+
+Cache shared static assets from a staging server with zero configuration:
+
+```js title="playwright.config.ts"
+import { defineConfig } from '@playwright/test';
+
+export default defineConfig({
+ httpCache: { dir: './.network-cache' },
+});
+```
+
+Fetch cache misses through an upstream proxy:
+
+```js title="playwright.config.ts"
+import { defineConfig } from '@playwright/test';
+
+export default defineConfig({
+ httpCache: { dir: './.network-cache', proxy: { server: 'http://myproxy.com:3128' } },
+});
+```
+
+Take control per request — force-cache a per-user API response with session isolation, and bypass the cache for others:
+
+```js title="playwright.config.ts"
+import { defineConfig } from '@playwright/test';
+
+export default defineConfig({
+ httpCache: {
+ dir: './.network-cache',
+ match: request => {
+ if (request.url.includes('/api/config'))
+ return { disposition: 'cache', identity: request.headers.get('authorization') };
+ if (request.url.includes('/telemetry'))
+ return { disposition: 'no-cache' };
+ return {};
+ },
+ },
+});
+```
+
+**Type**
+- [Object]
+ - `dir` [string]
+
+ Directory where the cache is stored, resolved relative to the configuration file.
+ - `match` [string] | [RegExp] | [HttpCachePolicy] *(optional)*
+
+ Limits or customizes what is cached. A glob pattern or regular expression restricts caching to requests whose URL matches; a callback returns a per-request decision (see [HttpCachePolicy]). When omitted, every request is considered with the default behavior.
+ - `proxy` [Object] *(optional)*
+ - `server` [string]
+
+ Proxy to be used for all requests. HTTP and SOCKS proxies are supported, for example `http://myproxy.com:3128` or `socks5://myproxy.com:3128`. Short form `myproxy.com:3128` is considered an HTTP proxy.
+ - `bypass` [string] *(optional)*
+
+ Optional comma-separated domains to bypass proxy.
+ - `username` [string] *(optional)*
+
+ Optional username to use if HTTP proxy requires authentication.
+ - `password` [string] *(optional)*
+
+ Optional password to use if HTTP proxy requires authentication.
+
+ Upstream proxy for cache misses.
+
+---
+
### ignoreSnapshots {/* #test-config-ignore-snapshots */}
Added in: v1.26testConfig.ignoreSnapshots
@@ -680,7 +778,7 @@ export default defineConfig({
Controls when failed tests are retried. Defaults to `'immediate'`.
* `'immediate'` - A failed test is retried as soon as a worker is available, interleaved with the rest of the run. This is the default.
-* `'deferred'` - Retries are run only after all tests have had their first attempt, in parallel up to the configured number of [workers](#test-config-workers).
+* `'isolated'` - Retries are run at the end, after all other tests have finished, one by one in a single worker. This minimizes the interference between retried tests and the rest of the suite, at the expense of the total run time.
Learn more about [test retries](../test-retries.mdx#retries).
@@ -691,12 +789,12 @@ import { defineConfig } from '@playwright/test';
export default defineConfig({
retries: 2,
- retryStrategy: 'deferred',
+ retryStrategy: 'isolated',
});
```
**Type**
-- "immediate" | "deferred"
+- "immediate" | "isolated"
---
@@ -1325,6 +1423,7 @@ This path will serve as the base directory for each test file snapshot directory
[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"
diff --git a/nodejs/docs/api/class-testerror.mdx b/nodejs/docs/api/class-testerror.mdx
index c137708e8b..5e72b0c7cc 100644
--- a/nodejs/docs/api/class-testerror.mdx
+++ b/nodejs/docs/api/class-testerror.mdx
@@ -186,6 +186,7 @@ testError.value
[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"
diff --git a/nodejs/docs/api/class-testinfo.mdx b/nodejs/docs/api/class-testinfo.mdx
index bb648f9781..11687c709e 100644
--- a/nodejs/docs/api/class-testinfo.mdx
+++ b/nodejs/docs/api/class-testinfo.mdx
@@ -932,6 +932,7 @@ testInfo.workerIndex
[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"
diff --git a/nodejs/docs/api/class-testinfoerror.mdx b/nodejs/docs/api/class-testinfoerror.mdx
index af8813d5b7..ac38eb7783 100644
--- a/nodejs/docs/api/class-testinfoerror.mdx
+++ b/nodejs/docs/api/class-testinfoerror.mdx
@@ -169,6 +169,7 @@ testInfoError.value
[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"
diff --git a/nodejs/docs/api/class-testoptions.mdx b/nodejs/docs/api/class-testoptions.mdx
index 3f3ac3fe02..cec293d807 100644
--- a/nodejs/docs/api/class-testoptions.mdx
+++ b/nodejs/docs/api/class-testoptions.mdx
@@ -1079,6 +1079,9 @@ Learn more about [recording video](../test-use-options.mdx#recording-options).
- `fontSize` [number] *(optional)*
Font size of the action title in pixels. Defaults to `24`.
+ - `cursor` "none" | "pointer" *(optional)*
+
+ Cursor decoration shown for pointer actions. `"pointer"` (the default) renders a mouse pointer that animates from the previous action point to the next one. `"none"` disables the cursor decoration.
Controls visual annotations on interacted elements.
- `test` [Object] *(optional)*
@@ -1202,6 +1205,7 @@ export default defineConfig({
[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"
diff --git a/nodejs/docs/api/class-testproject.mdx b/nodejs/docs/api/class-testproject.mdx
index 70347dafa2..8ab4446e6d 100644
--- a/nodejs/docs/api/class-testproject.mdx
+++ b/nodejs/docs/api/class-testproject.mdx
@@ -844,6 +844,7 @@ export default defineConfig({
[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"
diff --git a/nodejs/docs/api/class-testresult.mdx b/nodejs/docs/api/class-testresult.mdx
index 0d25b8cd38..8cbc06d91d 100644
--- a/nodejs/docs/api/class-testresult.mdx
+++ b/nodejs/docs/api/class-testresult.mdx
@@ -337,6 +337,7 @@ testResult.workerIndex
[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"
diff --git a/nodejs/docs/api/class-testrun.mdx b/nodejs/docs/api/class-testrun.mdx
new file mode 100644
index 0000000000..9883fde35e
--- /dev/null
+++ b/nodejs/docs/api/class-testrun.mdx
@@ -0,0 +1,229 @@
+---
+id: class-testrun
+title: "TestRun"
+---
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import HTMLCard from '@site/src/components/HTMLCard';
+
+
+Controls which tests will run and their expected status. A [TestRun] is available during [reporter.preprocess()](/api/class-reporter.mdx#reporter-preprocess). Setup and teardown projects cannot be changed.
+
+
+---
+
+## Methods
+
+### exclude {/* #test-run-exclude */}
+
+Added in: v1.62testRun.exclude
+
+Excludes a test or suite from the run. Excluded tests do not appear in the report and their bodies are not executed.
+
+**Usage**
+
+```js
+testRun.exclude(test);
+```
+
+**Arguments**
+- `test` [TestCase] | [Suite]#
+
+ Test or suite to exclude. The root suite cannot be excluded.
+
+---
+
+### fail {/* #test-run-fail */}
+
+Added in: v1.62testRun.fail
+
+Marks a test or every test in a suite as "should fail". Playwright runs the tests and ensures they are actually failing, useful for documenting broken functionality until it is fixed.
+
+**Usage**
+
+```js
+testRun.fail(test);
+testRun.fail(test, reason);
+```
+
+**Arguments**
+- `test` [TestCase] | [Suite]#
+
+ Test or suite to mark as expected-to-fail.
+- `reason` [string] *(optional)*#
+
+ Optional explanation surfaced as the annotation description.
+
+---
+
+### fixme {/* #test-run-fixme */}
+
+Added in: v1.62testRun.fixme
+
+Marks a test or every test in a suite as fixme. The test bodies are not executed and the tests are reported as skipped, with the intention to fix them.
+
+**Usage**
+
+```js
+testRun.fixme(test);
+testRun.fixme(test, reason);
+```
+
+**Arguments**
+- `test` [TestCase] | [Suite]#
+
+ Test or suite to mark as fixme.
+- `reason` [string] *(optional)*#
+
+ Optional explanation surfaced as the annotation description.
+
+---
+
+### skip {/* #test-run-skip */}
+
+Added in: v1.62testRun.skip
+
+Skips a test or every test in a suite. The test bodies are not executed and the tests are reported as skipped.
+
+**Usage**
+
+```js
+testRun.skip(test);
+testRun.skip(test, reason);
+```
+
+**Arguments**
+- `test` [TestCase] | [Suite]#
+
+ Test or suite to skip.
+- `reason` [string] *(optional)*#
+
+ Optional explanation surfaced as the annotation description.
+
+---
+
+### skipSharding {/* #test-run-skip-sharding */}
+
+Added in: v1.62testRun.skipSharding
+
+Disables Playwright's built-in shard filter for this run, leaving sharding to the reporter. Reporters typically implement their own sharding by calling [testRun.exclude()](/api/class-testrun.mdx#test-run-exclude) on out-of-shard tests.
+
+**Usage**
+
+```js
+testRun.skipSharding();
+```
+
+
+[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"
+[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-teststep.mdx b/nodejs/docs/api/class-teststep.mdx
index 0e023001d8..a863a443ad 100644
--- a/nodejs/docs/api/class-teststep.mdx
+++ b/nodejs/docs/api/class-teststep.mdx
@@ -7,7 +7,7 @@ import TabItem from '@theme/TabItem';
import HTMLCard from '@site/src/components/HTMLCard';
-Represents a step in the [TestRun].
+Represents a step in a [TestResult].
---
@@ -300,6 +300,7 @@ testStep.title
[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"
diff --git a/nodejs/docs/api/class-teststepinfo.mdx b/nodejs/docs/api/class-teststepinfo.mdx
index c03b8aa95f..5fd3377b53 100644
--- a/nodejs/docs/api/class-teststepinfo.mdx
+++ b/nodejs/docs/api/class-teststepinfo.mdx
@@ -231,6 +231,7 @@ testStepInfo.titlePath
[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"
diff --git a/nodejs/docs/api/class-timeouterror.mdx b/nodejs/docs/api/class-timeouterror.mdx
index a43ed87f2c..56f947c6aa 100644
--- a/nodejs/docs/api/class-timeouterror.mdx
+++ b/nodejs/docs/api/class-timeouterror.mdx
@@ -102,6 +102,7 @@ const playwright = require('playwright');
[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"
diff --git a/nodejs/docs/api/class-touchscreen.mdx b/nodejs/docs/api/class-touchscreen.mdx
index cf96380287..fd94d4b592 100644
--- a/nodejs/docs/api/class-touchscreen.mdx
+++ b/nodejs/docs/api/class-touchscreen.mdx
@@ -116,6 +116,7 @@ await touchscreen.tap(x, y);
[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"
diff --git a/nodejs/docs/api/class-tracing.mdx b/nodejs/docs/api/class-tracing.mdx
index a57a8c0eeb..87a77d0b39 100644
--- a/nodejs/docs/api/class-tracing.mdx
+++ b/nodejs/docs/api/class-tracing.mdx
@@ -356,6 +356,7 @@ await tracing.stopHar();
[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"
diff --git a/nodejs/docs/api/class-video.mdx b/nodejs/docs/api/class-video.mdx
index 6310df7b89..8185fdce02 100644
--- a/nodejs/docs/api/class-video.mdx
+++ b/nodejs/docs/api/class-video.mdx
@@ -144,6 +144,7 @@ await video.saveAs(path);
[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"
diff --git a/nodejs/docs/api/class-weberror.mdx b/nodejs/docs/api/class-weberror.mdx
index 6673c58801..f789888afa 100644
--- a/nodejs/docs/api/class-weberror.mdx
+++ b/nodejs/docs/api/class-weberror.mdx
@@ -152,6 +152,7 @@ webError.page();
[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"
diff --git a/nodejs/docs/api/class-websocket.mdx b/nodejs/docs/api/class-websocket.mdx
index 83d0b92a9f..a100e24f4f 100644
--- a/nodejs/docs/api/class-websocket.mdx
+++ b/nodejs/docs/api/class-websocket.mdx
@@ -235,6 +235,7 @@ webSocket.on('socketerror', data => {});
[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"
diff --git a/nodejs/docs/api/class-websocketroute.mdx b/nodejs/docs/api/class-websocketroute.mdx
index b1b163676e..b7608fb030 100644
--- a/nodejs/docs/api/class-websocketroute.mdx
+++ b/nodejs/docs/api/class-websocketroute.mdx
@@ -307,6 +307,7 @@ webSocketRoute.url();
[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"
diff --git a/nodejs/docs/api/class-webstorage.mdx b/nodejs/docs/api/class-webstorage.mdx
index 9203a5200e..52c857ceff 100644
--- a/nodejs/docs/api/class-webstorage.mdx
+++ b/nodejs/docs/api/class-webstorage.mdx
@@ -203,6 +203,7 @@ await webStorage.setItem(name, value);
[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"
diff --git a/nodejs/docs/api/class-worker.mdx b/nodejs/docs/api/class-worker.mdx
index b0c0bc2be9..63c5771235 100644
--- a/nodejs/docs/api/class-worker.mdx
+++ b/nodejs/docs/api/class-worker.mdx
@@ -247,6 +247,7 @@ worker.on('console', data => {});
[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"
diff --git a/nodejs/docs/api/class-workerinfo.mdx b/nodejs/docs/api/class-workerinfo.mdx
index c55bcaccb7..5dcd2b86b1 100644
--- a/nodejs/docs/api/class-workerinfo.mdx
+++ b/nodejs/docs/api/class-workerinfo.mdx
@@ -156,6 +156,7 @@ workerInfo.workerIndex
[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"
diff --git a/nodejs/docs/aria-snapshots.mdx b/nodejs/docs/aria-snapshots.mdx
index b7c940bfb4..1e0031abff 100644
--- a/nodejs/docs/aria-snapshots.mdx
+++ b/nodejs/docs/aria-snapshots.mdx
@@ -529,6 +529,7 @@ The `aria-invalid` value is surfaced directly. A value of `true` renders as `[in
[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"
diff --git a/nodejs/docs/auth.mdx b/nodejs/docs/auth.mdx
index 063d3ae630..f520bfbfa7 100644
--- a/nodejs/docs/auth.mdx
+++ b/nodejs/docs/auth.mdx
@@ -598,6 +598,7 @@ test('not signed in test', async ({ page }) => {
[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"
diff --git a/nodejs/docs/best-practices.mdx b/nodejs/docs/best-practices.mdx
index 1b901c0624..253dad0ea1 100644
--- a/nodejs/docs/best-practices.mdx
+++ b/nodejs/docs/best-practices.mdx
@@ -582,6 +582,7 @@ await page.getByRole('link', { name: 'next page' }).click();
[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"
diff --git a/nodejs/docs/browser-contexts.mdx b/nodejs/docs/browser-contexts.mdx
index 2aade0cf11..36f256da86 100644
--- a/nodejs/docs/browser-contexts.mdx
+++ b/nodejs/docs/browser-contexts.mdx
@@ -186,6 +186,7 @@ const userPage = await userContext.newPage();
[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"
diff --git a/nodejs/docs/browsers.mdx b/nodejs/docs/browsers.mdx
index 56ebf9b92d..e8f16d652d 100644
--- a/nodejs/docs/browsers.mdx
+++ b/nodejs/docs/browsers.mdx
@@ -710,6 +710,7 @@ npx playwright uninstall --all
[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"
diff --git a/nodejs/docs/canary-releases.mdx b/nodejs/docs/canary-releases.mdx
index c6af41fa07..a2f3cb8935 100644
--- a/nodejs/docs/canary-releases.mdx
+++ b/nodejs/docs/canary-releases.mdx
@@ -112,6 +112,7 @@ The stable and the `next` documentation is published on [playwright.dev](https:/
[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"
diff --git a/nodejs/docs/chrome-extensions.mdx b/nodejs/docs/chrome-extensions.mdx
index 957acdad5e..c0ec1544f8 100644
--- a/nodejs/docs/chrome-extensions.mdx
+++ b/nodejs/docs/chrome-extensions.mdx
@@ -187,6 +187,7 @@ test('popup page', async ({ page, extensionId }) => {
[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"
diff --git a/nodejs/docs/ci-intro.mdx b/nodejs/docs/ci-intro.mdx
index 8a4e6901d2..50af460031 100644
--- a/nodejs/docs/ci-intro.mdx
+++ b/nodejs/docs/ci-intro.mdx
@@ -235,6 +235,7 @@ Artifacts like trace files, HTML reports or even the console logs contain inform
[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"
diff --git a/nodejs/docs/ci.mdx b/nodejs/docs/ci.mdx
index 04134ee301..c817cd0f6a 100644
--- a/nodejs/docs/ci.mdx
+++ b/nodejs/docs/ci.mdx
@@ -577,6 +577,7 @@ xvfb-run npx playwright test
[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"
diff --git a/nodejs/docs/clock.mdx b/nodejs/docs/clock.mdx
index af2056f6de..c7c43a4f9d 100644
--- a/nodejs/docs/clock.mdx
+++ b/nodejs/docs/clock.mdx
@@ -248,6 +248,7 @@ await expect(page.getByTestId('current-time')).toHaveText('2/2/2024, 10:00:02 AM
[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"
diff --git a/nodejs/docs/codegen-intro.mdx b/nodejs/docs/codegen-intro.mdx
index 14408f1765..8b4619ac75 100644
--- a/nodejs/docs/codegen-intro.mdx
+++ b/nodejs/docs/codegen-intro.mdx
@@ -134,6 +134,7 @@ You can generate tests using emulation for specific viewports, devices, color sc
[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"
diff --git a/nodejs/docs/codegen.mdx b/nodejs/docs/codegen.mdx
index 2809b1cb97..5dfb2ffba4 100644
--- a/nodejs/docs/codegen.mdx
+++ b/nodejs/docs/codegen.mdx
@@ -290,6 +290,7 @@ const { chromium } = require('@playwright/test');
[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"
diff --git a/nodejs/docs/debug.mdx b/nodejs/docs/debug.mdx
index 3969b21ea4..2f35bf301e 100644
--- a/nodejs/docs/debug.mdx
+++ b/nodejs/docs/debug.mdx
@@ -387,6 +387,7 @@ await chromium.launch({ headless: false, slowMo: 100 });
[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"
diff --git a/nodejs/docs/dialogs.mdx b/nodejs/docs/dialogs.mdx
index ac3b252cdb..72e283dce8 100644
--- a/nodejs/docs/dialogs.mdx
+++ b/nodejs/docs/dialogs.mdx
@@ -140,6 +140,7 @@ This will wait for the print dialog to be opened after the button is clicked. Ma
[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"
diff --git a/nodejs/docs/docker.mdx b/nodejs/docs/docker.mdx
index 10140ea47b..fd94502a20 100644
--- a/nodejs/docs/docker.mdx
+++ b/nodejs/docs/docker.mdx
@@ -241,6 +241,7 @@ RUN npx -y playwright@1.61.1 install --with-deps
[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"
diff --git a/nodejs/docs/downloads.mdx b/nodejs/docs/downloads.mdx
index 0a5c02b0b5..81a81ea33e 100644
--- a/nodejs/docs/downloads.mdx
+++ b/nodejs/docs/downloads.mdx
@@ -116,6 +116,7 @@ For uploading files, see the [uploading files](./input.mdx#upload-files) section
[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"
diff --git a/nodejs/docs/emulation.mdx b/nodejs/docs/emulation.mdx
index ecd9fca54e..0c58d3e008 100644
--- a/nodejs/docs/emulation.mdx
+++ b/nodejs/docs/emulation.mdx
@@ -677,6 +677,7 @@ const context = await browser.newContext({
[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"
diff --git a/nodejs/docs/evaluating.mdx b/nodejs/docs/evaluating.mdx
index 72de9e6ca2..26192ead36 100644
--- a/nodejs/docs/evaluating.mdx
+++ b/nodejs/docs/evaluating.mdx
@@ -209,6 +209,7 @@ test.beforeEach(async ({ page }) => {
[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"
diff --git a/nodejs/docs/events.mdx b/nodejs/docs/events.mdx
index 9bef97d975..6189696399 100644
--- a/nodejs/docs/events.mdx
+++ b/nodejs/docs/events.mdx
@@ -129,6 +129,7 @@ await page.evaluate("prompt('Enter a number:')");
[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"
diff --git a/nodejs/docs/extensibility.mdx b/nodejs/docs/extensibility.mdx
index 3ea4a93513..584b244e70 100644
--- a/nodejs/docs/extensibility.mdx
+++ b/nodejs/docs/extensibility.mdx
@@ -136,6 +136,7 @@ test('selector engine test', async ({ page }) => {
[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"
diff --git a/nodejs/docs/frames.mdx b/nodejs/docs/frames.mdx
index 0595160679..833372628b 100644
--- a/nodejs/docs/frames.mdx
+++ b/nodejs/docs/frames.mdx
@@ -105,6 +105,7 @@ await frame.fill('#username-input', 'John');
[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"
diff --git a/nodejs/docs/getting-started-cli.mdx b/nodejs/docs/getting-started-cli.mdx
index 124318a254..cc6eec8c99 100644
--- a/nodejs/docs/getting-started-cli.mdx
+++ b/nodejs/docs/getting-started-cli.mdx
@@ -381,6 +381,7 @@ This requires the [Playwright Extension](https://github.com/microsoft/playwright
[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"
diff --git a/nodejs/docs/getting-started-mcp.mdx b/nodejs/docs/getting-started-mcp.mdx
index 345d7c865e..905294dd39 100644
--- a/nodejs/docs/getting-started-mcp.mdx
+++ b/nodejs/docs/getting-started-mcp.mdx
@@ -299,6 +299,7 @@ Then point your MCP client to the HTTP endpoint:
[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"
diff --git a/nodejs/docs/getting-started-vscode.mdx b/nodejs/docs/getting-started-vscode.mdx
index 4112bf699b..fb9c662b2e 100644
--- a/nodejs/docs/getting-started-vscode.mdx
+++ b/nodejs/docs/getting-started-vscode.mdx
@@ -215,6 +215,7 @@ If you have multiple `playwright.config.ts` files, you can switch between them u
[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"
diff --git a/nodejs/docs/handles.mdx b/nodejs/docs/handles.mdx
index 6a19a4e997..ac4df98e24 100644
--- a/nodejs/docs/handles.mdx
+++ b/nodejs/docs/handles.mdx
@@ -189,6 +189,7 @@ await locator.click();
[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"
diff --git a/nodejs/docs/input.mdx b/nodejs/docs/input.mdx
index 74b2eb08ce..3fc9741c48 100644
--- a/nodejs/docs/input.mdx
+++ b/nodejs/docs/input.mdx
@@ -336,6 +336,7 @@ await page.getByTestId('scrolling-container').evaluate(e => e.scrollTop += 100);
[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"
diff --git a/nodejs/docs/intro.mdx b/nodejs/docs/intro.mdx
index 1b21762c6d..dfa3d2d4b4 100644
--- a/nodejs/docs/intro.mdx
+++ b/nodejs/docs/intro.mdx
@@ -341,6 +341,7 @@ pnpm exec playwright --version
[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"
diff --git a/nodejs/docs/languages.mdx b/nodejs/docs/languages.mdx
index 17dba40adc..6fa454e482 100644
--- a/nodejs/docs/languages.mdx
+++ b/nodejs/docs/languages.mdx
@@ -106,6 +106,7 @@ Playwright for .NET comes with MSTest, NUnit, xUnit, and xUnit v3 [base classes]
[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"
diff --git a/nodejs/docs/library.mdx b/nodejs/docs/library.mdx
index bb585d9acd..b45dd8c709 100644
--- a/nodejs/docs/library.mdx
+++ b/nodejs/docs/library.mdx
@@ -493,6 +493,7 @@ let page: import('playwright').Page;
[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"
diff --git a/nodejs/docs/locators.mdx b/nodejs/docs/locators.mdx
index 0748ce2279..edcd5bae5b 100644
--- a/nodejs/docs/locators.mdx
+++ b/nodejs/docs/locators.mdx
@@ -987,6 +987,7 @@ For less commonly used locators, look at the [other locators](./other-locators.m
[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"
diff --git a/nodejs/docs/mock-browser.mdx b/nodejs/docs/mock-browser.mdx
index 7bc08660ce..fa799f5a11 100644
--- a/nodejs/docs/mock-browser.mdx
+++ b/nodejs/docs/mock-browser.mdx
@@ -236,6 +236,7 @@ test('update battery status (no golden)', async ({ page }) => {
[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"
diff --git a/nodejs/docs/mock.mdx b/nodejs/docs/mock.mdx
index 895255f4a3..841dc6a438 100644
--- a/nodejs/docs/mock.mdx
+++ b/nodejs/docs/mock.mdx
@@ -249,6 +249,7 @@ For more details, see [WebSocketRoute].
[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"
diff --git a/nodejs/docs/navigations.mdx b/nodejs/docs/navigations.mdx
index 573e5e117f..e168544c6d 100644
--- a/nodejs/docs/navigations.mdx
+++ b/nodejs/docs/navigations.mdx
@@ -148,6 +148,7 @@ Playwright splits the process of showing a new document in a page into **navigat
[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"
diff --git a/nodejs/docs/network.mdx b/nodejs/docs/network.mdx
index d5010a2f07..8f43e6da27 100644
--- a/nodejs/docs/network.mdx
+++ b/nodejs/docs/network.mdx
@@ -413,6 +413,7 @@ If you're interested in not solely using Service Workers for testing and network
[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"
diff --git a/nodejs/docs/other-locators.mdx b/nodejs/docs/other-locators.mdx
index 37a6e83167..73debe85bb 100644
--- a/nodejs/docs/other-locators.mdx
+++ b/nodejs/docs/other-locators.mdx
@@ -476,6 +476,7 @@ For example, `css=article >> text=Hello` captures the element with the text `Hel
[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"
diff --git a/nodejs/docs/pages.mdx b/nodejs/docs/pages.mdx
index 8144a663d1..23cd80da3e 100644
--- a/nodejs/docs/pages.mdx
+++ b/nodejs/docs/pages.mdx
@@ -162,6 +162,7 @@ page.on('popup', async popup => {
[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"
diff --git a/nodejs/docs/pom.mdx b/nodejs/docs/pom.mdx
index 79a3a6d2a6..c710190404 100644
--- a/nodejs/docs/pom.mdx
+++ b/nodejs/docs/pom.mdx
@@ -238,6 +238,7 @@ await expect(playwrightDev.tocList).toHaveText([
[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"
diff --git a/nodejs/docs/protractor.mdx b/nodejs/docs/protractor.mdx
index 5fea5c8c1b..4efe66970e 100644
--- a/nodejs/docs/protractor.mdx
+++ b/nodejs/docs/protractor.mdx
@@ -238,6 +238,7 @@ Learn more about Playwright Test runner:
[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"
diff --git a/nodejs/docs/puppeteer.mdx b/nodejs/docs/puppeteer.mdx
index ee823a270f..ca1026dd43 100644
--- a/nodejs/docs/puppeteer.mdx
+++ b/nodejs/docs/puppeteer.mdx
@@ -243,6 +243,7 @@ Learn more about Playwright Test runner:
[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"
diff --git a/nodejs/docs/release-notes.mdx b/nodejs/docs/release-notes.mdx
index 1bb819d8ae..06949c5442 100644
--- a/nodejs/docs/release-notes.mdx
+++ b/nodejs/docs/release-notes.mdx
@@ -3673,6 +3673,7 @@ This version of Playwright was also tested against the following stable channels
[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"
diff --git a/nodejs/docs/running-tests.mdx b/nodejs/docs/running-tests.mdx
index bec2fdddfd..ae2bfb3abd 100644
--- a/nodejs/docs/running-tests.mdx
+++ b/nodejs/docs/running-tests.mdx
@@ -249,6 +249,7 @@ You can filter and search for tests as well as click on each test to see the tes
[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"
diff --git a/nodejs/docs/screenshots.mdx b/nodejs/docs/screenshots.mdx
index ae0366171b..3dba14ce65 100644
--- a/nodejs/docs/screenshots.mdx
+++ b/nodejs/docs/screenshots.mdx
@@ -113,6 +113,7 @@ await page.locator('.header').screenshot({ path: 'screenshot.png' });
[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"
diff --git a/nodejs/docs/selenium-grid.mdx b/nodejs/docs/selenium-grid.mdx
index 92ecb31bcb..293a05548f 100644
--- a/nodejs/docs/selenium-grid.mdx
+++ b/nodejs/docs/selenium-grid.mdx
@@ -195,6 +195,7 @@ This means that Selenium 3 is supported in a best-effort manner, where Playwrigh
[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"
diff --git a/nodejs/docs/service-workers.mdx b/nodejs/docs/service-workers.mdx
index ec0490b109..6a7bad9617 100644
--- a/nodejs/docs/service-workers.mdx
+++ b/nodejs/docs/service-workers.mdx
@@ -201,6 +201,7 @@ Requests for updated Service Worker main script code currently cannot be routed
[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"
diff --git a/nodejs/docs/test-agents.mdx b/nodejs/docs/test-agents.mdx
index bf800e26c3..59c474c552 100644
--- a/nodejs/docs/test-agents.mdx
+++ b/nodejs/docs/test-agents.mdx
@@ -333,6 +333,7 @@ Seed tests provide a ready-to-use `page` context to bootstrap execution.
[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"
diff --git a/nodejs/docs/test-annotations.mdx b/nodejs/docs/test-annotations.mdx
index 74681223f4..3ee741152a 100644
--- a/nodejs/docs/test-annotations.mdx
+++ b/nodejs/docs/test-annotations.mdx
@@ -389,6 +389,7 @@ test('example test', async ({ page, browser }) => {
[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"
diff --git a/nodejs/docs/test-assertions.mdx b/nodejs/docs/test-assertions.mdx
index 503d076008..e706ce8a8d 100644
--- a/nodejs/docs/test-assertions.mdx
+++ b/nodejs/docs/test-assertions.mdx
@@ -439,6 +439,7 @@ test('passes', async ({ database }) => {
[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"
diff --git a/nodejs/docs/test-cli.mdx b/nodejs/docs/test-cli.mdx
index 18986bb47c..6f946ce5fa 100644
--- a/nodejs/docs/test-cli.mdx
+++ b/nodejs/docs/test-cli.mdx
@@ -402,6 +402,7 @@ npx playwright clear-cache
[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"
diff --git a/nodejs/docs/test-components.mdx b/nodejs/docs/test-components.mdx
index 52bd8a540b..ccbf5ac10b 100644
--- a/nodejs/docs/test-components.mdx
+++ b/nodejs/docs/test-components.mdx
@@ -852,6 +852,7 @@ Accessing a component's internal methods or its instance within test code is nei
[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"
diff --git a/nodejs/docs/test-configuration.mdx b/nodejs/docs/test-configuration.mdx
index 9c6a1a42f7..3a98c2e385 100644
--- a/nodejs/docs/test-configuration.mdx
+++ b/nodejs/docs/test-configuration.mdx
@@ -225,6 +225,7 @@ export default defineConfig({
[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"
diff --git a/nodejs/docs/test-fixtures.mdx b/nodejs/docs/test-fixtures.mdx
index ae78877e10..944c99a59b 100644
--- a/nodejs/docs/test-fixtures.mdx
+++ b/nodejs/docs/test-fixtures.mdx
@@ -928,6 +928,7 @@ Note that the fixtures will still run once per [worker process](./test-parallel.
[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"
diff --git a/nodejs/docs/test-global-setup-teardown.mdx b/nodejs/docs/test-global-setup-teardown.mdx
index dd306517e1..03d93089c1 100644
--- a/nodejs/docs/test-global-setup-teardown.mdx
+++ b/nodejs/docs/test-global-setup-teardown.mdx
@@ -346,6 +346,7 @@ export default globalSetup;
[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"
diff --git a/nodejs/docs/test-parallel.mdx b/nodejs/docs/test-parallel.mdx
index 185181ecb1..7430783c3e 100644
--- a/nodejs/docs/test-parallel.mdx
+++ b/nodejs/docs/test-parallel.mdx
@@ -140,6 +140,44 @@ test.describe('runs in parallel with other describes', () => {
});
```
+## Avoiding shared state in parallel tests
+
+Playwright runs tests in separate worker processes, each with its own isolated [BrowserContext], so cookies, storage and in-memory globals are already isolated. Flakiness comes from state that lives *outside* a single test. Here are recipes for the common cases.
+
+### Give each test its own backend data
+
+Two tests that create or edit the same record race with each other. Derive a unique identifier from [testInfo.testId](/api/class-testinfo.mdx#test-info-test-id) so parallel tests never collide:
+
+```js
+import { test, expect } from '@playwright/test';
+
+test('creates an order', async ({ page }, testInfo) => {
+ const orderId = `order-${testInfo.testId}`;
+ await page.goto(`/orders/new?id=${orderId}`);
+ await expect(page.getByText(orderId)).toBeVisible();
+});
+```
+
+If many tests can share one dataset, create it once per worker instead — see [Isolate test data between parallel workers](#isolate-test-data-between-parallel-workers).
+
+### Write to a unique file path
+
+Multiple tests writing the same path clobber each other. [testInfo.outputPath()](/api/class-testinfo.mdx#test-info-output-path) returns a path scoped to the current test:
+
+```js
+import { test } from '@playwright/test';
+import fs from 'fs';
+
+test('exports a CSV', async ({ page }, testInfo) => {
+ const file = testInfo.outputPath('export.csv');
+ await fs.promises.writeFile(file, 'a,b,c', 'utf8');
+});
+```
+
+### Keep tests independent
+
+Above all, [keep your tests isolated](./writing-tests.mdx#test-isolation) from one another. A test that leaks state through a module-level variable or depends on another test's side effects works when tests run in order, but breaks the moment they run in parallel or in a different order. Set up everything a test needs in that test or in a [fixture](./test-fixtures.mdx#creating-a-fixture), and never rely on another test having run first.
+
## Shard tests between multiple machines
Playwright Test can shard a test suite, so that it can be executed on multiple machines. See [sharding guide](./test-sharding.mdx) for more details.
@@ -354,6 +392,7 @@ Do not define your tests directly in a helper file. This could lead to unexpecte
[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"
diff --git a/nodejs/docs/test-parameterize.mdx b/nodejs/docs/test-parameterize.mdx
index 4be286ab73..ed9e692720 100644
--- a/nodejs/docs/test-parameterize.mdx
+++ b/nodejs/docs/test-parameterize.mdx
@@ -491,6 +491,7 @@ for (const record of records) {
[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"
diff --git a/nodejs/docs/test-projects.mdx b/nodejs/docs/test-projects.mdx
index a400a32052..1adc6f369a 100644
--- a/nodejs/docs/test-projects.mdx
+++ b/nodejs/docs/test-projects.mdx
@@ -298,6 +298,7 @@ Projects can be also used to parametrize tests with your custom configuration -
[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"
diff --git a/nodejs/docs/test-reporters.mdx b/nodejs/docs/test-reporters.mdx
index 4d91acc9c1..75c3bdeadf 100644
--- a/nodejs/docs/test-reporters.mdx
+++ b/nodejs/docs/test-reporters.mdx
@@ -275,6 +275,7 @@ HTML report supports the following configuration options and environment variabl
| `PLAYWRIGHT_HTML_NO_COPY_PROMPT` | `noCopyPrompt` | If true, disable rendering of the Copy prompt for errors. Supports `true`, `1`, `false`, and `0`. | `false`
| `PLAYWRIGHT_HTML_NO_SNIPPETS` | `noSnippets` | If true, disable rendering code snippets in the action log. If there is a top level error, that report section with code snippet will still render. Supports `true`, `1`, `false`, and `0`. | `false`
| `PLAYWRIGHT_HTML_DO_NOT_INLINE_ASSETS` | `doNotInlineAssets` | If true, JavaScript, CSS and report data are written as separate files alongside `index.html` instead of being embedded inline. Use this when serving the report under a strict [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP) that disallows inline scripts and styles. Supports `true`, `1`, `false`, and `0`. | `false`
+| `PLAYWRIGHT_HTML_MERGE_FILES` | `mergeFiles` | If true, tests are grouped by their top-level `test.describe()` title instead of the file they belong to. Supports `true`, `1`, `false`, and `0`. | `false`
### Blob reporter
@@ -590,6 +591,7 @@ Here's a short list of open source reporter implementations that you can take a
[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"
diff --git a/nodejs/docs/test-retries.mdx b/nodejs/docs/test-retries.mdx
index 230178391d..b8ac7a7628 100644
--- a/nodejs/docs/test-retries.mdx
+++ b/nodejs/docs/test-retries.mdx
@@ -314,6 +314,7 @@ test('runs second', async () => {
[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"
diff --git a/nodejs/docs/test-sharding.mdx b/nodejs/docs/test-sharding.mdx
index 9267d5760c..3c0d5363d3 100644
--- a/nodejs/docs/test-sharding.mdx
+++ b/nodejs/docs/test-sharding.mdx
@@ -281,6 +281,7 @@ Supported options:
[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"
diff --git a/nodejs/docs/test-snapshots.mdx b/nodejs/docs/test-snapshots.mdx
index c464f76734..1cb0e3fbcc 100644
--- a/nodejs/docs/test-snapshots.mdx
+++ b/nodejs/docs/test-snapshots.mdx
@@ -217,6 +217,7 @@ Snapshots are stored next to the test file, in a separate directory. For example
[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"
diff --git a/nodejs/docs/test-timeouts.mdx b/nodejs/docs/test-timeouts.mdx
index 2849c02a9f..dd678135ff 100644
--- a/nodejs/docs/test-timeouts.mdx
+++ b/nodejs/docs/test-timeouts.mdx
@@ -282,6 +282,7 @@ API reference: [test.extend()](/api/class-test.mdx#test-extend).
[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"
diff --git a/nodejs/docs/test-typescript.mdx b/nodejs/docs/test-typescript.mdx
index 0dc1dc1706..e9e835c16e 100644
--- a/nodejs/docs/test-typescript.mdx
+++ b/nodejs/docs/test-typescript.mdx
@@ -210,6 +210,7 @@ Then `npm run test` will build the tests and run them.
[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"
diff --git a/nodejs/docs/test-ui-mode.mdx b/nodejs/docs/test-ui-mode.mdx
index 6b83aa8e3d..997cdd69dc 100644
--- a/nodejs/docs/test-ui-mode.mdx
+++ b/nodejs/docs/test-ui-mode.mdx
@@ -204,6 +204,7 @@ Be aware that when specifying the `--ui-host=0.0.0.0` flag, UI Mode with your tr
[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"
diff --git a/nodejs/docs/test-use-options.mdx b/nodejs/docs/test-use-options.mdx
index b9cd12c501..b4fa11aad8 100644
--- a/nodejs/docs/test-use-options.mdx
+++ b/nodejs/docs/test-use-options.mdx
@@ -471,6 +471,7 @@ test('no base url', async ({ page }) => {
[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"
diff --git a/nodejs/docs/test-webserver.mdx b/nodejs/docs/test-webserver.mdx
index f95bcba925..2ab46ef6a7 100644
--- a/nodejs/docs/test-webserver.mdx
+++ b/nodejs/docs/test-webserver.mdx
@@ -203,6 +203,7 @@ export default defineConfig({
[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"
diff --git a/nodejs/docs/testing-library.mdx b/nodejs/docs/testing-library.mdx
index f15d3b728c..0969f38aff 100644
--- a/nodejs/docs/testing-library.mdx
+++ b/nodejs/docs/testing-library.mdx
@@ -226,6 +226,7 @@ Learn more about Playwright Test runner:
[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"
diff --git a/nodejs/docs/touch-events.mdx b/nodejs/docs/touch-events.mdx
index cee51ecd51..ded3c1ccfa 100644
--- a/nodejs/docs/touch-events.mdx
+++ b/nodejs/docs/touch-events.mdx
@@ -214,6 +214,7 @@ test(`pinch in gesture to zoom out the map`, async ({ page }) => {
[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"
diff --git a/nodejs/docs/trace-viewer-intro.mdx b/nodejs/docs/trace-viewer-intro.mdx
index b5c344f199..55b1f55860 100644
--- a/nodejs/docs/trace-viewer-intro.mdx
+++ b/nodejs/docs/trace-viewer-intro.mdx
@@ -146,6 +146,7 @@ To learn more about traces, check out our detailed guide on [Trace Viewer](/trac
[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"
diff --git a/nodejs/docs/trace-viewer.mdx b/nodejs/docs/trace-viewer.mdx
index 1f3970861e..3836a63d52 100644
--- a/nodejs/docs/trace-viewer.mdx
+++ b/nodejs/docs/trace-viewer.mdx
@@ -283,6 +283,7 @@ The "Attachments" tab allows you to explore attachments. If you're doing [visual
[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"
diff --git a/nodejs/docs/videos.mdx b/nodejs/docs/videos.mdx
index 1f960445a4..057774f1fd 100644
--- a/nodejs/docs/videos.mdx
+++ b/nodejs/docs/videos.mdx
@@ -165,6 +165,7 @@ Note that the video is only available after the page or browser context is close
[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"
diff --git a/nodejs/docs/webview2.mdx b/nodejs/docs/webview2.mdx
index 9049a15d50..3dad44afa2 100644
--- a/nodejs/docs/webview2.mdx
+++ b/nodejs/docs/webview2.mdx
@@ -187,6 +187,7 @@ For debugging tests, see the Playwright [Debugging guide](./debug).
[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"
diff --git a/nodejs/docs/writing-tests.mdx b/nodejs/docs/writing-tests.mdx
index e2c84381a2..0cc7faad4f 100644
--- a/nodejs/docs/writing-tests.mdx
+++ b/nodejs/docs/writing-tests.mdx
@@ -242,6 +242,7 @@ test.describe('navigation', () => {
[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"
diff --git a/python/docs/api/class-apiresponse.mdx b/python/docs/api/class-apiresponse.mdx
index 62a7d93752..af0698d987 100644
--- a/python/docs/api/class-apiresponse.mdx
+++ b/python/docs/api/class-apiresponse.mdx
@@ -282,6 +282,50 @@ api_response.status_text
---
+### timing {/* #api-response-timing */}
+
+Added in: v1.62apiResponse.timing
+
+Returns resource timing information for given response. For redirected requests, returns the information for the last request in the redirect chain. When the response is served [from the HAR file](../mock.mdx#replaying-from-har), timing information is not available and all the values are -1. Find more information at [Resource Timing API](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming).
+
+**Usage**
+
+```python
+api_response.timing
+```
+
+**Returns**
+- [Dict]#
+ - `startTime` [float]
+
+ Request start time in milliseconds elapsed since January 1, 1970 00:00:00 UTC
+ - `domainLookupStart` [float]
+
+ Time immediately before the client starts the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `domainLookupEnd` [float]
+
+ Time immediately after the client ends the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `connectStart` [float]
+
+ Time immediately before the client starts establishing the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `secureConnectionStart` [float]
+
+ Time immediately before the client starts the handshake process to secure the current connection. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `connectEnd` [float]
+
+ Time immediately after the client establishes the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `requestStart` [float]
+
+ Time immediately before the client starts requesting the resource from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `responseStart` [float]
+
+ Time immediately after the client receives the first byte of the response from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ - `responseEnd` [float]
+
+ Time immediately after the client receives the last byte of the resource or immediately before the transport connection is closed, whichever comes first. The value is given in milliseconds relative to `startTime`, -1 if not available.
+
+---
+
### url {/* #api-response-url */}
Added in: v1.16apiResponse.url
diff --git a/python/docs/api/class-clock.mdx b/python/docs/api/class-clock.mdx
index 76ff65e124..0080354a1a 100644
--- a/python/docs/api/class-clock.mdx
+++ b/python/docs/api/class-clock.mdx
@@ -88,7 +88,7 @@ clock.install(**kwargs)
**Arguments**
- `time` [float] | [str] | [datetime] *(optional)*#
- Time to initialize with, current system time by default.
+ Time to initialize with, current system time by default. Numeric values are Unix time in seconds.
**Returns**
- [NoneType]#
@@ -168,7 +168,7 @@ await page.clock.pause_at(datetime.datetime(2024, 12, 10, 10, 0, 0))
**Arguments**
- `time` [float] | [str] | [datetime]#
- Time to pause at.
+ Time to pause at. Numeric values are Unix time in seconds.
**Returns**
- [NoneType]#
@@ -277,7 +277,7 @@ await page.clock.set_fixed_time("2020-02-02")
**Arguments**
- `time` [float] | [str] | [datetime]#
- Time to be set.
+ Time to be set. Numeric values are Unix time in seconds.
**Returns**
- [NoneType]#
@@ -323,7 +323,7 @@ await page.clock.set_system_time("2020-02-02")
**Arguments**
- `time` [float] | [str] | [datetime]#
- Time to be set.
+ Time to be set. Numeric values are Unix time in seconds.
**Returns**
- [NoneType]#
diff --git a/python/docs/api/class-frame.mdx b/python/docs/api/class-frame.mdx
index 57cae4a20c..5d5642e48d 100644
--- a/python/docs/api/class-frame.mdx
+++ b/python/docs/api/class-frame.mdx
@@ -755,11 +755,6 @@ await page.get_by_role("button", name=re.compile("submit", re.IGNORECASE)).click
- `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.
-- `busy` [bool] *(optional)* Added in: v1.61#
-
- An attribute that is usually set by `aria-busy`.
-
- Learn more about [`aria-busy`](https://www.w3.org/TR/wai-aria-1.2/#aria-busy).
- `checked` [bool] *(optional)*#
An attribute that is usually set by `aria-checked` or native `` controls.
diff --git a/python/docs/api/class-framelocator.mdx b/python/docs/api/class-framelocator.mdx
index 24afd2dc38..3f8e9e400e 100644
--- a/python/docs/api/class-framelocator.mdx
+++ b/python/docs/api/class-framelocator.mdx
@@ -322,11 +322,6 @@ await page.get_by_role("button", name=re.compile("submit", re.IGNORECASE)).click
- `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.
-- `busy` [bool] *(optional)* Added in: v1.61#
-
- An attribute that is usually set by `aria-busy`.
-
- Learn more about [`aria-busy`](https://www.w3.org/TR/wai-aria-1.2/#aria-busy).
- `checked` [bool] *(optional)*#
An attribute that is usually set by `aria-checked` or native `` controls.
diff --git a/python/docs/api/class-locator.mdx b/python/docs/api/class-locator.mdx
index 03325fc11d..d74dd11376 100644
--- a/python/docs/api/class-locator.mdx
+++ b/python/docs/api/class-locator.mdx
@@ -1639,11 +1639,6 @@ await page.get_by_role("button", name=re.compile("submit", re.IGNORECASE)).click
- `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.
-- `busy` [bool] *(optional)* Added in: v1.61#
-
- An attribute that is usually set by `aria-busy`.
-
- Learn more about [`aria-busy`](https://www.w3.org/TR/wai-aria-1.2/#aria-busy).
- `checked` [bool] *(optional)*#
An attribute that is usually set by `aria-checked` or native `` controls.
diff --git a/python/docs/api/class-locatorassertions.mdx b/python/docs/api/class-locatorassertions.mdx
index 5d5b3667ac..cc75e9abd2 100644
--- a/python/docs/api/class-locatorassertions.mdx
+++ b/python/docs/api/class-locatorassertions.mdx
@@ -437,17 +437,17 @@ The opposite of [expect(locator).to_have_attribute()](/api/class-locatorassertio
**Usage**
```python
-expect(locator).not_to_have_attribute(name, value)
-expect(locator).not_to_have_attribute(name, value, **kwargs)
+expect(locator).not_to_have_attribute(name)
+expect(locator).not_to_have_attribute(name, **kwargs)
```
**Arguments**
- `name` [str] Added in: v1.18#
Attribute name.
-- `value` [str] | [Pattern] Added in: v1.18#
+- `value` [str] | [Pattern] *(optional)* Added in: v1.62#
- Expected attribute value.
+ Expected attribute value. If not specified, the assertion verifies that the attribute is absent.
- `ignore_case` [bool] *(optional)* Added in: v1.40#
Whether to perform case-insensitive match. [ignore_case](/api/class-locatorassertions.mdx#locator-assertions-not-to-have-attribute-option-ignore-case) option takes precedence over the corresponding regular expression flag if specified.
@@ -1648,6 +1648,8 @@ from playwright.sync_api import expect
locator = page.locator("input")
expect(locator).to_have_attribute("type", "text")
+expect(locator).to_have_attribute("disabled")
+expect(locator).not_to_have_attribute("readonly")
```
@@ -1658,6 +1660,8 @@ from playwright.async_api import expect
locator = page.locator("input")
await expect(locator).to_have_attribute("type", "text")
+await expect(locator).to_have_attribute("disabled")
+await expect(locator).not_to_have_attribute("readonly")
```
@@ -1667,9 +1671,9 @@ await expect(locator).to_have_attribute("type", "text")
- `name` [str] Added in: v1.18#
Attribute name.
-- `value` [str] | [Pattern] Added in: v1.18#
+- `value` [str] | [Pattern] *(optional)* Added in: v1.62#
- Expected attribute value.
+ Expected attribute value. If not specified, the assertion verifies that the attribute is present.
- `ignore_case` [bool] *(optional)* Added in: v1.40#
Whether to perform case-insensitive match. [ignore_case](/api/class-locatorassertions.mdx#locator-assertions-to-have-attribute-option-ignore-case) option takes precedence over the corresponding regular expression flag if specified.
diff --git a/python/docs/api/class-page.mdx b/python/docs/api/class-page.mdx
index 38b9174f89..5813d04c22 100644
--- a/python/docs/api/class-page.mdx
+++ b/python/docs/api/class-page.mdx
@@ -1869,11 +1869,6 @@ await page.get_by_role("button", name=re.compile("submit", re.IGNORECASE)).click
- `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.
-- `busy` [bool] *(optional)* Added in: v1.61#
-
- An attribute that is usually set by `aria-busy`.
-
- Learn more about [`aria-busy`](https://www.w3.org/TR/wai-aria-1.2/#aria-busy).
- `checked` [bool] *(optional)*#
An attribute that is usually set by `aria-checked` or native `` controls.
diff --git a/python/docs/api/class-request.mdx b/python/docs/api/class-request.mdx
index 14a4925d96..abb05e8477 100644
--- a/python/docs/api/class-request.mdx
+++ b/python/docs/api/class-request.mdx
@@ -480,28 +480,28 @@ print(request.timing)
Request start time in milliseconds elapsed since January 1, 1970 00:00:00 UTC
- `domainLookupStart` [float]
- Time immediately before the browser starts the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately before the client starts the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `domainLookupEnd` [float]
- Time immediately after the browser starts the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately after the client ends the domain name lookup for the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `connectStart` [float]
- Time immediately before the user agent starts establishing the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately before the client starts establishing the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `secureConnectionStart` [float]
- Time immediately before the browser starts the handshake process to secure the current connection. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately before the client starts the handshake process to secure the current connection. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `connectEnd` [float]
- Time immediately before the user agent starts establishing the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately after the client establishes the connection to the server to retrieve the resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `requestStart` [float]
- Time immediately before the browser starts requesting the resource from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately before the client starts requesting the resource from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `responseStart` [float]
- Time immediately after the browser receives the first byte of the response from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately after the client receives the first byte of the response from the server, cache, or local resource. The value is given in milliseconds relative to `startTime`, -1 if not available.
- `responseEnd` [float]
- Time immediately after the browser receives the last byte of the resource or immediately before the transport connection is closed, whichever comes first. The value is given in milliseconds relative to `startTime`, -1 if not available.
+ Time immediately after the client receives the last byte of the resource or immediately before the transport connection is closed, whichever comes first. The value is given in milliseconds relative to `startTime`, -1 if not available.
---
diff --git a/src/components/GitHubStarButton/index.tsx b/src/components/GitHubStarButton/index.tsx
index 5226a2f39e..9d5ef74a7f 100644
--- a/src/components/GitHubStarButton/index.tsx
+++ b/src/components/GitHubStarButton/index.tsx
@@ -6,7 +6,7 @@ type StarButtonProps = {
repo: string
}
-const STARS = '92k+'; // NOTE: this line is generated by src/generate.js. Do not change!
+const STARS = '93k+'; // NOTE: this line is generated by src/generate.js. Do not change!
const StarButton: React.FC = ({owner, repo}) => {
if (!repo)