diff --git a/dotnet/versioned_docs/version-stable/actionability.mdx b/dotnet/versioned_docs/version-stable/actionability.mdx
index 7f5775c1f2..59e74a3488 100644
--- a/dotnet/versioned_docs/version-stable/actionability.mdx
+++ b/dotnet/versioned_docs/version-stable/actionability.mdx
@@ -134,6 +134,7 @@ For example, consider a scenario where Playwright will click `Sign Up` button re
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -164,6 +165,7 @@ For example, consider a scenario where Playwright will click `Sign Up` button re
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api-testing.mdx b/dotnet/versioned_docs/version-stable/api-testing.mdx
index 590d5003a9..86601ec14b 100644
--- a/dotnet/versioned_docs/version-stable/api-testing.mdx
+++ b/dotnet/versioned_docs/version-stable/api-testing.mdx
@@ -426,6 +426,7 @@ var context = await Browser.NewContextAsync(new() { StorageState = state });
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -456,6 +457,7 @@ var context = await Browser.NewContextAsync(new() { StorageState = state });
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-apirequest.mdx b/dotnet/versioned_docs/version-stable/api/class-apirequest.mdx
index 055395d486..e5799f96a9 100644
--- a/dotnet/versioned_docs/version-stable/api/class-apirequest.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-apirequest.mdx
@@ -143,6 +143,7 @@ await ApiRequest.NewContextAsync(options);
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -173,6 +174,7 @@ await ApiRequest.NewContextAsync(options);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-apirequestcontext.mdx b/dotnet/versioned_docs/version-stable/api/class-apirequestcontext.mdx
index bb6ad1b370..90e4351a03 100644
--- a/dotnet/versioned_docs/version-stable/api/class-apirequestcontext.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-apirequestcontext.mdx
@@ -598,6 +598,7 @@ ApiRequestContext.Tracing
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -628,6 +629,7 @@ ApiRequestContext.Tracing
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-apiresponse.mdx b/dotnet/versioned_docs/version-stable/api/class-apiresponse.mdx
index 11e6681955..9a4ed66b68 100644
--- a/dotnet/versioned_docs/version-stable/api/class-apiresponse.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-apiresponse.mdx
@@ -122,6 +122,60 @@ ApiResponse.Ok
**Returns**
- [bool]#
+---
+
+### SecurityDetailsAsync {/* #api-response-security-details */}
+
+Added in: v1.61apiResponse.SecurityDetailsAsync
+
+Returns SSL and other security information. Resolves to `null` for non-HTTPS responses. For redirected requests, returns the information for the last request in the redirect chain.
+
+**Usage**
+
+```csharp
+await ApiResponse.SecurityDetailsAsync();
+```
+
+**Returns**
+- SecurityDetails?#
+ - `issuer` [string]? *(optional)*
+
+ Common Name component of the Issuer field. from the certificate. This should only be used for informational purposes. Optional.
+ - `protocol` [string]? *(optional)*
+
+ The specific TLS protocol used. (e.g. `TLS 1.3`). Optional.
+ - `subjectName` [string]? *(optional)*
+
+ Common Name component of the Subject field from the certificate. This should only be used for informational purposes. Optional.
+ - `validFrom` [float]? *(optional)*
+
+ Unix timestamp (in seconds) specifying when this cert becomes valid. Optional.
+ - `validTo` [float]? *(optional)*
+
+ Unix timestamp (in seconds) specifying when this cert becomes invalid. Optional.
+
+---
+
+### ServerAddrAsync {/* #api-response-server-addr */}
+
+Added in: v1.61apiResponse.ServerAddrAsync
+
+Returns the IP address and port of the server. Resolves to `null` if the server address is not available. For redirected requests, returns the information for the last request in the redirect chain.
+
+**Usage**
+
+```csharp
+await ApiResponse.ServerAddrAsync();
+```
+
+**Returns**
+- ServerAddr?#
+ - `ipAddress` [string]
+
+ IPv4 or IPV6 address of the server.
+ - `port` [int]
+
+
---
### Status {/* #api-response-status */}
@@ -202,6 +256,7 @@ ApiResponse.Url
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -232,6 +287,7 @@ ApiResponse.Url
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-apiresponseassertions.mdx b/dotnet/versioned_docs/version-stable/api/class-apiresponseassertions.mdx
index 55ec49d39c..93d6b881c2 100644
--- a/dotnet/versioned_docs/version-stable/api/class-apiresponseassertions.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-apiresponseassertions.mdx
@@ -80,6 +80,7 @@ await Expect(response).Not.ToBeOKAsync();
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -110,6 +111,7 @@ await Expect(response).Not.ToBeOKAsync();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-browser.mdx b/dotnet/versioned_docs/version-stable/api/class-browser.mdx
index f8cdb0493a..234cd9bd01 100644
--- a/dotnet/versioned_docs/version-stable/api/class-browser.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-browser.mdx
@@ -703,6 +703,7 @@ Browser.Disconnected += async (_, browser) => {};
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -733,6 +734,7 @@ Browser.Disconnected += async (_, browser) => {};
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-browsercontext.mdx b/dotnet/versioned_docs/version-stable/api/class-browsercontext.mdx
index d56264ac7d..2499945640 100644
--- a/dotnet/versioned_docs/version-stable/api/class-browsercontext.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-browsercontext.mdx
@@ -1035,6 +1035,23 @@ BrowserContext.Clock
---
+### Credentials {/* #browser-context-credentials */}
+
+Added in: v1.61browserContext.Credentials
+
+Virtual WebAuthn authenticator for this context. Lets tests seed credentials and intercept `navigator.credentials.create()` / `navigator.credentials.get()` ceremonies.
+
+**Usage**
+
+```csharp
+BrowserContext.Credentials
+```
+
+**Type**
+- [Credentials]
+
+---
+
### Debugger {/* #browser-context-debugger */}
Added in: v1.59browserContext.Debugger
@@ -1369,7 +1386,7 @@ BrowserContext.WebError += async (_, webError) => {};
Added in: v1.11browserContext.event BackgroundPage
-:::warning Deprecated
+:::warning[Deprecated]
Background pages have been removed from Chromium together with Manifest V2 extensions.
@@ -1393,7 +1410,7 @@ BrowserContext.BackgroundPage += async (_, page) => {};
Added in: v1.11browserContext.BackgroundPages
-:::warning Deprecated
+:::warning[Deprecated]
Background pages have been removed from Chromium together with Manifest V2 extensions.
@@ -1423,6 +1440,7 @@ BrowserContext.BackgroundPages
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -1453,6 +1471,7 @@ BrowserContext.BackgroundPages
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-browsertype.mdx b/dotnet/versioned_docs/version-stable/api/class-browsertype.mdx
index 12d714547f..ba4bbf9cbf 100644
--- a/dotnet/versioned_docs/version-stable/api/class-browsertype.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-browsertype.mdx
@@ -113,6 +113,9 @@ var page = defaultContext.Pages[0];
A CDP websocket endpoint or http url to connect to. For example `http://localhost:9222/` or `ws://127.0.0.1:9222/devtools/browser/387adf4c-243f-4051-a181-46798f4a46f4`.
- `options` `BrowserTypeConnectOverCDPOptions?` *(optional)*
+ - `ArtifactsDir` [string]? *(optional)* Added in: v1.61#
+
+ If specified, browser artifacts (such as traces and downloads) are saved into this directory.
- `Headers` [IDictionary]?<[string], [string]> *(optional)* Added in: v1.11#
Additional HTTP headers to be sent with connect request. Optional.
@@ -574,6 +577,7 @@ BrowserType.Name
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -604,6 +608,7 @@ BrowserType.Name
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-cdpsession.mdx b/dotnet/versioned_docs/version-stable/api/class-cdpsession.mdx
index 23ae228b2a..10de76efcf 100644
--- a/dotnet/versioned_docs/version-stable/api/class-cdpsession.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-cdpsession.mdx
@@ -121,6 +121,7 @@ CdpSession.Close += async (_, cDPSession) => {};
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -151,6 +152,7 @@ CdpSession.Close += async (_, cDPSession) => {};
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-cdpsessionevent.mdx b/dotnet/versioned_docs/version-stable/api/class-cdpsessionevent.mdx
index 9e50ed01c8..d9c30181e3 100644
--- a/dotnet/versioned_docs/version-stable/api/class-cdpsessionevent.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-cdpsessionevent.mdx
@@ -58,6 +58,7 @@ CdpSessionEvent.OnEvent += async (_, jsonElement) => {};
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -88,6 +89,7 @@ CdpSessionEvent.OnEvent += async (_, jsonElement) => {};
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-clock.mdx b/dotnet/versioned_docs/version-stable/api/class-clock.mdx
index 6e4a6e0272..83c0f35fb6 100644
--- a/dotnet/versioned_docs/version-stable/api/class-clock.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-clock.mdx
@@ -201,6 +201,7 @@ await page.Clock.SetSystemTimeAsync("2020-02-02");
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -231,6 +232,7 @@ await page.Clock.SetSystemTimeAsync("2020-02-02");
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-consolemessage.mdx b/dotnet/versioned_docs/version-stable/api/class-consolemessage.mdx
index db8a5e6251..c24bbc0a95 100644
--- a/dotnet/versioned_docs/version-stable/api/class-consolemessage.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-consolemessage.mdx
@@ -163,6 +163,7 @@ ConsoleMessage.Worker
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -193,6 +194,7 @@ ConsoleMessage.Worker
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-credentials.mdx b/dotnet/versioned_docs/version-stable/api/class-credentials.mdx
new file mode 100644
index 0000000000..a80ab3288b
--- /dev/null
+++ b/dotnet/versioned_docs/version-stable/api/class-credentials.mdx
@@ -0,0 +1,291 @@
+---
+id: class-credentials
+title: "Credentials"
+---
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import HTMLCard from '@site/src/components/HTMLCard';
+
+
+`Credentials` is a virtual WebAuthn authenticator scoped to a [BrowserContext]. It lets tests register passkeys and answer `navigator.credentials.create()` / `navigator.credentials.get()` ceremonies in the page, without a real authenticator or hardware security key.
+
+There are two common ways to use it:
+
+**Usage: seed a known credential**
+
+```csharp
+var context = await browser.NewContextAsync();
+
+// A passkey your backend already provisioned for a test user.
+await context.Credentials.CreateAsync("example.com", new()
+{
+ Id = knownCredentialId, // base64url
+ UserHandle = knownUserHandle, // base64url
+ PrivateKey = knownPrivateKey, // base64url PKCS#8 (DER)
+ PublicKey = knownPublicKey, // base64url SPKI (DER)
+});
+await context.Credentials.InstallAsync();
+
+var page = await context.NewPageAsync();
+await page.GotoAsync("https://example.com/login");
+// The page's navigator.credentials.get() is answered with the seeded passkey.
+```
+
+**Usage: capture a passkey, then reuse it**
+
+```csharp
+// setup test: let the app register a passkey, then save it.
+var context = await browser.NewContextAsync();
+await context.Credentials.InstallAsync();
+
+var page = await context.NewPageAsync();
+await page.GotoAsync("https://example.com/register");
+await page.GetByRole(AriaRole.Button, new() { Name = "Create a passkey" }).ClickAsync();
+
+// Read back the passkey the page registered — it includes the private key.
+var credentials = await context.Credentials.GetAsync(new() { RpId = "example.com" });
+File.WriteAllText("playwright/.auth/passkey.json", JsonSerializer.Serialize(credentials[0]));
+```
+
+```csharp
+// later test: seed the captured passkey so the app starts already enrolled.
+var credential = JsonSerializer.Deserialize(
+ File.ReadAllText("playwright/.auth/passkey.json"));
+var context = await browser.NewContextAsync();
+await context.Credentials.CreateAsync(credential.RpId, new()
+{
+ Id = credential.Id,
+ UserHandle = credential.UserHandle,
+ PrivateKey = credential.PrivateKey,
+ PublicKey = credential.PublicKey,
+});
+await context.Credentials.InstallAsync();
+
+var page = await context.NewPageAsync();
+await page.GotoAsync("https://example.com/login");
+// navigator.credentials.get() resolves the captured passkey — already signed in.
+```
+
+**Defaults**
+
+
+---
+
+## Methods
+
+### CreateAsync {/* #credentials-create */}
+
+Added in: v1.61credentials.CreateAsync
+
+Seeds a virtual WebAuthn credential and returns it.
+
+With only [rpId](/api/class-credentials.mdx#credentials-create-option-rp-id), generates a fresh **ECDSA P-256** keypair, credential id and user handle. The seeded credential is discoverable (resident), so the page can resolve it from both username-then-passkey and usernameless passkey flows. The returned object carries the private and public keys, so it can be persisted to disk and re-seeded in a later test.
+
+To **import a known credential**, supply all four of [Id](/api/class-credentials.mdx#credentials-create-option-id), [UserHandle](/api/class-credentials.mdx#credentials-create-option-user-handle), [PrivateKey](/api/class-credentials.mdx#credentials-create-option-private-key) and [PublicKey](/api/class-credentials.mdx#credentials-create-option-public-key) together.
+
+Call [Credentials.InstallAsync()](/api/class-credentials.mdx#credentials-install) before navigating to a page that uses WebAuthn.
+
+**Usage**
+
+```csharp
+await Credentials.CreateAsync(rpId, options);
+```
+
+**Arguments**
+- `rpId` [string]#
+
+ Relying party id (typically the site's effective domain).
+- `options` `CredentialsCreateOptions?` *(optional)*
+ - `Id` [string]? *(optional)*#
+
+ Base64url-encoded credential id. Auto-generated if omitted.
+ - `PrivateKey` [string]? *(optional)*#
+
+ Base64url-encoded PKCS#8 (DER) private key. Auto-generated if omitted.
+ - `PublicKey` [string]? *(optional)*#
+
+ Base64url-encoded SPKI (DER) public key. Auto-generated if omitted.
+ - `UserHandle` [string]? *(optional)*#
+
+ Base64url-encoded user handle. Auto-generated if omitted.
+
+**Returns**
+- Create#
+ - `id` [string]
+
+ Base64url-encoded credential id.
+ - `rpId` [string]
+
+ Relying party id.
+ - `userHandle` [string]
+
+ Base64url-encoded user handle.
+ - `privateKey` [string]
+
+ Base64url-encoded PKCS#8 (DER) private key.
+ - `publicKey` [string]
+
+ Base64url-encoded SPKI (DER) public key.
+
+---
+
+### DeleteAsync {/* #credentials-delete */}
+
+Added in: v1.61credentials.DeleteAsync
+
+Removes a credential from the authenticator by its id. Works for any credential currently held — both those seeded with [Credentials.CreateAsync()](/api/class-credentials.mdx#credentials-create) and those the page registered itself by calling `navigator.credentials.create()`.
+
+**Usage**
+
+```csharp
+await Credentials.DeleteAsync(id);
+```
+
+**Arguments**
+- `id` [string]#
+
+ Base64url-encoded credential id.
+
+**Returns**
+- [void]#
+
+---
+
+### GetAsync {/* #credentials-get */}
+
+Added in: v1.61credentials.GetAsync
+
+Returns every credential currently held by the authenticator, optionally filtered by [RpId](/api/class-credentials.mdx#credentials-get-option-rp-id) or [Id](/api/class-credentials.mdx#credentials-get-option-id). This includes both credentials seeded with [Credentials.CreateAsync()](/api/class-credentials.mdx#credentials-create) and credentials the page registered itself by calling `navigator.credentials.create()`.
+
+Each returned credential includes its private and public keys, so a passkey the app just registered can be saved and re-seeded into a later test with [Credentials.CreateAsync()](/api/class-credentials.mdx#credentials-create) — see the second example in the class overview.
+
+**Usage**
+
+```csharp
+await Credentials.GetAsync(options);
+```
+
+**Arguments**
+- `options` `CredentialsGetOptions?` *(optional)*
+ - `Id` [string]? *(optional)*#
+
+ Only return the credential with this base64url-encoded id.
+ - `RpId` [string]? *(optional)*#
+
+ Only return credentials for this relying party id.
+
+**Returns**
+- [IReadOnlyList]<Get>#
+ - `id` [string]
+
+
+ - `rpId` [string]
+
+
+ - `userHandle` [string]
+
+
+ - `privateKey` [string]
+
+
+ - `publicKey` [string]
+
+
+---
+
+### InstallAsync {/* #credentials-install */}
+
+Added in: v1.61credentials.InstallAsync
+
+Installs the virtual WebAuthn authenticator into the context, overriding `navigator.credentials.create()` and `navigator.credentials.get()` in all current and future pages. Call this before the page first touches `navigator.credentials`.
+
+Required: until [Credentials.InstallAsync()](/api/class-credentials.mdx#credentials-install) is called, no interception is in place and the page sees the platform's native (or absent) WebAuthn behaviour. Seeding credentials with [Credentials.CreateAsync()](/api/class-credentials.mdx#credentials-create) without installing populates the authenticator, but the page will never see those credentials.
+
+**Usage**
+
+```csharp
+await Credentials.InstallAsync();
+```
+
+**Returns**
+- [void]#
+
+
+[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"
+[BrowserType]: /api/class-browsertype.mdx "BrowserType"
+[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
+[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
+[Clock]: /api/class-clock.mdx "Clock"
+[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
+[Debugger]: /api/class-debugger.mdx "Debugger"
+[Dialog]: /api/class-dialog.mdx "Dialog"
+[Download]: /api/class-download.mdx "Download"
+[ElementHandle]: /api/class-elementhandle.mdx "ElementHandle"
+[FileChooser]: /api/class-filechooser.mdx "FileChooser"
+[FormData]: /api/class-formdata.mdx "FormData"
+[Frame]: /api/class-frame.mdx "Frame"
+[FrameLocator]: /api/class-framelocator.mdx "FrameLocator"
+[JSHandle]: /api/class-jshandle.mdx "JSHandle"
+[Keyboard]: /api/class-keyboard.mdx "Keyboard"
+[Locator]: /api/class-locator.mdx "Locator"
+[LocatorAssertions]: /api/class-locatorassertions.mdx "LocatorAssertions"
+[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"
+[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"
+[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
+[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
+[Worker]: /api/class-worker.mdx "Worker"
+[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"
+
+[bool]: https://docs.microsoft.com/en-us/dotnet/api/system.boolean "bool"
+[Date]: https://learn.microsoft.com/en-us/dotnet/api/system.datetime "DateTime"
+[double]: https://docs.microsoft.com/en-us/dotnet/api/system.double "double"
+[byte]: https://docs.microsoft.com/en-us/dotnet/api/system.byte "byte"
+[int]: https://docs.microsoft.com/en-us/dotnet/api/system.int32 "int"
+[long]: https://docs.microsoft.com/en-us/dotnet/api/system.int64 "long"
+[void]: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/void "void"
+[string]: https://docs.microsoft.com/en-us/dotnet/api/system.string "string"
+[URL]: https://nodejs.org/api/url.html "URL"
+[Regex]: https://docs.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.regex "Regex"
+
+[Action]: https://docs.microsoft.com/en-us/dotnet/api/system.action-1 "Action"
+[Func]: https://docs.microsoft.com/en-us/dotnet/api/system.func-2 "Func"
+[IEnumerable]: https://docs.microsoft.com/en-us/dotnet/api/system.collections.ienumerable "IEnumerable"
+[IReadOnlyList]: https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlylist-1?view=net-9.0 "IReadOnlyList"
+[IDictionary]: https://docs.microsoft.com/en-us/dotnet/api/system.collections.idictionary "IDictionary"
+[Task]: https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task?view=net-5.0 "Task"
+[IReadOnlyDictionary]: https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlydictionary-2 "IReadOnlyDictionary"
+[JsonElement]: https://docs.microsoft.com/en-us/dotnet/api/system.text.json.jsonelement "JsonElement"
+
+[all available image tags]: https://mcr.microsoft.com/en-us/product/playwright/dotnet/about "all available image tags"
+[Microsoft Artifact Registry]: https://mcr.microsoft.com/en-us/product/playwright/dotnet/about "Microsoft Artifact Registry"
+[Dockerfile.noble]: https://github.com/microsoft/playwright-dotnet/blob/main/utils/docker/Dockerfile.noble "Dockerfile.noble"
diff --git a/dotnet/versioned_docs/version-stable/api/class-debugger.mdx b/dotnet/versioned_docs/version-stable/api/class-debugger.mdx
index cd510d8c0a..cfb52377e7 100644
--- a/dotnet/versioned_docs/version-stable/api/class-debugger.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-debugger.mdx
@@ -155,6 +155,7 @@ Debugger.PausedStateChanged += async (_, void) => {};
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -185,6 +186,7 @@ Debugger.PausedStateChanged += async (_, void) => {};
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-dialog.mdx b/dotnet/versioned_docs/version-stable/api/class-dialog.mdx
index f77e3e30ad..35f96769da 100644
--- a/dotnet/versioned_docs/version-stable/api/class-dialog.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-dialog.mdx
@@ -160,6 +160,7 @@ Dialog.Type
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -190,6 +191,7 @@ Dialog.Type
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-download.mdx b/dotnet/versioned_docs/version-stable/api/class-download.mdx
index 2bd1ac6669..74c3fb74a4 100644
--- a/dotnet/versioned_docs/version-stable/api/class-download.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-download.mdx
@@ -203,6 +203,7 @@ Download.Url
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -233,6 +234,7 @@ Download.Url
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-elementhandle.mdx b/dotnet/versioned_docs/version-stable/api/class-elementhandle.mdx
index f6a0f0556f..fffa2f817f 100644
--- a/dotnet/versioned_docs/version-stable/api/class-elementhandle.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-elementhandle.mdx
@@ -1428,7 +1428,7 @@ await ElementHandle.TextContentAsync();
Added before v1.9elementHandle.TypeAsync
-:::warning Deprecated
+:::warning[Deprecated]
In most cases, you should use [Locator.FillAsync()](/api/class-locator.mdx#locator-fill) instead. You only need to press keys one by one if there is special keyboard handling on the page - in this case use [Locator.PressSequentiallyAsync()](/api/class-locator.mdx#locator-press-sequentially).
@@ -1589,6 +1589,7 @@ This method does not work across navigations, use [Page.WaitForSelectorAsync()](
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -1619,6 +1620,7 @@ This method does not work across navigations, use [Page.WaitForSelectorAsync()](
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-filechooser.mdx b/dotnet/versioned_docs/version-stable/api/class-filechooser.mdx
index ed2aa3cb63..297b126ac6 100644
--- a/dotnet/versioned_docs/version-stable/api/class-filechooser.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-filechooser.mdx
@@ -124,6 +124,7 @@ await FileChooser.SetFilesAsync(files, options);
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -154,6 +155,7 @@ await FileChooser.SetFilesAsync(files, options);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-formdata.mdx b/dotnet/versioned_docs/version-stable/api/class-formdata.mdx
index c8ff30727d..c18c98ea1d 100644
--- a/dotnet/versioned_docs/version-stable/api/class-formdata.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-formdata.mdx
@@ -130,6 +130,7 @@ FormData.Set(name, value);
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -160,6 +161,7 @@ FormData.Set(name, value);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-frame.mdx b/dotnet/versioned_docs/version-stable/api/class-frame.mdx
index 58ea1bbb20..15c70e31f1 100644
--- a/dotnet/versioned_docs/version-stable/api/class-frame.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-frame.mdx
@@ -233,7 +233,7 @@ Console.WriteLine(await frame.EvaluateAsync("1 + 2")); // prints "3"
[ElementHandle] instances can be passed as an argument to the [Frame.EvaluateAsync()](/api/class-frame.mdx#frame-evaluate):
```csharp
-var bodyHandle = await frame.EvaluateAsync("document.body");
+var bodyHandle = await frame.EvaluateHandleAsync("document.body");
var html = await frame.EvaluateAsync("([body, suffix]) => body.innerHTML + suffix", new object [] { bodyHandle, "hello" });
await bodyHandle.DisposeAsync();
```
@@ -2075,7 +2075,7 @@ await Frame.QuerySelectorAllAsync(selector);
Added before v1.9frame.RunAndWaitForNavigationAsync
-:::warning Deprecated
+:::warning[Deprecated]
This method is inherently racy, please use [Frame.WaitForURLAsync()](/api/class-frame.mdx#frame-wait-for-url) instead.
@@ -2130,7 +2130,7 @@ Usage of the [History API](https://developer.mozilla.org/en-US/docs/Web/API/Hist
Added before v1.9frame.WaitForNavigationAsync
-:::warning Deprecated
+:::warning[Deprecated]
This method is inherently racy, please use [Frame.WaitForURLAsync()](/api/class-frame.mdx#frame-wait-for-url) instead.
@@ -2486,7 +2486,7 @@ await Frame.TextContentAsync(selector, options);
Added before v1.9frame.TypeAsync
-:::warning Deprecated
+:::warning[Deprecated]
In most cases, you should use [Locator.FillAsync()](/api/class-locator.mdx#locator-fill) instead. You only need to press keys one by one if there is special keyboard handling on the page - in this case use [Locator.PressSequentiallyAsync()](/api/class-locator.mdx#locator-press-sequentially).
@@ -2708,6 +2708,7 @@ await Frame.WaitForTimeoutAsync(timeout);
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -2738,6 +2739,7 @@ await Frame.WaitForTimeoutAsync(timeout);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-framelocator.mdx b/dotnet/versioned_docs/version-stable/api/class-framelocator.mdx
index 1bba95c691..30a08b164e 100644
--- a/dotnet/versioned_docs/version-stable/api/class-framelocator.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-framelocator.mdx
@@ -467,7 +467,7 @@ await Expect(locator).ToBeVisibleAsync();
Added in: v1.17frameLocator.First
-:::warning Deprecated
+:::warning[Deprecated]
Use [Locator.First](/api/class-locator.mdx#locator-first) followed by [Locator.ContentFrame](/api/class-locator.mdx#locator-content-frame) instead.
@@ -491,7 +491,7 @@ FrameLocator.First
Added in: v1.17frameLocator.Last
-:::warning Deprecated
+:::warning[Deprecated]
Use [Locator.Last](/api/class-locator.mdx#locator-last) followed by [Locator.ContentFrame](/api/class-locator.mdx#locator-content-frame) instead.
@@ -515,7 +515,7 @@ FrameLocator.Last
Added in: v1.17frameLocator.Nth
-:::warning Deprecated
+:::warning[Deprecated]
Use [Locator.Nth()](/api/class-locator.mdx#locator-nth) followed by [Locator.ContentFrame](/api/class-locator.mdx#locator-content-frame) instead.
@@ -548,6 +548,7 @@ FrameLocator.Nth(index);
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -578,6 +579,7 @@ FrameLocator.Nth(index);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-jshandle.mdx b/dotnet/versioned_docs/version-stable/api/class-jshandle.mdx
index 2128126a41..f2d2708693 100644
--- a/dotnet/versioned_docs/version-stable/api/class-jshandle.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-jshandle.mdx
@@ -194,6 +194,7 @@ await JsHandle.JsonValueAsync();
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -224,6 +225,7 @@ await JsHandle.JsonValueAsync();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-keyboard.mdx b/dotnet/versioned_docs/version-stable/api/class-keyboard.mdx
index 7140ba719e..8400f4851d 100644
--- a/dotnet/versioned_docs/version-stable/api/class-keyboard.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-keyboard.mdx
@@ -237,6 +237,7 @@ await Keyboard.UpAsync(key);
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -267,6 +268,7 @@ await Keyboard.UpAsync(key);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-locator.mdx b/dotnet/versioned_docs/version-stable/api/class-locator.mdx
index 8c6705e831..ea563477ff 100644
--- a/dotnet/versioned_docs/version-stable/api/class-locator.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-locator.mdx
@@ -2580,7 +2580,7 @@ await Locator.ElementHandlesAsync();
Added in: v1.14locator.TypeAsync
-:::warning Deprecated
+:::warning[Deprecated]
In most cases, you should use [Locator.FillAsync()](/api/class-locator.mdx#locator-fill) instead. You only need to press keys one by one if there is special keyboard handling on the page - in this case use [Locator.PressSequentiallyAsync()](/api/class-locator.mdx#locator-press-sequentially).
@@ -2628,6 +2628,7 @@ To press a special key, like `Control` or `ArrowDown`, use [Locator.PressAsync()
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -2658,6 +2659,7 @@ To press a special key, like `Control` or `ArrowDown`, use [Locator.PressAsync()
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-locatorassertions.mdx b/dotnet/versioned_docs/version-stable/api/class-locatorassertions.mdx
index f48b85715b..b8ea2bf3d9 100644
--- a/dotnet/versioned_docs/version-stable/api/class-locatorassertions.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-locatorassertions.mdx
@@ -921,6 +921,7 @@ await Expect(locator).Not.ToContainTextAsync("error");
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -951,6 +952,7 @@ await Expect(locator).Not.ToContainTextAsync("error");
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-mouse.mdx b/dotnet/versioned_docs/version-stable/api/class-mouse.mdx
index 1b4702ca1e..7d8a9a0693 100644
--- a/dotnet/versioned_docs/version-stable/api/class-mouse.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-mouse.mdx
@@ -219,6 +219,7 @@ await Mouse.WheelAsync(deltaX, deltaY);
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -249,6 +250,7 @@ await Mouse.WheelAsync(deltaX, deltaY);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-page.mdx b/dotnet/versioned_docs/version-stable/api/class-page.mdx
index f90eb2b858..1a8e3ab0c2 100644
--- a/dotnet/versioned_docs/version-stable/api/class-page.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-page.mdx
@@ -587,7 +587,7 @@ Console.WriteLine(await page.EvaluateAsync("1 + 2")); // prints "3"
[ElementHandle] instances can be passed as an argument to the [Page.EvaluateAsync()](/api/class-page.mdx#page-evaluate):
```csharp
-var bodyHandle = await page.EvaluateAsync("document.body");
+var bodyHandle = await page.EvaluateHandleAsync("document.body");
var html = await page.EvaluateAsync("([body, suffix]) => body.innerHTML + suffix", new object [] { bodyHandle, "hello" });
await bodyHandle.DisposeAsync();
```
@@ -2954,6 +2954,23 @@ Page.Keyboard
---
+### LocalStorage {/* #page-local-storage */}
+
+Added in: v1.61page.LocalStorage
+
+Provides access to the page's `localStorage` for the current origin. See [WebStorage].
+
+**Usage**
+
+```csharp
+Page.LocalStorage
+```
+
+**Type**
+- [WebStorage]
+
+---
+
### Mouse {/* #page-mouse */}
Added before v1.9page.Mouse
@@ -2982,6 +2999,23 @@ Page.Mouse
---
+### SessionStorage {/* #page-session-storage */}
+
+Added in: v1.61page.SessionStorage
+
+Provides access to the page's `sessionStorage` for the current origin. See [WebStorage].
+
+**Usage**
+
+```csharp
+Page.SessionStorage
+```
+
+**Type**
+- [WebStorage]
+
+---
+
### Touchscreen {/* #page-touchscreen */}
Added before v1.9page.Touchscreen
@@ -4413,7 +4447,7 @@ await Page.QuerySelectorAllAsync(selector);
Added before v1.9page.RunAndWaitForNavigationAsync
-:::warning Deprecated
+:::warning[Deprecated]
This method is inherently racy, please use [Page.WaitForURLAsync()](/api/class-page.mdx#page-wait-for-url) instead.
@@ -4468,7 +4502,7 @@ Usage of the [History API](https://developer.mozilla.org/en-US/docs/Web/API/Hist
Added before v1.9page.WaitForNavigationAsync
-:::warning Deprecated
+:::warning[Deprecated]
This method is inherently racy, please use [Page.WaitForURLAsync()](/api/class-page.mdx#page-wait-for-url) instead.
@@ -4733,7 +4767,7 @@ When all steps combined have not finished during the specified [Timeout](/api/cl
:::note
-[Page.TapAsync()](/api/class-page.mdx#page-tap) the method will throw if [HasTouch](/api/class-browser.mdx#browser-new-context-option-has-touch) option of the browser context is false.
+[Page.TapAsync()](/api/class-page.mdx#page-tap) will throw if the [HasTouch](/api/class-browser.mdx#browser-new-context-option-has-touch) option of the browser context is false.
:::
**Usage**
@@ -4824,7 +4858,7 @@ await Page.TextContentAsync(selector, options);
Added before v1.9page.TypeAsync
-:::warning Deprecated
+:::warning[Deprecated]
In most cases, you should use [Locator.FillAsync()](/api/class-locator.mdx#locator-fill) instead. You only need to press keys one by one if there is special keyboard handling on the page - in this case use [Locator.PressSequentiallyAsync()](/api/class-locator.mdx#locator-press-sequentially).
@@ -5049,6 +5083,7 @@ await page.WaitForTimeoutAsync(1000);
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -5079,6 +5114,7 @@ await page.WaitForTimeoutAsync(1000);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-pageassertions.mdx b/dotnet/versioned_docs/version-stable/api/class-pageassertions.mdx
index 62b85faff4..6178595cb1 100644
--- a/dotnet/versioned_docs/version-stable/api/class-pageassertions.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-pageassertions.mdx
@@ -147,6 +147,7 @@ await Expect(Page).Not.ToHaveURLAsync("error");
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -177,6 +178,7 @@ await Expect(Page).Not.ToHaveURLAsync("error");
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-playwright.mdx b/dotnet/versioned_docs/version-stable/api/class-playwright.mdx
index 475c738c9d..d4bc36122c 100644
--- a/dotnet/versioned_docs/version-stable/api/class-playwright.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-playwright.mdx
@@ -163,6 +163,7 @@ Playwright.Webkit
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -193,6 +194,7 @@ Playwright.Webkit
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-playwrightassertions.mdx b/dotnet/versioned_docs/version-stable/api/class-playwrightassertions.mdx
index 404c6df792..d772b5fb06 100644
--- a/dotnet/versioned_docs/version-stable/api/class-playwrightassertions.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-playwrightassertions.mdx
@@ -110,6 +110,7 @@ await Expect(Page).ToHaveTitleAsync("News");
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -140,6 +141,7 @@ await Expect(Page).ToHaveTitleAsync("News");
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-request.mdx b/dotnet/versioned_docs/version-stable/api/class-request.mdx
index 677f44b4c0..437188a9c6 100644
--- a/dotnet/versioned_docs/version-stable/api/class-request.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-request.mdx
@@ -446,6 +446,7 @@ Request.Url
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -476,6 +477,7 @@ Request.Url
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-response.mdx b/dotnet/versioned_docs/version-stable/api/class-response.mdx
index e30abd3934..14724f46d6 100644
--- a/dotnet/versioned_docs/version-stable/api/class-response.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-response.mdx
@@ -385,6 +385,7 @@ Response.Url
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -415,6 +416,7 @@ Response.Url
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-route.mdx b/dotnet/versioned_docs/version-stable/api/class-route.mdx
index 954cf5986b..3c2a17326e 100644
--- a/dotnet/versioned_docs/version-stable/api/class-route.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-route.mdx
@@ -321,6 +321,7 @@ Route.Request
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -351,6 +352,7 @@ Route.Request
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-screencast.mdx b/dotnet/versioned_docs/version-stable/api/class-screencast.mdx
index b2085be493..f5c0deac37 100644
--- a/dotnet/versioned_docs/version-stable/api/class-screencast.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-screencast.mdx
@@ -62,6 +62,9 @@ await Screencast.ShowActionsAsync(options);
**Arguments**
- `options` `ScreencastShowActionsOptions?` *(optional)*
+ - `Cursor` `enum ScreencastCursor { None, Pointer }?` *(optional)* Added in: v1.61#
+
+ 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.
- `Duration` [float]? *(optional)*#
How long each annotation is displayed in milliseconds. Defaults to `500`.
@@ -163,6 +166,9 @@ Starts the screencast. When [Path](/api/class-screencast.mdx#screencast-start-op
- `Data` [byte][]
JPEG-encoded frame data.
+ - `Timestamp` [float]
+
+ The timestamp of when the frame was presented by the browser, in milliseconds since the Unix epoch.
- `ViewportWidth` [int]
Width of the page viewport at the time the frame was captured.
@@ -177,6 +183,15 @@ Starts the screencast. When [Path](/api/class-screencast.mdx#screencast-start-op
- `Quality` [int]? *(optional)*#
The quality of the image, between 0-100.
+ - `Size` Size? *(optional)*#
+ - `Width` [int]
+
+ Max frame width in pixels.
+ - `Height` [int]
+
+ Max frame height in pixels.
+
+ Specifies the dimensions of screencast frames. The actual frame is scaled to preserve the page's aspect ratio and may be smaller than these bounds. If a screencast is already active (e.g. started by tracing or video recording), the existing configuration takes precedence and the frame size may exceed these bounds or this option may be ignored. If not specified the size will be equal to page viewport scaled down to fit into 800×800.
**Returns**
- [Disposable]#
@@ -210,6 +225,7 @@ await Screencast.StopAsync();
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -240,6 +256,7 @@ await Screencast.StopAsync();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-selectors.mdx b/dotnet/versioned_docs/version-stable/api/class-selectors.mdx
index cdadc6b6fe..d8c9083a49 100644
--- a/dotnet/versioned_docs/version-stable/api/class-selectors.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-selectors.mdx
@@ -89,7 +89,7 @@ Selectors.SetTestIdAttribute(attributeName);
**Arguments**
- `attributeName` [string]#
- Test id attribute name.
+ Test id attribute name. To match elements with any of several attributes, pass them as a comma-separated list, e.g. `"data-pw,data-ti"`.
[APIRequest]: /api/class-apirequest.mdx "APIRequest"
@@ -103,6 +103,7 @@ Selectors.SetTestIdAttribute(attributeName);
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -133,6 +134,7 @@ Selectors.SetTestIdAttribute(attributeName);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-timeouterror.mdx b/dotnet/versioned_docs/version-stable/api/class-timeouterror.mdx
index 163c9827b0..36e8f6c33e 100644
--- a/dotnet/versioned_docs/version-stable/api/class-timeouterror.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-timeouterror.mdx
@@ -39,6 +39,7 @@ catch (TimeoutException)
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -69,6 +70,7 @@ catch (TimeoutException)
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-touchscreen.mdx b/dotnet/versioned_docs/version-stable/api/class-touchscreen.mdx
index 2e2ccb83c7..0b642ed9b8 100644
--- a/dotnet/versioned_docs/version-stable/api/class-touchscreen.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-touchscreen.mdx
@@ -24,7 +24,7 @@ Dispatches a `touchstart` and `touchend` event with a single touch at the positi
:::note
-[Page.TapAsync()](/api/class-page.mdx#page-tap) the method will throw if [HasTouch](/api/class-browser.mdx#browser-new-context-option-has-touch) option of the browser context is false.
+[Touchscreen.TapAsync()](/api/class-touchscreen.mdx#touchscreen-tap) will throw if the [HasTouch](/api/class-browser.mdx#browser-new-context-option-has-touch) option of the browser context is false.
:::
**Usage**
@@ -56,6 +56,7 @@ await Touchscreen.TapAsync(x, y);
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -86,6 +87,7 @@ await Touchscreen.TapAsync(x, y);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-tracing.mdx b/dotnet/versioned_docs/version-stable/api/class-tracing.mdx
index 515aa4c5be..44cad0d0d8 100644
--- a/dotnet/versioned_docs/version-stable/api/class-tracing.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-tracing.mdx
@@ -322,6 +322,7 @@ await Tracing.StopHarAsync();
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -352,6 +353,7 @@ await Tracing.StopHarAsync();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-video.mdx b/dotnet/versioned_docs/version-stable/api/class-video.mdx
index 6fd7ddeaa5..dae33b76f2 100644
--- a/dotnet/versioned_docs/version-stable/api/class-video.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-video.mdx
@@ -84,6 +84,7 @@ await Video.SaveAsAsync(path);
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -114,6 +115,7 @@ await Video.SaveAsAsync(path);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-weberror.mdx b/dotnet/versioned_docs/version-stable/api/class-weberror.mdx
index b397818fdf..e8a4455094 100644
--- a/dotnet/versioned_docs/version-stable/api/class-weberror.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-weberror.mdx
@@ -90,6 +90,7 @@ WebError.Page
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -120,6 +121,7 @@ WebError.Page
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-websocket.mdx b/dotnet/versioned_docs/version-stable/api/class-websocket.mdx
index 16db0ae58a..b42ed7d925 100644
--- a/dotnet/versioned_docs/version-stable/api/class-websocket.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-websocket.mdx
@@ -130,6 +130,7 @@ WebSocket.SocketError += async (_, value) => {};
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -160,6 +161,7 @@ WebSocket.SocketError += async (_, value) => {};
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-websocketframe.mdx b/dotnet/versioned_docs/version-stable/api/class-websocketframe.mdx
index bd4cdca618..ad67fc0a9c 100644
--- a/dotnet/versioned_docs/version-stable/api/class-websocketframe.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-websocketframe.mdx
@@ -58,6 +58,7 @@ WebSocketFrame.Text
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -88,6 +89,7 @@ WebSocketFrame.Text
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-websocketroute.mdx b/dotnet/versioned_docs/version-stable/api/class-websocketroute.mdx
index 5f9790985d..e0896a4e50 100644
--- a/dotnet/versioned_docs/version-stable/api/class-websocketroute.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-websocketroute.mdx
@@ -251,6 +251,7 @@ WebSocketRoute.Url
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -281,6 +282,7 @@ WebSocketRoute.Url
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/api/class-webstorage.mdx b/dotnet/versioned_docs/version-stable/api/class-webstorage.mdx
new file mode 100644
index 0000000000..e2cf574f19
--- /dev/null
+++ b/dotnet/versioned_docs/version-stable/api/class-webstorage.mdx
@@ -0,0 +1,212 @@
+---
+id: class-webstorage
+title: "WebStorage"
+---
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import HTMLCard from '@site/src/components/HTMLCard';
+
+
+WebStorage exposes the page's `localStorage` or `sessionStorage` for the current origin via an async, [browser-consistent](https://developer.mozilla.org/en-US/docs/Web/API/Storage) API.
+
+Instances are accessed through [Page.LocalStorage](/api/class-page.mdx#page-local-storage) and [Page.SessionStorage](/api/class-page.mdx#page-session-storage).
+
+```csharp
+await page.GotoAsync("https://example.com");
+await page.LocalStorage.SetItemAsync("token", "abc");
+var token = await page.LocalStorage.GetItemAsync("token");
+var all = await page.LocalStorage.ItemsAsync();
+await page.LocalStorage.RemoveItemAsync("token");
+await page.LocalStorage.ClearAsync();
+```
+
+
+---
+
+## Methods
+
+### ClearAsync {/* #web-storage-clear */}
+
+Added in: v1.61webStorage.ClearAsync
+
+Removes all items from the storage.
+
+**Usage**
+
+```csharp
+await WebStorage.ClearAsync();
+```
+
+**Returns**
+- [void]#
+
+---
+
+### GetItemAsync {/* #web-storage-get-item */}
+
+Added in: v1.61webStorage.GetItemAsync
+
+Returns the value for the given [name](/api/class-webstorage.mdx#web-storage-get-item-option-name) if present.
+
+**Usage**
+
+```csharp
+await WebStorage.GetItemAsync(name);
+```
+
+**Arguments**
+- `name` [string]#
+
+ Name of the item to retrieve.
+
+**Returns**
+- [string]?#
+
+---
+
+### ItemsAsync {/* #web-storage-items */}
+
+Added in: v1.61webStorage.ItemsAsync
+
+Returns all items in the storage as name/value pairs.
+
+**Usage**
+
+```csharp
+await WebStorage.ItemsAsync();
+```
+
+**Returns**
+- [IReadOnlyList]<Items>#
+ - `name` [string]
+
+
+ - `value` [string]
+
+
+---
+
+### RemoveItemAsync {/* #web-storage-remove-item */}
+
+Added in: v1.61webStorage.RemoveItemAsync
+
+Removes the item with the given [name](/api/class-webstorage.mdx#web-storage-remove-item-option-name). No-op if the item is absent.
+
+**Usage**
+
+```csharp
+await WebStorage.RemoveItemAsync(name);
+```
+
+**Arguments**
+- `name` [string]#
+
+ Name of the item to remove.
+
+**Returns**
+- [void]#
+
+---
+
+### SetItemAsync {/* #web-storage-set-item */}
+
+Added in: v1.61webStorage.SetItemAsync
+
+Sets the value for the given [name](/api/class-webstorage.mdx#web-storage-set-item-option-name). Overwrites any existing value for that name.
+
+**Usage**
+
+```csharp
+await WebStorage.SetItemAsync(name, value);
+```
+
+**Arguments**
+- `name` [string]#
+
+ Name of the item to set.
+- `value` [string]#
+
+ New value for the item.
+
+**Returns**
+- [void]#
+
+
+[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"
+[BrowserType]: /api/class-browsertype.mdx "BrowserType"
+[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
+[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
+[Clock]: /api/class-clock.mdx "Clock"
+[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
+[Debugger]: /api/class-debugger.mdx "Debugger"
+[Dialog]: /api/class-dialog.mdx "Dialog"
+[Download]: /api/class-download.mdx "Download"
+[ElementHandle]: /api/class-elementhandle.mdx "ElementHandle"
+[FileChooser]: /api/class-filechooser.mdx "FileChooser"
+[FormData]: /api/class-formdata.mdx "FormData"
+[Frame]: /api/class-frame.mdx "Frame"
+[FrameLocator]: /api/class-framelocator.mdx "FrameLocator"
+[JSHandle]: /api/class-jshandle.mdx "JSHandle"
+[Keyboard]: /api/class-keyboard.mdx "Keyboard"
+[Locator]: /api/class-locator.mdx "Locator"
+[LocatorAssertions]: /api/class-locatorassertions.mdx "LocatorAssertions"
+[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"
+[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"
+[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
+[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
+[Worker]: /api/class-worker.mdx "Worker"
+[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"
+
+[bool]: https://docs.microsoft.com/en-us/dotnet/api/system.boolean "bool"
+[Date]: https://learn.microsoft.com/en-us/dotnet/api/system.datetime "DateTime"
+[double]: https://docs.microsoft.com/en-us/dotnet/api/system.double "double"
+[byte]: https://docs.microsoft.com/en-us/dotnet/api/system.byte "byte"
+[int]: https://docs.microsoft.com/en-us/dotnet/api/system.int32 "int"
+[long]: https://docs.microsoft.com/en-us/dotnet/api/system.int64 "long"
+[void]: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/void "void"
+[string]: https://docs.microsoft.com/en-us/dotnet/api/system.string "string"
+[URL]: https://nodejs.org/api/url.html "URL"
+[Regex]: https://docs.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.regex "Regex"
+
+[Action]: https://docs.microsoft.com/en-us/dotnet/api/system.action-1 "Action"
+[Func]: https://docs.microsoft.com/en-us/dotnet/api/system.func-2 "Func"
+[IEnumerable]: https://docs.microsoft.com/en-us/dotnet/api/system.collections.ienumerable "IEnumerable"
+[IReadOnlyList]: https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlylist-1?view=net-9.0 "IReadOnlyList"
+[IDictionary]: https://docs.microsoft.com/en-us/dotnet/api/system.collections.idictionary "IDictionary"
+[Task]: https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task?view=net-5.0 "Task"
+[IReadOnlyDictionary]: https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlydictionary-2 "IReadOnlyDictionary"
+[JsonElement]: https://docs.microsoft.com/en-us/dotnet/api/system.text.json.jsonelement "JsonElement"
+
+[all available image tags]: https://mcr.microsoft.com/en-us/product/playwright/dotnet/about "all available image tags"
+[Microsoft Artifact Registry]: https://mcr.microsoft.com/en-us/product/playwright/dotnet/about "Microsoft Artifact Registry"
+[Dockerfile.noble]: https://github.com/microsoft/playwright-dotnet/blob/main/utils/docker/Dockerfile.noble "Dockerfile.noble"
diff --git a/dotnet/versioned_docs/version-stable/api/class-worker.mdx b/dotnet/versioned_docs/version-stable/api/class-worker.mdx
index 32947b61f9..6e10bc7b17 100644
--- a/dotnet/versioned_docs/version-stable/api/class-worker.mdx
+++ b/dotnet/versioned_docs/version-stable/api/class-worker.mdx
@@ -147,6 +147,7 @@ Worker.Console += async (_, consoleMessage) => {};
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -177,6 +178,7 @@ Worker.Console += async (_, consoleMessage) => {};
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/aria-snapshots.mdx b/dotnet/versioned_docs/version-stable/aria-snapshots.mdx
index 6cadb300dd..bfac860b59 100644
--- a/dotnet/versioned_docs/version-stable/aria-snapshots.mdx
+++ b/dotnet/versioned_docs/version-stable/aria-snapshots.mdx
@@ -84,7 +84,7 @@ Each accessible element in the tree is represented as a YAML node:
- **role**: Specifies the ARIA or HTML role of the element (e.g., `heading`, `list`, `listitem`, `button`).
- **"name"**: Accessible name of the element. Quoted strings indicate exact values, `/patterns/` are used for regular expression.
-- **[attribute=value]**: Attributes and values, in square brackets, represent specific ARIA attributes, such as `checked`, `disabled`, `expanded`, `level`, `pressed`, or `selected`.
+- **[attribute=value]**: Attributes and values, in square brackets, represent specific ARIA attributes, such as `checked`, `disabled`, `expanded`, `invalid`, `level`, `pressed`, or `selected`.
These values are derived from ARIA attributes or calculated based on HTML semantics. To inspect the accessibility tree structure of a page, use the [Chrome DevTools Accessibility Tab](https://developer.chrome.com/docs/devtools/accessibility/reference#tab).
@@ -348,7 +348,7 @@ Groups capture nested elements, such as `` elements with summary conten
### Attributes and states
-Commonly used ARIA attributes, like `checked`, `disabled`, `expanded`, `level`, `pressed`, and `selected`, represent control states.
+Commonly used ARIA attributes, like `checked`, `disabled`, `expanded`, `invalid`, `level`, `pressed`, and `selected`, represent control states.
#### Checkbox with `checked` attribute
@@ -370,6 +370,26 @@ Commonly used ARIA attributes, like `checked`, `disabled`, `expanded`, `level`,
- button "Toggle" [pressed=true]
```
+#### Input with `aria-invalid` attribute
+
+The `aria-invalid` value is surfaced directly. A value of `true` renders as `[invalid]`, while `grammar` and `spelling` render as `[invalid=grammar]` and `[invalid=spelling]`. A `false` value is omitted.
+
+```html
+
+```
+
+```yaml title="aria snapshot"
+- textbox "Email" [invalid]: not-an-email
+```
+
+```html
+
+```
+
+```yaml title="aria snapshot"
+- textbox "Bio" [invalid=spelling]
+```
+
[APIRequest]: /api/class-apirequest.mdx "APIRequest"
[APIRequestContext]: /api/class-apirequestcontext.mdx "APIRequestContext"
@@ -382,6 +402,7 @@ Commonly used ARIA attributes, like `checked`, `disabled`, `expanded`, `level`,
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -412,6 +433,7 @@ Commonly used ARIA attributes, like `checked`, `disabled`, `expanded`, `level`,
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/auth.mdx b/dotnet/versioned_docs/version-stable/auth.mdx
index 883e6faaa7..e3a858646e 100644
--- a/dotnet/versioned_docs/version-stable/auth.mdx
+++ b/dotnet/versioned_docs/version-stable/auth.mdx
@@ -135,6 +135,7 @@ await context.AddInitScriptAsync(@"(storage => {
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -165,6 +166,7 @@ await context.AddInitScriptAsync(@"(storage => {
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/browser-contexts.mdx b/dotnet/versioned_docs/version-stable/browser-contexts.mdx
index 255c169e83..237c167e01 100644
--- a/dotnet/versioned_docs/version-stable/browser-contexts.mdx
+++ b/dotnet/versioned_docs/version-stable/browser-contexts.mdx
@@ -70,6 +70,7 @@ class Program
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -100,6 +101,7 @@ class Program
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/browsers.mdx b/dotnet/versioned_docs/version-stable/browsers.mdx
index 0c67dad32f..f3e6ebc4fb 100644
--- a/dotnet/versioned_docs/version-stable/browsers.mdx
+++ b/dotnet/versioned_docs/version-stable/browsers.mdx
@@ -545,6 +545,7 @@ pwsh bin/Debug/netX/playwright.ps1 uninstall --all
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -575,6 +576,7 @@ pwsh bin/Debug/netX/playwright.ps1 uninstall --all
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/ci-intro.mdx b/dotnet/versioned_docs/version-stable/ci-intro.mdx
index 29649a351b..f81a489f8f 100644
--- a/dotnet/versioned_docs/version-stable/ci-intro.mdx
+++ b/dotnet/versioned_docs/version-stable/ci-intro.mdx
@@ -109,6 +109,7 @@ Artifacts like trace files or console logs contain information about your test e
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -139,6 +140,7 @@ Artifacts like trace files or console logs contain information about your test e
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/ci.mdx b/dotnet/versioned_docs/version-stable/ci.mdx
index 60c1b37cc0..862e37f0df 100644
--- a/dotnet/versioned_docs/version-stable/ci.mdx
+++ b/dotnet/versioned_docs/version-stable/ci.mdx
@@ -76,7 +76,7 @@ jobs:
name: 'Playwright Tests'
runs-on: ubuntu-latest
container:
- image: mcr.microsoft.com/playwright/dotnet:v1.59.0-noble
+ image: mcr.microsoft.com/playwright/dotnet:v1.60.0-noble
options: --user 1001
steps:
- uses: actions/checkout@v5
@@ -159,7 +159,7 @@ trigger:
pool:
vmImage: ubuntu-latest
-container: mcr.microsoft.com/playwright/dotnet:v1.59.0-noble
+container: mcr.microsoft.com/playwright/dotnet:v1.60.0-noble
steps:
- task: UseDotNet@2
@@ -182,7 +182,7 @@ Running Playwright on CircleCI is very similar to running on GitHub Actions. In
executors:
pw-noble-development:
docker:
- - image: mcr.microsoft.com/playwright/dotnet:v1.59.0-noble
+ - image: mcr.microsoft.com/playwright/dotnet:v1.60.0-noble
```
Note: When using the docker agent definition, you are specifying the resource class of where playwright runs to the 'medium' tier [here](https://circleci.com/docs/configuration-reference?#docker-execution-environment). The default behavior of Playwright is to set the number of workers to the detected core count (2 in the case of the medium tier). Overriding the number of workers to greater than this number will cause unnecessary timeouts and failures.
@@ -193,7 +193,7 @@ Jenkins supports Docker agents for pipelines. Use the [Playwright Docker image](
```groovy
pipeline {
- agent { docker { image 'mcr.microsoft.com/playwright/dotnet:v1.59.0-noble' } }
+ agent { docker { image 'mcr.microsoft.com/playwright/dotnet:v1.60.0-noble' } }
stages {
stage('e2e-tests') {
steps {
@@ -210,7 +210,7 @@ pipeline {
Bitbucket Pipelines can use public [Docker images as build environments](https://confluence.atlassian.com/bitbucket/use-docker-images-as-build-environments-792298897.html). To run Playwright tests on Bitbucket, use our public Docker image ([see Dockerfile](./docker.mdx)).
```yml
-image: mcr.microsoft.com/playwright/dotnet:v1.59.0-noble
+image: mcr.microsoft.com/playwright/dotnet:v1.60.0-noble
```
### GitLab CI
@@ -253,6 +253,7 @@ xvfb-run dotnet test
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -283,6 +284,7 @@ xvfb-run dotnet test
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/clock.mdx b/dotnet/versioned_docs/version-stable/clock.mdx
index efbc288672..fd3a10b7bd 100644
--- a/dotnet/versioned_docs/version-stable/clock.mdx
+++ b/dotnet/versioned_docs/version-stable/clock.mdx
@@ -197,6 +197,7 @@ await Expect(locator).ToHaveTextAsync("2/2/2024, 10:00:02 AM");
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -227,6 +228,7 @@ await Expect(locator).ToHaveTextAsync("2/2/2024, 10:00:02 AM");
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/codegen-intro.mdx b/dotnet/versioned_docs/version-stable/codegen-intro.mdx
index 06ecfcd7ac..c36d4fcac9 100644
--- a/dotnet/versioned_docs/version-stable/codegen-intro.mdx
+++ b/dotnet/versioned_docs/version-stable/codegen-intro.mdx
@@ -74,6 +74,7 @@ You can generate tests using emulation for specific viewports, devices, color sc
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -104,6 +105,7 @@ You can generate tests using emulation for specific viewports, devices, color sc
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/codegen.mdx b/dotnet/versioned_docs/version-stable/codegen.mdx
index 0bbde2b0b6..0a5ffda372 100644
--- a/dotnet/versioned_docs/version-stable/codegen.mdx
+++ b/dotnet/versioned_docs/version-stable/codegen.mdx
@@ -180,6 +180,7 @@ await page.PauseAsync();
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -210,6 +211,7 @@ await page.PauseAsync();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/debug.mdx b/dotnet/versioned_docs/version-stable/debug.mdx
index f6fbb71189..c61f68e5a7 100644
--- a/dotnet/versioned_docs/version-stable/debug.mdx
+++ b/dotnet/versioned_docs/version-stable/debug.mdx
@@ -275,6 +275,7 @@ await using var browser = await playwright.Chromium.LaunchAsync(new()
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -305,6 +306,7 @@ await using var browser = await playwright.Chromium.LaunchAsync(new()
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/dialogs.mdx b/dotnet/versioned_docs/version-stable/dialogs.mdx
index 8b77950c3e..8688d3ac8c 100644
--- a/dotnet/versioned_docs/version-stable/dialogs.mdx
+++ b/dotnet/versioned_docs/version-stable/dialogs.mdx
@@ -84,6 +84,7 @@ This will wait for the print dialog to be opened after the button is clicked. Ma
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -114,6 +115,7 @@ This will wait for the print dialog to be opened after the button is clicked. Ma
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/docker.mdx b/dotnet/versioned_docs/version-stable/docker.mdx
index f987fb51a0..8d6f27c123 100644
--- a/dotnet/versioned_docs/version-stable/docker.mdx
+++ b/dotnet/versioned_docs/version-stable/docker.mdx
@@ -22,7 +22,7 @@ This Docker image is intended to be used for testing and development purposes on
### Pull the image
```bash
-docker pull mcr.microsoft.com/playwright/dotnet:v1.59.0-noble
+docker pull mcr.microsoft.com/playwright/dotnet:v1.60.0-noble
```
### Run the image
@@ -34,7 +34,7 @@ By default, the Docker image will use the `root` user to run the browsers. This
On trusted websites, you can avoid creating a separate user and use root for it since you trust the code which will run on the browsers.
```bash
-docker run -it --rm --ipc=host mcr.microsoft.com/playwright/dotnet:v1.59.0-noble /bin/bash
+docker run -it --rm --ipc=host mcr.microsoft.com/playwright/dotnet:v1.60.0-noble /bin/bash
```
#### Crawling and scraping
@@ -42,7 +42,7 @@ docker run -it --rm --ipc=host mcr.microsoft.com/playwright/dotnet:v1.59.0-noble
On untrusted websites, it's recommended to use a separate user for launching the browsers in combination with the seccomp profile. Inside the container or if you are using the Docker image as a base image you have to use `adduser` for it.
```bash
-docker run -it --rm --ipc=host --user pwuser --security-opt seccomp=seccomp_profile.json mcr.microsoft.com/playwright/dotnet:v1.59.0-noble /bin/bash
+docker run -it --rm --ipc=host --user pwuser --security-opt seccomp=seccomp_profile.json mcr.microsoft.com/playwright/dotnet:v1.60.0-noble /bin/bash
```
[`seccomp_profile.json`](https://github.com/microsoft/playwright/blob/main/utils/docker/seccomp_profile.json) is needed to run Chromium with sandbox. This is a [default Docker seccomp profile](https://github.com/docker/engine/blob/d0d99b04cf6e00ed3fc27e81fc3d94e7eda70af3/profiles/seccomp/default.json) with extra user namespace cloning permissions:
@@ -82,7 +82,7 @@ You can run Playwright Server in Docker while keeping your tests running on the
Start the Playwright Server in Docker:
```bash
-docker run -p 3000:3000 --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.59.0-noble /bin/sh -c "npx -y playwright@1.59.0 run-server --port 3000 --host 0.0.0.0"
+docker run -p 3000:3000 --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.60.0-noble /bin/sh -c "npx -y playwright@1.60.0 run-server --port 3000 --host 0.0.0.0"
```
#### Connecting to the Server
@@ -99,7 +99,7 @@ await using var browser = await playwright.Chromium.ConnectAsync("ws://127.0.0.1
If you need to access local servers from within the Docker container:
```bash
-docker run --add-host=hostmachine:host-gateway -p 3000:3000 --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.59.0-noble /bin/sh -c "npx -y playwright@1.59.0 run-server --port 3000 --host 0.0.0.0"
+docker run --add-host=hostmachine:host-gateway -p 3000:3000 --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.60.0-noble /bin/sh -c "npx -y playwright@1.60.0 run-server --port 3000 --host 0.0.0.0"
```
This makes `hostmachine` point to the host's localhost. Your tests should use `hostmachine` instead of `localhost` when accessing local servers.
@@ -132,9 +132,9 @@ Once this is enabled you can open the port specified in a new browser tab and yo
See [all available image tags].
We currently publish images with the following tags:
-- `:v1.59.0` - Playwright v1.59.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat).
-- `:v1.59.0-noble` - Playwright v1.59.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat).
-- `:v1.59.0-jammy` - Playwright v1.59.0 release docker image based on Ubuntu 22.04 LTS (Jammy Jellyfish).
+- `:v1.60.0` - Playwright v1.60.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat).
+- `:v1.60.0-noble` - Playwright v1.60.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat).
+- `:v1.60.0-jammy` - Playwright v1.60.0 release docker image based on Ubuntu 22.04 LTS (Jammy Jellyfish).
:::note
@@ -171,6 +171,7 @@ curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --install-dir /
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -201,6 +202,7 @@ curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --install-dir /
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/downloads.mdx b/dotnet/versioned_docs/version-stable/downloads.mdx
index 879ad85fe5..0ddb0c9be3 100644
--- a/dotnet/versioned_docs/version-stable/downloads.mdx
+++ b/dotnet/versioned_docs/version-stable/downloads.mdx
@@ -56,6 +56,7 @@ For uploading files, see the [uploading files](./input.mdx#upload-files) section
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -86,6 +87,7 @@ For uploading files, see the [uploading files](./input.mdx#upload-files) section
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/emulation.mdx b/dotnet/versioned_docs/version-stable/emulation.mdx
index ab73dd9561..a25624864d 100644
--- a/dotnet/versioned_docs/version-stable/emulation.mdx
+++ b/dotnet/versioned_docs/version-stable/emulation.mdx
@@ -196,6 +196,7 @@ var context = await browser.NewContextAsync(new() { JavaScriptEnabled = false })
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -226,6 +227,7 @@ var context = await browser.NewContextAsync(new() { JavaScriptEnabled = false })
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/evaluating.mdx b/dotnet/versioned_docs/version-stable/evaluating.mdx
index c133800184..3f7aafb1e5 100644
--- a/dotnet/versioned_docs/version-stable/evaluating.mdx
+++ b/dotnet/versioned_docs/version-stable/evaluating.mdx
@@ -118,6 +118,7 @@ await Page.AddInitScriptAsync(scriptPath: "mocks/preload.js");
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -148,6 +149,7 @@ await Page.AddInitScriptAsync(scriptPath: "mocks/preload.js");
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/events.mdx b/dotnet/versioned_docs/version-stable/events.mdx
index 8a58435e80..f572b26859 100644
--- a/dotnet/versioned_docs/version-stable/events.mdx
+++ b/dotnet/versioned_docs/version-stable/events.mdx
@@ -63,6 +63,7 @@ await page.GotoAsync("https://www.openstreetmap.org/");
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -93,6 +94,7 @@ await page.GotoAsync("https://www.openstreetmap.org/");
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/extensibility.mdx b/dotnet/versioned_docs/version-stable/extensibility.mdx
index fe813ece6a..8bf546442d 100644
--- a/dotnet/versioned_docs/version-stable/extensibility.mdx
+++ b/dotnet/versioned_docs/version-stable/extensibility.mdx
@@ -58,6 +58,7 @@ await page.Locator("tag=div").GetByText("Click me").ClickAsync();
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -88,6 +89,7 @@ await page.Locator("tag=div").GetByText("Click me").ClickAsync();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/frames.mdx b/dotnet/versioned_docs/version-stable/frames.mdx
index 28cb148248..51474a8b6b 100644
--- a/dotnet/versioned_docs/version-stable/frames.mdx
+++ b/dotnet/versioned_docs/version-stable/frames.mdx
@@ -52,6 +52,7 @@ await frame.FillAsync("#username-input", "John");
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -82,6 +83,7 @@ await frame.FillAsync("#username-input", "John");
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/getting-started-cli.mdx b/dotnet/versioned_docs/version-stable/getting-started-cli.mdx
index 5fa86be55a..2ac184da29 100644
--- a/dotnet/versioned_docs/version-stable/getting-started-cli.mdx
+++ b/dotnet/versioned_docs/version-stable/getting-started-cli.mdx
@@ -319,6 +319,7 @@ This requires the [Playwright Extension](https://github.com/microsoft/playwright
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -349,6 +350,7 @@ This requires the [Playwright Extension](https://github.com/microsoft/playwright
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/getting-started-mcp.mdx b/dotnet/versioned_docs/version-stable/getting-started-mcp.mdx
index 1eb6afbde3..7a3727592f 100644
--- a/dotnet/versioned_docs/version-stable/getting-started-mcp.mdx
+++ b/dotnet/versioned_docs/version-stable/getting-started-mcp.mdx
@@ -237,6 +237,7 @@ Then point your MCP client to the HTTP endpoint:
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -267,6 +268,7 @@ Then point your MCP client to the HTTP endpoint:
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/handles.mdx b/dotnet/versioned_docs/version-stable/handles.mdx
index f00c8924ce..3a4f311e83 100644
--- a/dotnet/versioned_docs/version-stable/handles.mdx
+++ b/dotnet/versioned_docs/version-stable/handles.mdx
@@ -126,6 +126,7 @@ await locator.ClickAsync();
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -156,6 +157,7 @@ await locator.ClickAsync();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/input.mdx b/dotnet/versioned_docs/version-stable/input.mdx
index 4dec23697f..ccf2ae16f8 100644
--- a/dotnet/versioned_docs/version-stable/input.mdx
+++ b/dotnet/versioned_docs/version-stable/input.mdx
@@ -274,6 +274,7 @@ await page.GetByTestId("scrolling-container").EvaluateAsync("e => e.scrollTop +=
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -304,6 +305,7 @@ await page.GetByTestId("scrolling-container").EvaluateAsync("e => e.scrollTop +=
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/intro.mdx b/dotnet/versioned_docs/version-stable/intro.mdx
index f16deaff8c..703841ea58 100644
--- a/dotnet/versioned_docs/version-stable/intro.mdx
+++ b/dotnet/versioned_docs/version-stable/intro.mdx
@@ -298,6 +298,7 @@ See our doc on [Running and Debugging Tests](./running-tests.mdx) to learn more
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -328,6 +329,7 @@ See our doc on [Running and Debugging Tests](./running-tests.mdx) to learn more
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/languages.mdx b/dotnet/versioned_docs/version-stable/languages.mdx
index c80bf30f45..6e92242a75 100644
--- a/dotnet/versioned_docs/version-stable/languages.mdx
+++ b/dotnet/versioned_docs/version-stable/languages.mdx
@@ -46,6 +46,7 @@ Playwright for .NET comes with MSTest, NUnit, xUnit, and xUnit v3 [base classes]
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -76,6 +77,7 @@ Playwright for .NET comes with MSTest, NUnit, xUnit, and xUnit v3 [base classes]
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/library.mdx b/dotnet/versioned_docs/version-stable/library.mdx
index 2055e75ed4..23b23ce71b 100644
--- a/dotnet/versioned_docs/version-stable/library.mdx
+++ b/dotnet/versioned_docs/version-stable/library.mdx
@@ -109,6 +109,7 @@ or:
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -139,6 +140,7 @@ or:
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/locators.mdx b/dotnet/versioned_docs/version-stable/locators.mdx
index 8d3f4f9f1f..a82698820c 100644
--- a/dotnet/versioned_docs/version-stable/locators.mdx
+++ b/dotnet/versioned_docs/version-stable/locators.mdx
@@ -946,6 +946,7 @@ For less commonly used locators, look at the [other locators](./other-locators.m
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -976,6 +977,7 @@ For less commonly used locators, look at the [other locators](./other-locators.m
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/mock.mdx b/dotnet/versioned_docs/version-stable/mock.mdx
index 8de9b823d8..c153bd2714 100644
--- a/dotnet/versioned_docs/version-stable/mock.mdx
+++ b/dotnet/versioned_docs/version-stable/mock.mdx
@@ -207,6 +207,7 @@ For more details, see [WebSocketRoute].
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -237,6 +238,7 @@ For more details, see [WebSocketRoute].
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/navigations.mdx b/dotnet/versioned_docs/version-stable/navigations.mdx
index e7476b7873..0d44a3c7aa 100644
--- a/dotnet/versioned_docs/version-stable/navigations.mdx
+++ b/dotnet/versioned_docs/version-stable/navigations.mdx
@@ -88,6 +88,7 @@ Playwright splits the process of showing a new document in a page into **navigat
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -118,6 +119,7 @@ Playwright splits the process of showing a new document in a page into **navigat
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/network.mdx b/dotnet/versioned_docs/version-stable/network.mdx
index a8737693fe..ddde942ff2 100644
--- a/dotnet/versioned_docs/version-stable/network.mdx
+++ b/dotnet/versioned_docs/version-stable/network.mdx
@@ -237,6 +237,7 @@ It might be that you are using a mock tool such as Mock Service Worker (MSW). Wh
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -267,6 +268,7 @@ It might be that you are using a mock tool such as Mock Service Worker (MSW). Wh
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/other-locators.mdx b/dotnet/versioned_docs/version-stable/other-locators.mdx
index 003b7b8efa..8d98547d24 100644
--- a/dotnet/versioned_docs/version-stable/other-locators.mdx
+++ b/dotnet/versioned_docs/version-stable/other-locators.mdx
@@ -414,6 +414,7 @@ For example, `css=article >> text=Hello` captures the element with the text `Hel
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -444,6 +445,7 @@ For example, `css=article >> text=Hello` captures the element with the text `Hel
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/pages.mdx b/dotnet/versioned_docs/version-stable/pages.mdx
index 6d227e03dc..f2bc2793c6 100644
--- a/dotnet/versioned_docs/version-stable/pages.mdx
+++ b/dotnet/versioned_docs/version-stable/pages.mdx
@@ -104,6 +104,7 @@ page.Popup += async (_, popup) => {
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -134,6 +135,7 @@ page.Popup += async (_, popup) => {
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/pom.mdx b/dotnet/versioned_docs/version-stable/pom.mdx
index 89795ab142..5c22272afa 100644
--- a/dotnet/versioned_docs/version-stable/pom.mdx
+++ b/dotnet/versioned_docs/version-stable/pom.mdx
@@ -71,6 +71,7 @@ await page.SearchAsync("search query");
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -101,6 +102,7 @@ await page.SearchAsync("search query");
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/release-notes.mdx b/dotnet/versioned_docs/version-stable/release-notes.mdx
index a06395c519..81b34a8549 100644
--- a/dotnet/versioned_docs/version-stable/release-notes.mdx
+++ b/dotnet/versioned_docs/version-stable/release-notes.mdx
@@ -9,6 +9,131 @@ import HTMLCard from '@site/src/components/HTMLCard';
import LiteYouTube from '@site/src/components/LiteYouTube';
+## Version 1.61
+
+### 🔑 WebAuthn passkeys
+
+New [Credentials] virtual authenticator, available via [BrowserContext.Credentials](/api/class-browsercontext.mdx#browser-context-credentials), lets tests register passkeys and answer `navigator.credentials.create()` / `navigator.credentials.get()` ceremonies in the page — no real hardware key required, works in all browsers:
+
+```csharp
+var context = await browser.NewContextAsync();
+
+// Seed a passkey your backend provisioned for a test user.
+await context.Credentials.CreateAsync("example.com", new()
+{
+ Id = credentialId,
+ UserHandle = userHandle,
+ PrivateKey = privateKey,
+ PublicKey = publicKey,
+});
+await context.Credentials.InstallAsync();
+
+var page = await context.NewPageAsync();
+await page.GotoAsync("https://example.com/login");
+// The page's navigator.credentials.get() is answered with the seeded passkey.
+```
+
+You can also let the app register a passkey once in a setup test, read it back with [Credentials.GetAsync()](/api/class-credentials.mdx#credentials-get), and seed it into later tests — see [Credentials] for details.
+
+### 🗃️ Web Storage
+
+New [WebStorage] API, available via [Page.LocalStorage](/api/class-page.mdx#page-local-storage) and [Page.SessionStorage](/api/class-page.mdx#page-session-storage), reads and writes the page's storage for the current origin:
+
+```csharp
+await page.LocalStorage.SetItemAsync("token", "abc");
+var token = await page.LocalStorage.GetItemAsync("token");
+var items = await page.SessionStorage.ItemsAsync();
+```
+
+### New APIs
+- [ApiResponse.SecurityDetailsAsync()](/api/class-apiresponse.mdx#api-response-security-details) and [ApiResponse.ServerAddrAsync()](/api/class-apiresponse.mdx#api-response-server-addr) mirror the browser-side [Response.SecurityDetailsAsync()](/api/class-response.mdx#response-security-details) and [Response.ServerAddrAsync()](/api/class-response.mdx#response-server-addr).
+- New option `ArtifactsDir` in [BrowserType.ConnectOverCDPAsync()](/api/class-browsertype.mdx#browser-type-connect-over-cdp) controls where artifacts such as traces and downloads are stored when attached to an existing browser.
+- New option `Cursor` in [Screencast.ShowActionsAsync()](/api/class-screencast.mdx#screencast-show-actions) controls the cursor decoration rendered for pointer actions.
+- The `OnFrame` callback in [Screencast.StartAsync()](/api/class-screencast.mdx#screencast-start) now receives a `Timestamp` of when the frame was presented by the browser.
+
+### 🛠️ Other improvements
+- Playwright now supports Ubuntu 26.04.
+
+### Browser Versions
+- Chromium 149.0.7827.55
+- Mozilla Firefox 151.0
+- WebKit 26.5
+
+This version was also tested against the following stable channels:
+- Google Chrome 149
+- Microsoft Edge 149
+
+## Version 1.60
+
+### 🌐 HAR recording on Tracing
+
+[Tracing.StartHarAsync()](/api/class-tracing.mdx#tracing-start-har) / [Tracing.StopHarAsync()](/api/class-tracing.mdx#tracing-stop-har) expose HAR recording as a first-class tracing API, with the same `Content`, `Mode` and `UrlFilter` options as `RecordHar`:
+
+```csharp
+await context.Tracing.StartHarAsync("trace.har");
+var page = await context.NewPageAsync();
+await page.GotoAsync("https://playwright.dev");
+await context.Tracing.StopHarAsync();
+```
+
+### 🪝 Drop API
+
+New [Locator.DropAsync()](/api/class-locator.mdx#locator-drop) simulates an external drag-and-drop of files or clipboard-like data onto an element. Playwright dispatches `dragenter`, `dragover`, and `drop` with a synthetic [DataTransfer] in the page context — works cross-browser and is great for testing upload zones:
+
+```csharp
+await page.Locator("#dropzone").DropAsync(new() {
+ Files = new FilePayload() {
+ Name = "note.txt",
+ MimeType = "text/plain",
+ Buffer = Encoding.UTF8.GetBytes("hello"),
+ },
+});
+
+await page.Locator("#dropzone").DropAsync(new() {
+ Data = new Dictionary {
+ ["text/plain"] = "hello world",
+ ["text/uri-list"] = "https://example.com",
+ },
+});
+```
+
+### 🎯 Aria snapshots
+- [Expect(Page).ToMatchAriaSnapshotAsync()](/api/class-pageassertions.mdx#page-assertions-to-match-aria-snapshot) now works on a [Page], in addition to a [Locator] — equivalent to asserting against `Page.Locator("body")`.
+- New `Boxes` option on [Locator.AriaSnapshotAsync()](/api/class-locator.mdx#locator-aria-snapshot) / [Page.AriaSnapshotAsync()](/api/class-page.mdx#page-aria-snapshot) appends each element's bounding box as `[box=x,y,width,height]`, useful for AI consumption.
+
+### New APIs
+
+#### Browser, Context and Page
+- Event [Browser.Context](/api/class-browser.mdx#browser-event-context) — fired when a new context is created on the browser.
+- [BrowserContext] now mirrors lifecycle events from its pages: [BrowserContext.Download](/api/class-browsercontext.mdx#browser-context-event-download), [BrowserContext.FrameAttached](/api/class-browsercontext.mdx#browser-context-event-frame-attached), [BrowserContext.FrameDetached](/api/class-browsercontext.mdx#browser-context-event-frame-detached), [BrowserContext.FrameNavigated](/api/class-browsercontext.mdx#browser-context-event-frame-navigated), [BrowserContext.PageClose](/api/class-browsercontext.mdx#browser-context-event-page-close), [BrowserContext.PageLoad](/api/class-browsercontext.mdx#browser-context-event-page-load).
+
+#### Locators and Assertions
+- New option `Description` in [Page.GetByRole()](/api/class-page.mdx#page-get-by-role) / [Locator.GetByRole()](/api/class-locator.mdx#locator-get-by-role) / [Frame.GetByRole()](/api/class-frame.mdx#frame-get-by-role) / [FrameLocator.GetByRole()](/api/class-framelocator.mdx#frame-locator-get-by-role) for matching the [accessible description](https://www.w3.org/TR/wai-aria-1.2/#dfn-accessible-description).
+- New option `Pseudo` in [Expect(Locator).ToHaveCSSAsync()](/api/class-locatorassertions.mdx#locator-assertions-to-have-css) reads computed styles from `::before` or `::after`.
+- New option `Style` in [Locator.HighlightAsync()](/api/class-locator.mdx#locator-highlight) applies extra inline CSS to the highlight overlay, plus new [Page.HideHighlightAsync()](/api/class-page.mdx#page-hide-highlight) to clear all highlights.
+
+#### Network
+- [WebSocketRoute.Protocols](/api/class-websocketroute.mdx#web-socket-route-protocols) returns the WebSocket subprotocols requested by the page.
+- New option `NoDefaults` in [BrowserType.ConnectOverCDPAsync()](/api/class-browsertype.mdx#browser-type-connect-over-cdp) disables Playwright's default overrides on the default context (download behavior, focus emulation, media emulation), so attaching to a user's daily-driver browser doesn't disturb its state.
+
+#### Errors
+- New [WebError.Location](/api/class-weberror.mdx#web-error-location) mirrors [ConsoleMessage.Location](/api/class-consolemessage.mdx#console-message-location).
+
+### 🛠️ Other improvements
+- Trace Viewer adds a pretty-print toggle for JSON / form request and response bodies in the network details panel.
+
+### Breaking Changes ⚠️
+- Removed long-deprecated `Handle` option on `BrowserContext.ExposeBindingAsync` and `Page.ExposeBindingAsync`.
+
+### Browser Versions
+- Chromium 148.0.7778.96
+- Mozilla Firefox 150.0.2
+- WebKit 26.4
+
+This version was also tested against the following stable channels:
+- Google Chrome 147
+- Microsoft Edge 147
+
## Version 1.59
### 🎬 Screencast
@@ -1802,6 +1927,7 @@ This version of Playwright was also tested against the following stable channels
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -1832,6 +1958,7 @@ This version of Playwright was also tested against the following stable channels
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/running-tests.mdx b/dotnet/versioned_docs/version-stable/running-tests.mdx
index 0eb848c5f9..65a73c2cc1 100644
--- a/dotnet/versioned_docs/version-stable/running-tests.mdx
+++ b/dotnet/versioned_docs/version-stable/running-tests.mdx
@@ -259,6 +259,7 @@ Check out our [debugging guide](./debug.mdx) to learn more about the [Playwright
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -289,6 +290,7 @@ Check out our [debugging guide](./debug.mdx) to learn more about the [Playwright
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/screenshots.mdx b/dotnet/versioned_docs/version-stable/screenshots.mdx
index 71efa5a710..085a19655a 100644
--- a/dotnet/versioned_docs/version-stable/screenshots.mdx
+++ b/dotnet/versioned_docs/version-stable/screenshots.mdx
@@ -60,6 +60,7 @@ await page.Locator(".header").ScreenshotAsync(new() { Path = "screenshot.png" })
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -90,6 +91,7 @@ await page.Locator(".header").ScreenshotAsync(new() { Path = "screenshot.png" })
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/selenium-grid.mdx b/dotnet/versioned_docs/version-stable/selenium-grid.mdx
index 6401dc4025..4a4421751e 100644
--- a/dotnet/versioned_docs/version-stable/selenium-grid.mdx
+++ b/dotnet/versioned_docs/version-stable/selenium-grid.mdx
@@ -135,6 +135,7 @@ This means that Selenium 3 is supported in a best-effort manner, where Playwrigh
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -165,6 +166,7 @@ This means that Selenium 3 is supported in a best-effort manner, where Playwrigh
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/test-assertions.mdx b/dotnet/versioned_docs/version-stable/test-assertions.mdx
index 3f1ba60730..70afa39a03 100644
--- a/dotnet/versioned_docs/version-stable/test-assertions.mdx
+++ b/dotnet/versioned_docs/version-stable/test-assertions.mdx
@@ -173,6 +173,7 @@ await Expect(Page.GetByText("Name")).ToBeVisibleAsync(new() { Timeout = 10_000 }
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -203,6 +204,7 @@ await Expect(Page.GetByText("Name")).ToBeVisibleAsync(new() { Timeout = 10_000 }
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/test-runners.mdx b/dotnet/versioned_docs/version-stable/test-runners.mdx
index 05339cc488..52e0601bb5 100644
--- a/dotnet/versioned_docs/version-stable/test-runners.mdx
+++ b/dotnet/versioned_docs/version-stable/test-runners.mdx
@@ -467,6 +467,7 @@ There are a few base classes available to you in `Microsoft.Playwright.Xunit.v3`
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -497,6 +498,7 @@ There are a few base classes available to you in `Microsoft.Playwright.Xunit.v3`
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/touch-events.mdx b/dotnet/versioned_docs/version-stable/touch-events.mdx
index c36383ba52..13f3a6ef1f 100644
--- a/dotnet/versioned_docs/version-stable/touch-events.mdx
+++ b/dotnet/versioned_docs/version-stable/touch-events.mdx
@@ -169,6 +169,7 @@ public class TouchEvents
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -199,6 +200,7 @@ public class TouchEvents
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/trace-viewer-intro.mdx b/dotnet/versioned_docs/version-stable/trace-viewer-intro.mdx
index 24220fe82f..a7d0a6295f 100644
--- a/dotnet/versioned_docs/version-stable/trace-viewer-intro.mdx
+++ b/dotnet/versioned_docs/version-stable/trace-viewer-intro.mdx
@@ -273,6 +273,7 @@ Check out our detailed guide on [Trace Viewer](/trace-viewer.mdx) to learn more
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -303,6 +304,7 @@ Check out our detailed guide on [Trace Viewer](/trace-viewer.mdx) to learn more
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/trace-viewer.mdx b/dotnet/versioned_docs/version-stable/trace-viewer.mdx
index e01cff1d1a..d6eac80738 100644
--- a/dotnet/versioned_docs/version-stable/trace-viewer.mdx
+++ b/dotnet/versioned_docs/version-stable/trace-viewer.mdx
@@ -610,6 +610,7 @@ Next to the Actions tab you will find the Metadata tab which will show you more
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -640,6 +641,7 @@ Next to the Actions tab you will find the Metadata tab which will show you more
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/videos.mdx b/dotnet/versioned_docs/version-stable/videos.mdx
index 18c5b8de87..50e9d8d514 100644
--- a/dotnet/versioned_docs/version-stable/videos.mdx
+++ b/dotnet/versioned_docs/version-stable/videos.mdx
@@ -57,6 +57,7 @@ Note that the video is only available after the page or browser context is close
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -87,6 +88,7 @@ Note that the video is only available after the page or browser context is close
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/webview2.mdx b/dotnet/versioned_docs/version-stable/webview2.mdx
index 5162f7f66c..4cc6c0c68b 100644
--- a/dotnet/versioned_docs/version-stable/webview2.mdx
+++ b/dotnet/versioned_docs/version-stable/webview2.mdx
@@ -150,6 +150,7 @@ For debugging tests, see the Playwright [Debugging guide](./debug).
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -180,6 +181,7 @@ For debugging tests, see the Playwright [Debugging guide](./debug).
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/dotnet/versioned_docs/version-stable/writing-tests.mdx b/dotnet/versioned_docs/version-stable/writing-tests.mdx
index 0d251ac9b4..6e682aae33 100644
--- a/dotnet/versioned_docs/version-stable/writing-tests.mdx
+++ b/dotnet/versioned_docs/version-stable/writing-tests.mdx
@@ -504,6 +504,7 @@ public class UnitTest1: PageTest
[CDPSessionEvent]: /api/class-cdpsessionevent.mdx "CDPSessionEvent"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -534,6 +535,7 @@ public class UnitTest1: PageTest
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/accessibility-testing.mdx b/java/versioned_docs/version-stable/accessibility-testing.mdx
index 939438f5c1..51d7c6ad10 100644
--- a/java/versioned_docs/version-stable/accessibility-testing.mdx
+++ b/java/versioned_docs/version-stable/accessibility-testing.mdx
@@ -256,6 +256,7 @@ See experimental [JUnit integration](./junit.mdx) to automatically initialize Pl
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -288,6 +289,7 @@ See experimental [JUnit integration](./junit.mdx) to automatically initialize Pl
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/actionability.mdx b/java/versioned_docs/version-stable/actionability.mdx
index 2bb69ebedf..a5e69d3819 100644
--- a/java/versioned_docs/version-stable/actionability.mdx
+++ b/java/versioned_docs/version-stable/actionability.mdx
@@ -133,6 +133,7 @@ For example, consider a scenario where Playwright will click `Sign Up` button re
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -165,6 +166,7 @@ For example, consider a scenario where Playwright will click `Sign Up` button re
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api-testing.mdx b/java/versioned_docs/version-stable/api-testing.mdx
index 7265f5e561..216add3efa 100644
--- a/java/versioned_docs/version-stable/api-testing.mdx
+++ b/java/versioned_docs/version-stable/api-testing.mdx
@@ -451,6 +451,7 @@ BrowserContext context = browser.newContext(new Browser.NewContextOptions().setS
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -483,6 +484,7 @@ BrowserContext context = browser.newContext(new Browser.NewContextOptions().setS
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-apirequest.mdx b/java/versioned_docs/version-stable/api/class-apirequest.mdx
index 4598e3c276..8d77f6e95f 100644
--- a/java/versioned_docs/version-stable/api/class-apirequest.mdx
+++ b/java/versioned_docs/version-stable/api/class-apirequest.mdx
@@ -143,6 +143,7 @@ APIRequest.newContext(options);
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -175,6 +176,7 @@ APIRequest.newContext(options);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-apirequestcontext.mdx b/java/versioned_docs/version-stable/api/class-apirequestcontext.mdx
index c0d9e360e7..b2ac3bbf9f 100644
--- a/java/versioned_docs/version-stable/api/class-apirequestcontext.mdx
+++ b/java/versioned_docs/version-stable/api/class-apirequestcontext.mdx
@@ -338,6 +338,7 @@ APIRequestContext.tracing()
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -370,6 +371,7 @@ APIRequestContext.tracing()
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-apiresponse.mdx b/java/versioned_docs/version-stable/api/class-apiresponse.mdx
index db2da0eacb..a6b413cc1f 100644
--- a/java/versioned_docs/version-stable/api/class-apiresponse.mdx
+++ b/java/versioned_docs/version-stable/api/class-apiresponse.mdx
@@ -103,6 +103,60 @@ APIResponse.ok();
**Returns**
- [boolean]#
+---
+
+### securityDetails {/* #api-response-security-details */}
+
+Added in: v1.61apiResponse.securityDetails
+
+Returns SSL and other security information. Resolves to `null` for non-HTTPS responses. For redirected requests, returns the information for the last request in the redirect chain.
+
+**Usage**
+
+```java
+APIResponse.securityDetails();
+```
+
+**Returns**
+- [null] | SecurityDetails#
+ - `issuer` [String] *(optional)*
+
+ Common Name component of the Issuer field. from the certificate. This should only be used for informational purposes. Optional.
+ - `protocol` [String] *(optional)*
+
+ The specific TLS protocol used. (e.g. `TLS 1.3`). Optional.
+ - `subjectName` [String] *(optional)*
+
+ Common Name component of the Subject field from the certificate. This should only be used for informational purposes. Optional.
+ - `validFrom` [double] *(optional)*
+
+ Unix timestamp (in seconds) specifying when this cert becomes valid. Optional.
+ - `validTo` [double] *(optional)*
+
+ Unix timestamp (in seconds) specifying when this cert becomes invalid. Optional.
+
+---
+
+### serverAddr {/* #api-response-server-addr */}
+
+Added in: v1.61apiResponse.serverAddr
+
+Returns the IP address and port of the server. Resolves to `null` if the server address is not available. For redirected requests, returns the information for the last request in the redirect chain.
+
+**Usage**
+
+```java
+APIResponse.serverAddr();
+```
+
+**Returns**
+- [null] | ServerAddr#
+ - `ipAddress` [String]
+
+ IPv4 or IPV6 address of the server.
+ - `port` [int]
+
+
---
### status {/* #api-response-status */}
@@ -182,6 +236,7 @@ APIResponse.url();
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -214,6 +269,7 @@ APIResponse.url();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-apiresponseassertions.mdx b/java/versioned_docs/version-stable/api/class-apiresponseassertions.mdx
index 027e48dc17..94fe590763 100644
--- a/java/versioned_docs/version-stable/api/class-apiresponseassertions.mdx
+++ b/java/versioned_docs/version-stable/api/class-apiresponseassertions.mdx
@@ -76,6 +76,7 @@ assertThat(response).not().isOK();
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -108,6 +109,7 @@ assertThat(response).not().isOK();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-browser.mdx b/java/versioned_docs/version-stable/api/class-browser.mdx
index f882c430e8..567de7bf20 100644
--- a/java/versioned_docs/version-stable/api/class-browser.mdx
+++ b/java/versioned_docs/version-stable/api/class-browser.mdx
@@ -770,6 +770,7 @@ Browser.onDisconnected(handler)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -802,6 +803,7 @@ Browser.onDisconnected(handler)
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-browsercontext.mdx b/java/versioned_docs/version-stable/api/class-browsercontext.mdx
index 11eeabd64e..5ee4b460b5 100644
--- a/java/versioned_docs/version-stable/api/class-browsercontext.mdx
+++ b/java/versioned_docs/version-stable/api/class-browsercontext.mdx
@@ -1004,6 +1004,23 @@ BrowserContext.clock()
---
+### credentials() {/* #browser-context-credentials */}
+
+Added in: v1.61browserContext.credentials()
+
+Virtual WebAuthn authenticator for this context. Lets tests seed credentials and intercept `navigator.credentials.create()` / `navigator.credentials.get()` ceremonies.
+
+**Usage**
+
+```java
+BrowserContext.credentials()
+```
+
+**Returns**
+- [Credentials]
+
+---
+
### debugger() {/* #browser-context-debugger */}
Added in: v1.59browserContext.debugger()
@@ -1351,7 +1368,7 @@ BrowserContext.onWebError(handler)
Added in: v1.11browserContext.onBackgroundPage(handler)
-:::warning Deprecated
+:::warning[Deprecated]
Background pages have been removed from Chromium together with Manifest V2 extensions.
@@ -1375,7 +1392,7 @@ BrowserContext.onBackgroundPage(handler)
Added in: v1.11browserContext.backgroundPages
-:::warning Deprecated
+:::warning[Deprecated]
Background pages have been removed from Chromium together with Manifest V2 extensions.
@@ -1404,6 +1421,7 @@ BrowserContext.backgroundPages();
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -1436,6 +1454,7 @@ BrowserContext.backgroundPages();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-browsertype.mdx b/java/versioned_docs/version-stable/api/class-browsertype.mdx
index 2c595a802d..806c3d9c5b 100644
--- a/java/versioned_docs/version-stable/api/class-browsertype.mdx
+++ b/java/versioned_docs/version-stable/api/class-browsertype.mdx
@@ -112,6 +112,9 @@ Page page = defaultContext.pages().get(0);
A CDP websocket endpoint or http url to connect to. For example `http://localhost:9222/` or `ws://127.0.0.1:9222/devtools/browser/387adf4c-243f-4051-a181-46798f4a46f4`.
- `options` `BrowserType.ConnectOverCDPOptions` *(optional)*
+ - `setArtifactsDir` [Path] *(optional)* Added in: v1.61#
+
+ If specified, browser artifacts (such as traces and downloads) are saved into this directory.
- `setHeaders` [Map]<[String], [String]> *(optional)* Added in: v1.11#
Additional HTTP headers to be sent with connect request. Optional.
@@ -573,6 +576,7 @@ BrowserType.name();
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -605,6 +609,7 @@ BrowserType.name();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-cdpsession.mdx b/java/versioned_docs/version-stable/api/class-cdpsession.mdx
index 6101f6c373..06ebf6d802 100644
--- a/java/versioned_docs/version-stable/api/class-cdpsession.mdx
+++ b/java/versioned_docs/version-stable/api/class-cdpsession.mdx
@@ -148,6 +148,7 @@ CDPSession.onClose(handler)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -180,6 +181,7 @@ CDPSession.onClose(handler)
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-clock.mdx b/java/versioned_docs/version-stable/api/class-clock.mdx
index 3abf1b0f35..172149c1ca 100644
--- a/java/versioned_docs/version-stable/api/class-clock.mdx
+++ b/java/versioned_docs/version-stable/api/class-clock.mdx
@@ -211,6 +211,7 @@ page.clock().setSystemTime("2020-02-02");
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -243,6 +244,7 @@ page.clock().setSystemTime("2020-02-02");
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-consolemessage.mdx b/java/versioned_docs/version-stable/api/class-consolemessage.mdx
index 11f976abac..955228b7e5 100644
--- a/java/versioned_docs/version-stable/api/class-consolemessage.mdx
+++ b/java/versioned_docs/version-stable/api/class-consolemessage.mdx
@@ -163,6 +163,7 @@ ConsoleMessage.worker();
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -195,6 +196,7 @@ ConsoleMessage.worker();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-credentials.mdx b/java/versioned_docs/version-stable/api/class-credentials.mdx
new file mode 100644
index 0000000000..cf6fd16892
--- /dev/null
+++ b/java/versioned_docs/version-stable/api/class-credentials.mdx
@@ -0,0 +1,292 @@
+---
+id: class-credentials
+title: "Credentials"
+---
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import HTMLCard from '@site/src/components/HTMLCard';
+
+
+`Credentials` is a virtual WebAuthn authenticator scoped to a [BrowserContext]. It lets tests register passkeys and answer `navigator.credentials.create()` / `navigator.credentials.get()` ceremonies in the page, without a real authenticator or hardware security key.
+
+There are two common ways to use it:
+
+**Usage: seed a known credential**
+
+```java
+BrowserContext context = browser.newContext();
+
+// A passkey your backend already provisioned for a test user.
+context.credentials().create("example.com", new Credentials.CreateOptions()
+ .setId(knownCredentialId) // base64url
+ .setUserHandle(knownUserHandle) // base64url
+ .setPrivateKey(knownPrivateKey) // base64url PKCS#8 (DER)
+ .setPublicKey(knownPublicKey)); // base64url SPKI (DER)
+context.credentials().install();
+
+Page page = context.newPage();
+page.navigate("https://example.com/login");
+// The page's navigator.credentials.get() is answered with the seeded passkey.
+```
+
+**Usage: capture a passkey, then reuse it**
+
+```java
+// setup test: let the app register a passkey, then save it.
+BrowserContext context = browser.newContext();
+context.credentials().install();
+
+Page page = context.newPage();
+page.navigate("https://example.com/register");
+page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Create a passkey")).click();
+
+// Read back the passkey the page registered — it includes the private key.
+VirtualCredential credential = context.credentials().get(
+ new Credentials.GetOptions().setRpId("example.com")).get(0);
+Files.writeString(Paths.get("playwright/.auth/passkey.json"), new Gson().toJson(credential));
+```
+
+```java
+// later test: seed the captured passkey so the app starts already enrolled.
+VirtualCredential credential = new Gson().fromJson(
+ Files.readString(Paths.get("playwright/.auth/passkey.json")), VirtualCredential.class);
+BrowserContext context = browser.newContext();
+context.credentials().create(credential.rpId, new Credentials.CreateOptions()
+ .setId(credential.id)
+ .setUserHandle(credential.userHandle)
+ .setPrivateKey(credential.privateKey)
+ .setPublicKey(credential.publicKey));
+context.credentials().install();
+
+Page page = context.newPage();
+page.navigate("https://example.com/login");
+// navigator.credentials.get() resolves the captured passkey — already signed in.
+```
+
+**Defaults**
+
+
+---
+
+## Methods
+
+### create {/* #credentials-create */}
+
+Added in: v1.61credentials.create
+
+Seeds a virtual WebAuthn credential and returns it.
+
+With only [rpId](/api/class-credentials.mdx#credentials-create-option-rp-id), generates a fresh **ECDSA P-256** keypair, credential id and user handle. The seeded credential is discoverable (resident), so the page can resolve it from both username-then-passkey and usernameless passkey flows. The returned object carries the private and public keys, so it can be persisted to disk and re-seeded in a later test.
+
+To **import a known credential**, supply all four of [setId](/api/class-credentials.mdx#credentials-create-option-id), [setUserHandle](/api/class-credentials.mdx#credentials-create-option-user-handle), [setPrivateKey](/api/class-credentials.mdx#credentials-create-option-private-key) and [setPublicKey](/api/class-credentials.mdx#credentials-create-option-public-key) together.
+
+Call [Credentials.install()](/api/class-credentials.mdx#credentials-install) before navigating to a page that uses WebAuthn.
+
+**Usage**
+
+```java
+Credentials.create(rpId);
+Credentials.create(rpId, options);
+```
+
+**Arguments**
+- `rpId` [String]#
+
+ Relying party id (typically the site's effective domain).
+- `options` `Credentials.CreateOptions` *(optional)*
+ - `setId` [String] *(optional)*#
+
+ Base64url-encoded credential id. Auto-generated if omitted.
+ - `setPrivateKey` [String] *(optional)*#
+
+ Base64url-encoded PKCS#8 (DER) private key. Auto-generated if omitted.
+ - `setPublicKey` [String] *(optional)*#
+
+ Base64url-encoded SPKI (DER) public key. Auto-generated if omitted.
+ - `setUserHandle` [String] *(optional)*#
+
+ Base64url-encoded user handle. Auto-generated if omitted.
+
+**Returns**
+- Create#
+ - `id` [String]
+
+ Base64url-encoded credential id.
+ - `rpId` [String]
+
+ Relying party id.
+ - `userHandle` [String]
+
+ Base64url-encoded user handle.
+ - `privateKey` [String]
+
+ Base64url-encoded PKCS#8 (DER) private key.
+ - `publicKey` [String]
+
+ Base64url-encoded SPKI (DER) public key.
+
+---
+
+### delete {/* #credentials-delete */}
+
+Added in: v1.61credentials.delete
+
+Removes a credential from the authenticator by its id. Works for any credential currently held — both those seeded with [Credentials.create()](/api/class-credentials.mdx#credentials-create) and those the page registered itself by calling `navigator.credentials.create()`.
+
+**Usage**
+
+```java
+Credentials.delete(id);
+```
+
+**Arguments**
+- `id` [String]#
+
+ Base64url-encoded credential id.
+
+**Returns**
+- [void]#
+
+---
+
+### get {/* #credentials-get */}
+
+Added in: v1.61credentials.get
+
+Returns every credential currently held by the authenticator, optionally filtered by [setRpId](/api/class-credentials.mdx#credentials-get-option-rp-id) or [setId](/api/class-credentials.mdx#credentials-get-option-id). This includes both credentials seeded with [Credentials.create()](/api/class-credentials.mdx#credentials-create) and credentials the page registered itself by calling `navigator.credentials.create()`.
+
+Each returned credential includes its private and public keys, so a passkey the app just registered can be saved and re-seeded into a later test with [Credentials.create()](/api/class-credentials.mdx#credentials-create) — see the second example in the class overview.
+
+**Usage**
+
+```java
+Credentials.get();
+Credentials.get(options);
+```
+
+**Arguments**
+- `options` `Credentials.GetOptions` *(optional)*
+ - `setId` [String] *(optional)*#
+
+ Only return the credential with this base64url-encoded id.
+ - `setRpId` [String] *(optional)*#
+
+ Only return credentials for this relying party id.
+
+**Returns**
+- [List]<Get>#
+ - `id` [String]
+
+
+ - `rpId` [String]
+
+
+ - `userHandle` [String]
+
+
+ - `privateKey` [String]
+
+
+ - `publicKey` [String]
+
+
+---
+
+### install {/* #credentials-install */}
+
+Added in: v1.61credentials.install
+
+Installs the virtual WebAuthn authenticator into the context, overriding `navigator.credentials.create()` and `navigator.credentials.get()` in all current and future pages. Call this before the page first touches `navigator.credentials`.
+
+Required: until [Credentials.install()](/api/class-credentials.mdx#credentials-install) is called, no interception is in place and the page sees the platform's native (or absent) WebAuthn behaviour. Seeding credentials with [Credentials.create()](/api/class-credentials.mdx#credentials-create) without installing populates the authenticator, but the page will never see those credentials.
+
+**Usage**
+
+```java
+Credentials.install();
+```
+
+**Returns**
+- [void]#
+
+
+[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"
+[BrowserType]: /api/class-browsertype.mdx "BrowserType"
+[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
+[Clock]: /api/class-clock.mdx "Clock"
+[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
+[Debugger]: /api/class-debugger.mdx "Debugger"
+[Dialog]: /api/class-dialog.mdx "Dialog"
+[Download]: /api/class-download.mdx "Download"
+[ElementHandle]: /api/class-elementhandle.mdx "ElementHandle"
+[FileChooser]: /api/class-filechooser.mdx "FileChooser"
+[FormData]: /api/class-formdata.mdx "FormData"
+[Frame]: /api/class-frame.mdx "Frame"
+[FrameLocator]: /api/class-framelocator.mdx "FrameLocator"
+[JSHandle]: /api/class-jshandle.mdx "JSHandle"
+[Keyboard]: /api/class-keyboard.mdx "Keyboard"
+[Locator]: /api/class-locator.mdx "Locator"
+[LocatorAssertions]: /api/class-locatorassertions.mdx "LocatorAssertions"
+[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"
+[PlaywrightException]: /api/class-playwrightexception.mdx "PlaywrightException"
+[Request]: /api/class-request.mdx "Request"
+[RequestOptions]: /api/class-requestoptions.mdx "RequestOptions"
+[Response]: /api/class-response.mdx "Response"
+[Route]: /api/class-route.mdx "Route"
+[Screencast]: /api/class-screencast.mdx "Screencast"
+[Selectors]: /api/class-selectors.mdx "Selectors"
+[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"
+[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
+[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
+[Worker]: /api/class-worker.mdx "Worker"
+[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"
+
+[boolean]: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html "boolean"
+[byte[]]: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html "byte[]"
+[Consumer]: https://docs.oracle.com/javase/8/docs/api/java/util/function/Consumer.html "Consumer"
+[Date]: https://docs.oracle.com/javase/8/docs/api/java/util/Date.html "Date"
+[double]: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html "double"
+[InputStream]: https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html "InputStream"
+[int]: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html "int"
+[long]: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html "long"
+[JsonObject]: https://www.javadoc.io/doc/com.google.code.gson/gson/latest/com.google.gson/com/google/gson/JsonObject.html "JsonObject"
+[List]: https://docs.oracle.com/javase/8/docs/api/java/util/List.html "List"
+[Map]: https://docs.oracle.com/javase/8/docs/api/java/util/Map.html "Map"
+[null]: https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.7 "null"
+[Object]: https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html "Object"
+[Path]: https://docs.oracle.com/javase/8/docs/api/java/nio/file/Path.html "Path"
+[Pattern]: https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html "Pattern"
+[Predicate]: https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html "Predicate"
+[void]: https://docs.oracle.com/javase/tutorial/java/javaOO/methods.html "void"
+[Runnable]: https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html "Runnable"
+[RuntimeException]: https://docs.oracle.com/javase/8/docs/api/java/lang/RuntimeException.html "RuntimeException"
+[String]: https://docs.oracle.com/javase/8/docs/api/java/lang/String.html "String"
+
+[all available image tags]: https://mcr.microsoft.com/en-us/product/playwright/java/about "all available image tags"
+[Microsoft Artifact Registry]: https://mcr.microsoft.com/en-us/product/playwright/java/about "Microsoft Artifact Registry"
+[Dockerfile.noble]: https://github.com/microsoft/playwright-java/blob/main/utils/docker/Dockerfile.noble "Dockerfile.noble"
diff --git a/java/versioned_docs/version-stable/api/class-debugger.mdx b/java/versioned_docs/version-stable/api/class-debugger.mdx
index bc6b647c26..bd6690cc53 100644
--- a/java/versioned_docs/version-stable/api/class-debugger.mdx
+++ b/java/versioned_docs/version-stable/api/class-debugger.mdx
@@ -154,6 +154,7 @@ Debugger.onPausedStateChanged(handler)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -186,6 +187,7 @@ Debugger.onPausedStateChanged(handler)
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-dialog.mdx b/java/versioned_docs/version-stable/api/class-dialog.mdx
index 886993cc4e..d21134887d 100644
--- a/java/versioned_docs/version-stable/api/class-dialog.mdx
+++ b/java/versioned_docs/version-stable/api/class-dialog.mdx
@@ -157,6 +157,7 @@ Dialog.type();
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -189,6 +190,7 @@ Dialog.type();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-download.mdx b/java/versioned_docs/version-stable/api/class-download.mdx
index 70a1d3affb..7a1fc2b8e6 100644
--- a/java/versioned_docs/version-stable/api/class-download.mdx
+++ b/java/versioned_docs/version-stable/api/class-download.mdx
@@ -203,6 +203,7 @@ Download.url();
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -235,6 +236,7 @@ Download.url();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-elementhandle.mdx b/java/versioned_docs/version-stable/api/class-elementhandle.mdx
index 10c38fd538..f874bdcab0 100644
--- a/java/versioned_docs/version-stable/api/class-elementhandle.mdx
+++ b/java/versioned_docs/version-stable/api/class-elementhandle.mdx
@@ -1437,7 +1437,7 @@ ElementHandle.textContent();
Added before v1.9elementHandle.type
-:::warning Deprecated
+:::warning[Deprecated]
In most cases, you should use [Locator.fill()](/api/class-locator.mdx#locator-fill) instead. You only need to press keys one by one if there is special keyboard handling on the page - in this case use [Locator.pressSequentially()](/api/class-locator.mdx#locator-press-sequentially).
@@ -1599,6 +1599,7 @@ This method does not work across navigations, use [Page.waitForSelector()](/api/
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -1631,6 +1632,7 @@ This method does not work across navigations, use [Page.waitForSelector()](/api/
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-filechooser.mdx b/java/versioned_docs/version-stable/api/class-filechooser.mdx
index 1eb303e61b..b81732df23 100644
--- a/java/versioned_docs/version-stable/api/class-filechooser.mdx
+++ b/java/versioned_docs/version-stable/api/class-filechooser.mdx
@@ -121,6 +121,7 @@ FileChooser.setFiles(files, options);
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -153,6 +154,7 @@ FileChooser.setFiles(files, options);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-formdata.mdx b/java/versioned_docs/version-stable/api/class-formdata.mdx
index 3ec41fbc7d..5ee4eeb10b 100644
--- a/java/versioned_docs/version-stable/api/class-formdata.mdx
+++ b/java/versioned_docs/version-stable/api/class-formdata.mdx
@@ -147,6 +147,7 @@ FormData.set(name, value);
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -179,6 +180,7 @@ FormData.set(name, value);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-frame.mdx b/java/versioned_docs/version-stable/api/class-frame.mdx
index 3fc7092a09..7a755a47fe 100644
--- a/java/versioned_docs/version-stable/api/class-frame.mdx
+++ b/java/versioned_docs/version-stable/api/class-frame.mdx
@@ -235,7 +235,7 @@ System.out.println(frame.evaluate("1 + 2")); // prints "3"
[ElementHandle] instances can be passed as an argument to the [Frame.evaluate()](/api/class-frame.mdx#frame-evaluate):
```java
-ElementHandle bodyHandle = frame.evaluate("document.body");
+ElementHandle bodyHandle = frame.evaluateHandle("document.body");
String html = (String) frame.evaluate("([body, suffix]) => body.innerHTML + suffix", Arrays.asList(bodyHandle, "hello"));
bodyHandle.dispose();
```
@@ -2406,7 +2406,7 @@ Frame.textContent(selector, options);
Added before v1.9frame.type
-:::warning Deprecated
+:::warning[Deprecated]
In most cases, you should use [Locator.fill()](/api/class-locator.mdx#locator-fill) instead. You only need to press keys one by one if there is special keyboard handling on the page - in this case use [Locator.pressSequentially()](/api/class-locator.mdx#locator-press-sequentially).
@@ -2521,7 +2521,7 @@ Frame.uncheck(selector, options);
Added before v1.9frame.waitForNavigation
-:::warning Deprecated
+:::warning[Deprecated]
This method is inherently racy, please use [Frame.waitForURL()](/api/class-frame.mdx#frame-wait-for-url) instead.
@@ -2678,6 +2678,7 @@ Frame.waitForTimeout(timeout);
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -2710,6 +2711,7 @@ Frame.waitForTimeout(timeout);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-framelocator.mdx b/java/versioned_docs/version-stable/api/class-framelocator.mdx
index 0f5c5b3829..406f921089 100644
--- a/java/versioned_docs/version-stable/api/class-framelocator.mdx
+++ b/java/versioned_docs/version-stable/api/class-framelocator.mdx
@@ -466,7 +466,7 @@ assertThat(locator).isVisible();
Added in: v1.17frameLocator.first
-:::warning Deprecated
+:::warning[Deprecated]
Use [Locator.first()](/api/class-locator.mdx#locator-first) followed by [Locator.contentFrame()](/api/class-locator.mdx#locator-content-frame) instead.
@@ -490,7 +490,7 @@ FrameLocator.first();
Added in: v1.17frameLocator.last
-:::warning Deprecated
+:::warning[Deprecated]
Use [Locator.last()](/api/class-locator.mdx#locator-last) followed by [Locator.contentFrame()](/api/class-locator.mdx#locator-content-frame) instead.
@@ -514,7 +514,7 @@ FrameLocator.last();
Added in: v1.17frameLocator.nth
-:::warning Deprecated
+:::warning[Deprecated]
Use [Locator.nth()](/api/class-locator.mdx#locator-nth) followed by [Locator.contentFrame()](/api/class-locator.mdx#locator-content-frame) instead.
@@ -546,6 +546,7 @@ FrameLocator.nth(index);
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -578,6 +579,7 @@ FrameLocator.nth(index);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-jshandle.mdx b/java/versioned_docs/version-stable/api/class-jshandle.mdx
index f34a6dcd26..a4cd8cedde 100644
--- a/java/versioned_docs/version-stable/api/class-jshandle.mdx
+++ b/java/versioned_docs/version-stable/api/class-jshandle.mdx
@@ -195,6 +195,7 @@ JSHandle.jsonValue();
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -227,6 +228,7 @@ JSHandle.jsonValue();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-keyboard.mdx b/java/versioned_docs/version-stable/api/class-keyboard.mdx
index b9f295fc3e..c298f739b6 100644
--- a/java/versioned_docs/version-stable/api/class-keyboard.mdx
+++ b/java/versioned_docs/version-stable/api/class-keyboard.mdx
@@ -236,6 +236,7 @@ Keyboard.up(key);
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -268,6 +269,7 @@ Keyboard.up(key);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-locator.mdx b/java/versioned_docs/version-stable/api/class-locator.mdx
index 72802866a9..13a378886d 100644
--- a/java/versioned_docs/version-stable/api/class-locator.mdx
+++ b/java/versioned_docs/version-stable/api/class-locator.mdx
@@ -2584,7 +2584,7 @@ Locator.elementHandles();
Added in: v1.14locator.type
-:::warning Deprecated
+:::warning[Deprecated]
In most cases, you should use [Locator.fill()](/api/class-locator.mdx#locator-fill) instead. You only need to press keys one by one if there is special keyboard handling on the page - in this case use [Locator.pressSequentially()](/api/class-locator.mdx#locator-press-sequentially).
@@ -2631,6 +2631,7 @@ To press a special key, like `Control` or `ArrowDown`, use [Locator.press()](/ap
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -2663,6 +2664,7 @@ To press a special key, like `Control` or `ArrowDown`, use [Locator.press()](/ap
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-locatorassertions.mdx b/java/versioned_docs/version-stable/api/class-locatorassertions.mdx
index 218d6279b8..44c13613de 100644
--- a/java/versioned_docs/version-stable/api/class-locatorassertions.mdx
+++ b/java/versioned_docs/version-stable/api/class-locatorassertions.mdx
@@ -895,6 +895,7 @@ assertThat(locator).not().containsText("error");
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -927,6 +928,7 @@ assertThat(locator).not().containsText("error");
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-mouse.mdx b/java/versioned_docs/version-stable/api/class-mouse.mdx
index 2378676c5f..f4748e4357 100644
--- a/java/versioned_docs/version-stable/api/class-mouse.mdx
+++ b/java/versioned_docs/version-stable/api/class-mouse.mdx
@@ -224,6 +224,7 @@ Mouse.wheel(deltaX, deltaY);
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -256,6 +257,7 @@ Mouse.wheel(deltaX, deltaY);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-page.mdx b/java/versioned_docs/version-stable/api/class-page.mdx
index e280c537f7..25a3ec9bf2 100644
--- a/java/versioned_docs/version-stable/api/class-page.mdx
+++ b/java/versioned_docs/version-stable/api/class-page.mdx
@@ -596,7 +596,7 @@ System.out.println(page.evaluate("1 + 2")); // prints "3"
[ElementHandle] instances can be passed as an argument to the [Page.evaluate()](/api/class-page.mdx#page-evaluate):
```java
-ElementHandle bodyHandle = page.evaluate("document.body");
+ElementHandle bodyHandle = page.evaluateHandle("document.body");
String html = (String) page.evaluate("([body, suffix]) => body.innerHTML + suffix", Arrays.asList(bodyHandle, "hello"));
bodyHandle.dispose();
```
@@ -2802,6 +2802,23 @@ Page.keyboard()
---
+### localStorage() {/* #page-local-storage */}
+
+Added in: v1.61page.localStorage()
+
+Provides access to the page's `localStorage` for the current origin. See [WebStorage].
+
+**Usage**
+
+```java
+Page.localStorage()
+```
+
+**Returns**
+- [WebStorage]
+
+---
+
### mouse() {/* #page-mouse */}
Added before v1.9page.mouse()
@@ -2847,6 +2864,23 @@ Page.request()
---
+### sessionStorage() {/* #page-session-storage */}
+
+Added in: v1.61page.sessionStorage()
+
+Provides access to the page's `sessionStorage` for the current origin. See [WebStorage].
+
+**Usage**
+
+```java
+Page.sessionStorage()
+```
+
+**Returns**
+- [WebStorage]
+
+---
+
### touchscreen() {/* #page-touchscreen */}
Added before v1.9page.touchscreen()
@@ -4515,7 +4549,7 @@ When all steps combined have not finished during the specified [setTimeout](/api
:::note
-[Page.tap()](/api/class-page.mdx#page-tap) the method will throw if [setHasTouch](/api/class-browser.mdx#browser-new-context-option-has-touch) option of the browser context is false.
+[Page.tap()](/api/class-page.mdx#page-tap) will throw if the [setHasTouch](/api/class-browser.mdx#browser-new-context-option-has-touch) option of the browser context is false.
:::
**Usage**
@@ -4608,7 +4642,7 @@ Page.textContent(selector, options);
Added before v1.9page.type
-:::warning Deprecated
+:::warning[Deprecated]
In most cases, you should use [Locator.fill()](/api/class-locator.mdx#locator-fill) instead. You only need to press keys one by one if there is special keyboard handling on the page - in this case use [Locator.pressSequentially()](/api/class-locator.mdx#locator-press-sequentially).
@@ -4723,7 +4757,7 @@ Page.uncheck(selector, options);
Added before v1.9page.waitForNavigation
-:::warning Deprecated
+:::warning[Deprecated]
This method is inherently racy, please use [Page.waitForURL()](/api/class-page.mdx#page-wait-for-url) instead.
@@ -4881,6 +4915,7 @@ page.waitForTimeout(1000);
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -4913,6 +4948,7 @@ page.waitForTimeout(1000);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-pageassertions.mdx b/java/versioned_docs/version-stable/api/class-pageassertions.mdx
index 56d2cf92a5..19196308b3 100644
--- a/java/versioned_docs/version-stable/api/class-pageassertions.mdx
+++ b/java/versioned_docs/version-stable/api/class-pageassertions.mdx
@@ -142,6 +142,7 @@ assertThat(page).not().hasURL("error");
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -174,6 +175,7 @@ assertThat(page).not().hasURL("error");
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-playwright.mdx b/java/versioned_docs/version-stable/api/class-playwright.mdx
index 6d4844218f..2a7144a18f 100644
--- a/java/versioned_docs/version-stable/api/class-playwright.mdx
+++ b/java/versioned_docs/version-stable/api/class-playwright.mdx
@@ -173,6 +173,7 @@ Playwright.webkit()
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -205,6 +206,7 @@ Playwright.webkit()
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-playwrightassertions.mdx b/java/versioned_docs/version-stable/api/class-playwrightassertions.mdx
index 57e2ed8b58..c3ffb682c2 100644
--- a/java/versioned_docs/version-stable/api/class-playwrightassertions.mdx
+++ b/java/versioned_docs/version-stable/api/class-playwrightassertions.mdx
@@ -128,6 +128,7 @@ PlaywrightAssertions.setDefaultAssertionTimeout(30_000);
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -160,6 +161,7 @@ PlaywrightAssertions.setDefaultAssertionTimeout(30_000);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-playwrightexception.mdx b/java/versioned_docs/version-stable/api/class-playwrightexception.mdx
index 336d0385ad..b05e4b6f64 100644
--- a/java/versioned_docs/version-stable/api/class-playwrightexception.mdx
+++ b/java/versioned_docs/version-stable/api/class-playwrightexception.mdx
@@ -22,6 +22,7 @@ PlaywrightException is thrown whenever certain operations are terminated abnorma
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -54,6 +55,7 @@ PlaywrightException is thrown whenever certain operations are terminated abnorma
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-request.mdx b/java/versioned_docs/version-stable/api/class-request.mdx
index 990a685b65..e229fbc34e 100644
--- a/java/versioned_docs/version-stable/api/class-request.mdx
+++ b/java/versioned_docs/version-stable/api/class-request.mdx
@@ -425,6 +425,7 @@ Request.url();
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -457,6 +458,7 @@ Request.url();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-requestoptions.mdx b/java/versioned_docs/version-stable/api/class-requestoptions.mdx
index ffa77923e1..bfa3a83718 100644
--- a/java/versioned_docs/version-stable/api/class-requestoptions.mdx
+++ b/java/versioned_docs/version-stable/api/class-requestoptions.mdx
@@ -316,6 +316,7 @@ RequestOptions.setTimeout(timeout);
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -348,6 +349,7 @@ RequestOptions.setTimeout(timeout);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-response.mdx b/java/versioned_docs/version-stable/api/class-response.mdx
index 79f44a759d..1fe4b54862 100644
--- a/java/versioned_docs/version-stable/api/class-response.mdx
+++ b/java/versioned_docs/version-stable/api/class-response.mdx
@@ -365,6 +365,7 @@ Response.url();
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -397,6 +398,7 @@ Response.url();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-route.mdx b/java/versioned_docs/version-stable/api/class-route.mdx
index 494483160c..5be2e5008b 100644
--- a/java/versioned_docs/version-stable/api/class-route.mdx
+++ b/java/versioned_docs/version-stable/api/class-route.mdx
@@ -323,6 +323,7 @@ To set custom cookies, use [BrowserContext.addCookies()](/api/class-browserconte
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -355,6 +356,7 @@ To set custom cookies, use [BrowserContext.addCookies()](/api/class-browserconte
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-screencast.mdx b/java/versioned_docs/version-stable/api/class-screencast.mdx
index e94abb17ff..28c334b809 100644
--- a/java/versioned_docs/version-stable/api/class-screencast.mdx
+++ b/java/versioned_docs/version-stable/api/class-screencast.mdx
@@ -63,6 +63,9 @@ Screencast.showActions(options);
**Arguments**
- `options` `Screencast.ShowActionsOptions` *(optional)*
+ - `setCursor` `enum ScreencastCursor { NONE, POINTER }` *(optional)* Added in: v1.61#
+
+ 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.
- `setDuration` [double] *(optional)*#
How long each annotation is displayed in milliseconds. Defaults to `500`.
@@ -166,6 +169,9 @@ Starts the screencast. When [setPath](/api/class-screencast.mdx#screencast-start
- `setData` [byte[]]
JPEG-encoded frame data.
+ - `setTimestamp` [double]
+
+ The timestamp of when the frame was presented by the browser, in milliseconds since the Unix epoch.
- `setViewportWidth` [int]
Width of the page viewport at the time the frame was captured.
@@ -180,6 +186,15 @@ Starts the screencast. When [setPath](/api/class-screencast.mdx#screencast-start
- `setQuality` [int] *(optional)*#
The quality of the image, between 0-100.
+ - `setSize` Size *(optional)*#
+ - `setWidth` [int]
+
+ Max frame width in pixels.
+ - `setHeight` [int]
+
+ Max frame height in pixels.
+
+ Specifies the dimensions of screencast frames. The actual frame is scaled to preserve the page's aspect ratio and may be smaller than these bounds. If a screencast is already active (e.g. started by tracing or video recording), the existing configuration takes precedence and the frame size may exceed these bounds or this option may be ignored. If not specified the size will be equal to page viewport scaled down to fit into 800×800.
**Returns**
- [Disposable]#
@@ -212,6 +227,7 @@ Screencast.stop();
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -244,6 +260,7 @@ Screencast.stop();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-selectors.mdx b/java/versioned_docs/version-stable/api/class-selectors.mdx
index 691b2e3d5a..6b84823283 100644
--- a/java/versioned_docs/version-stable/api/class-selectors.mdx
+++ b/java/versioned_docs/version-stable/api/class-selectors.mdx
@@ -82,7 +82,7 @@ Selectors.setTestIdAttribute(attributeName);
**Arguments**
- `attributeName` [String]#
- Test id attribute name.
+ Test id attribute name. To match elements with any of several attributes, pass them as a comma-separated list, e.g. `"data-pw,data-ti"`.
[APIRequest]: /api/class-apirequest.mdx "APIRequest"
@@ -95,6 +95,7 @@ Selectors.setTestIdAttribute(attributeName);
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -127,6 +128,7 @@ Selectors.setTestIdAttribute(attributeName);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-timeouterror.mdx b/java/versioned_docs/version-stable/api/class-timeouterror.mdx
index 0a491bd4fe..828509af88 100644
--- a/java/versioned_docs/version-stable/api/class-timeouterror.mdx
+++ b/java/versioned_docs/version-stable/api/class-timeouterror.mdx
@@ -43,6 +43,7 @@ public class TimeoutErrorExample {
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -75,6 +76,7 @@ public class TimeoutErrorExample {
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-touchscreen.mdx b/java/versioned_docs/version-stable/api/class-touchscreen.mdx
index acfaf621ae..0f1fc6241a 100644
--- a/java/versioned_docs/version-stable/api/class-touchscreen.mdx
+++ b/java/versioned_docs/version-stable/api/class-touchscreen.mdx
@@ -24,7 +24,7 @@ Dispatches a `touchstart` and `touchend` event with a single touch at the positi
:::note
-[Page.tap()](/api/class-page.mdx#page-tap) the method will throw if [setHasTouch](/api/class-browser.mdx#browser-new-context-option-has-touch) option of the browser context is false.
+[Touchscreen.tap()](/api/class-touchscreen.mdx#touchscreen-tap) will throw if the [setHasTouch](/api/class-browser.mdx#browser-new-context-option-has-touch) option of the browser context is false.
:::
**Usage**
@@ -55,6 +55,7 @@ Touchscreen.tap(x, y);
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -87,6 +88,7 @@ Touchscreen.tap(x, y);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-tracing.mdx b/java/versioned_docs/version-stable/api/class-tracing.mdx
index 786b0403da..63ebc8d600 100644
--- a/java/versioned_docs/version-stable/api/class-tracing.mdx
+++ b/java/versioned_docs/version-stable/api/class-tracing.mdx
@@ -302,6 +302,7 @@ Tracing.stopHar();
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -334,6 +335,7 @@ Tracing.stopHar();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-video.mdx b/java/versioned_docs/version-stable/api/class-video.mdx
index 827867b4f6..1fca7d15ed 100644
--- a/java/versioned_docs/version-stable/api/class-video.mdx
+++ b/java/versioned_docs/version-stable/api/class-video.mdx
@@ -83,6 +83,7 @@ Video.saveAs(path);
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -115,6 +116,7 @@ Video.saveAs(path);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-weberror.mdx b/java/versioned_docs/version-stable/api/class-weberror.mdx
index b5294ecc56..13860b5c03 100644
--- a/java/versioned_docs/version-stable/api/class-weberror.mdx
+++ b/java/versioned_docs/version-stable/api/class-weberror.mdx
@@ -91,6 +91,7 @@ WebError.page();
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -123,6 +124,7 @@ WebError.page();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-websocket.mdx b/java/versioned_docs/version-stable/api/class-websocket.mdx
index 06665b9016..f2191ad340 100644
--- a/java/versioned_docs/version-stable/api/class-websocket.mdx
+++ b/java/versioned_docs/version-stable/api/class-websocket.mdx
@@ -189,6 +189,7 @@ WebSocket.onSocketError(handler)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -221,6 +222,7 @@ WebSocket.onSocketError(handler)
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-websocketframe.mdx b/java/versioned_docs/version-stable/api/class-websocketframe.mdx
index 3af2ee8c45..74ab50ec7a 100644
--- a/java/versioned_docs/version-stable/api/class-websocketframe.mdx
+++ b/java/versioned_docs/version-stable/api/class-websocketframe.mdx
@@ -57,6 +57,7 @@ WebSocketFrame.text();
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -89,6 +90,7 @@ WebSocketFrame.text();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-websocketroute.mdx b/java/versioned_docs/version-stable/api/class-websocketroute.mdx
index 451f097dcb..7bb17f4363 100644
--- a/java/versioned_docs/version-stable/api/class-websocketroute.mdx
+++ b/java/versioned_docs/version-stable/api/class-websocketroute.mdx
@@ -250,6 +250,7 @@ WebSocketRoute.url();
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -282,6 +283,7 @@ WebSocketRoute.url();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/api/class-webstorage.mdx b/java/versioned_docs/version-stable/api/class-webstorage.mdx
new file mode 100644
index 0000000000..ce5f4e7757
--- /dev/null
+++ b/java/versioned_docs/version-stable/api/class-webstorage.mdx
@@ -0,0 +1,214 @@
+---
+id: class-webstorage
+title: "WebStorage"
+---
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import HTMLCard from '@site/src/components/HTMLCard';
+
+
+WebStorage exposes the page's `localStorage` or `sessionStorage` for the current origin via an async, [browser-consistent](https://developer.mozilla.org/en-US/docs/Web/API/Storage) API.
+
+Instances are accessed through [Page.localStorage()](/api/class-page.mdx#page-local-storage) and [Page.sessionStorage()](/api/class-page.mdx#page-session-storage).
+
+```java
+page.navigate("https://example.com");
+page.localStorage().setItem("token", "abc");
+String token = page.localStorage().getItem("token");
+List all = page.localStorage().items();
+page.localStorage().removeItem("token");
+page.localStorage().clear();
+```
+
+
+---
+
+## Methods
+
+### clear {/* #web-storage-clear */}
+
+Added in: v1.61webStorage.clear
+
+Removes all items from the storage.
+
+**Usage**
+
+```java
+WebStorage.clear();
+```
+
+**Returns**
+- [void]#
+
+---
+
+### getItem {/* #web-storage-get-item */}
+
+Added in: v1.61webStorage.getItem
+
+Returns the value for the given [name](/api/class-webstorage.mdx#web-storage-get-item-option-name) if present.
+
+**Usage**
+
+```java
+WebStorage.getItem(name);
+```
+
+**Arguments**
+- `name` [String]#
+
+ Name of the item to retrieve.
+
+**Returns**
+- [null] | [String]#
+
+---
+
+### items {/* #web-storage-items */}
+
+Added in: v1.61webStorage.items
+
+Returns all items in the storage as name/value pairs.
+
+**Usage**
+
+```java
+WebStorage.items();
+```
+
+**Returns**
+- [List]<Items>#
+ - `name` [String]
+
+
+ - `value` [String]
+
+
+---
+
+### removeItem {/* #web-storage-remove-item */}
+
+Added in: v1.61webStorage.removeItem
+
+Removes the item with the given [name](/api/class-webstorage.mdx#web-storage-remove-item-option-name). No-op if the item is absent.
+
+**Usage**
+
+```java
+WebStorage.removeItem(name);
+```
+
+**Arguments**
+- `name` [String]#
+
+ Name of the item to remove.
+
+**Returns**
+- [void]#
+
+---
+
+### setItem {/* #web-storage-set-item */}
+
+Added in: v1.61webStorage.setItem
+
+Sets the value for the given [name](/api/class-webstorage.mdx#web-storage-set-item-option-name). Overwrites any existing value for that name.
+
+**Usage**
+
+```java
+WebStorage.setItem(name, value);
+```
+
+**Arguments**
+- `name` [String]#
+
+ Name of the item to set.
+- `value` [String]#
+
+ New value for the item.
+
+**Returns**
+- [void]#
+
+
+[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"
+[BrowserType]: /api/class-browsertype.mdx "BrowserType"
+[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
+[Clock]: /api/class-clock.mdx "Clock"
+[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
+[Debugger]: /api/class-debugger.mdx "Debugger"
+[Dialog]: /api/class-dialog.mdx "Dialog"
+[Download]: /api/class-download.mdx "Download"
+[ElementHandle]: /api/class-elementhandle.mdx "ElementHandle"
+[FileChooser]: /api/class-filechooser.mdx "FileChooser"
+[FormData]: /api/class-formdata.mdx "FormData"
+[Frame]: /api/class-frame.mdx "Frame"
+[FrameLocator]: /api/class-framelocator.mdx "FrameLocator"
+[JSHandle]: /api/class-jshandle.mdx "JSHandle"
+[Keyboard]: /api/class-keyboard.mdx "Keyboard"
+[Locator]: /api/class-locator.mdx "Locator"
+[LocatorAssertions]: /api/class-locatorassertions.mdx "LocatorAssertions"
+[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"
+[PlaywrightException]: /api/class-playwrightexception.mdx "PlaywrightException"
+[Request]: /api/class-request.mdx "Request"
+[RequestOptions]: /api/class-requestoptions.mdx "RequestOptions"
+[Response]: /api/class-response.mdx "Response"
+[Route]: /api/class-route.mdx "Route"
+[Screencast]: /api/class-screencast.mdx "Screencast"
+[Selectors]: /api/class-selectors.mdx "Selectors"
+[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"
+[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
+[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
+[Worker]: /api/class-worker.mdx "Worker"
+[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"
+
+[boolean]: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html "boolean"
+[byte[]]: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html "byte[]"
+[Consumer]: https://docs.oracle.com/javase/8/docs/api/java/util/function/Consumer.html "Consumer"
+[Date]: https://docs.oracle.com/javase/8/docs/api/java/util/Date.html "Date"
+[double]: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html "double"
+[InputStream]: https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html "InputStream"
+[int]: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html "int"
+[long]: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html "long"
+[JsonObject]: https://www.javadoc.io/doc/com.google.code.gson/gson/latest/com.google.gson/com/google/gson/JsonObject.html "JsonObject"
+[List]: https://docs.oracle.com/javase/8/docs/api/java/util/List.html "List"
+[Map]: https://docs.oracle.com/javase/8/docs/api/java/util/Map.html "Map"
+[null]: https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.7 "null"
+[Object]: https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html "Object"
+[Path]: https://docs.oracle.com/javase/8/docs/api/java/nio/file/Path.html "Path"
+[Pattern]: https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html "Pattern"
+[Predicate]: https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html "Predicate"
+[void]: https://docs.oracle.com/javase/tutorial/java/javaOO/methods.html "void"
+[Runnable]: https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html "Runnable"
+[RuntimeException]: https://docs.oracle.com/javase/8/docs/api/java/lang/RuntimeException.html "RuntimeException"
+[String]: https://docs.oracle.com/javase/8/docs/api/java/lang/String.html "String"
+
+[all available image tags]: https://mcr.microsoft.com/en-us/product/playwright/java/about "all available image tags"
+[Microsoft Artifact Registry]: https://mcr.microsoft.com/en-us/product/playwright/java/about "Microsoft Artifact Registry"
+[Dockerfile.noble]: https://github.com/microsoft/playwright-java/blob/main/utils/docker/Dockerfile.noble "Dockerfile.noble"
diff --git a/java/versioned_docs/version-stable/api/class-worker.mdx b/java/versioned_docs/version-stable/api/class-worker.mdx
index 036038e2e7..771a86c803 100644
--- a/java/versioned_docs/version-stable/api/class-worker.mdx
+++ b/java/versioned_docs/version-stable/api/class-worker.mdx
@@ -201,6 +201,7 @@ Worker.onConsole(handler)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -233,6 +234,7 @@ Worker.onConsole(handler)
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/aria-snapshots.mdx b/java/versioned_docs/version-stable/aria-snapshots.mdx
index 8982b4980d..2f98bca9b6 100644
--- a/java/versioned_docs/version-stable/aria-snapshots.mdx
+++ b/java/versioned_docs/version-stable/aria-snapshots.mdx
@@ -84,7 +84,7 @@ Each accessible element in the tree is represented as a YAML node:
- **role**: Specifies the ARIA or HTML role of the element (e.g., `heading`, `list`, `listitem`, `button`).
- **"name"**: Accessible name of the element. Quoted strings indicate exact values, `/patterns/` are used for regular expression.
-- **[attribute=value]**: Attributes and values, in square brackets, represent specific ARIA attributes, such as `checked`, `disabled`, `expanded`, `level`, `pressed`, or `selected`.
+- **[attribute=value]**: Attributes and values, in square brackets, represent specific ARIA attributes, such as `checked`, `disabled`, `expanded`, `invalid`, `level`, `pressed`, or `selected`.
These values are derived from ARIA attributes or calculated based on HTML semantics. To inspect the accessibility tree structure of a page, use the [Chrome DevTools Accessibility Tab](https://developer.chrome.com/docs/devtools/accessibility/reference#tab).
@@ -348,7 +348,7 @@ Groups capture nested elements, such as `` elements with summary conten
### Attributes and states
-Commonly used ARIA attributes, like `checked`, `disabled`, `expanded`, `level`, `pressed`, and `selected`, represent control states.
+Commonly used ARIA attributes, like `checked`, `disabled`, `expanded`, `invalid`, `level`, `pressed`, and `selected`, represent control states.
#### Checkbox with `checked` attribute
@@ -370,6 +370,26 @@ Commonly used ARIA attributes, like `checked`, `disabled`, `expanded`, `level`,
- button "Toggle" [pressed=true]
```
+#### Input with `aria-invalid` attribute
+
+The `aria-invalid` value is surfaced directly. A value of `true` renders as `[invalid]`, while `grammar` and `spelling` render as `[invalid=grammar]` and `[invalid=spelling]`. A `false` value is omitted.
+
+```html
+
+```
+
+```yaml title="aria snapshot"
+- textbox "Email" [invalid]: not-an-email
+```
+
+```html
+
+```
+
+```yaml title="aria snapshot"
+- textbox "Bio" [invalid=spelling]
+```
+
[APIRequest]: /api/class-apirequest.mdx "APIRequest"
[APIRequestContext]: /api/class-apirequestcontext.mdx "APIRequestContext"
@@ -381,6 +401,7 @@ Commonly used ARIA attributes, like `checked`, `disabled`, `expanded`, `level`,
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -413,6 +434,7 @@ Commonly used ARIA attributes, like `checked`, `disabled`, `expanded`, `level`,
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/auth.mdx b/java/versioned_docs/version-stable/auth.mdx
index ead9badede..ee32fbdbe5 100644
--- a/java/versioned_docs/version-stable/auth.mdx
+++ b/java/versioned_docs/version-stable/auth.mdx
@@ -129,6 +129,7 @@ context.addInitScript("(storage => {\n" +
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -161,6 +162,7 @@ context.addInitScript("(storage => {\n" +
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/browser-contexts.mdx b/java/versioned_docs/version-stable/browser-contexts.mdx
index cd2f0a2a7c..fdfed43ce3 100644
--- a/java/versioned_docs/version-stable/browser-contexts.mdx
+++ b/java/versioned_docs/version-stable/browser-contexts.mdx
@@ -68,6 +68,7 @@ public class Example {
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -100,6 +101,7 @@ public class Example {
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/browsers.mdx b/java/versioned_docs/version-stable/browsers.mdx
index d92ef9e05b..5b214a230a 100644
--- a/java/versioned_docs/version-stable/browsers.mdx
+++ b/java/versioned_docs/version-stable/browsers.mdx
@@ -623,6 +623,7 @@ mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="un
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -655,6 +656,7 @@ mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="un
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/ci-intro.mdx b/java/versioned_docs/version-stable/ci-intro.mdx
index 93489f2dea..03ce5c94d9 100644
--- a/java/versioned_docs/version-stable/ci-intro.mdx
+++ b/java/versioned_docs/version-stable/ci-intro.mdx
@@ -103,6 +103,7 @@ Artifacts like trace files or console logs contain information about your test e
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -135,6 +136,7 @@ Artifacts like trace files or console logs contain information about your test e
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/ci.mdx b/java/versioned_docs/version-stable/ci.mdx
index ba5f47aa02..7326ec4996 100644
--- a/java/versioned_docs/version-stable/ci.mdx
+++ b/java/versioned_docs/version-stable/ci.mdx
@@ -75,7 +75,7 @@ jobs:
name: 'Playwright Tests'
runs-on: ubuntu-latest
container:
- image: mcr.microsoft.com/playwright/java:v1.59.0-noble
+ image: mcr.microsoft.com/playwright/java:v1.60.0-noble
options: --user 1001
steps:
- uses: actions/checkout@v5
@@ -160,7 +160,7 @@ trigger:
pool:
vmImage: ubuntu-latest
-container: mcr.microsoft.com/playwright/java:v1.59.0-noble
+container: mcr.microsoft.com/playwright/java:v1.60.0-noble
steps:
- task: JavaToolInstaller@1
@@ -183,7 +183,7 @@ Running Playwright on CircleCI is very similar to running on GitHub Actions. In
executors:
pw-noble-development:
docker:
- - image: mcr.microsoft.com/playwright/java:v1.59.0-noble
+ - image: mcr.microsoft.com/playwright/java:v1.60.0-noble
```
Note: When using the docker agent definition, you are specifying the resource class of where playwright runs to the 'medium' tier [here](https://circleci.com/docs/configuration-reference?#docker-execution-environment). The default behavior of Playwright is to set the number of workers to the detected core count (2 in the case of the medium tier). Overriding the number of workers to greater than this number will cause unnecessary timeouts and failures.
@@ -194,7 +194,7 @@ Jenkins supports Docker agents for pipelines. Use the [Playwright Docker image](
```groovy
pipeline {
- agent { docker { image 'mcr.microsoft.com/playwright/java:v1.59.0-noble' } }
+ agent { docker { image 'mcr.microsoft.com/playwright/java:v1.60.0-noble' } }
stages {
stage('e2e-tests') {
steps {
@@ -211,7 +211,7 @@ pipeline {
Bitbucket Pipelines can use public [Docker images as build environments](https://confluence.atlassian.com/bitbucket/use-docker-images-as-build-environments-792298897.html). To run Playwright tests on Bitbucket, use our public Docker image ([see Dockerfile](./docker.mdx)).
```yml
-image: mcr.microsoft.com/playwright/java:v1.59.0-noble
+image: mcr.microsoft.com/playwright/java:v1.60.0-noble
```
### GitLab CI
@@ -224,7 +224,7 @@ stages:
tests:
stage: test
- image: mcr.microsoft.com/playwright/java:v1.59.0-noble
+ image: mcr.microsoft.com/playwright/java:v1.60.0-noble
script:
...
```
@@ -264,6 +264,7 @@ xvfb-run mvn test
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -296,6 +297,7 @@ xvfb-run mvn test
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/clock.mdx b/java/versioned_docs/version-stable/clock.mdx
index b86884d05e..ffd4f1868e 100644
--- a/java/versioned_docs/version-stable/clock.mdx
+++ b/java/versioned_docs/version-stable/clock.mdx
@@ -195,6 +195,7 @@ assertThat(locator).hasText("2/2/2024, 10:00:02 AM");
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -227,6 +228,7 @@ assertThat(locator).hasText("2/2/2024, 10:00:02 AM");
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/codegen-intro.mdx b/java/versioned_docs/version-stable/codegen-intro.mdx
index 71cc5ce35b..a8244a11ae 100644
--- a/java/versioned_docs/version-stable/codegen-intro.mdx
+++ b/java/versioned_docs/version-stable/codegen-intro.mdx
@@ -73,6 +73,7 @@ You can generate tests using emulation for specific viewports, devices, color sc
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -105,6 +106,7 @@ You can generate tests using emulation for specific viewports, devices, color sc
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/codegen.mdx b/java/versioned_docs/version-stable/codegen.mdx
index fc4af54384..9966510e50 100644
--- a/java/versioned_docs/version-stable/codegen.mdx
+++ b/java/versioned_docs/version-stable/codegen.mdx
@@ -182,6 +182,7 @@ public class Example {
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -214,6 +215,7 @@ public class Example {
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/debug.mdx b/java/versioned_docs/version-stable/debug.mdx
index 0dd4cf50c0..b12eb996c4 100644
--- a/java/versioned_docs/version-stable/debug.mdx
+++ b/java/versioned_docs/version-stable/debug.mdx
@@ -286,6 +286,7 @@ chromium.launch(new BrowserType.LaunchOptions()
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -318,6 +319,7 @@ chromium.launch(new BrowserType.LaunchOptions()
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/dialogs.mdx b/java/versioned_docs/version-stable/dialogs.mdx
index 6a963c3740..fc58a2b2ed 100644
--- a/java/versioned_docs/version-stable/dialogs.mdx
+++ b/java/versioned_docs/version-stable/dialogs.mdx
@@ -79,6 +79,7 @@ This will wait for the print dialog to be opened after the button is clicked. Ma
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -111,6 +112,7 @@ This will wait for the print dialog to be opened after the button is clicked. Ma
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/docker.mdx b/java/versioned_docs/version-stable/docker.mdx
index 7d2149cd3d..c401cc3b9e 100644
--- a/java/versioned_docs/version-stable/docker.mdx
+++ b/java/versioned_docs/version-stable/docker.mdx
@@ -22,7 +22,7 @@ This Docker image is intended to be used for testing and development purposes on
### Pull the image
```bash
-docker pull mcr.microsoft.com/playwright/java:v1.59.0-noble
+docker pull mcr.microsoft.com/playwright/java:v1.60.0-noble
```
### Run the image
@@ -34,7 +34,7 @@ By default, the Docker image will use the `root` user to run the browsers. This
On trusted websites, you can avoid creating a separate user and use root for it since you trust the code which will run on the browsers.
```bash
-docker run -it --rm --ipc=host mcr.microsoft.com/playwright/java:v1.59.0-noble /bin/bash
+docker run -it --rm --ipc=host mcr.microsoft.com/playwright/java:v1.60.0-noble /bin/bash
```
#### Crawling and scraping
@@ -42,7 +42,7 @@ docker run -it --rm --ipc=host mcr.microsoft.com/playwright/java:v1.59.0-noble /
On untrusted websites, it's recommended to use a separate user for launching the browsers in combination with the seccomp profile. Inside the container or if you are using the Docker image as a base image you have to use `adduser` for it.
```bash
-docker run -it --rm --ipc=host --user pwuser --security-opt seccomp=seccomp_profile.json mcr.microsoft.com/playwright/java:v1.59.0-noble /bin/bash
+docker run -it --rm --ipc=host --user pwuser --security-opt seccomp=seccomp_profile.json mcr.microsoft.com/playwright/java:v1.60.0-noble /bin/bash
```
[`seccomp_profile.json`](https://github.com/microsoft/playwright/blob/main/utils/docker/seccomp_profile.json) is needed to run Chromium with sandbox. This is a [default Docker seccomp profile](https://github.com/docker/engine/blob/d0d99b04cf6e00ed3fc27e81fc3d94e7eda70af3/profiles/seccomp/default.json) with extra user namespace cloning permissions:
@@ -82,7 +82,7 @@ You can run Playwright Server in Docker while keeping your tests running on the
Start the Playwright Server in Docker:
```bash
-docker run -p 3000:3000 --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.59.0-noble /bin/sh -c "npx -y playwright@1.59.0 run-server --port 3000 --host 0.0.0.0"
+docker run -p 3000:3000 --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.60.0-noble /bin/sh -c "npx -y playwright@1.60.0 run-server --port 3000 --host 0.0.0.0"
```
#### Connecting to the Server
@@ -107,7 +107,7 @@ public class App {
If you need to access local servers from within the Docker container:
```bash
-docker run --add-host=hostmachine:host-gateway -p 3000:3000 --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.59.0-noble /bin/sh -c "npx -y playwright@1.59.0 run-server --port 3000 --host 0.0.0.0"
+docker run --add-host=hostmachine:host-gateway -p 3000:3000 --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.60.0-noble /bin/sh -c "npx -y playwright@1.60.0 run-server --port 3000 --host 0.0.0.0"
```
This makes `hostmachine` point to the host's localhost. Your tests should use `hostmachine` instead of `localhost` when accessing local servers.
@@ -140,9 +140,9 @@ Once this is enabled you can open the port specified in a new browser tab and yo
See [all available image tags].
We currently publish images with the following tags:
-- `:v1.59.0` - Playwright v1.59.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat).
-- `:v1.59.0-noble` - Playwright v1.59.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat).
-- `:v1.59.0-jammy` - Playwright v1.59.0 release docker image based on Ubuntu 22.04 LTS (Jammy Jellyfish).
+- `:v1.60.0` - Playwright v1.60.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat).
+- `:v1.60.0-noble` - Playwright v1.60.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat).
+- `:v1.60.0-jammy` - Playwright v1.60.0 release docker image based on Ubuntu 22.04 LTS (Jammy Jellyfish).
:::note
@@ -170,6 +170,7 @@ Browser builds for Firefox and WebKit are built for the [glibc](https://en.wikip
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -202,6 +203,7 @@ Browser builds for Firefox and WebKit are built for the [glibc](https://en.wikip
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/downloads.mdx b/java/versioned_docs/version-stable/downloads.mdx
index 1e8392cee6..9c1985b409 100644
--- a/java/versioned_docs/version-stable/downloads.mdx
+++ b/java/versioned_docs/version-stable/downloads.mdx
@@ -56,6 +56,7 @@ For uploading files, see the [uploading files](./input.mdx#upload-files) section
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -88,6 +89,7 @@ For uploading files, see the [uploading files](./input.mdx#upload-files) section
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/emulation.mdx b/java/versioned_docs/version-stable/emulation.mdx
index 161c77fa44..4a5aa0f692 100644
--- a/java/versioned_docs/version-stable/emulation.mdx
+++ b/java/versioned_docs/version-stable/emulation.mdx
@@ -159,6 +159,7 @@ BrowserContext context = browser.newContext(new Browser.NewContextOptions()
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -191,6 +192,7 @@ BrowserContext context = browser.newContext(new Browser.NewContextOptions()
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/evaluating.mdx b/java/versioned_docs/version-stable/evaluating.mdx
index 2b017bbb90..2e20fb0cf7 100644
--- a/java/versioned_docs/version-stable/evaluating.mdx
+++ b/java/versioned_docs/version-stable/evaluating.mdx
@@ -135,6 +135,7 @@ page.addInitScript(Paths.get("mocks/preload.js"));
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -167,6 +168,7 @@ page.addInitScript(Paths.get("mocks/preload.js"));
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/events.mdx b/java/versioned_docs/version-stable/events.mdx
index e6e83fb299..7f9186d3b6 100644
--- a/java/versioned_docs/version-stable/events.mdx
+++ b/java/versioned_docs/version-stable/events.mdx
@@ -71,6 +71,7 @@ page.evaluate("prompt('Enter a number:')");
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -103,6 +104,7 @@ page.evaluate("prompt('Enter a number:')");
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/extensibility.mdx b/java/versioned_docs/version-stable/extensibility.mdx
index 48db082a94..8931085026 100644
--- a/java/versioned_docs/version-stable/extensibility.mdx
+++ b/java/versioned_docs/version-stable/extensibility.mdx
@@ -59,6 +59,7 @@ int buttonCount = (int) page.locator("tag=button").count();
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -91,6 +92,7 @@ int buttonCount = (int) page.locator("tag=button").count();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/frames.mdx b/java/versioned_docs/version-stable/frames.mdx
index ffee4df7a7..771b4a30fa 100644
--- a/java/versioned_docs/version-stable/frames.mdx
+++ b/java/versioned_docs/version-stable/frames.mdx
@@ -44,6 +44,7 @@ frame.fill("#username-input", "John");
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -76,6 +77,7 @@ frame.fill("#username-input", "John");
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/getting-started-cli.mdx b/java/versioned_docs/version-stable/getting-started-cli.mdx
index d111e62480..36ffe77e57 100644
--- a/java/versioned_docs/version-stable/getting-started-cli.mdx
+++ b/java/versioned_docs/version-stable/getting-started-cli.mdx
@@ -318,6 +318,7 @@ This requires the [Playwright Extension](https://github.com/microsoft/playwright
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -350,6 +351,7 @@ This requires the [Playwright Extension](https://github.com/microsoft/playwright
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/getting-started-mcp.mdx b/java/versioned_docs/version-stable/getting-started-mcp.mdx
index 337b94958c..c1d766e4cf 100644
--- a/java/versioned_docs/version-stable/getting-started-mcp.mdx
+++ b/java/versioned_docs/version-stable/getting-started-mcp.mdx
@@ -236,6 +236,7 @@ Then point your MCP client to the HTTP endpoint:
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -268,6 +269,7 @@ Then point your MCP client to the HTTP endpoint:
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/handles.mdx b/java/versioned_docs/version-stable/handles.mdx
index 7c4f0f53d6..44a590599c 100644
--- a/java/versioned_docs/version-stable/handles.mdx
+++ b/java/versioned_docs/version-stable/handles.mdx
@@ -127,6 +127,7 @@ locator.click();
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -159,6 +160,7 @@ locator.click();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/input.mdx b/java/versioned_docs/version-stable/input.mdx
index 87cdb7b433..eb5b236c9f 100644
--- a/java/versioned_docs/version-stable/input.mdx
+++ b/java/versioned_docs/version-stable/input.mdx
@@ -268,6 +268,7 @@ page.getByTestId("scrolling-container").evaluate("e => e.scrollTop += 100");
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -300,6 +301,7 @@ page.getByTestId("scrolling-container").evaluate("e => e.scrollTop += 100");
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/intro.mdx b/java/versioned_docs/version-stable/intro.mdx
index 4891ca3823..09055f2e32 100644
--- a/java/versioned_docs/version-stable/intro.mdx
+++ b/java/versioned_docs/version-stable/intro.mdx
@@ -58,7 +58,7 @@ public class App {
com.microsoft.playwright
playwright
- 1.59.0
+ 1.60.0
@@ -149,6 +149,7 @@ By default browsers launched with Playwright run headless, meaning no browser UI
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -181,6 +182,7 @@ By default browsers launched with Playwright run headless, meaning no browser UI
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/junit.mdx b/java/versioned_docs/version-stable/junit.mdx
index 6426a0444d..61752123b2 100644
--- a/java/versioned_docs/version-stable/junit.mdx
+++ b/java/versioned_docs/version-stable/junit.mdx
@@ -185,6 +185,7 @@ junit.jupiter.execution.parallel.config.dynamic.factor=0.5
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -217,6 +218,7 @@ junit.jupiter.execution.parallel.config.dynamic.factor=0.5
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/languages.mdx b/java/versioned_docs/version-stable/languages.mdx
index 643430c51c..996c1d154d 100644
--- a/java/versioned_docs/version-stable/languages.mdx
+++ b/java/versioned_docs/version-stable/languages.mdx
@@ -45,6 +45,7 @@ Playwright for .NET comes with MSTest, NUnit, xUnit, and xUnit v3 [base classes]
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -77,6 +78,7 @@ Playwright for .NET comes with MSTest, NUnit, xUnit, and xUnit v3 [base classes]
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/locators.mdx b/java/versioned_docs/version-stable/locators.mdx
index 628d0ec5f1..d02d60b64a 100644
--- a/java/versioned_docs/version-stable/locators.mdx
+++ b/java/versioned_docs/version-stable/locators.mdx
@@ -948,6 +948,7 @@ For less commonly used locators, look at the [other locators](./other-locators.m
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -980,6 +981,7 @@ For less commonly used locators, look at the [other locators](./other-locators.m
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/mock.mdx b/java/versioned_docs/version-stable/mock.mdx
index 14d3612462..f4b7dfc341 100644
--- a/java/versioned_docs/version-stable/mock.mdx
+++ b/java/versioned_docs/version-stable/mock.mdx
@@ -203,6 +203,7 @@ For more details, see [WebSocketRoute].
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -235,6 +236,7 @@ For more details, see [WebSocketRoute].
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/navigations.mdx b/java/versioned_docs/version-stable/navigations.mdx
index 75a4164ea2..ca04efa537 100644
--- a/java/versioned_docs/version-stable/navigations.mdx
+++ b/java/versioned_docs/version-stable/navigations.mdx
@@ -87,6 +87,7 @@ Playwright splits the process of showing a new document in a page into **navigat
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -119,6 +120,7 @@ Playwright splits the process of showing a new document in a page into **navigat
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/network.mdx b/java/versioned_docs/version-stable/network.mdx
index 1f21b10a8a..9c1913cf71 100644
--- a/java/versioned_docs/version-stable/network.mdx
+++ b/java/versioned_docs/version-stable/network.mdx
@@ -230,6 +230,7 @@ It might be that you are using a mock tool such as Mock Service Worker (MSW). Wh
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -262,6 +263,7 @@ It might be that you are using a mock tool such as Mock Service Worker (MSW). Wh
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/other-locators.mdx b/java/versioned_docs/version-stable/other-locators.mdx
index ebf27a4a8e..6b561f489b 100644
--- a/java/versioned_docs/version-stable/other-locators.mdx
+++ b/java/versioned_docs/version-stable/other-locators.mdx
@@ -413,6 +413,7 @@ For example, `css=article >> text=Hello` captures the element with the text `Hel
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -445,6 +446,7 @@ For example, `css=article >> text=Hello` captures the element with the text `Hel
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/pages.mdx b/java/versioned_docs/version-stable/pages.mdx
index 0191c9a485..8c1f326607 100644
--- a/java/versioned_docs/version-stable/pages.mdx
+++ b/java/versioned_docs/version-stable/pages.mdx
@@ -101,6 +101,7 @@ page.onPopup(popup -> {
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -133,6 +134,7 @@ page.onPopup(popup -> {
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/pom.mdx b/java/versioned_docs/version-stable/pom.mdx
index b621d735da..ddbdcc192c 100644
--- a/java/versioned_docs/version-stable/pom.mdx
+++ b/java/versioned_docs/version-stable/pom.mdx
@@ -68,6 +68,7 @@ searchPage.search("search query");
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -100,6 +101,7 @@ searchPage.search("search query");
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/release-notes.mdx b/java/versioned_docs/version-stable/release-notes.mdx
index 550e017cef..f8b05440ea 100644
--- a/java/versioned_docs/version-stable/release-notes.mdx
+++ b/java/versioned_docs/version-stable/release-notes.mdx
@@ -9,6 +9,122 @@ import HTMLCard from '@site/src/components/HTMLCard';
import LiteYouTube from '@site/src/components/LiteYouTube';
+## Version 1.61
+
+### 🔑 WebAuthn passkeys
+
+New [Credentials] virtual authenticator, available via [BrowserContext.credentials()](/api/class-browsercontext.mdx#browser-context-credentials), lets tests register passkeys and answer `navigator.credentials.create()` / `navigator.credentials.get()` ceremonies in the page — no real hardware key required, works in all browsers:
+
+```java
+BrowserContext context = browser.newContext();
+
+// Seed a passkey your backend provisioned for a test user.
+context.credentials().create("example.com", new Credentials.CreateOptions()
+ .setId(credentialId)
+ .setUserHandle(userHandle)
+ .setPrivateKey(privateKey)
+ .setPublicKey(publicKey));
+context.credentials().install();
+
+Page page = context.newPage();
+page.navigate("https://example.com/login");
+// The page's navigator.credentials.get() is answered with the seeded passkey.
+```
+
+You can also let the app register a passkey once in a setup test, read it back with [Credentials.get()](/api/class-credentials.mdx#credentials-get), and seed it into later tests — see [Credentials] for details.
+
+### 🗃️ Web Storage
+
+New [WebStorage] API, available via [Page.localStorage()](/api/class-page.mdx#page-local-storage) and [Page.sessionStorage()](/api/class-page.mdx#page-session-storage), reads and writes the page's storage for the current origin:
+
+```java
+page.localStorage().setItem("token", "abc");
+String token = page.localStorage().getItem("token");
+List items = page.sessionStorage().items();
+```
+
+### New APIs
+- [APIResponse.securityDetails()](/api/class-apiresponse.mdx#api-response-security-details) and [APIResponse.serverAddr()](/api/class-apiresponse.mdx#api-response-server-addr) mirror the browser-side [Response.securityDetails()](/api/class-response.mdx#response-security-details) and [Response.serverAddr()](/api/class-response.mdx#response-server-addr).
+- New option `artifactsDir` in [BrowserType.connectOverCDP()](/api/class-browsertype.mdx#browser-type-connect-over-cdp) controls where artifacts such as traces and downloads are stored when attached to an existing browser.
+- New option `cursor` in [Screencast.showActions()](/api/class-screencast.mdx#screencast-show-actions) controls the cursor decoration rendered for pointer actions.
+- The `onFrame` callback in [Screencast.start()](/api/class-screencast.mdx#screencast-start) now receives a `timestamp` of when the frame was presented by the browser.
+
+### 🛠️ Other improvements
+- Playwright now supports Ubuntu 26.04.
+
+### Browser Versions
+- Chromium 149.0.7827.55
+- Mozilla Firefox 151.0
+- WebKit 26.5
+
+This version was also tested against the following stable channels:
+- Google Chrome 149
+- Microsoft Edge 149
+
+## Version 1.60
+
+### 🌐 HAR recording on Tracing
+
+[Tracing.startHar()](/api/class-tracing.mdx#tracing-start-har) / [Tracing.stopHar()](/api/class-tracing.mdx#tracing-stop-har) expose HAR recording as a first-class tracing API, with the same `content`, `mode` and `urlFilter` options as `recordHar`:
+
+```java
+context.tracing().startHar(Paths.get("trace.har"));
+Page page = context.newPage();
+page.navigate("https://playwright.dev");
+context.tracing().stopHar();
+```
+
+### 🪝 Drop API
+
+New [Locator.drop()](/api/class-locator.mdx#locator-drop) simulates an external drag-and-drop of files or clipboard-like data onto an element. Playwright dispatches `dragenter`, `dragover`, and `drop` with a synthetic [DataTransfer] in the page context — works cross-browser and is great for testing upload zones:
+
+```java
+page.locator("#dropzone").drop(new Locator.DropPayload()
+ .setFiles(new FilePayload("note.txt", "text/plain", "hello".getBytes(StandardCharsets.UTF_8))));
+
+page.locator("#dropzone").drop(new Locator.DropPayload()
+ .setData(Map.of(
+ "text/plain", "hello world",
+ "text/uri-list", "https://example.com")));
+```
+
+### 🎯 Aria snapshots
+- [assertThat(page).matchesAriaSnapshot()](/api/class-pageassertions.mdx#page-assertions-to-match-aria-snapshot) now works on a [Page], in addition to a [Locator] — equivalent to asserting against `page.locator("body")`.
+- New `boxes` option on [Locator.ariaSnapshot()](/api/class-locator.mdx#locator-aria-snapshot) / [Page.ariaSnapshot()](/api/class-page.mdx#page-aria-snapshot) appends each element's bounding box as `[box=x,y,width,height]`, useful for AI consumption.
+
+### New APIs
+
+#### Browser, Context and Page
+- Event [Browser.onContext(handler)](/api/class-browser.mdx#browser-event-context) — fired when a new context is created on the browser.
+- [BrowserContext] now mirrors lifecycle events from its pages: [BrowserContext.onDownload(handler)](/api/class-browsercontext.mdx#browser-context-event-download), [BrowserContext.onFrameAttached(handler)](/api/class-browsercontext.mdx#browser-context-event-frame-attached), [BrowserContext.onFrameDetached(handler)](/api/class-browsercontext.mdx#browser-context-event-frame-detached), [BrowserContext.onFrameNavigated(handler)](/api/class-browsercontext.mdx#browser-context-event-frame-navigated), [BrowserContext.onPageClose(handler)](/api/class-browsercontext.mdx#browser-context-event-page-close), [BrowserContext.onPageLoad(handler)](/api/class-browsercontext.mdx#browser-context-event-page-load).
+
+#### Locators and Assertions
+- New option `description` in [Page.getByRole()](/api/class-page.mdx#page-get-by-role) / [Locator.getByRole()](/api/class-locator.mdx#locator-get-by-role) / [Frame.getByRole()](/api/class-frame.mdx#frame-get-by-role) / [FrameLocator.getByRole()](/api/class-framelocator.mdx#frame-locator-get-by-role) for matching the [accessible description](https://www.w3.org/TR/wai-aria-1.2/#dfn-accessible-description).
+- New option `pseudo` in [assertThat(locator).hasCSS()](/api/class-locatorassertions.mdx#locator-assertions-to-have-css) reads computed styles from `::before` or `::after`.
+- New option `style` in [Locator.highlight()](/api/class-locator.mdx#locator-highlight) applies extra inline CSS to the highlight overlay, plus new [Page.hideHighlight()](/api/class-page.mdx#page-hide-highlight) to clear all highlights.
+
+#### Network
+- [WebSocketRoute.protocols()](/api/class-websocketroute.mdx#web-socket-route-protocols) returns the WebSocket subprotocols requested by the page.
+- New option `noDefaults` in [BrowserType.connectOverCDP()](/api/class-browsertype.mdx#browser-type-connect-over-cdp) disables Playwright's default overrides on the default context (download behavior, focus emulation, media emulation), so attaching to a user's daily-driver browser doesn't disturb its state.
+
+#### Errors
+- New [WebError.location()](/api/class-weberror.mdx#web-error-location) mirrors [ConsoleMessage.location()](/api/class-consolemessage.mdx#console-message-location).
+
+### 🛠️ Other improvements
+- Trace Viewer adds a pretty-print toggle for JSON / form request and response bodies in the network details panel.
+
+### Breaking Changes ⚠️
+- Removed long-deprecated `handle` option on `BrowserContext.exposeBinding` and `Page.exposeBinding`.
+
+### Browser Versions
+- Chromium 148.0.7778.96
+- Mozilla Firefox 150.0.2
+- WebKit 26.4
+
+This version was also tested against the following stable channels:
+- Google Chrome 147
+- Microsoft Edge 147
+
## Version 1.59
### 🎬 Screencast
@@ -1959,6 +2075,7 @@ This version of Playwright was also tested against the following stable channels
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -1991,6 +2108,7 @@ This version of Playwright was also tested against the following stable channels
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/running-tests.mdx b/java/versioned_docs/version-stable/running-tests.mdx
index 7943a1ed6d..392d3b08ee 100644
--- a/java/versioned_docs/version-stable/running-tests.mdx
+++ b/java/versioned_docs/version-stable/running-tests.mdx
@@ -106,6 +106,7 @@ If you prefer, you can run your tests in headed mode by using the `launch(new Br
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -138,6 +139,7 @@ If you prefer, you can run your tests in headed mode by using the `launch(new Br
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/screenshots.mdx b/java/versioned_docs/version-stable/screenshots.mdx
index de8689d6d8..f25ad47d5d 100644
--- a/java/versioned_docs/version-stable/screenshots.mdx
+++ b/java/versioned_docs/version-stable/screenshots.mdx
@@ -55,6 +55,7 @@ page.locator(".header").screenshot(new Locator.ScreenshotOptions().setPath(Paths
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -87,6 +88,7 @@ page.locator(".header").screenshot(new Locator.ScreenshotOptions().setPath(Paths
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/selenium-grid.mdx b/java/versioned_docs/version-stable/selenium-grid.mdx
index 912069e496..c65e586b72 100644
--- a/java/versioned_docs/version-stable/selenium-grid.mdx
+++ b/java/versioned_docs/version-stable/selenium-grid.mdx
@@ -134,6 +134,7 @@ This means that Selenium 3 is supported in a best-effort manner, where Playwrigh
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -166,6 +167,7 @@ This means that Selenium 3 is supported in a best-effort manner, where Playwrigh
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/test-assertions.mdx b/java/versioned_docs/version-stable/test-assertions.mdx
index c0d1a39601..1d9fc5d623 100644
--- a/java/versioned_docs/version-stable/test-assertions.mdx
+++ b/java/versioned_docs/version-stable/test-assertions.mdx
@@ -50,6 +50,7 @@ import HTMLCard from '@site/src/components/HTMLCard';
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -82,6 +83,7 @@ import HTMLCard from '@site/src/components/HTMLCard';
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/test-runners.mdx b/java/versioned_docs/version-stable/test-runners.mdx
index 457c4e4e0a..7a2f856cf5 100644
--- a/java/versioned_docs/version-stable/test-runners.mdx
+++ b/java/versioned_docs/version-stable/test-runners.mdx
@@ -198,7 +198,7 @@ repositories {
}
dependencies {
- implementation 'com.microsoft.playwright:playwright:1.59.0'
+ implementation 'com.microsoft.playwright:playwright:1.60.0'
}
application {
@@ -231,7 +231,7 @@ repositories {
}
dependencies {
- implementation("com.microsoft.playwright:playwright:1.59.0")
+ implementation("com.microsoft.playwright:playwright:1.60.0")
}
application {
@@ -351,6 +351,7 @@ public class TestExample {
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -383,6 +384,7 @@ public class TestExample {
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/threading.mdx b/java/versioned_docs/version-stable/threading.mdx
index 370d0cbde3..4b97e19dc5 100644
--- a/java/versioned_docs/version-stable/threading.mdx
+++ b/java/versioned_docs/version-stable/threading.mdx
@@ -91,6 +91,7 @@ page.waitForTimeout(60_000);
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -123,6 +124,7 @@ page.waitForTimeout(60_000);
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/touch-events.mdx b/java/versioned_docs/version-stable/touch-events.mdx
index 0fd1ac56b2..8d5537fe99 100644
--- a/java/versioned_docs/version-stable/touch-events.mdx
+++ b/java/versioned_docs/version-stable/touch-events.mdx
@@ -161,6 +161,7 @@ public class TouchEvents {
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -193,6 +194,7 @@ public class TouchEvents {
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/trace-viewer-intro.mdx b/java/versioned_docs/version-stable/trace-viewer-intro.mdx
index 84eef3b432..9459a33855 100644
--- a/java/versioned_docs/version-stable/trace-viewer-intro.mdx
+++ b/java/versioned_docs/version-stable/trace-viewer-intro.mdx
@@ -66,6 +66,7 @@ To learn more check out our detailed guide on [Trace Viewer](/trace-viewer.mdx).
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -98,6 +99,7 @@ To learn more check out our detailed guide on [Trace Viewer](/trace-viewer.mdx).
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/trace-viewer.mdx b/java/versioned_docs/version-stable/trace-viewer.mdx
index 3494800f11..779d894041 100644
--- a/java/versioned_docs/version-stable/trace-viewer.mdx
+++ b/java/versioned_docs/version-stable/trace-viewer.mdx
@@ -164,6 +164,7 @@ Next to the Actions tab you will find the Metadata tab which will show you more
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -196,6 +197,7 @@ Next to the Actions tab you will find the Metadata tab which will show you more
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/videos.mdx b/java/versioned_docs/version-stable/videos.mdx
index c1ef143a57..196f1242f3 100644
--- a/java/versioned_docs/version-stable/videos.mdx
+++ b/java/versioned_docs/version-stable/videos.mdx
@@ -49,6 +49,7 @@ Note that the video is only available after the page or browser context is close
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -81,6 +82,7 @@ Note that the video is only available after the page or browser context is close
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/webview2.mdx b/java/versioned_docs/version-stable/webview2.mdx
index 8d979f757d..6aa5a42c99 100644
--- a/java/versioned_docs/version-stable/webview2.mdx
+++ b/java/versioned_docs/version-stable/webview2.mdx
@@ -185,6 +185,7 @@ For debugging tests, see the Playwright [Debugging guide](./debug).
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -217,6 +218,7 @@ For debugging tests, see the Playwright [Debugging guide](./debug).
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/java/versioned_docs/version-stable/writing-tests.mdx b/java/versioned_docs/version-stable/writing-tests.mdx
index 6f1cd4308c..41919432e7 100644
--- a/java/versioned_docs/version-stable/writing-tests.mdx
+++ b/java/versioned_docs/version-stable/writing-tests.mdx
@@ -106,6 +106,7 @@ Page page = context.newPage();
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -138,6 +139,7 @@ Page page = context.newPage();
[WebSocket]: /api/class-websocket.mdx "WebSocket"
[WebSocketFrame]: /api/class-websocketframe.mdx "WebSocketFrame"
[WebSocketRoute]: /api/class-websocketroute.mdx "WebSocketRoute"
+[WebStorage]: /api/class-webstorage.mdx "WebStorage"
[Worker]: /api/class-worker.mdx "Worker"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/nodejs/versioned_docs/version-stable/accessibility-testing.mdx b/nodejs/versioned_docs/version-stable/accessibility-testing.mdx
index 812c0bb4ed..dfa4ed637a 100644
--- a/nodejs/versioned_docs/version-stable/accessibility-testing.mdx
+++ b/nodejs/versioned_docs/version-stable/accessibility-testing.mdx
@@ -345,6 +345,7 @@ test('example using custom fixture', async ({ page, makeAxeBuilder }) => {
[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"
@@ -377,6 +378,7 @@ test('example using custom fixture', async ({ page, makeAxeBuilder }) => {
[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"
diff --git a/nodejs/versioned_docs/version-stable/actionability.mdx b/nodejs/versioned_docs/version-stable/actionability.mdx
index e6f1a43fd8..26c038cf49 100644
--- a/nodejs/versioned_docs/version-stable/actionability.mdx
+++ b/nodejs/versioned_docs/version-stable/actionability.mdx
@@ -135,6 +135,7 @@ For example, consider a scenario where Playwright will click `Sign Up` button re
[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"
@@ -167,6 +168,7 @@ For example, consider a scenario where Playwright will click `Sign Up` button re
[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"
diff --git a/nodejs/versioned_docs/version-stable/api-testing.mdx b/nodejs/versioned_docs/version-stable/api-testing.mdx
index 7a3af73f09..2f654041e8 100644
--- a/nodejs/versioned_docs/version-stable/api-testing.mdx
+++ b/nodejs/versioned_docs/version-stable/api-testing.mdx
@@ -386,6 +386,7 @@ test('global context request has isolated cookie storage', async ({
[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"
@@ -418,6 +419,7 @@ test('global context request has isolated cookie storage', async ({
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-android.mdx b/nodejs/versioned_docs/version-stable/api/class-android.mdx
index 5284a951fc..b84d98e043 100644
--- a/nodejs/versioned_docs/version-stable/api/class-android.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-android.mdx
@@ -256,6 +256,7 @@ android.setDefaultTimeout(timeout);
[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"
@@ -288,6 +289,7 @@ android.setDefaultTimeout(timeout);
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-androiddevice.mdx b/nodejs/versioned_docs/version-stable/api/class-androiddevice.mdx
index 2f0ba0d072..5b37eb6e93 100644
--- a/nodejs/versioned_docs/version-stable/api/class-androiddevice.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-androiddevice.mdx
@@ -946,6 +946,7 @@ androidDevice.on('webview', data => {});
[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"
@@ -978,6 +979,7 @@ androidDevice.on('webview', data => {});
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-androidinput.mdx b/nodejs/versioned_docs/version-stable/api/class-androidinput.mdx
index 049f8b0451..12000ea56b 100644
--- a/nodejs/versioned_docs/version-stable/api/class-androidinput.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-androidinput.mdx
@@ -170,6 +170,7 @@ await androidInput.type(text);
[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"
@@ -202,6 +203,7 @@ await androidInput.type(text);
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-androidsocket.mdx b/nodejs/versioned_docs/version-stable/api/class-androidsocket.mdx
index d47f39813c..7863c0cefd 100644
--- a/nodejs/versioned_docs/version-stable/api/class-androidsocket.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-androidsocket.mdx
@@ -97,6 +97,7 @@ androidSocket.on('data', data => {});
[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"
@@ -129,6 +130,7 @@ androidSocket.on('data', data => {});
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-androidwebview.mdx b/nodejs/versioned_docs/version-stable/api/class-androidwebview.mdx
index 5d09ff4258..d411919eba 100644
--- a/nodejs/versioned_docs/version-stable/api/class-androidwebview.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-androidwebview.mdx
@@ -92,6 +92,7 @@ androidWebView.on('close', data => {});
[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"
@@ -124,6 +125,7 @@ androidWebView.on('close', data => {});
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-apirequest.mdx b/nodejs/versioned_docs/version-stable/api/class-apirequest.mdx
index 60f276a70c..755d9ec421 100644
--- a/nodejs/versioned_docs/version-stable/api/class-apirequest.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-apirequest.mdx
@@ -180,6 +180,7 @@ await apiRequest.newContext(options);
[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"
@@ -212,6 +213,7 @@ await apiRequest.newContext(options);
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-apirequestcontext.mdx b/nodejs/versioned_docs/version-stable/api/class-apirequestcontext.mdx
index 7b668ec17f..252d54c4e3 100644
--- a/nodejs/versioned_docs/version-stable/api/class-apirequestcontext.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-apirequestcontext.mdx
@@ -657,6 +657,7 @@ apiRequestContext.tracing
[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"
@@ -689,6 +690,7 @@ apiRequestContext.tracing
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-apiresponse.mdx b/nodejs/versioned_docs/version-stable/api/class-apiresponse.mdx
index 366907bd2f..7ad7858420 100644
--- a/nodejs/versioned_docs/version-stable/api/class-apiresponse.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-apiresponse.mdx
@@ -122,6 +122,60 @@ apiResponse.ok();
**Returns**
- [boolean]#
+---
+
+### securityDetails {/* #api-response-security-details */}
+
+Added in: v1.61apiResponse.securityDetails
+
+Returns SSL and other security information. Resolves to `null` for non-HTTPS responses. For redirected requests, returns the information for the last request in the redirect chain.
+
+**Usage**
+
+```js
+await apiResponse.securityDetails();
+```
+
+**Returns**
+- [Promise]<[null] | [Object]>#
+ - `issuer` [string] *(optional)*
+
+ Common Name component of the Issuer field. from the certificate. This should only be used for informational purposes. Optional.
+ - `protocol` [string] *(optional)*
+
+ The specific TLS protocol used. (e.g. `TLS 1.3`). Optional.
+ - `subjectName` [string] *(optional)*
+
+ Common Name component of the Subject field from the certificate. This should only be used for informational purposes. Optional.
+ - `validFrom` [number] *(optional)*
+
+ Unix timestamp (in seconds) specifying when this cert becomes valid. Optional.
+ - `validTo` [number] *(optional)*
+
+ Unix timestamp (in seconds) specifying when this cert becomes invalid. Optional.
+
+---
+
+### serverAddr {/* #api-response-server-addr */}
+
+Added in: v1.61apiResponse.serverAddr
+
+Returns the IP address and port of the server. Resolves to `null` if the server address is not available. For redirected requests, returns the information for the last request in the redirect chain.
+
+**Usage**
+
+```js
+await apiResponse.serverAddr();
+```
+
+**Returns**
+- [Promise]<[null] | [Object]>#
+ - `ipAddress` [string]
+
+ IPv4 or IPV6 address of the server.
+ - `port` [number]
+
+
---
### status {/* #api-response-status */}
@@ -203,6 +257,7 @@ apiResponse.url();
[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"
@@ -235,6 +290,7 @@ apiResponse.url();
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-apiresponseassertions.mdx b/nodejs/versioned_docs/version-stable/api/class-apiresponseassertions.mdx
index 5d4838dffc..05a5944395 100644
--- a/nodejs/versioned_docs/version-stable/api/class-apiresponseassertions.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-apiresponseassertions.mdx
@@ -73,6 +73,7 @@ await expect(response).not.toBeOK();
[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"
@@ -105,6 +106,7 @@ await expect(response).not.toBeOK();
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-browser.mdx b/nodejs/versioned_docs/version-stable/api/class-browser.mdx
index b9084e0d14..145f037516 100644
--- a/nodejs/versioned_docs/version-stable/api/class-browser.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-browser.mdx
@@ -934,6 +934,7 @@ browser.on('disconnected', data => {});
[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"
@@ -966,6 +967,7 @@ browser.on('disconnected', data => {});
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-browsercontext.mdx b/nodejs/versioned_docs/version-stable/api/class-browsercontext.mdx
index 2cc96b2b95..573a2de73c 100644
--- a/nodejs/versioned_docs/version-stable/api/class-browsercontext.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-browsercontext.mdx
@@ -1077,6 +1077,23 @@ browserContext.clock
---
+### credentials {/* #browser-context-credentials */}
+
+Added in: v1.61browserContext.credentials
+
+Virtual WebAuthn authenticator for this context. Lets tests seed credentials and intercept `navigator.credentials.create()` / `navigator.credentials.get()` ceremonies.
+
+**Usage**
+
+```js
+browserContext.credentials
+```
+
+**Type**
+- [Credentials]
+
+---
+
### debugger {/* #browser-context-debugger */}
Added in: v1.59browserContext.debugger
@@ -1448,7 +1465,7 @@ browserContext.on('weberror', data => {});
Added in: v1.11browserContext.on('backgroundpage')
-:::warning Deprecated
+:::warning[Deprecated]
Background pages have been removed from Chromium together with Manifest V2 extensions.
@@ -1472,7 +1489,7 @@ browserContext.on('backgroundpage', data => {});
Added in: v1.11browserContext.backgroundPages
-:::warning Deprecated
+:::warning[Deprecated]
Background pages have been removed from Chromium together with Manifest V2 extensions.
@@ -1496,7 +1513,7 @@ browserContext.backgroundPages();
Added before v1.9browserContext.setHTTPCredentials
-:::warning Deprecated
+:::warning[Deprecated]
Browsers may cache credentials after successful authentication. Create a new browser context instead.
@@ -1533,6 +1550,7 @@ await browserContext.setHTTPCredentials(httpCredentials);
[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"
@@ -1565,6 +1583,7 @@ await browserContext.setHTTPCredentials(httpCredentials);
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-browserserver.mdx b/nodejs/versioned_docs/version-stable/api/class-browserserver.mdx
index a4c31b0d89..25b1d327c8 100644
--- a/nodejs/versioned_docs/version-stable/api/class-browserserver.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-browserserver.mdx
@@ -109,6 +109,7 @@ browserServer.on('close', data => {});
[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"
@@ -141,6 +142,7 @@ browserServer.on('close', data => {});
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-browsertype.mdx b/nodejs/versioned_docs/version-stable/api/class-browsertype.mdx
index 0f9622e6ac..226b0d25c8 100644
--- a/nodejs/versioned_docs/version-stable/api/class-browsertype.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-browsertype.mdx
@@ -107,6 +107,9 @@ const page = defaultContext.pages()[0];
A CDP websocket endpoint or http url to connect to. For example `http://localhost:9222/` or `ws://127.0.0.1:9222/devtools/browser/387adf4c-243f-4051-a181-46798f4a46f4`.
- `options` [Object] *(optional)*
+ - `artifactsDir` [string] *(optional)* Added in: v1.61#
+
+ If specified, browser artifacts (such as traces and downloads) are saved into this directory.
- `endpointURL` [string] *(optional)* Added in: v1.14#
:::warning[Deprecated]
@@ -724,6 +727,7 @@ browserType.name();
[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"
@@ -756,6 +760,7 @@ browserType.name();
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-cdpsession.mdx b/nodejs/versioned_docs/version-stable/api/class-cdpsession.mdx
index 53240a3734..b399b5ac1e 100644
--- a/nodejs/versioned_docs/version-stable/api/class-cdpsession.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-cdpsession.mdx
@@ -127,6 +127,7 @@ session.on('event', ({ name, params }) => {
[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"
@@ -159,6 +160,7 @@ session.on('event', ({ name, params }) => {
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-clock.mdx b/nodejs/versioned_docs/version-stable/api/class-clock.mdx
index 26133b143e..8305470607 100644
--- a/nodejs/versioned_docs/version-stable/api/class-clock.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-clock.mdx
@@ -211,6 +211,7 @@ await page.clock.setSystemTime('2020-02-02');
[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"
@@ -243,6 +244,7 @@ await page.clock.setSystemTime('2020-02-02');
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-consolemessage.mdx b/nodejs/versioned_docs/version-stable/api/class-consolemessage.mdx
index ad9fefc0ad..155106a897 100644
--- a/nodejs/versioned_docs/version-stable/api/class-consolemessage.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-consolemessage.mdx
@@ -177,6 +177,7 @@ consoleMessage.worker();
[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"
@@ -209,6 +210,7 @@ consoleMessage.worker();
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-coverage.mdx b/nodejs/versioned_docs/version-stable/api/class-coverage.mdx
index b244e5d06d..cfb2327fcc 100644
--- a/nodejs/versioned_docs/version-stable/api/class-coverage.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-coverage.mdx
@@ -195,6 +195,7 @@ await coverage.stopJSCoverage();
[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"
@@ -227,6 +228,7 @@ await coverage.stopJSCoverage();
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-credentials.mdx b/nodejs/versioned_docs/version-stable/api/class-credentials.mdx
new file mode 100644
index 0000000000..199a9c0123
--- /dev/null
+++ b/nodejs/versioned_docs/version-stable/api/class-credentials.mdx
@@ -0,0 +1,316 @@
+---
+id: class-credentials
+title: "Credentials"
+---
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import HTMLCard from '@site/src/components/HTMLCard';
+
+
+`Credentials` is a virtual WebAuthn authenticator scoped to a [BrowserContext]. It lets tests register passkeys and answer `navigator.credentials.create()` / `navigator.credentials.get()` ceremonies in the page, without a real authenticator or hardware security key.
+
+There are two common ways to use it:
+
+**Usage: seed a known credential**
+
+```js
+const context = await browser.newContext();
+
+// A passkey your backend already provisioned for a test user.
+await context.credentials.create('example.com', {
+ id: knownCredentialId, // base64url
+ userHandle: knownUserHandle, // base64url
+ privateKey: knownPrivateKey, // base64url PKCS#8 (DER)
+ publicKey: knownPublicKey, // base64url SPKI (DER)
+});
+await context.credentials.install();
+
+const page = await context.newPage();
+await page.goto('https://example.com/login');
+// The page's navigator.credentials.get() is answered with the seeded passkey.
+```
+
+**Usage: capture a passkey, then reuse it**
+
+```js
+// setup test: let the app register a passkey, then save it.
+const context = await browser.newContext();
+await context.credentials.install();
+
+const page = await context.newPage();
+await page.goto('https://example.com/register');
+await page.getByRole('button', { name: 'Create a passkey' }).click();
+
+// Read back the passkey the page registered — it includes the private key.
+const [credential] = await context.credentials.get({ rpId: 'example.com' });
+fs.writeFileSync('playwright/.auth/passkey.json', JSON.stringify(credential));
+```
+
+```js
+// later test: seed the captured passkey so the app starts already enrolled.
+const credential = JSON.parse(fs.readFileSync('playwright/.auth/passkey.json', 'utf8'));
+const context = await browser.newContext();
+await context.credentials.create(credential.rpId, credential);
+await context.credentials.install();
+
+const page = await context.newPage();
+await page.goto('https://example.com/login');
+// navigator.credentials.get() resolves the captured passkey — already signed in.
+```
+
+**Defaults**
+
+
+---
+
+## Methods
+
+### create {/* #credentials-create */}
+
+Added in: v1.61credentials.create
+
+Seeds a virtual WebAuthn credential and returns it.
+
+With only [rpId](/api/class-credentials.mdx#credentials-create-option-rp-id), generates a fresh **ECDSA P-256** keypair, credential id and user handle. The seeded credential is discoverable (resident), so the page can resolve it from both username-then-passkey and usernameless passkey flows. The returned object carries the private and public keys, so it can be persisted to disk and re-seeded in a later test.
+
+To **import a known credential**, supply all four of [id](/api/class-credentials.mdx#credentials-create-option-id), [userHandle](/api/class-credentials.mdx#credentials-create-option-user-handle), [privateKey](/api/class-credentials.mdx#credentials-create-option-private-key) and [publicKey](/api/class-credentials.mdx#credentials-create-option-public-key) together.
+
+Call [credentials.install()](/api/class-credentials.mdx#credentials-install) before navigating to a page that uses WebAuthn.
+
+**Usage**
+
+```js
+await credentials.create(rpId);
+await credentials.create(rpId, options);
+```
+
+**Arguments**
+- `rpId` [string]#
+
+ Relying party id (typically the site's effective domain).
+- `options` [Object] *(optional)*
+ - `id` [string] *(optional)*#
+
+ Base64url-encoded credential id. Auto-generated if omitted.
+ - `privateKey` [string] *(optional)*#
+
+ Base64url-encoded PKCS#8 (DER) private key. Auto-generated if omitted.
+ - `publicKey` [string] *(optional)*#
+
+ Base64url-encoded SPKI (DER) public key. Auto-generated if omitted.
+ - `userHandle` [string] *(optional)*#
+
+ Base64url-encoded user handle. Auto-generated if omitted.
+
+**Returns**
+- [Promise]<[Object]>#
+ - `id` [string]
+
+ Base64url-encoded credential id.
+ - `rpId` [string]
+
+ Relying party id.
+ - `userHandle` [string]
+
+ Base64url-encoded user handle.
+ - `privateKey` [string]
+
+ Base64url-encoded PKCS#8 (DER) private key.
+ - `publicKey` [string]
+
+ Base64url-encoded SPKI (DER) public key.
+
+---
+
+### delete {/* #credentials-delete */}
+
+Added in: v1.61credentials.delete
+
+Removes a credential from the authenticator by its id. Works for any credential currently held — both those seeded with [credentials.create()](/api/class-credentials.mdx#credentials-create) and those the page registered itself by calling `navigator.credentials.create()`.
+
+**Usage**
+
+```js
+await credentials.delete(id);
+```
+
+**Arguments**
+- `id` [string]#
+
+ Base64url-encoded credential id.
+
+**Returns**
+- [Promise]<[void]>#
+
+---
+
+### get {/* #credentials-get */}
+
+Added in: v1.61credentials.get
+
+Returns every credential currently held by the authenticator, optionally filtered by [rpId](/api/class-credentials.mdx#credentials-get-option-rp-id) or [id](/api/class-credentials.mdx#credentials-get-option-id). This includes both credentials seeded with [credentials.create()](/api/class-credentials.mdx#credentials-create) and credentials the page registered itself by calling `navigator.credentials.create()`.
+
+Each returned credential includes its private and public keys, so a passkey the app just registered can be saved and re-seeded into a later test with [credentials.create()](/api/class-credentials.mdx#credentials-create) — see the second example in the class overview.
+
+**Usage**
+
+```js
+await credentials.get();
+await credentials.get(options);
+```
+
+**Arguments**
+- `options` [Object] *(optional)*
+ - `id` [string] *(optional)*#
+
+ Only return the credential with this base64url-encoded id.
+ - `rpId` [string] *(optional)*#
+
+ Only return credentials for this relying party id.
+
+**Returns**
+- [Promise]<[Array]<[Object]>>#
+ - `id` [string]
+
+
+ - `rpId` [string]
+
+
+ - `userHandle` [string]
+
+
+ - `privateKey` [string]
+
+
+ - `publicKey` [string]
+
+
+---
+
+### install {/* #credentials-install */}
+
+Added in: v1.61credentials.install
+
+Installs the virtual WebAuthn authenticator into the context, overriding `navigator.credentials.create()` and `navigator.credentials.get()` in all current and future pages. Call this before the page first touches `navigator.credentials`.
+
+Required: until [credentials.install()](/api/class-credentials.mdx#credentials-install) is called, no interception is in place and the page sees the platform's native (or absent) WebAuthn behaviour. Seeding credentials with [credentials.create()](/api/class-credentials.mdx#credentials-create) without installing populates the authenticator, but the page will never see those credentials.
+
+**Usage**
+
+```js
+await credentials.install();
+```
+
+**Returns**
+- [Promise]<[void]>#
+
+
+[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"
+[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"
+
+[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"
+[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/versioned_docs/version-stable/api/class-debugger.mdx b/nodejs/versioned_docs/version-stable/api/class-debugger.mdx
index 829d908820..1abbaa5676 100644
--- a/nodejs/versioned_docs/version-stable/api/class-debugger.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-debugger.mdx
@@ -156,6 +156,7 @@ debugger.on('pausedstatechanged', data => {});
[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"
@@ -188,6 +189,7 @@ debugger.on('pausedstatechanged', data => {});
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-dialog.mdx b/nodejs/versioned_docs/version-stable/api/class-dialog.mdx
index 0aa6a893a6..22fddab90a 100644
--- a/nodejs/versioned_docs/version-stable/api/class-dialog.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-dialog.mdx
@@ -154,6 +154,7 @@ dialog.type();
[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"
@@ -186,6 +187,7 @@ dialog.type();
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-disposable.mdx b/nodejs/versioned_docs/version-stable/api/class-disposable.mdx
index 5858a05872..de838680e0 100644
--- a/nodejs/versioned_docs/version-stable/api/class-disposable.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-disposable.mdx
@@ -42,6 +42,7 @@ await disposable.dispose();
[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"
@@ -74,6 +75,7 @@ await disposable.dispose();
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-download.mdx b/nodejs/versioned_docs/version-stable/api/class-download.mdx
index b4354dd31c..9ff67da894 100644
--- a/nodejs/versioned_docs/version-stable/api/class-download.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-download.mdx
@@ -204,6 +204,7 @@ download.url();
[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"
@@ -236,6 +237,7 @@ download.url();
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-electron.mdx b/nodejs/versioned_docs/version-stable/api/class-electron.mdx
index c08acd4410..d445ddd037 100644
--- a/nodejs/versioned_docs/version-stable/api/class-electron.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-electron.mdx
@@ -55,6 +55,29 @@ const { _electron: electron } = require('playwright');
If you are not able to launch Electron and it will end up in timeouts during launch, try the following:
* Ensure that `nodeCliInspect` ([FuseV1Options.EnableNodeCliInspectArguments](https://www.electronjs.org/docs/latest/tutorial/fuses#nodecliinspect)) fuse is **not** set to `false`.
+**Mocking native dialogs:**
+
+Playwright does not intercept the native Electron [dialog](https://www.electronjs.org/docs/latest/api/dialog) API (`dialog.showOpenDialog`, `dialog.showSaveDialog`, `dialog.showMessageBox`, etc.) because those calls happen in the Electron main process and go straight to OS APIs. Use [electronApplication.evaluate()](/api/class-electronapplication.mdx#electron-application-evaluate) to replace the relevant methods in the main process so tests run deterministically without any OS-level UI:
+
+```js
+// Stub the open dialog to always return a fixed path.
+await electronApp.evaluate(({ dialog }, filePaths) => {
+ dialog.showOpenDialog = () => Promise.resolve({ canceled: false, filePaths });
+}, ['/path/to/file.txt']);
+
+// Stub the save dialog.
+await electronApp.evaluate(({ dialog }, filePath) => {
+ dialog.showSaveDialog = () => Promise.resolve({ canceled: false, filePath });
+}, '/path/to/saved.txt');
+
+// Stub showMessageBox to click the first button.
+await electronApp.evaluate(({ dialog }) => {
+ dialog.showMessageBox = () => Promise.resolve({ response: 0, checkboxChecked: false });
+});
+```
+
+The replacement persists until the application is closed. Synchronous variants (`showOpenDialogSync`, `showSaveDialogSync`, `showMessageBoxSync`) can be stubbed the same way — just return the value directly instead of a `Promise`.
+
---
@@ -210,6 +233,7 @@ await electron.launch(options);
[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"
@@ -242,6 +266,7 @@ await electron.launch(options);
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-electronapplication.mdx b/nodejs/versioned_docs/version-stable/api/class-electronapplication.mdx
index cd74c86bd2..67181c8f36 100644
--- a/nodejs/versioned_docs/version-stable/api/class-electronapplication.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-electronapplication.mdx
@@ -323,6 +323,7 @@ electronApplication.on('window', data => {});
[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"
@@ -355,6 +356,7 @@ electronApplication.on('window', data => {});
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-elementhandle.mdx b/nodejs/versioned_docs/version-stable/api/class-elementhandle.mdx
index ea3f35ac87..aeb75e198b 100644
--- a/nodejs/versioned_docs/version-stable/api/class-elementhandle.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-elementhandle.mdx
@@ -1441,7 +1441,7 @@ await elementHandle.textContent();
Added before v1.9elementHandle.type
-:::warning Deprecated
+:::warning[Deprecated]
In most cases, you should use [locator.fill()](/api/class-locator.mdx#locator-fill) instead. You only need to press keys one by one if there is special keyboard handling on the page - in this case use [locator.pressSequentially()](/api/class-locator.mdx#locator-press-sequentially).
@@ -1604,6 +1604,7 @@ This method does not work across navigations, use [page.waitForSelector()](/api/
[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"
@@ -1636,6 +1637,7 @@ This method does not work across navigations, use [page.waitForSelector()](/api/
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-filechooser.mdx b/nodejs/versioned_docs/version-stable/api/class-filechooser.mdx
index 42177d3d1c..f4bc7d6a8b 100644
--- a/nodejs/versioned_docs/version-stable/api/class-filechooser.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-filechooser.mdx
@@ -126,6 +126,7 @@ await fileChooser.setFiles(files, options);
[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"
@@ -158,6 +159,7 @@ await fileChooser.setFiles(files, options);
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-fixtures.mdx b/nodejs/versioned_docs/version-stable/api/class-fixtures.mdx
index e944795c24..6579c34168 100644
--- a/nodejs/versioned_docs/version-stable/api/class-fixtures.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-fixtures.mdx
@@ -159,6 +159,7 @@ test('basic test', async ({ request }) => {
[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"
@@ -191,6 +192,7 @@ test('basic test', async ({ request }) => {
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-frame.mdx b/nodejs/versioned_docs/version-stable/api/class-frame.mdx
index ab93345d45..1d8093048c 100644
--- a/nodejs/versioned_docs/version-stable/api/class-frame.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-frame.mdx
@@ -230,7 +230,7 @@ console.log(await frame.evaluate('1 + 2')); // prints "3"
[ElementHandle] instances can be passed as an argument to the [frame.evaluate()](/api/class-frame.mdx#frame-evaluate):
```js
-const bodyHandle = await frame.evaluate('document.body');
+const bodyHandle = await frame.evaluateHandle('document.body');
const html = await frame.evaluate(([body, suffix]) =>
body.innerHTML + suffix, [bodyHandle, 'hello'],
);
@@ -2406,7 +2406,7 @@ await frame.textContent(selector, options);
Added before v1.9frame.type
-:::warning Deprecated
+:::warning[Deprecated]
In most cases, you should use [locator.fill()](/api/class-locator.mdx#locator-fill) instead. You only need to press keys one by one if there is special keyboard handling on the page - in this case use [locator.pressSequentially()](/api/class-locator.mdx#locator-press-sequentially).
@@ -2521,7 +2521,7 @@ await frame.uncheck(selector, options);
Added before v1.9frame.waitForNavigation
-:::warning Deprecated
+:::warning[Deprecated]
This method is inherently racy, please use [frame.waitForURL()](/api/class-frame.mdx#frame-wait-for-url) instead.
@@ -2671,6 +2671,7 @@ await frame.waitForTimeout(timeout);
[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"
@@ -2703,6 +2704,7 @@ await frame.waitForTimeout(timeout);
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-framelocator.mdx b/nodejs/versioned_docs/version-stable/api/class-framelocator.mdx
index 8f620582cc..765ca05c57 100644
--- a/nodejs/versioned_docs/version-stable/api/class-framelocator.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-framelocator.mdx
@@ -471,7 +471,7 @@ await expect(locator).toBeVisible();
Added in: v1.17frameLocator.first
-:::warning Deprecated
+:::warning[Deprecated]
Use [locator.first()](/api/class-locator.mdx#locator-first) followed by [locator.contentFrame()](/api/class-locator.mdx#locator-content-frame) instead.
@@ -495,7 +495,7 @@ frameLocator.first();
Added in: v1.17frameLocator.last
-:::warning Deprecated
+:::warning[Deprecated]
Use [locator.last()](/api/class-locator.mdx#locator-last) followed by [locator.contentFrame()](/api/class-locator.mdx#locator-content-frame) instead.
@@ -519,7 +519,7 @@ frameLocator.last();
Added in: v1.17frameLocator.nth
-:::warning Deprecated
+:::warning[Deprecated]
Use [locator.nth()](/api/class-locator.mdx#locator-nth) followed by [locator.contentFrame()](/api/class-locator.mdx#locator-content-frame) instead.
@@ -553,6 +553,7 @@ frameLocator.nth(index);
[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"
@@ -585,6 +586,7 @@ frameLocator.nth(index);
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-fullconfig.mdx b/nodejs/versioned_docs/version-stable/api/class-fullconfig.mdx
index 89feb29ead..6be86b6b73 100644
--- a/nodejs/versioned_docs/version-stable/api/class-fullconfig.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-fullconfig.mdx
@@ -14,6 +14,23 @@ Resolved configuration which is accessible via [testInfo.config](/api/class-test
## Properties
+### argv {/* #full-config-argv */}
+
+Added in: v1.61fullConfig.argv
+
+Snapshot of [`process.argv`](https://nodejs.org/api/process.html#processargv) captured in the runner process. Useful for reading custom command-line arguments — for example, args supplied after the `--` separator (`npx playwright test -- --build-path=./out`). Playwright does not parse these; consumers are responsible for slicing and interpreting them with any argument-parsing library.
+
+**Usage**
+
+```js
+fullConfig.argv
+```
+
+**Type**
+- [Array]<[string]>
+
+---
+
### configFile {/* #full-config-config-file */}
Added in: v1.20fullConfig.configFile
@@ -31,6 +48,23 @@ fullConfig.configFile
---
+### failOnFlakyTests {/* #full-config-fail-on-flaky-tests */}
+
+Added in: v1.61fullConfig.failOnFlakyTests
+
+See [testConfig.failOnFlakyTests](/api/class-testconfig.mdx#test-config-fail-on-flaky-tests).
+
+**Usage**
+
+```js
+fullConfig.failOnFlakyTests
+```
+
+**Type**
+- [boolean]
+
+---
+
### forbidOnly {/* #full-config-forbid-only */}
Added in: v1.10fullConfig.forbidOnly
@@ -434,6 +468,7 @@ fullConfig.workers
[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"
@@ -466,6 +501,7 @@ fullConfig.workers
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-fullproject.mdx b/nodejs/versioned_docs/version-stable/api/class-fullproject.mdx
index 7a0686683c..db6f364cc7 100644
--- a/nodejs/versioned_docs/version-stable/api/class-fullproject.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-fullproject.mdx
@@ -297,6 +297,7 @@ fullProject.use
[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"
@@ -329,6 +330,7 @@ fullProject.use
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-genericassertions.mdx b/nodejs/versioned_docs/version-stable/api/class-genericassertions.mdx
index f267dc3b5f..38641014b6 100644
--- a/nodejs/versioned_docs/version-stable/api/class-genericassertions.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-genericassertions.mdx
@@ -845,6 +845,7 @@ expect(value).resolves
[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"
@@ -877,6 +878,7 @@ expect(value).resolves
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-jshandle.mdx b/nodejs/versioned_docs/version-stable/api/class-jshandle.mdx
index 82a86777c2..56a4baae4b 100644
--- a/nodejs/versioned_docs/version-stable/api/class-jshandle.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-jshandle.mdx
@@ -197,6 +197,7 @@ await jsHandle.jsonValue();
[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"
@@ -229,6 +230,7 @@ await jsHandle.jsonValue();
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-keyboard.mdx b/nodejs/versioned_docs/version-stable/api/class-keyboard.mdx
index d76e7c2402..c428f16ca2 100644
--- a/nodejs/versioned_docs/version-stable/api/class-keyboard.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-keyboard.mdx
@@ -238,6 +238,7 @@ await keyboard.up(key);
[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"
@@ -270,6 +271,7 @@ await keyboard.up(key);
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-location.mdx b/nodejs/versioned_docs/version-stable/api/class-location.mdx
index 24ce621c99..62237051ca 100644
--- a/nodejs/versioned_docs/version-stable/api/class-location.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-location.mdx
@@ -76,6 +76,7 @@ location.line
[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"
@@ -108,6 +109,7 @@ location.line
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-locator.mdx b/nodejs/versioned_docs/version-stable/api/class-locator.mdx
index cd7f112dc6..aa483e900e 100644
--- a/nodejs/versioned_docs/version-stable/api/class-locator.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-locator.mdx
@@ -2631,7 +2631,7 @@ await locator.elementHandles();
Added in: v1.14locator.type
-:::warning Deprecated
+:::warning[Deprecated]
In most cases, you should use [locator.fill()](/api/class-locator.mdx#locator-fill) instead. You only need to press keys one by one if there is special keyboard handling on the page - in this case use [locator.pressSequentially()](/api/class-locator.mdx#locator-press-sequentially).
@@ -2680,6 +2680,7 @@ To press a special key, like `Control` or `ArrowDown`, use [locator.press()](/ap
[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"
@@ -2712,6 +2713,7 @@ To press a special key, like `Control` or `ArrowDown`, use [locator.press()](/ap
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-locatorassertions.mdx b/nodejs/versioned_docs/version-stable/api/class-locatorassertions.mdx
index c1f7a120af..1b11e9faa0 100644
--- a/nodejs/versioned_docs/version-stable/api/class-locatorassertions.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-locatorassertions.mdx
@@ -1103,6 +1103,7 @@ await expect(locator).not.toContainText('error');
[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"
@@ -1135,6 +1136,7 @@ await expect(locator).not.toContainText('error');
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-logger.mdx b/nodejs/versioned_docs/version-stable/api/class-logger.mdx
index 5e8ea6bfaa..fb94ec55b5 100644
--- a/nodejs/versioned_docs/version-stable/api/class-logger.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-logger.mdx
@@ -97,6 +97,7 @@ logger.log(name, severity, message, args, hints);
[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"
@@ -129,6 +130,7 @@ logger.log(name, severity, message, args, hints);
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-mouse.mdx b/nodejs/versioned_docs/version-stable/api/class-mouse.mdx
index 81f5e0c3e0..79c3121231 100644
--- a/nodejs/versioned_docs/version-stable/api/class-mouse.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-mouse.mdx
@@ -226,6 +226,7 @@ await mouse.wheel(deltaX, deltaY);
[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"
@@ -258,6 +259,7 @@ await mouse.wheel(deltaX, deltaY);
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-page.mdx b/nodejs/versioned_docs/version-stable/api/class-page.mdx
index 447ac269eb..9773ca33d2 100644
--- a/nodejs/versioned_docs/version-stable/api/class-page.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-page.mdx
@@ -610,7 +610,7 @@ console.log(await page.evaluate(`1 + ${x}`)); // prints "11"
[ElementHandle] instances can be passed as an argument to the [page.evaluate()](/api/class-page.mdx#page-evaluate):
```js
-const bodyHandle = await page.evaluate('document.body');
+const bodyHandle = await page.evaluateHandle('document.body');
const html = await page.evaluate(([body, suffix]) =>
body.innerHTML + suffix, [bodyHandle, 'hello']
);
@@ -2575,6 +2575,28 @@ page.keyboard
---
+### localStorage {/* #page-local-storage */}
+
+Added in: v1.61page.localStorage
+
+Provides access to the page's `localStorage` for the current origin. See [WebStorage].
+
+```js
+await page.localStorage.setItem('token', 'abc');
+const token = await page.localStorage.getItem('token');
+```
+
+**Usage**
+
+```js
+page.localStorage
+```
+
+**Type**
+- [WebStorage]
+
+---
+
### mouse {/* #page-mouse */}
Added before v1.9page.mouse
@@ -2629,6 +2651,28 @@ await page.screencast.stop();
---
+### sessionStorage {/* #page-session-storage */}
+
+Added in: v1.61page.sessionStorage
+
+Provides access to the page's `sessionStorage` for the current origin. See [WebStorage].
+
+```js
+await page.sessionStorage.setItem('flag', '1');
+const flag = await page.sessionStorage.getItem('flag');
+```
+
+**Usage**
+
+```js
+page.sessionStorage
+```
+
+**Type**
+- [WebStorage]
+
+---
+
### touchscreen {/* #page-touchscreen */}
Added before v1.9page.touchscreen
@@ -4302,7 +4346,7 @@ When all steps combined have not finished during the specified [timeout](/api/cl
:::note
-[page.tap()](/api/class-page.mdx#page-tap) the method will throw if [hasTouch](/api/class-browser.mdx#browser-new-context-option-has-touch) option of the browser context is false.
+[page.tap()](/api/class-page.mdx#page-tap) will throw if the [hasTouch](/api/class-browser.mdx#browser-new-context-option-has-touch) option of the browser context is false.
:::
**Usage**
@@ -4395,7 +4439,7 @@ await page.textContent(selector, options);
Added before v1.9page.type
-:::warning Deprecated
+:::warning[Deprecated]
In most cases, you should use [locator.fill()](/api/class-locator.mdx#locator-fill) instead. You only need to press keys one by one if there is special keyboard handling on the page - in this case use [locator.pressSequentially()](/api/class-locator.mdx#locator-press-sequentially).
@@ -4510,7 +4554,7 @@ await page.uncheck(selector, options);
Added before v1.9page.waitForNavigation
-:::warning Deprecated
+:::warning[Deprecated]
This method is inherently racy, please use [page.waitForURL()](/api/class-page.mdx#page-wait-for-url) instead.
@@ -4661,6 +4705,7 @@ await page.waitForTimeout(1000);
[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"
@@ -4693,6 +4738,7 @@ await page.waitForTimeout(1000);
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-pageassertions.mdx b/nodejs/versioned_docs/version-stable/api/class-pageassertions.mdx
index bc0993d1a7..f08eb7454d 100644
--- a/nodejs/versioned_docs/version-stable/api/class-pageassertions.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-pageassertions.mdx
@@ -343,6 +343,7 @@ await expect(page).not.toHaveURL('error');
[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"
@@ -375,6 +376,7 @@ await expect(page).not.toHaveURL('error');
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-playwright.mdx b/nodejs/versioned_docs/version-stable/api/class-playwright.mdx
index 2741aac2ed..d08b0d7667 100644
--- a/nodejs/versioned_docs/version-stable/api/class-playwright.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-playwright.mdx
@@ -189,6 +189,7 @@ playwright.webkit
[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"
@@ -221,6 +222,7 @@ playwright.webkit
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-playwrightassertions.mdx b/nodejs/versioned_docs/version-stable/api/class-playwrightassertions.mdx
index 0ae62c6ca5..145e2ecb8c 100644
--- a/nodejs/versioned_docs/version-stable/api/class-playwrightassertions.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-playwrightassertions.mdx
@@ -117,6 +117,7 @@ Creates a [PageAssertions] object for the given [Page].
[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"
@@ -149,6 +150,7 @@ Creates a [PageAssertions] object for the given [Page].
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-reporter.mdx b/nodejs/versioned_docs/version-stable/api/class-reporter.mdx
index 1402722e40..e2db49ad4d 100644
--- a/nodejs/versioned_docs/version-stable/api/class-reporter.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-reporter.mdx
@@ -392,6 +392,7 @@ reporter.printsToStdio();
[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"
@@ -424,6 +425,7 @@ reporter.printsToStdio();
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-request.mdx b/nodejs/versioned_docs/version-stable/api/class-request.mdx
index d5fe32be57..65120b774f 100644
--- a/nodejs/versioned_docs/version-stable/api/class-request.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-request.mdx
@@ -480,6 +480,7 @@ request.url();
[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"
@@ -512,6 +513,7 @@ request.url();
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-response.mdx b/nodejs/versioned_docs/version-stable/api/class-response.mdx
index ba1165ad1c..1a08d5cf34 100644
--- a/nodejs/versioned_docs/version-stable/api/class-response.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-response.mdx
@@ -386,6 +386,7 @@ response.url();
[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"
@@ -418,6 +419,7 @@ response.url();
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-route.mdx b/nodejs/versioned_docs/version-stable/api/class-route.mdx
index 503aceb85d..c3fedee8bf 100644
--- a/nodejs/versioned_docs/version-stable/api/class-route.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-route.mdx
@@ -324,6 +324,7 @@ route.request();
[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"
@@ -356,6 +357,7 @@ route.request();
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-screencast.mdx b/nodejs/versioned_docs/version-stable/api/class-screencast.mdx
index 48aadc90f9..62b2316170 100644
--- a/nodejs/versioned_docs/version-stable/api/class-screencast.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-screencast.mdx
@@ -63,6 +63,9 @@ await screencast.showActions(options);
**Arguments**
- `options` [Object] *(optional)*
+ - `cursor` "none" | "pointer" *(optional)* Added in: v1.61#
+
+ 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.
- `duration` [number] *(optional)*#
How long each annotation is displayed in milliseconds. Defaults to `500`.
@@ -170,8 +173,8 @@ await page.screencast.stop();
```js
// Capture frames
await page.screencast.start({
- onFrame: ({ data, viewportWidth, viewportHeight }) => {
- console.log(`frame size: ${data.length} (${viewportWidth}x${viewportHeight})`);
+ onFrame: ({ data, timestamp, viewportWidth, viewportHeight }) => {
+ console.log(`frame size: ${data.length} (${viewportWidth}x${viewportHeight}) at ${timestamp}`);
},
size: { width: 800, height: 600 },
});
@@ -185,6 +188,9 @@ await page.screencast.stop();
- `data` [Buffer]
JPEG-encoded frame data.
+ - `timestamp` [number]
+
+ The timestamp of when the frame was presented by the browser, in milliseconds since the Unix epoch.
- `viewportWidth` [number]
Width of the page viewport at the time the frame was captured.
@@ -242,6 +248,7 @@ await screencast.stop();
[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"
@@ -274,6 +281,7 @@ await screencast.stop();
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-selectors.mdx b/nodejs/versioned_docs/version-stable/api/class-selectors.mdx
index 8a9879c605..5acc27bba2 100644
--- a/nodejs/versioned_docs/version-stable/api/class-selectors.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-selectors.mdx
@@ -97,7 +97,7 @@ selectors.setTestIdAttribute(attributeName);
**Arguments**
- `attributeName` [string]#
- Test id attribute name.
+ Test id attribute name. To match elements with any of several attributes, pass them as a comma-separated list, e.g. `"data-pw,data-ti"`.
[APIRequest]: /api/class-apirequest.mdx "APIRequest"
@@ -112,6 +112,7 @@ selectors.setTestIdAttribute(attributeName);
[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"
@@ -144,6 +145,7 @@ selectors.setTestIdAttribute(attributeName);
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-snapshotassertions.mdx b/nodejs/versioned_docs/version-stable/api/class-snapshotassertions.mdx
index ef020186a9..b2e3314906 100644
--- a/nodejs/versioned_docs/version-stable/api/class-snapshotassertions.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-snapshotassertions.mdx
@@ -130,6 +130,7 @@ Note that matching snapshots only work with Playwright test runner.
[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"
@@ -162,6 +163,7 @@ Note that matching snapshots only work with Playwright test runner.
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-suite.mdx b/nodejs/versioned_docs/version-stable/api/class-suite.mdx
index 20b81cd9e9..ce20314709 100644
--- a/nodejs/versioned_docs/version-stable/api/class-suite.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-suite.mdx
@@ -216,6 +216,7 @@ suite.type
[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"
@@ -248,6 +249,7 @@ suite.type
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-test.mdx b/nodejs/versioned_docs/version-stable/api/class-test.mdx
index 2557207f5c..5bb6983077 100644
--- a/nodejs/versioned_docs/version-stable/api/class-test.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-test.mdx
@@ -1916,6 +1916,7 @@ test.describe.serial.only(() => {
[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"
@@ -1948,6 +1949,7 @@ test.describe.serial.only(() => {
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-testcase.mdx b/nodejs/versioned_docs/version-stable/api/class-testcase.mdx
index 728b60e78d..9e1f699774 100644
--- a/nodejs/versioned_docs/version-stable/api/class-testcase.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-testcase.mdx
@@ -302,6 +302,7 @@ testCase.type
[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"
@@ -334,6 +335,7 @@ testCase.type
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-testconfig.mdx b/nodejs/versioned_docs/version-stable/api/class-testconfig.mdx
index 7c62b11827..6ae75ed957 100644
--- a/nodejs/versioned_docs/version-stable/api/class-testconfig.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-testconfig.mdx
@@ -1240,6 +1240,7 @@ This path will serve as the base directory for each test file snapshot directory
[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"
@@ -1272,6 +1273,7 @@ This path will serve as the base directory for each test file snapshot directory
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-testerror.mdx b/nodejs/versioned_docs/version-stable/api/class-testerror.mdx
index 4dc9d87d2b..848b6fdf76 100644
--- a/nodejs/versioned_docs/version-stable/api/class-testerror.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-testerror.mdx
@@ -127,6 +127,7 @@ testError.value
[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"
@@ -159,6 +160,7 @@ testError.value
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-testinfo.mdx b/nodejs/versioned_docs/version-stable/api/class-testinfo.mdx
index 4da454cc8b..e766bfa8ba 100644
--- a/nodejs/versioned_docs/version-stable/api/class-testinfo.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-testinfo.mdx
@@ -873,6 +873,7 @@ testInfo.workerIndex
[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"
@@ -905,6 +906,7 @@ testInfo.workerIndex
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-testinfoerror.mdx b/nodejs/versioned_docs/version-stable/api/class-testinfoerror.mdx
index dcc0162ad3..cb28240cea 100644
--- a/nodejs/versioned_docs/version-stable/api/class-testinfoerror.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-testinfoerror.mdx
@@ -110,6 +110,7 @@ testInfoError.value
[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"
@@ -142,6 +143,7 @@ testInfoError.value
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-testoptions.mdx b/nodejs/versioned_docs/version-stable/api/class-testoptions.mdx
index cc17b927ca..35059c6aea 100644
--- a/nodejs/versioned_docs/version-stable/api/class-testoptions.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-testoptions.mdx
@@ -897,7 +897,7 @@ test('not signed in test', async ({ page }) => {
Added in: v1.27testOptions.testIdAttribute
-Custom attribute to be used in [page.getByTestId()](/api/class-page.mdx#page-get-by-test-id). `data-testid` is used by default.
+Custom attribute to be used in [page.getByTestId()](/api/class-page.mdx#page-get-by-test-id). `data-testid` is used by default. To match elements with any of several attributes, pass them as a comma-separated list.
**Usage**
@@ -911,6 +911,18 @@ export default defineConfig({
});
```
+Multiple attributes:
+
+```js title="playwright.config.ts"
+import { defineConfig } from '@playwright/test';
+
+export default defineConfig({
+ use: {
+ testIdAttribute: 'data-pw,data-ti',
+ },
+});
+```
+
---
### timezoneId {/* #test-options-timezone-id */}
@@ -940,14 +952,16 @@ export default defineConfig({
Added in: v1.10testOptions.trace
-Whether to record trace for each test. Defaults to `'off'`.
+Whether to record trace for each test. Defaults to `'off'`. The initial run of a test is the "first run"; subsequent runs caused by [retries](../test-retries.mdx) are "retries".
* `'off'`: Do not record trace.
-* `'on'`: Record trace for each test.
-* `'on-first-retry'`: Record trace only when retrying a test for the first time.
-* `'on-all-retries'`: Record trace only when retrying a test.
-* `'retain-on-failure'`: Record trace for each test. When test run passes, remove the recorded trace.
-* `'retain-on-first-failure'`: Record trace for the first run of each test, but not for retries. When test run passes, remove the recorded trace.
-* `'retain-on-failure-and-retries'`: Record trace for each test run. Retains all traces when an attempt fails.
+* `'on'`: Record and keep a trace for every run.
+* `'on-first-retry'`: Record and keep a trace only for the first retry of a test.
+* `'on-all-retries'`: Record and keep a trace for every retry.
+* `'retain-on-failure'`: Record a trace for every run, but keep it only for runs that failed. A failed run's trace is kept even when a later retry passes.
+* `'retain-on-first-failure'`: Record a trace only for the first run of a test (not for retries), and keep it only if that run failed.
+* `'retain-on-failure-and-retries'`: Record a trace for every run, and keep it for any run that failed or that is a retry.
+
+See [trace modes](../test-use-options.mdx#trace-modes) for a side-by-side comparison of what each mode records and keeps.
For more control, pass an object that specifies `mode` and trace features to enable.
@@ -1012,11 +1026,16 @@ export default defineConfig({
Added in: v1.10testOptions.video
-Whether to record video for each test. Defaults to `'off'`.
+Whether to record video for each test. Defaults to `'off'`. The initial run of a test is the "first run"; subsequent runs caused by [retries](../test-retries.mdx) are "retries".
* `'off'`: Do not record video.
-* `'on'`: Record video for each test.
-* `'retain-on-failure'`: Record video for each test, but remove all videos from successful test runs.
-* `'on-first-retry'`: Record video only when retrying a test for the first time.
+* `'on'`: Record and keep a video for every run.
+* `'on-first-retry'`: Record and keep a video only for the first retry of a test.
+* `'on-all-retries'`: Record and keep a video for every retry.
+* `'retain-on-failure'`: Record a video for every run, but keep it only for runs that failed. A failed run's video is kept even when a later retry passes.
+* `'retain-on-first-failure'`: Record a video only for the first run of a test (not for retries), and keep it only if that run failed.
+* `'retain-on-failure-and-retries'`: Record a video for every run, and keep it for any run that failed or that is a retry.
+
+See [video modes](../test-use-options.mdx#video-modes) for a side-by-side comparison of what each mode records and keeps.
To control video size, pass an object with `mode` and `size` properties. If video size is not specified, it will be equal to [testOptions.viewport](/api/class-testoptions.mdx#test-options-viewport) scaled down to fit into 800x800. If `viewport` is not configured explicitly the video size defaults to 800x450. Actual picture of each page will be scaled down if necessary to fit the specified size.
@@ -1037,8 +1056,8 @@ export default defineConfig({
Learn more about [recording video](../test-use-options.mdx#recording-options).
**Type**
-- [Object] | "off" | "on" | "retain-on-failure" | "on-first-retry"
- - `mode` "off" | "on" | "retain-on-failure" | "on-first-retry"
+- [Object] | "off" | "on" | "retain-on-failure" | "on-first-retry" | "on-all-retries" | "retain-on-first-failure" | "retain-on-failure-and-retries"
+ - `mode` "off" | "on" | "retain-on-failure" | "on-first-retry" | "on-all-retries" | "retain-on-first-failure" | "retain-on-failure-and-retries"
Video recording mode.
- `size` [Object] *(optional)*
@@ -1124,6 +1143,7 @@ export default defineConfig({
[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"
@@ -1156,6 +1176,7 @@ export default defineConfig({
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-testproject.mdx b/nodejs/versioned_docs/version-stable/api/class-testproject.mdx
index 0791505be0..387cbfbaa8 100644
--- a/nodejs/versioned_docs/version-stable/api/class-testproject.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-testproject.mdx
@@ -141,6 +141,9 @@ testProject.expect
- `pathTemplate` [string] *(optional)*
A template controlling location of the screenshots. See [testProject.snapshotPathTemplate](/api/class-testproject.mdx#test-project-snapshot-path-template) for details.
+ - `timeout` [number] *(optional)*
+
+ Default timeout for [expect(page).toHaveScreenshot()](/api/class-pageassertions.mdx#page-assertions-to-have-screenshot-1) in milliseconds, defaults to the global expect timeout. Setting to `0` disables the timeout.
Configuration for the [expect(page).toHaveScreenshot()](/api/class-pageassertions.mdx#page-assertions-to-have-screenshot-1) method.
- `toMatchAriaSnapshot` [Object] *(optional)*
@@ -782,6 +785,7 @@ export default defineConfig({
[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"
@@ -814,6 +818,7 @@ export default defineConfig({
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-testresult.mdx b/nodejs/versioned_docs/version-stable/api/class-testresult.mdx
index acae7806d8..81f396e368 100644
--- a/nodejs/versioned_docs/version-stable/api/class-testresult.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-testresult.mdx
@@ -278,6 +278,7 @@ testResult.workerIndex
[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"
@@ -310,6 +311,7 @@ testResult.workerIndex
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-teststep.mdx b/nodejs/versioned_docs/version-stable/api/class-teststep.mdx
index 6230f8d901..643952e2d1 100644
--- a/nodejs/versioned_docs/version-stable/api/class-teststep.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-teststep.mdx
@@ -241,6 +241,7 @@ testStep.title
[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"
@@ -273,6 +274,7 @@ testStep.title
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-teststepinfo.mdx b/nodejs/versioned_docs/version-stable/api/class-teststepinfo.mdx
index d562de2745..e743acae63 100644
--- a/nodejs/versioned_docs/version-stable/api/class-teststepinfo.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-teststepinfo.mdx
@@ -172,6 +172,7 @@ testStepInfo.titlePath
[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"
@@ -204,6 +205,7 @@ testStepInfo.titlePath
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-timeouterror.mdx b/nodejs/versioned_docs/version-stable/api/class-timeouterror.mdx
index cf59bbc090..267e9c0013 100644
--- a/nodejs/versioned_docs/version-stable/api/class-timeouterror.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-timeouterror.mdx
@@ -43,6 +43,7 @@ const playwright = require('playwright');
[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"
@@ -75,6 +76,7 @@ const playwright = require('playwright');
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-touchscreen.mdx b/nodejs/versioned_docs/version-stable/api/class-touchscreen.mdx
index 4ce2b21470..1fd2b650b2 100644
--- a/nodejs/versioned_docs/version-stable/api/class-touchscreen.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-touchscreen.mdx
@@ -24,7 +24,7 @@ Dispatches a `touchstart` and `touchend` event with a single touch at the positi
:::note
-[page.tap()](/api/class-page.mdx#page-tap) the method will throw if [hasTouch](/api/class-browser.mdx#browser-new-context-option-has-touch) option of the browser context is false.
+[touchscreen.tap()](/api/class-touchscreen.mdx#touchscreen-tap) will throw if the [hasTouch](/api/class-browser.mdx#browser-new-context-option-has-touch) option of the browser context is false.
:::
**Usage**
@@ -57,6 +57,7 @@ await touchscreen.tap(x, y);
[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"
@@ -89,6 +90,7 @@ await touchscreen.tap(x, y);
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-tracing.mdx b/nodejs/versioned_docs/version-stable/api/class-tracing.mdx
index 6f7f9df484..4bb80ffb1e 100644
--- a/nodejs/versioned_docs/version-stable/api/class-tracing.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-tracing.mdx
@@ -297,6 +297,7 @@ await tracing.stopHar();
[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"
@@ -329,6 +330,7 @@ await tracing.stopHar();
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-video.mdx b/nodejs/versioned_docs/version-stable/api/class-video.mdx
index db293de8d5..1b812e21e4 100644
--- a/nodejs/versioned_docs/version-stable/api/class-video.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-video.mdx
@@ -85,6 +85,7 @@ await video.saveAs(path);
[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"
@@ -117,6 +118,7 @@ await video.saveAs(path);
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-weberror.mdx b/nodejs/versioned_docs/version-stable/api/class-weberror.mdx
index 5cbdf863af..9cc734b4d2 100644
--- a/nodejs/versioned_docs/version-stable/api/class-weberror.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-weberror.mdx
@@ -93,6 +93,7 @@ webError.page();
[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"
@@ -125,6 +126,7 @@ webError.page();
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-websocket.mdx b/nodejs/versioned_docs/version-stable/api/class-websocket.mdx
index c2ad77bac6..2095977d15 100644
--- a/nodejs/versioned_docs/version-stable/api/class-websocket.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-websocket.mdx
@@ -173,6 +173,7 @@ webSocket.on('socketerror', data => {});
[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"
@@ -205,6 +206,7 @@ webSocket.on('socketerror', data => {});
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-websocketroute.mdx b/nodejs/versioned_docs/version-stable/api/class-websocketroute.mdx
index 4945c05d66..e8e54155f9 100644
--- a/nodejs/versioned_docs/version-stable/api/class-websocketroute.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-websocketroute.mdx
@@ -248,6 +248,7 @@ webSocketRoute.url();
[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"
@@ -280,6 +281,7 @@ webSocketRoute.url();
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-webstorage.mdx b/nodejs/versioned_docs/version-stable/api/class-webstorage.mdx
new file mode 100644
index 0000000000..16076e42ba
--- /dev/null
+++ b/nodejs/versioned_docs/version-stable/api/class-webstorage.mdx
@@ -0,0 +1,243 @@
+---
+id: class-webstorage
+title: "WebStorage"
+---
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import HTMLCard from '@site/src/components/HTMLCard';
+
+
+WebStorage exposes the page's `localStorage` or `sessionStorage` for the current origin via an async, [browser-consistent](https://developer.mozilla.org/en-US/docs/Web/API/Storage) API.
+
+Instances are accessed through [page.localStorage](/api/class-page.mdx#page-local-storage) and [page.sessionStorage](/api/class-page.mdx#page-session-storage).
+
+```js
+await page.goto('https://example.com');
+await page.localStorage.setItem('token', 'abc');
+const token = await page.localStorage.getItem('token');
+const all = await page.localStorage.items();
+await page.localStorage.removeItem('token');
+await page.localStorage.clear();
+```
+
+
+---
+
+## Methods
+
+### clear {/* #web-storage-clear */}
+
+Added in: v1.61webStorage.clear
+
+Removes all items from the storage.
+
+**Usage**
+
+```js
+await webStorage.clear();
+```
+
+**Returns**
+- [Promise]<[void]>#
+
+---
+
+### getItem {/* #web-storage-get-item */}
+
+Added in: v1.61webStorage.getItem
+
+Returns the value for the given [name](/api/class-webstorage.mdx#web-storage-get-item-option-name) if present.
+
+**Usage**
+
+```js
+await webStorage.getItem(name);
+```
+
+**Arguments**
+- `name` [string]#
+
+ Name of the item to retrieve.
+
+**Returns**
+- [Promise]<[null] | [string]>#
+
+---
+
+### items {/* #web-storage-items */}
+
+Added in: v1.61webStorage.items
+
+Returns all items in the storage as name/value pairs.
+
+**Usage**
+
+```js
+await webStorage.items();
+```
+
+**Returns**
+- [Promise]<[Array]<[Object]>>#
+ - `name` [string]
+
+
+ - `value` [string]
+
+
+---
+
+### removeItem {/* #web-storage-remove-item */}
+
+Added in: v1.61webStorage.removeItem
+
+Removes the item with the given [name](/api/class-webstorage.mdx#web-storage-remove-item-option-name). No-op if the item is absent.
+
+**Usage**
+
+```js
+await webStorage.removeItem(name);
+```
+
+**Arguments**
+- `name` [string]#
+
+ Name of the item to remove.
+
+**Returns**
+- [Promise]<[void]>#
+
+---
+
+### setItem {/* #web-storage-set-item */}
+
+Added in: v1.61webStorage.setItem
+
+Sets the value for the given [name](/api/class-webstorage.mdx#web-storage-set-item-option-name). Overwrites any existing value for that name.
+
+**Usage**
+
+```js
+await webStorage.setItem(name, value);
+```
+
+**Arguments**
+- `name` [string]#
+
+ Name of the item to set.
+- `value` [string]#
+
+ New value for the item.
+
+**Returns**
+- [Promise]<[void]>#
+
+
+[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"
+[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"
+
+[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"
+[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/versioned_docs/version-stable/api/class-worker.mdx b/nodejs/versioned_docs/version-stable/api/class-worker.mdx
index 39e0aa8555..6c23c0b7c6 100644
--- a/nodejs/versioned_docs/version-stable/api/class-worker.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-worker.mdx
@@ -185,6 +185,7 @@ worker.on('console', data => {});
[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"
@@ -217,6 +218,7 @@ worker.on('console', data => {});
[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"
diff --git a/nodejs/versioned_docs/version-stable/api/class-workerinfo.mdx b/nodejs/versioned_docs/version-stable/api/class-workerinfo.mdx
index 6f53d29953..16eb98edb7 100644
--- a/nodejs/versioned_docs/version-stable/api/class-workerinfo.mdx
+++ b/nodejs/versioned_docs/version-stable/api/class-workerinfo.mdx
@@ -97,6 +97,7 @@ workerInfo.workerIndex
[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"
@@ -129,6 +130,7 @@ workerInfo.workerIndex
[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"
diff --git a/nodejs/versioned_docs/version-stable/aria-snapshots.mdx b/nodejs/versioned_docs/version-stable/aria-snapshots.mdx
index 949f13f84a..1913149a08 100644
--- a/nodejs/versioned_docs/version-stable/aria-snapshots.mdx
+++ b/nodejs/versioned_docs/version-stable/aria-snapshots.mdx
@@ -84,7 +84,7 @@ Each accessible element in the tree is represented as a YAML node:
- **role**: Specifies the ARIA or HTML role of the element (e.g., `heading`, `list`, `listitem`, `button`).
- **"name"**: Accessible name of the element. Quoted strings indicate exact values, `/patterns/` are used for regular expression.
-- **[attribute=value]**: Attributes and values, in square brackets, represent specific ARIA attributes, such as `checked`, `disabled`, `expanded`, `level`, `pressed`, or `selected`.
+- **[attribute=value]**: Attributes and values, in square brackets, represent specific ARIA attributes, such as `checked`, `disabled`, `expanded`, `invalid`, `level`, `pressed`, or `selected`.
These values are derived from ARIA attributes or calculated based on HTML semantics. To inspect the accessibility tree structure of a page, use the [Chrome DevTools Accessibility Tab](https://developer.chrome.com/docs/devtools/accessibility/reference#tab).
@@ -415,7 +415,7 @@ Groups capture nested elements, such as `` elements with summary conten
### Attributes and states
-Commonly used ARIA attributes, like `checked`, `disabled`, `expanded`, `level`, `pressed`, and `selected`, represent control states.
+Commonly used ARIA attributes, like `checked`, `disabled`, `expanded`, `invalid`, `level`, `pressed`, and `selected`, represent control states.
#### Checkbox with `checked` attribute
@@ -437,6 +437,26 @@ Commonly used ARIA attributes, like `checked`, `disabled`, `expanded`, `level`,
- button "Toggle" [pressed=true]
```
+#### Input with `aria-invalid` attribute
+
+The `aria-invalid` value is surfaced directly. A value of `true` renders as `[invalid]`, while `grammar` and `spelling` render as `[invalid=grammar]` and `[invalid=spelling]`. A `false` value is omitted.
+
+```html
+
+```
+
+```yaml title="aria snapshot"
+- textbox "Email" [invalid]: not-an-email
+```
+
+```html
+
+```
+
+```yaml title="aria snapshot"
+- textbox "Bio" [invalid=spelling]
+```
+
[APIRequest]: /api/class-apirequest.mdx "APIRequest"
[APIRequestContext]: /api/class-apirequestcontext.mdx "APIRequestContext"
@@ -450,6 +470,7 @@ Commonly used ARIA attributes, like `checked`, `disabled`, `expanded`, `level`,
[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"
@@ -482,6 +503,7 @@ Commonly used ARIA attributes, like `checked`, `disabled`, `expanded`, `level`,
[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"
diff --git a/nodejs/versioned_docs/version-stable/auth.mdx b/nodejs/versioned_docs/version-stable/auth.mdx
index e72cb15a1e..9341c481f2 100644
--- a/nodejs/versioned_docs/version-stable/auth.mdx
+++ b/nodejs/versioned_docs/version-stable/auth.mdx
@@ -307,6 +307,73 @@ export const test = baseTest.extend<{}, { workerStorageState: string }>({
});
```
+### Passkeys (WebAuthn)
+
+**When to use**
+- Your app signs users in with passkeys (WebAuthn), and you want tests to start already enrolled.
+
+**Details**
+
+[browserContext.credentials](/api/class-browsercontext.mdx#browser-context-credentials) is a virtual WebAuthn authenticator. Unlike cookie or local storage state, a passkey is seeded **imperatively** with [credentials.create()](/api/class-credentials.mdx#credentials-create) and [credentials.install()](/api/class-credentials.mdx#credentials-install), so it lives in a [`context` fixture override](./test-fixtures.mdx#overriding-fixtures) rather than in the `storageState` config option.
+
+If your backend already provisioned a passkey for the test user, seed it directly — no setup project required:
+
+```js title="playwright/fixtures.ts"
+import { test as baseTest } from '@playwright/test';
+export * from '@playwright/test';
+
+export const test = baseTest.extend({
+ context: async ({ context }, use) => {
+ // A passkey your backend provisioned for the test user.
+ await context.credentials.create('example.com', {
+ id: process.env.PASSKEY_ID,
+ userHandle: process.env.PASSKEY_USER_HANDLE,
+ privateKey: process.env.PASSKEY_PRIVATE_KEY,
+ publicKey: process.env.PASSKEY_PUBLIC_KEY,
+ });
+ await context.credentials.install();
+ await use(context);
+ },
+});
+```
+
+Otherwise, let the app register a passkey once in a [setup project](#basic-shared-account-in-all-tests), capture it with [credentials.get()](/api/class-credentials.mdx#credentials-get), and save it to disk:
+
+```js title="tests/passkey.setup.ts"
+import { test as setup } from '@playwright/test';
+import fs from 'fs';
+
+setup('enroll passkey', async ({ context, page }) => {
+ await context.credentials.install();
+ await page.goto('https://example.com/register');
+ // The app calls navigator.credentials.create() to register the passkey.
+ await page.getByRole('button', { name: 'Create a passkey' }).click();
+
+ // Read back the registered passkey, including its private key, and save it.
+ const [credential] = await context.credentials.get({ rpId: 'example.com' });
+ fs.writeFileSync('playwright/.auth/passkey.json', JSON.stringify(credential));
+});
+```
+
+Then seed the captured passkey into every test's context:
+
+```js title="playwright/fixtures.ts"
+import { test as baseTest } from '@playwright/test';
+import fs from 'fs';
+export * from '@playwright/test';
+
+export const test = baseTest.extend({
+ context: async ({ context }, use) => {
+ const credential = JSON.parse(fs.readFileSync('playwright/.auth/passkey.json', 'utf8'));
+ await context.credentials.create(credential.rpId, credential);
+ await context.credentials.install();
+ await use(context);
+ },
+});
+```
+
+Declare the `setup` project as a [dependency](./test-projects.mdx#dependencies) of your testing projects, just like in the [basic flow](#basic-shared-account-in-all-tests). The saved `passkey.json` contains a private key, so keep it under `playwright/.auth` and out of source control (see [Core concepts](#core-concepts)).
+
### Multiple signed in roles
**When to use**
@@ -539,6 +606,7 @@ test('not signed in test', async ({ page }) => {
[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"
@@ -571,6 +639,7 @@ test('not signed in test', async ({ page }) => {
[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"
diff --git a/nodejs/versioned_docs/version-stable/best-practices.mdx b/nodejs/versioned_docs/version-stable/best-practices.mdx
index de1155cacd..4e00648623 100644
--- a/nodejs/versioned_docs/version-stable/best-practices.mdx
+++ b/nodejs/versioned_docs/version-stable/best-practices.mdx
@@ -523,6 +523,7 @@ await page.getByRole('link', { name: 'next page' }).click();
[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"
@@ -555,6 +556,7 @@ await page.getByRole('link', { name: 'next page' }).click();
[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"
diff --git a/nodejs/versioned_docs/version-stable/browser-contexts.mdx b/nodejs/versioned_docs/version-stable/browser-contexts.mdx
index 68875d839b..214e1d432c 100644
--- a/nodejs/versioned_docs/version-stable/browser-contexts.mdx
+++ b/nodejs/versioned_docs/version-stable/browser-contexts.mdx
@@ -127,6 +127,7 @@ const userPage = await userContext.newPage();
[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"
@@ -159,6 +160,7 @@ const userPage = await userContext.newPage();
[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"
diff --git a/nodejs/versioned_docs/version-stable/browsers.mdx b/nodejs/versioned_docs/version-stable/browsers.mdx
index 65d6086fdc..1a4995c287 100644
--- a/nodejs/versioned_docs/version-stable/browsers.mdx
+++ b/nodejs/versioned_docs/version-stable/browsers.mdx
@@ -651,6 +651,7 @@ npx playwright uninstall --all
[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"
@@ -683,6 +684,7 @@ npx playwright uninstall --all
[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"
diff --git a/nodejs/versioned_docs/version-stable/canary-releases.mdx b/nodejs/versioned_docs/version-stable/canary-releases.mdx
index fbf6147c1a..fb6c7be5c1 100644
--- a/nodejs/versioned_docs/version-stable/canary-releases.mdx
+++ b/nodejs/versioned_docs/version-stable/canary-releases.mdx
@@ -53,6 +53,7 @@ The stable and the `next` documentation is published on [playwright.dev](https:/
[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"
@@ -85,6 +86,7 @@ The stable and the `next` documentation is published on [playwright.dev](https:/
[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"
diff --git a/nodejs/versioned_docs/version-stable/chrome-extensions.mdx b/nodejs/versioned_docs/version-stable/chrome-extensions.mdx
index 2dd26e8a89..7ad4e9822f 100644
--- a/nodejs/versioned_docs/version-stable/chrome-extensions.mdx
+++ b/nodejs/versioned_docs/version-stable/chrome-extensions.mdx
@@ -128,6 +128,7 @@ test('popup page', async ({ page, extensionId }) => {
[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"
@@ -160,6 +161,7 @@ test('popup page', async ({ page, extensionId }) => {
[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"
diff --git a/nodejs/versioned_docs/version-stable/ci-intro.mdx b/nodejs/versioned_docs/version-stable/ci-intro.mdx
index 22764f5c8a..3147c86902 100644
--- a/nodejs/versioned_docs/version-stable/ci-intro.mdx
+++ b/nodejs/versioned_docs/version-stable/ci-intro.mdx
@@ -176,6 +176,7 @@ Artifacts like trace files, HTML reports or even the console logs contain inform
[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"
@@ -208,6 +209,7 @@ Artifacts like trace files, HTML reports or even the console logs contain inform
[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"
diff --git a/nodejs/versioned_docs/version-stable/ci.mdx b/nodejs/versioned_docs/version-stable/ci.mdx
index edd9da231c..3ef2360bc1 100644
--- a/nodejs/versioned_docs/version-stable/ci.mdx
+++ b/nodejs/versioned_docs/version-stable/ci.mdx
@@ -518,6 +518,7 @@ xvfb-run npx playwright test
[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"
@@ -550,6 +551,7 @@ xvfb-run npx playwright test
[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"
diff --git a/nodejs/versioned_docs/version-stable/clock.mdx b/nodejs/versioned_docs/version-stable/clock.mdx
index 82b826a42c..1ab76daf3e 100644
--- a/nodejs/versioned_docs/version-stable/clock.mdx
+++ b/nodejs/versioned_docs/version-stable/clock.mdx
@@ -189,6 +189,7 @@ await expect(page.getByTestId('current-time')).toHaveText('2/2/2024, 10:00:02 AM
[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"
@@ -221,6 +222,7 @@ await expect(page.getByTestId('current-time')).toHaveText('2/2/2024, 10:00:02 AM
[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"
diff --git a/nodejs/versioned_docs/version-stable/codegen-intro.mdx b/nodejs/versioned_docs/version-stable/codegen-intro.mdx
index acf4aace2f..c1086276d6 100644
--- a/nodejs/versioned_docs/version-stable/codegen-intro.mdx
+++ b/nodejs/versioned_docs/version-stable/codegen-intro.mdx
@@ -75,6 +75,7 @@ You can generate tests using emulation for specific viewports, devices, color sc
[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"
@@ -107,6 +108,7 @@ You can generate tests using emulation for specific viewports, devices, color sc
[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"
diff --git a/nodejs/versioned_docs/version-stable/codegen.mdx b/nodejs/versioned_docs/version-stable/codegen.mdx
index 8d5742e3d5..7c210f4629 100644
--- a/nodejs/versioned_docs/version-stable/codegen.mdx
+++ b/nodejs/versioned_docs/version-stable/codegen.mdx
@@ -231,6 +231,7 @@ const { chromium } = require('@playwright/test');
[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"
@@ -263,6 +264,7 @@ const { chromium } = require('@playwright/test');
[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"
diff --git a/nodejs/versioned_docs/version-stable/debug.mdx b/nodejs/versioned_docs/version-stable/debug.mdx
index 9a2c2553bb..dd7b926464 100644
--- a/nodejs/versioned_docs/version-stable/debug.mdx
+++ b/nodejs/versioned_docs/version-stable/debug.mdx
@@ -328,6 +328,7 @@ await chromium.launch({ headless: false, slowMo: 100 });
[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"
@@ -360,6 +361,7 @@ await chromium.launch({ headless: false, slowMo: 100 });
[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"
diff --git a/nodejs/versioned_docs/version-stable/dialogs.mdx b/nodejs/versioned_docs/version-stable/dialogs.mdx
index 5aa3902aac..fdde5fee39 100644
--- a/nodejs/versioned_docs/version-stable/dialogs.mdx
+++ b/nodejs/versioned_docs/version-stable/dialogs.mdx
@@ -81,6 +81,7 @@ This will wait for the print dialog to be opened after the button is clicked. Ma
[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"
@@ -113,6 +114,7 @@ This will wait for the print dialog to be opened after the button is clicked. Ma
[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"
diff --git a/nodejs/versioned_docs/version-stable/docker.mdx b/nodejs/versioned_docs/version-stable/docker.mdx
index ea02d6e978..eeec19ffc5 100644
--- a/nodejs/versioned_docs/version-stable/docker.mdx
+++ b/nodejs/versioned_docs/version-stable/docker.mdx
@@ -180,6 +180,7 @@ RUN npx -y playwright@1.60.0 install --with-deps
[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"
@@ -212,6 +213,7 @@ RUN npx -y playwright@1.60.0 install --with-deps
[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"
diff --git a/nodejs/versioned_docs/version-stable/downloads.mdx b/nodejs/versioned_docs/version-stable/downloads.mdx
index cac130fef1..c7fce80c06 100644
--- a/nodejs/versioned_docs/version-stable/downloads.mdx
+++ b/nodejs/versioned_docs/version-stable/downloads.mdx
@@ -57,6 +57,7 @@ For uploading files, see the [uploading files](./input.mdx#upload-files) section
[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"
@@ -89,6 +90,7 @@ For uploading files, see the [uploading files](./input.mdx#upload-files) section
[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"
diff --git a/nodejs/versioned_docs/version-stable/emulation.mdx b/nodejs/versioned_docs/version-stable/emulation.mdx
index 36124bf7f9..d18689a167 100644
--- a/nodejs/versioned_docs/version-stable/emulation.mdx
+++ b/nodejs/versioned_docs/version-stable/emulation.mdx
@@ -618,6 +618,7 @@ const context = await browser.newContext({
[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"
@@ -650,6 +651,7 @@ const context = await browser.newContext({
[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"
diff --git a/nodejs/versioned_docs/version-stable/evaluating.mdx b/nodejs/versioned_docs/version-stable/evaluating.mdx
index 6ed0e592a2..f8a969bd0d 100644
--- a/nodejs/versioned_docs/version-stable/evaluating.mdx
+++ b/nodejs/versioned_docs/version-stable/evaluating.mdx
@@ -150,6 +150,7 @@ test.beforeEach(async ({ page }) => {
[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"
@@ -182,6 +183,7 @@ test.beforeEach(async ({ page }) => {
[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"
diff --git a/nodejs/versioned_docs/version-stable/events.mdx b/nodejs/versioned_docs/version-stable/events.mdx
index 22f3b85dbb..1311ca782b 100644
--- a/nodejs/versioned_docs/version-stable/events.mdx
+++ b/nodejs/versioned_docs/version-stable/events.mdx
@@ -70,6 +70,7 @@ await page.evaluate("prompt('Enter a number:')");
[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"
@@ -102,6 +103,7 @@ await page.evaluate("prompt('Enter a number:')");
[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"
diff --git a/nodejs/versioned_docs/version-stable/extensibility.mdx b/nodejs/versioned_docs/version-stable/extensibility.mdx
index 91bc9af60b..9ed97fa3d1 100644
--- a/nodejs/versioned_docs/version-stable/extensibility.mdx
+++ b/nodejs/versioned_docs/version-stable/extensibility.mdx
@@ -77,6 +77,7 @@ test('selector engine test', async ({ page }) => {
[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"
@@ -109,6 +110,7 @@ test('selector engine test', async ({ page }) => {
[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"
diff --git a/nodejs/versioned_docs/version-stable/frames.mdx b/nodejs/versioned_docs/version-stable/frames.mdx
index 9ccad48c16..42c78b7b86 100644
--- a/nodejs/versioned_docs/version-stable/frames.mdx
+++ b/nodejs/versioned_docs/version-stable/frames.mdx
@@ -46,6 +46,7 @@ await frame.fill('#username-input', 'John');
[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"
@@ -78,6 +79,7 @@ await frame.fill('#username-input', 'John');
[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"
diff --git a/nodejs/versioned_docs/version-stable/getting-started-cli.mdx b/nodejs/versioned_docs/version-stable/getting-started-cli.mdx
index 0896a54e6c..fb8c675dc3 100644
--- a/nodejs/versioned_docs/version-stable/getting-started-cli.mdx
+++ b/nodejs/versioned_docs/version-stable/getting-started-cli.mdx
@@ -320,6 +320,7 @@ This requires the [Playwright Extension](https://github.com/microsoft/playwright
[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"
@@ -352,6 +353,7 @@ This requires the [Playwright Extension](https://github.com/microsoft/playwright
[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"
diff --git a/nodejs/versioned_docs/version-stable/getting-started-mcp.mdx b/nodejs/versioned_docs/version-stable/getting-started-mcp.mdx
index 67b32c0d35..5d44cbf9c7 100644
--- a/nodejs/versioned_docs/version-stable/getting-started-mcp.mdx
+++ b/nodejs/versioned_docs/version-stable/getting-started-mcp.mdx
@@ -238,6 +238,7 @@ Then point your MCP client to the HTTP endpoint:
[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"
@@ -270,6 +271,7 @@ Then point your MCP client to the HTTP endpoint:
[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"
diff --git a/nodejs/versioned_docs/version-stable/getting-started-vscode.mdx b/nodejs/versioned_docs/version-stable/getting-started-vscode.mdx
index 748565b2ce..0db9b1d691 100644
--- a/nodejs/versioned_docs/version-stable/getting-started-vscode.mdx
+++ b/nodejs/versioned_docs/version-stable/getting-started-vscode.mdx
@@ -156,6 +156,7 @@ If you have multiple `playwright.config.ts` files, you can switch between them u
[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"
@@ -188,6 +189,7 @@ If you have multiple `playwright.config.ts` files, you can switch between them u
[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"
diff --git a/nodejs/versioned_docs/version-stable/handles.mdx b/nodejs/versioned_docs/version-stable/handles.mdx
index 509865f5d8..e376aae525 100644
--- a/nodejs/versioned_docs/version-stable/handles.mdx
+++ b/nodejs/versioned_docs/version-stable/handles.mdx
@@ -130,6 +130,7 @@ await locator.click();
[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"
@@ -162,6 +163,7 @@ await locator.click();
[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"
diff --git a/nodejs/versioned_docs/version-stable/input.mdx b/nodejs/versioned_docs/version-stable/input.mdx
index 2e9006bb32..acb7df7f56 100644
--- a/nodejs/versioned_docs/version-stable/input.mdx
+++ b/nodejs/versioned_docs/version-stable/input.mdx
@@ -277,6 +277,7 @@ await page.getByTestId('scrolling-container').evaluate(e => e.scrollTop += 100);
[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"
@@ -309,6 +310,7 @@ await page.getByTestId('scrolling-container').evaluate(e => e.scrollTop += 100);
[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"
diff --git a/nodejs/versioned_docs/version-stable/intro.mdx b/nodejs/versioned_docs/version-stable/intro.mdx
index 93ff7efafd..999c7772ca 100644
--- a/nodejs/versioned_docs/version-stable/intro.mdx
+++ b/nodejs/versioned_docs/version-stable/intro.mdx
@@ -282,6 +282,7 @@ pnpm exec playwright --version
[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"
@@ -314,6 +315,7 @@ pnpm exec playwright --version
[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"
diff --git a/nodejs/versioned_docs/version-stable/languages.mdx b/nodejs/versioned_docs/version-stable/languages.mdx
index e7fdbeb2ac..da6a803019 100644
--- a/nodejs/versioned_docs/version-stable/languages.mdx
+++ b/nodejs/versioned_docs/version-stable/languages.mdx
@@ -47,6 +47,7 @@ Playwright for .NET comes with MSTest, NUnit, xUnit, and xUnit v3 [base classes]
[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"
@@ -79,6 +80,7 @@ Playwright for .NET comes with MSTest, NUnit, xUnit, and xUnit v3 [base classes]
[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"
diff --git a/nodejs/versioned_docs/version-stable/library.mdx b/nodejs/versioned_docs/version-stable/library.mdx
index 782140966b..726c0997b5 100644
--- a/nodejs/versioned_docs/version-stable/library.mdx
+++ b/nodejs/versioned_docs/version-stable/library.mdx
@@ -434,6 +434,7 @@ let page: import('playwright').Page;
[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"
@@ -466,6 +467,7 @@ let page: import('playwright').Page;
[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"
diff --git a/nodejs/versioned_docs/version-stable/locators.mdx b/nodejs/versioned_docs/version-stable/locators.mdx
index ef24eb6d5e..5b1f89133e 100644
--- a/nodejs/versioned_docs/version-stable/locators.mdx
+++ b/nodejs/versioned_docs/version-stable/locators.mdx
@@ -928,6 +928,7 @@ For less commonly used locators, look at the [other locators](./other-locators.m
[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"
@@ -960,6 +961,7 @@ For less commonly used locators, look at the [other locators](./other-locators.m
[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"
diff --git a/nodejs/versioned_docs/version-stable/mock-browser.mdx b/nodejs/versioned_docs/version-stable/mock-browser.mdx
index e9b23f03df..f0c1e021b4 100644
--- a/nodejs/versioned_docs/version-stable/mock-browser.mdx
+++ b/nodejs/versioned_docs/version-stable/mock-browser.mdx
@@ -177,6 +177,7 @@ test('update battery status (no golden)', async ({ page }) => {
[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"
@@ -209,6 +210,7 @@ test('update battery status (no golden)', async ({ page }) => {
[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"
diff --git a/nodejs/versioned_docs/version-stable/mock.mdx b/nodejs/versioned_docs/version-stable/mock.mdx
index 84aadd0a5e..7c8e0db639 100644
--- a/nodejs/versioned_docs/version-stable/mock.mdx
+++ b/nodejs/versioned_docs/version-stable/mock.mdx
@@ -190,6 +190,7 @@ For more details, see [WebSocketRoute].
[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"
@@ -222,6 +223,7 @@ For more details, see [WebSocketRoute].
[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"
diff --git a/nodejs/versioned_docs/version-stable/navigations.mdx b/nodejs/versioned_docs/version-stable/navigations.mdx
index 0091fa57d2..33d7353cc3 100644
--- a/nodejs/versioned_docs/version-stable/navigations.mdx
+++ b/nodejs/versioned_docs/version-stable/navigations.mdx
@@ -89,6 +89,7 @@ Playwright splits the process of showing a new document in a page into **navigat
[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"
@@ -121,6 +122,7 @@ Playwright splits the process of showing a new document in a page into **navigat
[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"
diff --git a/nodejs/versioned_docs/version-stable/network.mdx b/nodejs/versioned_docs/version-stable/network.mdx
index c4ad75e968..9af502c942 100644
--- a/nodejs/versioned_docs/version-stable/network.mdx
+++ b/nodejs/versioned_docs/version-stable/network.mdx
@@ -354,6 +354,7 @@ If you're interested in not solely using Service Workers for testing and network
[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"
@@ -386,6 +387,7 @@ If you're interested in not solely using Service Workers for testing and network
[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"
diff --git a/nodejs/versioned_docs/version-stable/other-locators.mdx b/nodejs/versioned_docs/version-stable/other-locators.mdx
index f00870cbe1..4f1a0ddf2d 100644
--- a/nodejs/versioned_docs/version-stable/other-locators.mdx
+++ b/nodejs/versioned_docs/version-stable/other-locators.mdx
@@ -417,6 +417,7 @@ For example, `css=article >> text=Hello` captures the element with the text `Hel
[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"
@@ -449,6 +450,7 @@ For example, `css=article >> text=Hello` captures the element with the text `Hel
[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"
diff --git a/nodejs/versioned_docs/version-stable/pages.mdx b/nodejs/versioned_docs/version-stable/pages.mdx
index dd32cb3b6c..9dfb7823f9 100644
--- a/nodejs/versioned_docs/version-stable/pages.mdx
+++ b/nodejs/versioned_docs/version-stable/pages.mdx
@@ -103,6 +103,7 @@ page.on('popup', async popup => {
[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"
@@ -135,6 +136,7 @@ page.on('popup', async popup => {
[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"
diff --git a/nodejs/versioned_docs/version-stable/pom.mdx b/nodejs/versioned_docs/version-stable/pom.mdx
index 1ea2dc8144..33b1964d30 100644
--- a/nodejs/versioned_docs/version-stable/pom.mdx
+++ b/nodejs/versioned_docs/version-stable/pom.mdx
@@ -179,6 +179,7 @@ await expect(playwrightDev.tocList).toHaveText([
[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"
@@ -211,6 +212,7 @@ await expect(playwrightDev.tocList).toHaveText([
[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"
diff --git a/nodejs/versioned_docs/version-stable/protractor.mdx b/nodejs/versioned_docs/version-stable/protractor.mdx
index ab7d9bd140..fbb4355519 100644
--- a/nodejs/versioned_docs/version-stable/protractor.mdx
+++ b/nodejs/versioned_docs/version-stable/protractor.mdx
@@ -179,6 +179,7 @@ Learn more about Playwright Test runner:
[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"
@@ -211,6 +212,7 @@ Learn more about Playwright Test runner:
[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"
diff --git a/nodejs/versioned_docs/version-stable/puppeteer.mdx b/nodejs/versioned_docs/version-stable/puppeteer.mdx
index de630d0835..a477ee1fb8 100644
--- a/nodejs/versioned_docs/version-stable/puppeteer.mdx
+++ b/nodejs/versioned_docs/version-stable/puppeteer.mdx
@@ -184,6 +184,7 @@ Learn more about Playwright Test runner:
[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"
@@ -216,6 +217,7 @@ Learn more about Playwright Test runner:
[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"
diff --git a/nodejs/versioned_docs/version-stable/release-notes.mdx b/nodejs/versioned_docs/version-stable/release-notes.mdx
index 67ee1ffec0..1caae8d65f 100644
--- a/nodejs/versioned_docs/version-stable/release-notes.mdx
+++ b/nodejs/versioned_docs/version-stable/release-notes.mdx
@@ -9,6 +9,71 @@ import HTMLCard from '@site/src/components/HTMLCard';
import LiteYouTube from '@site/src/components/LiteYouTube';
+## Version 1.61
+
+### 🔑 WebAuthn passkeys
+
+New [Credentials] virtual authenticator, available via [browserContext.credentials](/api/class-browsercontext.mdx#browser-context-credentials), lets tests register passkeys and answer `navigator.credentials.create()` / `navigator.credentials.get()` ceremonies in the page — no real hardware key required, works in all browsers:
+
+```js
+const context = await browser.newContext();
+
+// Seed a passkey your backend provisioned for a test user.
+await context.credentials.create('example.com', {
+ id: credentialId,
+ userHandle,
+ privateKey,
+ publicKey,
+});
+await context.credentials.install();
+
+const page = await context.newPage();
+await page.goto('https://example.com/login');
+// The page's navigator.credentials.get() is answered with the seeded passkey.
+```
+
+You can also let the app register a passkey once in a setup test, read it back with [credentials.get()](/api/class-credentials.mdx#credentials-get), and seed it into later tests — see [Credentials] for details.
+
+### 🗃️ Web Storage
+
+New [WebStorage] API, available via [page.localStorage](/api/class-page.mdx#page-local-storage) and [page.sessionStorage](/api/class-page.mdx#page-session-storage), reads and writes the page's storage for the current origin:
+
+```js
+await page.localStorage.setItem('token', 'abc');
+const token = await page.localStorage.getItem('token');
+const items = await page.sessionStorage.items();
+```
+
+### New APIs
+
+#### Network
+- [apiResponse.securityDetails()](/api/class-apiresponse.mdx#api-response-security-details) and [apiResponse.serverAddr()](/api/class-apiresponse.mdx#api-response-server-addr) mirror the browser-side [response.securityDetails()](/api/class-response.mdx#response-security-details) and [response.serverAddr()](/api/class-response.mdx#response-server-addr).
+
+#### Browser and Screencast
+- New option `artifactsDir` in [browserType.connectOverCDP()](/api/class-browsertype.mdx#browser-type-connect-over-cdp) controls where artifacts such as traces and downloads are stored when attached to an existing browser.
+- New option `cursor` in [screencast.showActions()](/api/class-screencast.mdx#screencast-show-actions) controls the cursor decoration rendered for pointer actions.
+- The `onFrame` callback in [screencast.start()](/api/class-screencast.mdx#screencast-start) now receives a `timestamp` of when the frame was presented by the browser.
+
+#### Test runner
+- The [testOptions.video](/api/class-testoptions.mdx#test-options-video) option now supports the same set of modes as `trace`: new `'on-all-retries'`, `'retain-on-first-failure'` and `'retain-on-failure-and-retries'` values. See the [video modes table](./test-use-options.mdx#video-modes) for which runs are recorded and kept in each mode.
+- Supported `expect.soft.poll(...)`.
+- New [fullConfig.argv](/api/class-fullconfig.mdx#full-config-argv) — a snapshot of `process.argv` from the runner process, handy for reading custom arguments passed after the `--` separator.
+- New [fullConfig.failOnFlakyTests](/api/class-fullconfig.mdx#full-config-fail-on-flaky-tests) mirrors the config option, so reporters can explain why a flaky run failed.
+- [testInfo.errors](/api/class-testinfo.mdx#test-info-errors) now lists each sub-error of an `AggregateError` as a separate entry.
+- New `-G` command line shorthand for `--grep-invert`.
+
+### 🛠️ Other improvements
+- Playwright now supports Ubuntu 26.04.
+
+### Browser Versions
+- Chromium 149.0.7827.55
+- Mozilla Firefox 151.0
+- WebKit 26.5
+
+This version was also tested against the following stable channels:
+- Google Chrome 149
+- Microsoft Edge 149
+
## Version 1.60
### 🌐 HAR recording on Tracing
@@ -365,6 +430,7 @@ await using page = await context.newPage();
### Breaking Changes ⚠️
- Removed macOS 14 support for WebKit. We recommend upgrading your macOS version, or keeping an older Playwright version.
- Removed `@playwright/experimental-ct-svelte` package.
+- `junit` test reporter now differentiates between types of errors, so some of the previous ``s are now reported as ``s.
### Browser Versions
- Chromium 147.0.7727.15
@@ -3547,6 +3613,7 @@ This version of Playwright was also tested against the following stable channels
[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"
@@ -3579,6 +3646,7 @@ This version of Playwright was also tested against the following stable channels
[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"
diff --git a/nodejs/versioned_docs/version-stable/running-tests.mdx b/nodejs/versioned_docs/version-stable/running-tests.mdx
index d74a38f338..5625ba72db 100644
--- a/nodejs/versioned_docs/version-stable/running-tests.mdx
+++ b/nodejs/versioned_docs/version-stable/running-tests.mdx
@@ -95,6 +95,12 @@ To run only the tests that failed in the last test run, first run your tests and
npx playwright test --last-failed
```
+Playwright stores the list of failed tests from the previous run in `/.last-run.json` (see [testConfig.outputDir](./test-configuration.mdx)). To use a different file path, pass `--last-failed-file=` or set `PLAYWRIGHT_LAST_RUN_OUTPUT_FILE`.
+
+```bash
+npx playwright test --last-failed --last-failed-file=.cache/last-run-shard-1.json
+```
+
### Run tests in VS Code
Tests can be run right from VS Code using the [VS Code extension](https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright). Once installed you can simply click the green triangle next to the test you want to run or run all tests from the testing sidebar. Check out our [Getting Started with VS Code](./getting-started-vscode.mdx) guide for more details.
@@ -184,6 +190,7 @@ You can filter and search for tests as well as click on each test to see the tes
[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"
@@ -216,6 +223,7 @@ You can filter and search for tests as well as click on each test to see the tes
[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"
diff --git a/nodejs/versioned_docs/version-stable/screenshots.mdx b/nodejs/versioned_docs/version-stable/screenshots.mdx
index eb0e4840e1..f4e02b934f 100644
--- a/nodejs/versioned_docs/version-stable/screenshots.mdx
+++ b/nodejs/versioned_docs/version-stable/screenshots.mdx
@@ -54,6 +54,7 @@ await page.locator('.header').screenshot({ path: 'screenshot.png' });
[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"
@@ -86,6 +87,7 @@ await page.locator('.header').screenshot({ path: 'screenshot.png' });
[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"
diff --git a/nodejs/versioned_docs/version-stable/selenium-grid.mdx b/nodejs/versioned_docs/version-stable/selenium-grid.mdx
index 2782a8c2eb..d42d3b5393 100644
--- a/nodejs/versioned_docs/version-stable/selenium-grid.mdx
+++ b/nodejs/versioned_docs/version-stable/selenium-grid.mdx
@@ -136,6 +136,7 @@ This means that Selenium 3 is supported in a best-effort manner, where Playwrigh
[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"
@@ -168,6 +169,7 @@ This means that Selenium 3 is supported in a best-effort manner, where Playwrigh
[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"
diff --git a/nodejs/versioned_docs/version-stable/service-workers.mdx b/nodejs/versioned_docs/version-stable/service-workers.mdx
index 07dc916dc5..621cf92425 100644
--- a/nodejs/versioned_docs/version-stable/service-workers.mdx
+++ b/nodejs/versioned_docs/version-stable/service-workers.mdx
@@ -142,6 +142,7 @@ Requests for updated Service Worker main script code currently cannot be routed
[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"
@@ -174,6 +175,7 @@ Requests for updated Service Worker main script code currently cannot be routed
[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"
diff --git a/nodejs/versioned_docs/version-stable/test-agents.mdx b/nodejs/versioned_docs/version-stable/test-agents.mdx
index 9fbf5da0d6..72d9c6b3de 100644
--- a/nodejs/versioned_docs/version-stable/test-agents.mdx
+++ b/nodejs/versioned_docs/version-stable/test-agents.mdx
@@ -31,6 +31,7 @@ Start with adding Playwright Test Agent definitions to your project using the `i
values={[
{label: 'VS Code', value: 'vscode'},
{label: 'Claude Code', value: 'claude'},
+ {label: 'Codex', value: 'codex'},
{label: 'OpenCode', value: 'opencode'}
]
}>
@@ -47,6 +48,13 @@ npx playwright init-agents --loop=vscode
npx playwright init-agents --loop=claude
```
+
+
+
+```bash
+npx playwright init-agents --loop=codex
+```
+
@@ -266,6 +274,7 @@ Seed tests provide a ready-to-use `page` context to bootstrap execution.
[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"
@@ -298,6 +307,7 @@ Seed tests provide a ready-to-use `page` context to bootstrap execution.
[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"
diff --git a/nodejs/versioned_docs/version-stable/test-annotations.mdx b/nodejs/versioned_docs/version-stable/test-annotations.mdx
index 91bfc3e6c2..8b1d0effb8 100644
--- a/nodejs/versioned_docs/version-stable/test-annotations.mdx
+++ b/nodejs/versioned_docs/version-stable/test-annotations.mdx
@@ -330,6 +330,7 @@ test('example test', async ({ page, browser }) => {
[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"
@@ -362,6 +363,7 @@ test('example test', async ({ page, browser }) => {
[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"
diff --git a/nodejs/versioned_docs/version-stable/test-assertions.mdx b/nodejs/versioned_docs/version-stable/test-assertions.mdx
index 43ff0f9c57..679c8abae3 100644
--- a/nodejs/versioned_docs/version-stable/test-assertions.mdx
+++ b/nodejs/versioned_docs/version-stable/test-assertions.mdx
@@ -230,18 +230,25 @@ await expect.poll(async () => {
}).toBe(200);
```
-You can combine `expect.configure({ soft: true })` with expect.poll to perform soft assertions in polling logic.
+You can combine `expect.soft` with `expect.poll` to perform soft assertions in polling logic. This allows the test to continue even if the assertion inside poll fails.
+
+```js
+await expect.soft.poll(async () => {
+ const response = await page.request.get('https://api.example.com');
+ return response.status();
+}).toBe(200);
+```
+
+`expect.configure({ soft: true })` also chains with `expect.poll` and is useful when you want to reuse a configured instance.
```js
const softExpect = expect.configure({ soft: true });
await softExpect.poll(async () => {
const response = await page.request.get('https://api.example.com');
return response.status();
-}, {}).toBe(200);
+}).toBe(200);
```
-This allows the test to continue even if the assertion inside poll fails.
-
## expect.toPass
You can retry blocks of code until they are passing successfully.
@@ -373,6 +380,7 @@ test('passes', async ({ database }) => {
[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"
@@ -405,6 +413,7 @@ test('passes', async ({ database }) => {
[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"
diff --git a/nodejs/versioned_docs/version-stable/test-cli.mdx b/nodejs/versioned_docs/version-stable/test-cli.mdx
index c15c943373..3b2782f227 100644
--- a/nodejs/versioned_docs/version-stable/test-cli.mdx
+++ b/nodejs/versioned_docs/version-stable/test-cli.mdx
@@ -89,11 +89,12 @@ npx playwright test --ui
| `--fully-parallel` | Run all tests in parallel (default: false). |
| `--global-timeout ` | Maximum time this test suite can run in milliseconds (default: unlimited). |
| `-g ` or `--grep ` | Only run tests matching this regular expression (default: ".*"). |
-| `--grep-invert ` | Only run tests that do not match this regular expression. |
+| `-G ` or `--grep-invert ` | Only run tests that do not match this regular expression. |
| `--headed` | Run tests in headed browsers (default: headless). |
| `--ignore-snapshots` | Ignore screenshot and snapshot expectations. |
| `-j ` or `--workers ` | Number of concurrent workers or percentage of logical CPU cores, use 1 to run in a single worker (default: 50%). |
| `--last-failed` | Only re-run the failures. |
+| `--last-failed-file ` | Override the default last-run JSON path for `--last-failed` (default: `/.last-run.json`). Same as `PLAYWRIGHT_LAST_RUN_OUTPUT_FILE` environment variable. |
| `--list` | Collect all the tests and report them, but do not run. |
| `--max-failures ` or `-x` | Stop after the first `N` failures. Passing `-x` stops after the first failure. |
| `--no-deps` | Do not run project dependencies. |
@@ -342,6 +343,7 @@ npx playwright clear-cache
[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"
@@ -374,6 +376,7 @@ npx playwright clear-cache
[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"
diff --git a/nodejs/versioned_docs/version-stable/test-components.mdx b/nodejs/versioned_docs/version-stable/test-components.mdx
index dc9c1f6922..a0df80c6a9 100644
--- a/nodejs/versioned_docs/version-stable/test-components.mdx
+++ b/nodejs/versioned_docs/version-stable/test-components.mdx
@@ -793,6 +793,7 @@ Accessing a component's internal methods or its instance within test code is nei
[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"
@@ -825,6 +826,7 @@ Accessing a component's internal methods or its instance within test code is nei
[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"
diff --git a/nodejs/versioned_docs/version-stable/test-configuration.mdx b/nodejs/versioned_docs/version-stable/test-configuration.mdx
index 1ee6d9899a..f706c70785 100644
--- a/nodejs/versioned_docs/version-stable/test-configuration.mdx
+++ b/nodejs/versioned_docs/version-stable/test-configuration.mdx
@@ -166,6 +166,7 @@ export default defineConfig({
[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"
@@ -198,6 +199,7 @@ export default defineConfig({
[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"
diff --git a/nodejs/versioned_docs/version-stable/test-fixtures.mdx b/nodejs/versioned_docs/version-stable/test-fixtures.mdx
index b1e73cfee4..f2babbe513 100644
--- a/nodejs/versioned_docs/version-stable/test-fixtures.mdx
+++ b/nodejs/versioned_docs/version-stable/test-fixtures.mdx
@@ -869,6 +869,7 @@ Note that the fixtures will still run once per [worker process](./test-parallel.
[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"
@@ -901,6 +902,7 @@ Note that the fixtures will still run once per [worker process](./test-parallel.
[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"
diff --git a/nodejs/versioned_docs/version-stable/test-global-setup-teardown.mdx b/nodejs/versioned_docs/version-stable/test-global-setup-teardown.mdx
index fef86f7f8a..2736c00a8d 100644
--- a/nodejs/versioned_docs/version-stable/test-global-setup-teardown.mdx
+++ b/nodejs/versioned_docs/version-stable/test-global-setup-teardown.mdx
@@ -287,6 +287,7 @@ export default globalSetup;
[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"
@@ -319,6 +320,7 @@ export default globalSetup;
[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"
diff --git a/nodejs/versioned_docs/version-stable/test-parallel.mdx b/nodejs/versioned_docs/version-stable/test-parallel.mdx
index 6882dea254..afbf5c49f1 100644
--- a/nodejs/versioned_docs/version-stable/test-parallel.mdx
+++ b/nodejs/versioned_docs/version-stable/test-parallel.mdx
@@ -295,6 +295,7 @@ Do not define your tests directly in a helper file. This could lead to unexpecte
[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"
@@ -327,6 +328,7 @@ Do not define your tests directly in a helper file. This could lead to unexpecte
[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"
diff --git a/nodejs/versioned_docs/version-stable/test-parameterize.mdx b/nodejs/versioned_docs/version-stable/test-parameterize.mdx
index 9c52a721da..d4864e6d74 100644
--- a/nodejs/versioned_docs/version-stable/test-parameterize.mdx
+++ b/nodejs/versioned_docs/version-stable/test-parameterize.mdx
@@ -432,6 +432,7 @@ for (const record of records) {
[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"
@@ -464,6 +465,7 @@ for (const record of records) {
[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"
diff --git a/nodejs/versioned_docs/version-stable/test-projects.mdx b/nodejs/versioned_docs/version-stable/test-projects.mdx
index 415d1d4d62..5c34c17dbe 100644
--- a/nodejs/versioned_docs/version-stable/test-projects.mdx
+++ b/nodejs/versioned_docs/version-stable/test-projects.mdx
@@ -239,6 +239,7 @@ Projects can be also used to parametrize tests with your custom configuration -
[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"
@@ -271,6 +272,7 @@ Projects can be also used to parametrize tests with your custom configuration -
[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"
diff --git a/nodejs/versioned_docs/version-stable/test-reporters.mdx b/nodejs/versioned_docs/version-stable/test-reporters.mdx
index d3ed91f538..754d35773a 100644
--- a/nodejs/versioned_docs/version-stable/test-reporters.mdx
+++ b/nodejs/versioned_docs/version-stable/test-reporters.mdx
@@ -72,7 +72,7 @@ export default defineConfig({
});
```
-Here is an example output in the middle of a test run. Failures will be listed at the end.
+Here is an example output in the middle of a test run. Failures will be listed at the end by default.
```bash
npx playwright test --reporter=list
@@ -100,13 +100,25 @@ export default defineConfig({
});
```
+You can print failures inline as soon as they are available instead of waiting until the end of the run:
+
+```js title="playwright.config.ts"
+import { defineConfig } from '@playwright/test';
+
+export default defineConfig({
+ reporter: [['list', { printFailuresInline: true }]],
+});
+```
+
List report supports the following configuration options and environment variables:
| Environment Variable Name | Reporter Config Option| Description | Default
|---|---|---|---|
| `PLAYWRIGHT_LIST_PRINT_STEPS` | `printSteps` | Whether to print each step on its own line. | `false`
+| `PLAYWRIGHT_LIST_PRINT_FAILURES_INLINE` | `printFailuresInline` | Whether to print failure details immediately after a failed test instead of at the end. | `false`
| `PLAYWRIGHT_FORCE_TTY` | | Whether to produce output suitable for a live terminal. Supports `true`, `1`, `false`, `0`, `[WIDTH]`, and `[WIDTH]x[HEIGHT]`. `[WIDTH]` and `[WIDTH]x[HEIGHT]` specifies the TTY dimensions. | `true` when terminal is in TTY mode, `false` otherwise.
| `FORCE_COLOR` | | Whether to produce colored output. | `true` when terminal is in TTY mode, `false` otherwise.
+| `NO_COLOR` | | Whether to disable colored output ([no-color.org](https://no-color.org/)). Any non-empty value disables colors. | unset
### Line reporter
@@ -145,6 +157,7 @@ Line report supports the following configuration options and environment variabl
|---|---|---|---|
| `PLAYWRIGHT_FORCE_TTY` | | Whether to produce output suitable for a live terminal. Supports `true`, `1`, `false`, `0`, `[WIDTH]`, and `[WIDTH]x[HEIGHT]`. `[WIDTH]` and `[WIDTH]x[HEIGHT]` specifies the TTY dimensions. | `true` when terminal is in TTY mode, `false` otherwise.
| `FORCE_COLOR` | | Whether to produce colored output. | `true` when terminal is in TTY mode, `false` otherwise.
+| `NO_COLOR` | | Whether to disable colored output ([no-color.org](https://no-color.org/)). Any non-empty value disables colors. | unset
### Dot reporter
@@ -187,6 +200,7 @@ Dot report supports the following configuration options and environment variable
|---|---|---|---|
| `PLAYWRIGHT_FORCE_TTY` | | Whether to produce output suitable for a live terminal. Supports `true`, `1`, `false`, `0`, `[WIDTH]`, and `[WIDTH]x[HEIGHT]`. `[WIDTH]` and `[WIDTH]x[HEIGHT]` specifies the TTY dimensions. | `true` when terminal is in TTY mode, `false` otherwise.
| `FORCE_COLOR` | | Whether to produce colored output. | `true` when terminal is in TTY mode, `false` otherwise.
+| `NO_COLOR` | | Whether to disable colored output ([no-color.org](https://no-color.org/)). Any non-empty value disables colors. | unset
### HTML reporter
@@ -517,6 +531,7 @@ Here's a short list of open source reporter implementations that you can take a
[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"
@@ -549,6 +564,7 @@ Here's a short list of open source reporter implementations that you can take a
[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"
diff --git a/nodejs/versioned_docs/version-stable/test-retries.mdx b/nodejs/versioned_docs/version-stable/test-retries.mdx
index 21d087f6c7..f55f6d3399 100644
--- a/nodejs/versioned_docs/version-stable/test-retries.mdx
+++ b/nodejs/versioned_docs/version-stable/test-retries.mdx
@@ -255,6 +255,7 @@ test('runs second', async () => {
[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"
@@ -287,6 +288,7 @@ test('runs second', async () => {
[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"
diff --git a/nodejs/versioned_docs/version-stable/test-sharding.mdx b/nodejs/versioned_docs/version-stable/test-sharding.mdx
index d2f57ac01d..4174df90e6 100644
--- a/nodejs/versioned_docs/version-stable/test-sharding.mdx
+++ b/nodejs/versioned_docs/version-stable/test-sharding.mdx
@@ -222,6 +222,7 @@ Supported options:
[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"
@@ -254,6 +255,7 @@ Supported options:
[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"
diff --git a/nodejs/versioned_docs/version-stable/test-snapshots.mdx b/nodejs/versioned_docs/version-stable/test-snapshots.mdx
index 75803c1382..8e63f6617b 100644
--- a/nodejs/versioned_docs/version-stable/test-snapshots.mdx
+++ b/nodejs/versioned_docs/version-stable/test-snapshots.mdx
@@ -152,6 +152,7 @@ Snapshots are stored next to the test file, in a separate directory. For example
[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"
@@ -184,6 +185,7 @@ Snapshots are stored next to the test file, in a separate directory. For example
[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"
diff --git a/nodejs/versioned_docs/version-stable/test-timeouts.mdx b/nodejs/versioned_docs/version-stable/test-timeouts.mdx
index 7cc3820729..60c947559a 100644
--- a/nodejs/versioned_docs/version-stable/test-timeouts.mdx
+++ b/nodejs/versioned_docs/version-stable/test-timeouts.mdx
@@ -223,6 +223,7 @@ API reference: [test.extend()](/api/class-test.mdx#test-extend).
[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"
@@ -255,6 +256,7 @@ API reference: [test.extend()](/api/class-test.mdx#test-extend).
[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"
diff --git a/nodejs/versioned_docs/version-stable/test-typescript.mdx b/nodejs/versioned_docs/version-stable/test-typescript.mdx
index 9a01c508ac..868588fd30 100644
--- a/nodejs/versioned_docs/version-stable/test-typescript.mdx
+++ b/nodejs/versioned_docs/version-stable/test-typescript.mdx
@@ -151,6 +151,7 @@ Then `npm run test` will build the tests and run them.
[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"
@@ -183,6 +184,7 @@ Then `npm run test` will build the tests and run them.
[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"
diff --git a/nodejs/versioned_docs/version-stable/test-ui-mode.mdx b/nodejs/versioned_docs/version-stable/test-ui-mode.mdx
index 6652fdfabe..4e8862c49e 100644
--- a/nodejs/versioned_docs/version-stable/test-ui-mode.mdx
+++ b/nodejs/versioned_docs/version-stable/test-ui-mode.mdx
@@ -145,6 +145,7 @@ Be aware that when specifying the `--ui-host=0.0.0.0` flag, UI Mode with your tr
[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"
@@ -177,6 +178,7 @@ Be aware that when specifying the `--ui-host=0.0.0.0` flag, UI Mode with your tr
[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"
diff --git a/nodejs/versioned_docs/version-stable/test-use-options.mdx b/nodejs/versioned_docs/version-stable/test-use-options.mdx
index e32f311b87..0344a83296 100644
--- a/nodejs/versioned_docs/version-stable/test-use-options.mdx
+++ b/nodejs/versioned_docs/version-stable/test-use-options.mdx
@@ -153,6 +153,58 @@ export default defineConfig({
| [testOptions.trace](/api/class-testoptions.mdx#test-options-trace) | Playwright can produce test traces while running the tests. Later on, you can view the trace and get detailed information about Playwright execution by opening [Trace Viewer](./trace-viewer.mdx). Options include: `'off'`, `'on'`, `'retain-on-failure'` and `'on-first-retry'` |
| [testOptions.video](/api/class-testoptions.mdx#test-options-video) | Playwright can record [videos](./videos.mdx) for your tests. Options include: `'off'`, `'on'`, `'retain-on-failure'` and `'on-first-retry'` |
+#### Trace modes
+
+The `trace` option supports several modes that differ in **which runs are recorded** and **which recordings are kept** after the test finishes. The initial run of a test is the "first run"; subsequent runs caused by [retries](./test-retries.mdx) are "retries".
+
+| Mode | Records a trace on | Keeps the trace when |
+| :- | :- | :- |
+| `'off'` | never | — |
+| `'on'` | every run | always |
+| `'retain-on-failure'` | every run | that run failed |
+| `'retain-on-first-failure'` | first run only | the first run failed |
+| `'retain-on-failure-and-retries'` | every run | that run failed, or it is a retry |
+| `'on-first-retry'` | first retry only | always |
+| `'on-all-retries'` | every retry | always |
+
+The following table shows which traces are kept in a few common scenarios, assuming `retries: 2` is configured:
+
+| Mode | Passes on first run | Fails, then passes on retry | Fails on every run |
+| :- | :- | :- | :- |
+| `'off'` | — | — | — |
+| `'on'` | first run | first run + retry | all three runs |
+| `'retain-on-failure'` | — | first run | all three runs |
+| `'retain-on-first-failure'` | — | first run | first run |
+| `'retain-on-failure-and-retries'` | — | first run + retry | all three runs |
+| `'on-first-retry'` | — | first retry | first retry |
+| `'on-all-retries'` | — | first retry | both retries |
+
+#### Video modes
+
+The `video` option supports the same set of modes as `trace`, and they record and keep recordings using the same rules.
+
+| Mode | Records a video on | Keeps the video when |
+| :- | :- | :- |
+| `'off'` | never | — |
+| `'on'` | every run | always |
+| `'retain-on-failure'` | every run | that run failed |
+| `'retain-on-first-failure'` | first run only | the first run failed |
+| `'retain-on-failure-and-retries'` | every run | that run failed, or it is a retry |
+| `'on-first-retry'` | first retry only | always |
+| `'on-all-retries'` | every retry | always |
+
+The following table shows which videos are kept in a few common scenarios, assuming `retries: 2` is configured:
+
+| Mode | Passes on first run | Fails, then passes on retry | Fails on every run |
+| :- | :- | :- | :- |
+| `'off'` | — | — | — |
+| `'on'` | first run | first run + retry | all three runs |
+| `'retain-on-failure'` | — | first run | all three runs |
+| `'retain-on-first-failure'` | — | first run | first run |
+| `'retain-on-failure-and-retries'` | — | first run + retry | all three runs |
+| `'on-first-retry'` | — | first retry | first retry |
+| `'on-all-retries'` | — | first retry | both retries |
+
### Other Options
```js title="playwright.config.ts"
@@ -360,6 +412,7 @@ test('no base url', async ({ page }) => {
[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"
@@ -392,6 +445,7 @@ test('no base url', async ({ page }) => {
[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"
diff --git a/nodejs/versioned_docs/version-stable/test-webserver.mdx b/nodejs/versioned_docs/version-stable/test-webserver.mdx
index 87c1a9d4c6..e930621834 100644
--- a/nodejs/versioned_docs/version-stable/test-webserver.mdx
+++ b/nodejs/versioned_docs/version-stable/test-webserver.mdx
@@ -144,6 +144,7 @@ export default defineConfig({
[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"
@@ -176,6 +177,7 @@ export default defineConfig({
[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"
diff --git a/nodejs/versioned_docs/version-stable/testing-library.mdx b/nodejs/versioned_docs/version-stable/testing-library.mdx
index fd25d5e692..95f586245a 100644
--- a/nodejs/versioned_docs/version-stable/testing-library.mdx
+++ b/nodejs/versioned_docs/version-stable/testing-library.mdx
@@ -167,6 +167,7 @@ Learn more about Playwright Test runner:
[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"
@@ -199,6 +200,7 @@ Learn more about Playwright Test runner:
[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"
diff --git a/nodejs/versioned_docs/version-stable/touch-events.mdx b/nodejs/versioned_docs/version-stable/touch-events.mdx
index 1916fbfdf4..bb6280a402 100644
--- a/nodejs/versioned_docs/version-stable/touch-events.mdx
+++ b/nodejs/versioned_docs/version-stable/touch-events.mdx
@@ -155,6 +155,7 @@ test(`pinch in gesture to zoom out the map`, async ({ page }) => {
[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"
@@ -187,6 +188,7 @@ test(`pinch in gesture to zoom out the map`, async ({ page }) => {
[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"
diff --git a/nodejs/versioned_docs/version-stable/trace-viewer-intro.mdx b/nodejs/versioned_docs/version-stable/trace-viewer-intro.mdx
index 223cde781c..1de729f8ae 100644
--- a/nodejs/versioned_docs/version-stable/trace-viewer-intro.mdx
+++ b/nodejs/versioned_docs/version-stable/trace-viewer-intro.mdx
@@ -87,6 +87,7 @@ To learn more about traces, check out our detailed guide on [Trace Viewer](/trac
[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"
@@ -119,6 +120,7 @@ To learn more about traces, check out our detailed guide on [Trace Viewer](/trac
[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"
diff --git a/nodejs/versioned_docs/version-stable/trace-viewer.mdx b/nodejs/versioned_docs/version-stable/trace-viewer.mdx
index 2f13aeea44..8884cf69b5 100644
--- a/nodejs/versioned_docs/version-stable/trace-viewer.mdx
+++ b/nodejs/versioned_docs/version-stable/trace-viewer.mdx
@@ -224,6 +224,7 @@ The "Attachments" tab allows you to explore attachments. If you're doing [visual
[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"
@@ -256,6 +257,7 @@ The "Attachments" tab allows you to explore attachments. If you're doing [visual
[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"
diff --git a/nodejs/versioned_docs/version-stable/videos.mdx b/nodejs/versioned_docs/version-stable/videos.mdx
index 461f33e95f..a100a58f25 100644
--- a/nodejs/versioned_docs/version-stable/videos.mdx
+++ b/nodejs/versioned_docs/version-stable/videos.mdx
@@ -106,6 +106,7 @@ Note that the video is only available after the page or browser context is close
[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"
@@ -138,6 +139,7 @@ Note that the video is only available after the page or browser context is close
[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"
diff --git a/nodejs/versioned_docs/version-stable/webview2.mdx b/nodejs/versioned_docs/version-stable/webview2.mdx
index 1d0e876ceb..6b369bbf01 100644
--- a/nodejs/versioned_docs/version-stable/webview2.mdx
+++ b/nodejs/versioned_docs/version-stable/webview2.mdx
@@ -128,6 +128,7 @@ For debugging tests, see the Playwright [Debugging guide](./debug).
[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"
@@ -160,6 +161,7 @@ For debugging tests, see the Playwright [Debugging guide](./debug).
[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"
diff --git a/nodejs/versioned_docs/version-stable/writing-tests.mdx b/nodejs/versioned_docs/version-stable/writing-tests.mdx
index e10f677bbc..d7c472658a 100644
--- a/nodejs/versioned_docs/version-stable/writing-tests.mdx
+++ b/nodejs/versioned_docs/version-stable/writing-tests.mdx
@@ -183,6 +183,7 @@ test.describe('navigation', () => {
[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"
@@ -215,6 +216,7 @@ test.describe('navigation', () => {
[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"
diff --git a/python/versioned_docs/version-stable/actionability.mdx b/python/versioned_docs/version-stable/actionability.mdx
index 1884b0ff9a..c7c4906604 100644
--- a/python/versioned_docs/version-stable/actionability.mdx
+++ b/python/versioned_docs/version-stable/actionability.mdx
@@ -133,6 +133,7 @@ For example, consider a scenario where Playwright will click `Sign Up` button re
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -162,6 +163,7 @@ For example, consider a scenario where Playwright will click `Sign Up` button re
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api-testing.mdx b/python/versioned_docs/version-stable/api-testing.mdx
index 562a8d48ee..5b2e281a2f 100644
--- a/python/versioned_docs/version-stable/api-testing.mdx
+++ b/python/versioned_docs/version-stable/api-testing.mdx
@@ -293,6 +293,7 @@ context = browser.new_context(storage_state=state)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -322,6 +323,7 @@ context = browser.new_context(storage_state=state)
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-apirequest.mdx b/python/versioned_docs/version-stable/api/class-apirequest.mdx
index 6dd4050286..f7b6a5bb46 100644
--- a/python/versioned_docs/version-stable/api/class-apirequest.mdx
+++ b/python/versioned_docs/version-stable/api/class-apirequest.mdx
@@ -177,6 +177,7 @@ api_request.new_context(**kwargs)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -206,6 +207,7 @@ api_request.new_context(**kwargs)
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-apirequestcontext.mdx b/python/versioned_docs/version-stable/api/class-apirequestcontext.mdx
index 8d59cb93d0..aec3be55dc 100644
--- a/python/versioned_docs/version-stable/api/class-apirequestcontext.mdx
+++ b/python/versioned_docs/version-stable/api/class-apirequestcontext.mdx
@@ -745,6 +745,7 @@ api_request_context.tracing
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -774,6 +775,7 @@ api_request_context.tracing
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-apiresponse.mdx b/python/versioned_docs/version-stable/api/class-apiresponse.mdx
index 6e1573d64a..62a7d93752 100644
--- a/python/versioned_docs/version-stable/api/class-apiresponse.mdx
+++ b/python/versioned_docs/version-stable/api/class-apiresponse.mdx
@@ -116,6 +116,60 @@ api_response.json()
**Returns**
- [Dict]#
+---
+
+### security_details {/* #api-response-security-details */}
+
+Added in: v1.61apiResponse.security_details
+
+Returns SSL and other security information. Resolves to `null` for non-HTTPS responses. For redirected requests, returns the information for the last request in the redirect chain.
+
+**Usage**
+
+```python
+api_response.security_details()
+```
+
+**Returns**
+- [NoneType] | [Dict]#
+ - `issuer` [str] *(optional)*
+
+ Common Name component of the Issuer field. from the certificate. This should only be used for informational purposes. Optional.
+ - `protocol` [str] *(optional)*
+
+ The specific TLS protocol used. (e.g. `TLS 1.3`). Optional.
+ - `subjectName` [str] *(optional)*
+
+ Common Name component of the Subject field from the certificate. This should only be used for informational purposes. Optional.
+ - `validFrom` [float] *(optional)*
+
+ Unix timestamp (in seconds) specifying when this cert becomes valid. Optional.
+ - `validTo` [float] *(optional)*
+
+ Unix timestamp (in seconds) specifying when this cert becomes invalid. Optional.
+
+---
+
+### server_addr {/* #api-response-server-addr */}
+
+Added in: v1.61apiResponse.server_addr
+
+Returns the IP address and port of the server. Resolves to `null` if the server address is not available. For redirected requests, returns the information for the last request in the redirect chain.
+
+**Usage**
+
+```python
+api_response.server_addr()
+```
+
+**Returns**
+- [NoneType] | [Dict]#
+ - `ipAddress` [str]
+
+ IPv4 or IPV6 address of the server.
+ - `port` [int]
+
+
---
### text {/* #api-response-text */}
@@ -254,6 +308,7 @@ api_response.url
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -283,6 +338,7 @@ api_response.url
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-apiresponseassertions.mdx b/python/versioned_docs/version-stable/api/class-apiresponseassertions.mdx
index c7c656e29d..0c8d075959 100644
--- a/python/versioned_docs/version-stable/api/class-apiresponseassertions.mdx
+++ b/python/versioned_docs/version-stable/api/class-apiresponseassertions.mdx
@@ -118,6 +118,7 @@ await expect(response).to_be_ok()
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -147,6 +148,7 @@ await expect(response).to_be_ok()
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-browser.mdx b/python/versioned_docs/version-stable/api/class-browser.mdx
index 441d3bcf10..01fdec2950 100644
--- a/python/versioned_docs/version-stable/api/class-browser.mdx
+++ b/python/versioned_docs/version-stable/api/class-browser.mdx
@@ -945,6 +945,7 @@ browser.on("disconnected", handler)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -974,6 +975,7 @@ browser.on("disconnected", handler)
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-browsercontext.mdx b/python/versioned_docs/version-stable/api/class-browsercontext.mdx
index 95b8e58703..c4c8679d94 100644
--- a/python/versioned_docs/version-stable/api/class-browsercontext.mdx
+++ b/python/versioned_docs/version-stable/api/class-browsercontext.mdx
@@ -1445,6 +1445,23 @@ browser_context.clock
---
+### credentials {/* #browser-context-credentials */}
+
+Added in: v1.61browserContext.credentials
+
+Virtual WebAuthn authenticator for this context. Lets tests seed credentials and intercept `navigator.credentials.create()` / `navigator.credentials.get()` ceremonies.
+
+**Usage**
+
+```python
+browser_context.credentials
+```
+
+**Type**
+- [Credentials]
+
+---
+
### debugger {/* #browser-context-debugger */}
Added in: v1.59browserContext.debugger
@@ -1920,7 +1937,7 @@ browser_context.on("weberror", handler)
Added in: v1.11browserContext.on("backgroundpage")
-:::warning Deprecated
+:::warning[Deprecated]
Background pages have been removed from Chromium together with Manifest V2 extensions.
@@ -1944,7 +1961,7 @@ browser_context.on("backgroundpage", handler)
Added in: v1.11browserContext.background_pages
-:::warning Deprecated
+:::warning[Deprecated]
Background pages have been removed from Chromium together with Manifest V2 extensions.
@@ -1973,6 +1990,7 @@ browser_context.background_pages
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -2002,6 +2020,7 @@ browser_context.background_pages
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-browsertype.mdx b/python/versioned_docs/version-stable/api/class-browsertype.mdx
index a1dc94d763..c2913858ad 100644
--- a/python/versioned_docs/version-stable/api/class-browsertype.mdx
+++ b/python/versioned_docs/version-stable/api/class-browsertype.mdx
@@ -164,6 +164,9 @@ page = default_context.pages[0]
- `endpoint_url` [str] Added in: v1.11#
A CDP websocket endpoint or http url to connect to. For example `http://localhost:9222/` or `ws://127.0.0.1:9222/devtools/browser/387adf4c-243f-4051-a181-46798f4a46f4`.
+- `artifacts_dir` [Union]\[[str], [pathlib.Path]\] *(optional)* Added in: v1.61#
+
+ If specified, browser artifacts (such as traces and downloads) are saved into this directory.
- `headers` [Dict]\[[str], [str]\] *(optional)* Added in: v1.11#
Additional HTTP headers to be sent with connect request. Optional.
@@ -639,6 +642,7 @@ browser_type.name
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -668,6 +672,7 @@ browser_type.name
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-cdpsession.mdx b/python/versioned_docs/version-stable/api/class-cdpsession.mdx
index 74b762663a..f79e12f8ea 100644
--- a/python/versioned_docs/version-stable/api/class-cdpsession.mdx
+++ b/python/versioned_docs/version-stable/api/class-cdpsession.mdx
@@ -127,6 +127,7 @@ cdp_session.on("close", handler)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -156,6 +157,7 @@ cdp_session.on("close", handler)
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-clock.mdx b/python/versioned_docs/version-stable/api/class-clock.mdx
index 728b266883..76ff65e124 100644
--- a/python/versioned_docs/version-stable/api/class-clock.mdx
+++ b/python/versioned_docs/version-stable/api/class-clock.mdx
@@ -339,6 +339,7 @@ await page.clock.set_system_time("2020-02-02")
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -368,6 +369,7 @@ await page.clock.set_system_time("2020-02-02")
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-consolemessage.mdx b/python/versioned_docs/version-stable/api/class-consolemessage.mdx
index 20c6af204e..7ef9b5fb94 100644
--- a/python/versioned_docs/version-stable/api/class-consolemessage.mdx
+++ b/python/versioned_docs/version-stable/api/class-consolemessage.mdx
@@ -205,6 +205,7 @@ console_message.worker
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -234,6 +235,7 @@ console_message.worker
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-credentials.mdx b/python/versioned_docs/version-stable/api/class-credentials.mdx
new file mode 100644
index 0000000000..d25bc8efee
--- /dev/null
+++ b/python/versioned_docs/version-stable/api/class-credentials.mdx
@@ -0,0 +1,389 @@
+---
+id: class-credentials
+title: "Credentials"
+---
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import HTMLCard from '@site/src/components/HTMLCard';
+
+
+`Credentials` is a virtual WebAuthn authenticator scoped to a [BrowserContext]. It lets tests register passkeys and answer `navigator.credentials.create()` / `navigator.credentials.get()` ceremonies in the page, without a real authenticator or hardware security key.
+
+There are two common ways to use it:
+
+**Usage: seed a known credential**
+
+
+
+
+```py
+context = browser.new_context()
+
+# A passkey your backend already provisioned for a test user.
+context.credentials.create(
+ "example.com",
+ id=known_credential_id, # base64url
+ user_handle=known_user_handle, # base64url
+ private_key=known_private_key, # base64url PKCS#8 (DER)
+ public_key=known_public_key, # base64url SPKI (DER)
+)
+context.credentials.install()
+
+page = context.new_page()
+page.goto("https://example.com/login")
+# The page's navigator.credentials.get() is answered with the seeded passkey.
+```
+
+
+
+
+```py
+context = await browser.new_context()
+
+# A passkey your backend already provisioned for a test user.
+await context.credentials.create(
+ "example.com",
+ id=known_credential_id, # base64url
+ user_handle=known_user_handle, # base64url
+ private_key=known_private_key, # base64url PKCS#8 (DER)
+ public_key=known_public_key, # base64url SPKI (DER)
+)
+await context.credentials.install()
+
+page = await context.new_page()
+await page.goto("https://example.com/login")
+# The page's navigator.credentials.get() is answered with the seeded passkey.
+```
+
+
+
+
+**Usage: capture a passkey, then reuse it**
+
+
+
+
+```py
+# setup test: let the app register a passkey, then save it.
+context = browser.new_context()
+context.credentials.install()
+
+page = context.new_page()
+page.goto("https://example.com/register")
+page.get_by_role("button", name="Create a passkey").click()
+
+# Read back the passkey the page registered — it includes the private key.
+[credential] = context.credentials.get(rp_id="example.com")
+with open("playwright/.auth/passkey.json", "w") as f:
+ json.dump(credential, f)
+```
+
+
+
+
+```py
+# setup test: let the app register a passkey, then save it.
+context = await browser.new_context()
+await context.credentials.install()
+
+page = await context.new_page()
+await page.goto("https://example.com/register")
+await page.get_by_role("button", name="Create a passkey").click()
+
+# Read back the passkey the page registered — it includes the private key.
+[credential] = await context.credentials.get(rp_id="example.com")
+with open("playwright/.auth/passkey.json", "w") as f:
+ json.dump(credential, f)
+```
+
+
+
+
+
+
+
+```py
+# later test: seed the captured passkey so the app starts already enrolled.
+with open("playwright/.auth/passkey.json") as f:
+ credential = json.load(f)
+context = browser.new_context()
+context.credentials.create(
+ credential["rpId"],
+ id=credential["id"],
+ user_handle=credential["userHandle"],
+ private_key=credential["privateKey"],
+ public_key=credential["publicKey"],
+)
+context.credentials.install()
+
+page = context.new_page()
+page.goto("https://example.com/login")
+# navigator.credentials.get() resolves the captured passkey — already signed in.
+```
+
+
+
+
+```py
+# later test: seed the captured passkey so the app starts already enrolled.
+with open("playwright/.auth/passkey.json") as f:
+ credential = json.load(f)
+context = await browser.new_context()
+await context.credentials.create(
+ credential["rpId"],
+ id=credential["id"],
+ user_handle=credential["userHandle"],
+ private_key=credential["privateKey"],
+ public_key=credential["publicKey"],
+)
+await context.credentials.install()
+
+page = await context.new_page()
+await page.goto("https://example.com/login")
+# navigator.credentials.get() resolves the captured passkey — already signed in.
+```
+
+
+
+
+**Defaults**
+
+
+---
+
+## Methods
+
+### create {/* #credentials-create */}
+
+Added in: v1.61credentials.create
+
+Seeds a virtual WebAuthn credential and returns it.
+
+With only [rp_id](/api/class-credentials.mdx#credentials-create-option-rp-id), generates a fresh **ECDSA P-256** keypair, credential id and user handle. The seeded credential is discoverable (resident), so the page can resolve it from both username-then-passkey and usernameless passkey flows. The returned object carries the private and public keys, so it can be persisted to disk and re-seeded in a later test.
+
+To **import a known credential**, supply all four of [id](/api/class-credentials.mdx#credentials-create-option-id), [user_handle](/api/class-credentials.mdx#credentials-create-option-user-handle), [private_key](/api/class-credentials.mdx#credentials-create-option-private-key) and [public_key](/api/class-credentials.mdx#credentials-create-option-public-key) together.
+
+Call [credentials.install()](/api/class-credentials.mdx#credentials-install) before navigating to a page that uses WebAuthn.
+
+**Usage**
+
+```python
+credentials.create(rp_id)
+credentials.create(rp_id, **kwargs)
+```
+
+**Arguments**
+- `rp_id` [str]#
+
+ Relying party id (typically the site's effective domain).
+- `id` [str] *(optional)*#
+
+ Base64url-encoded credential id. Auto-generated if omitted.
+- `private_key` [str] *(optional)*#
+
+ Base64url-encoded PKCS#8 (DER) private key. Auto-generated if omitted.
+- `public_key` [str] *(optional)*#
+
+ Base64url-encoded SPKI (DER) public key. Auto-generated if omitted.
+- `user_handle` [str] *(optional)*#
+
+ Base64url-encoded user handle. Auto-generated if omitted.
+
+**Returns**
+- [Dict]#
+ - `id` [str]
+
+ Base64url-encoded credential id.
+ - `rpId` [str]
+
+ Relying party id.
+ - `userHandle` [str]
+
+ Base64url-encoded user handle.
+ - `privateKey` [str]
+
+ Base64url-encoded PKCS#8 (DER) private key.
+ - `publicKey` [str]
+
+ Base64url-encoded SPKI (DER) public key.
+
+---
+
+### delete {/* #credentials-delete */}
+
+Added in: v1.61credentials.delete
+
+Removes a credential from the authenticator by its id. Works for any credential currently held — both those seeded with [credentials.create()](/api/class-credentials.mdx#credentials-create) and those the page registered itself by calling `navigator.credentials.create()`.
+
+**Usage**
+
+```python
+credentials.delete(id)
+```
+
+**Arguments**
+- `id` [str]#
+
+ Base64url-encoded credential id.
+
+**Returns**
+- [NoneType]#
+
+---
+
+### get {/* #credentials-get */}
+
+Added in: v1.61credentials.get
+
+Returns every credential currently held by the authenticator, optionally filtered by [rp_id](/api/class-credentials.mdx#credentials-get-option-rp-id) or [id](/api/class-credentials.mdx#credentials-get-option-id). This includes both credentials seeded with [credentials.create()](/api/class-credentials.mdx#credentials-create) and credentials the page registered itself by calling `navigator.credentials.create()`.
+
+Each returned credential includes its private and public keys, so a passkey the app just registered can be saved and re-seeded into a later test with [credentials.create()](/api/class-credentials.mdx#credentials-create) — see the second example in the class overview.
+
+**Usage**
+
+```python
+credentials.get()
+credentials.get(**kwargs)
+```
+
+**Arguments**
+- `id` [str] *(optional)*#
+
+ Only return the credential with this base64url-encoded id.
+- `rp_id` [str] *(optional)*#
+
+ Only return credentials for this relying party id.
+
+**Returns**
+- [List]\[[Dict]\]#
+ - `id` [str]
+
+
+ - `rpId` [str]
+
+
+ - `userHandle` [str]
+
+
+ - `privateKey` [str]
+
+
+ - `publicKey` [str]
+
+
+---
+
+### install {/* #credentials-install */}
+
+Added in: v1.61credentials.install
+
+Installs the virtual WebAuthn authenticator into the context, overriding `navigator.credentials.create()` and `navigator.credentials.get()` in all current and future pages. Call this before the page first touches `navigator.credentials`.
+
+Required: until [credentials.install()](/api/class-credentials.mdx#credentials-install) is called, no interception is in place and the page sees the platform's native (or absent) WebAuthn behaviour. Seeding credentials with [credentials.create()](/api/class-credentials.mdx#credentials-create) without installing populates the authenticator, but the page will never see those credentials.
+
+**Usage**
+
+```python
+credentials.install()
+```
+
+**Returns**
+- [NoneType]#
+
+
+[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"
+[BrowserType]: /api/class-browsertype.mdx "BrowserType"
+[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
+[Clock]: /api/class-clock.mdx "Clock"
+[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
+[Debugger]: /api/class-debugger.mdx "Debugger"
+[Dialog]: /api/class-dialog.mdx "Dialog"
+[Download]: /api/class-download.mdx "Download"
+[ElementHandle]: /api/class-elementhandle.mdx "ElementHandle"
+[Error]: /api/class-error.mdx "Error"
+[FileChooser]: /api/class-filechooser.mdx "FileChooser"
+[FormData]: /api/class-formdata.mdx "FormData"
+[Frame]: /api/class-frame.mdx "Frame"
+[FrameLocator]: /api/class-framelocator.mdx "FrameLocator"
+[JSHandle]: /api/class-jshandle.mdx "JSHandle"
+[Keyboard]: /api/class-keyboard.mdx "Keyboard"
+[Locator]: /api/class-locator.mdx "Locator"
+[LocatorAssertions]: /api/class-locatorassertions.mdx "LocatorAssertions"
+[Mouse]: /api/class-mouse.mdx "Mouse"
+[Page]: /api/class-page.mdx "Page"
+[PageAssertions]: /api/class-pageassertions.mdx "PageAssertions"
+[Playwright]: /api/class-playwright.mdx "Playwright"
+[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"
+[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"
+[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"
+
+[Any]: https://docs.python.org/3/library/typing.html#typing.Any "Any"
+[bool]: https://docs.python.org/3/library/stdtypes.html "bool"
+[bytes]: https://docs.python.org/3/library/stdtypes.html#bytes "bytes"
+[Callable]: https://docs.python.org/3/library/typing.html#typing.Callable "Callable"
+[EventContextManager]: https://docs.python.org/3/reference/datamodel.html#context-managers "Event context manager"
+[EventEmitter]: https://pyee.readthedocs.io/en/latest/#pyee.BaseEventEmitter "EventEmitter"
+[Exception]: https://docs.python.org/3/library/exceptions.html#Exception "Exception"
+[Dict]: https://docs.python.org/3/library/typing.html#typing.Dict "Dict"
+[float]: https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex "float"
+[int]: https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex "int"
+[List]: https://docs.python.org/3/library/typing.html#typing.List "List"
+[NoneType]: https://docs.python.org/3/library/constants.html#None "None"
+[Pattern]: https://docs.python.org/3/library/re.html "Pattern"
+[URL]: https://en.wikipedia.org/wiki/URL "URL"
+[pathlib.Path]: https://realpython.com/python-pathlib/ "pathlib.Path"
+[str]: https://docs.python.org/3/library/stdtypes.html#text-sequence-type-str "str"
+[Union]: https://docs.python.org/3/library/typing.html#typing.Union "Union"
+[datetime]: https://docs.python.org/3/library/datetime.html#datetime.datetime "datetime"
+
+[all available image tags]: https://mcr.microsoft.com/en-us/product/playwright/python/about "all available image tags"
+[Microsoft Artifact Registry]: https://mcr.microsoft.com/en-us/product/playwright/python/about "Microsoft Artifact Registry"
+[Dockerfile.noble]: https://github.com/microsoft/playwright-python/blob/main/utils/docker/Dockerfile.noble "Dockerfile.noble"
diff --git a/python/versioned_docs/version-stable/api/class-debugger.mdx b/python/versioned_docs/version-stable/api/class-debugger.mdx
index 7e43790676..c46fea5ba0 100644
--- a/python/versioned_docs/version-stable/api/class-debugger.mdx
+++ b/python/versioned_docs/version-stable/api/class-debugger.mdx
@@ -156,6 +156,7 @@ debugger.on("pausedstatechanged", handler)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -185,6 +186,7 @@ debugger.on("pausedstatechanged", handler)
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-dialog.mdx b/python/versioned_docs/version-stable/api/class-dialog.mdx
index 8bc32140f2..a73b82f742 100644
--- a/python/versioned_docs/version-stable/api/class-dialog.mdx
+++ b/python/versioned_docs/version-stable/api/class-dialog.mdx
@@ -197,6 +197,7 @@ dialog.type
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -226,6 +227,7 @@ dialog.type
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-download.mdx b/python/versioned_docs/version-stable/api/class-download.mdx
index c56dfba7fb..9e217bea9e 100644
--- a/python/versioned_docs/version-stable/api/class-download.mdx
+++ b/python/versioned_docs/version-stable/api/class-download.mdx
@@ -230,6 +230,7 @@ download.url
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -259,6 +260,7 @@ download.url
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-elementhandle.mdx b/python/versioned_docs/version-stable/api/class-elementhandle.mdx
index 73012ef084..d27bdf3572 100644
--- a/python/versioned_docs/version-stable/api/class-elementhandle.mdx
+++ b/python/versioned_docs/version-stable/api/class-elementhandle.mdx
@@ -1616,7 +1616,7 @@ element_handle.text_content()
Added before v1.9elementHandle.type
-:::warning Deprecated
+:::warning[Deprecated]
In most cases, you should use [locator.fill()](/api/class-locator.mdx#locator-fill) instead. You only need to press keys one by one if there is special keyboard handling on the page - in this case use [locator.press_sequentially()](/api/class-locator.mdx#locator-press-sequentially).
@@ -1798,6 +1798,7 @@ This method does not work across navigations, use [page.wait_for_selector()](/ap
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -1827,6 +1828,7 @@ This method does not work across navigations, use [page.wait_for_selector()](/ap
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-error.mdx b/python/versioned_docs/version-stable/api/class-error.mdx
index e8de7d799b..fa96fab3b1 100644
--- a/python/versioned_docs/version-stable/api/class-error.mdx
+++ b/python/versioned_docs/version-stable/api/class-error.mdx
@@ -75,6 +75,7 @@ error.stack
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -104,6 +105,7 @@ error.stack
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-filechooser.mdx b/python/versioned_docs/version-stable/api/class-filechooser.mdx
index 56b6df8c77..02dd2e76c8 100644
--- a/python/versioned_docs/version-stable/api/class-filechooser.mdx
+++ b/python/versioned_docs/version-stable/api/class-filechooser.mdx
@@ -147,6 +147,7 @@ file_chooser.page
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -176,6 +177,7 @@ file_chooser.page
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-formdata.mdx b/python/versioned_docs/version-stable/api/class-formdata.mdx
index 9575280fd2..c4192da3a1 100644
--- a/python/versioned_docs/version-stable/api/class-formdata.mdx
+++ b/python/versioned_docs/version-stable/api/class-formdata.mdx
@@ -219,6 +219,7 @@ form_data.set(name, value)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -248,6 +249,7 @@ form_data.set(name, value)
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-frame.mdx b/python/versioned_docs/version-stable/api/class-frame.mdx
index d9b560b55f..d876c11ecc 100644
--- a/python/versioned_docs/version-stable/api/class-frame.mdx
+++ b/python/versioned_docs/version-stable/api/class-frame.mdx
@@ -306,7 +306,7 @@ print(await frame.evaluate(f"1 + {x}")) # prints "11"
```py
-body_handle = frame.evaluate("document.body")
+body_handle = frame.evaluate_handle("document.body")
html = frame.evaluate("([body, suffix]) => body.innerHTML + suffix", [body_handle, "hello"])
body_handle.dispose()
```
@@ -315,7 +315,7 @@ body_handle.dispose()
```py
-body_handle = await frame.evaluate("document.body")
+body_handle = await frame.evaluate_handle("document.body")
html = await frame.evaluate("([body, suffix]) => body.innerHTML + suffix", [body_handle, "hello"])
await body_handle.dispose()
```
@@ -387,14 +387,14 @@ A string can also be passed in instead of a function.
```py
-a_handle = page.evaluate_handle("document") # handle for the "document"
+a_handle = frame.evaluate_handle("document") # handle for the "document"
```
```py
-a_handle = await page.evaluate_handle("document") # handle for the "document"
+a_handle = await frame.evaluate_handle("document") # handle for the "document"
```
@@ -413,8 +413,8 @@ a_handle = await page.evaluate_handle("document") # handle for the "document"
```py
-a_handle = page.evaluate_handle("document.body")
-result_handle = page.evaluate_handle("body => body.innerHTML", a_handle)
+a_handle = frame.evaluate_handle("document.body")
+result_handle = frame.evaluate_handle("body => body.innerHTML", a_handle)
print(result_handle.json_value())
result_handle.dispose()
```
@@ -423,8 +423,8 @@ result_handle.dispose()
```py
-a_handle = await page.evaluate_handle("document.body")
-result_handle = await page.evaluate_handle("body => body.innerHTML", a_handle)
+a_handle = await frame.evaluate_handle("document.body")
+result_handle = await frame.evaluate_handle("body => body.innerHTML", a_handle)
print(await result_handle.json_value())
await result_handle.dispose()
```
@@ -1972,7 +1972,7 @@ divs_counts = await frame.eval_on_selector_all("div", "(divs, min) => divs.lengt
Added before v1.9frame.expect_navigation
-:::warning Deprecated
+:::warning[Deprecated]
This method is inherently racy, please use [frame.wait_for_url()](/api/class-frame.mdx#frame-wait-for-url) instead.
@@ -2998,7 +2998,7 @@ frame.text_content(selector, **kwargs)
Added before v1.9frame.type
-:::warning Deprecated
+:::warning[Deprecated]
In most cases, you should use [locator.fill()](/api/class-locator.mdx#locator-fill) instead. You only need to press keys one by one if there is special keyboard handling on the page - in this case use [locator.press_sequentially()](/api/class-locator.mdx#locator-press-sequentially).
@@ -3247,6 +3247,7 @@ frame.wait_for_timeout(timeout)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -3276,6 +3277,7 @@ frame.wait_for_timeout(timeout)
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-framelocator.mdx b/python/versioned_docs/version-stable/api/class-framelocator.mdx
index 2fd130864b..3f8e9e400e 100644
--- a/python/versioned_docs/version-stable/api/class-framelocator.mdx
+++ b/python/versioned_docs/version-stable/api/class-framelocator.mdx
@@ -679,7 +679,7 @@ await expect(locator).to_be_visible()
Added in: v1.17frameLocator.first
-:::warning Deprecated
+:::warning[Deprecated]
Use [locator.first](/api/class-locator.mdx#locator-first) followed by [locator.content_frame](/api/class-locator.mdx#locator-content-frame) instead.
@@ -703,7 +703,7 @@ frame_locator.first
Added in: v1.17frameLocator.last
-:::warning Deprecated
+:::warning[Deprecated]
Use [locator.last](/api/class-locator.mdx#locator-last) followed by [locator.content_frame](/api/class-locator.mdx#locator-content-frame) instead.
@@ -727,7 +727,7 @@ frame_locator.last
Added in: v1.17frameLocator.nth
-:::warning Deprecated
+:::warning[Deprecated]
Use [locator.nth()](/api/class-locator.mdx#locator-nth) followed by [locator.content_frame](/api/class-locator.mdx#locator-content-frame) instead.
@@ -759,6 +759,7 @@ frame_locator.nth(index)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -788,6 +789,7 @@ frame_locator.nth(index)
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-jshandle.mdx b/python/versioned_docs/version-stable/api/class-jshandle.mdx
index ea421736a4..8f0d82de17 100644
--- a/python/versioned_docs/version-stable/api/class-jshandle.mdx
+++ b/python/versioned_docs/version-stable/api/class-jshandle.mdx
@@ -263,6 +263,7 @@ js_handle.as_element()
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -292,6 +293,7 @@ js_handle.as_element()
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-keyboard.mdx b/python/versioned_docs/version-stable/api/class-keyboard.mdx
index 7dcdbc6c8a..55618f1fb0 100644
--- a/python/versioned_docs/version-stable/api/class-keyboard.mdx
+++ b/python/versioned_docs/version-stable/api/class-keyboard.mdx
@@ -372,6 +372,7 @@ keyboard.up(key)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -401,6 +402,7 @@ keyboard.up(key)
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-locator.mdx b/python/versioned_docs/version-stable/api/class-locator.mdx
index d5e37c0128..2f16c84256 100644
--- a/python/versioned_docs/version-stable/api/class-locator.mdx
+++ b/python/versioned_docs/version-stable/api/class-locator.mdx
@@ -3606,7 +3606,7 @@ locator.element_handles()
Added in: v1.14locator.type
-:::warning Deprecated
+:::warning[Deprecated]
In most cases, you should use [locator.fill()](/api/class-locator.mdx#locator-fill) instead. You only need to press keys one by one if there is special keyboard handling on the page - in this case use [locator.press_sequentially()](/api/class-locator.mdx#locator-press-sequentially).
@@ -3652,6 +3652,7 @@ To press a special key, like `Control` or `ArrowDown`, use [locator.press()](/ap
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -3681,6 +3682,7 @@ To press a special key, like `Control` or `ArrowDown`, use [locator.press()](/ap
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-locatorassertions.mdx b/python/versioned_docs/version-stable/api/class-locatorassertions.mdx
index 0dd9a21f2d..5d5b3667ac 100644
--- a/python/versioned_docs/version-stable/api/class-locatorassertions.mdx
+++ b/python/versioned_docs/version-stable/api/class-locatorassertions.mdx
@@ -2341,6 +2341,7 @@ await expect(page.locator('body')).to_match_aria_snapshot('''
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -2370,6 +2371,7 @@ await expect(page.locator('body')).to_match_aria_snapshot('''
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-mouse.mdx b/python/versioned_docs/version-stable/api/class-mouse.mdx
index 8dc5230adc..14eb8758c3 100644
--- a/python/versioned_docs/version-stable/api/class-mouse.mdx
+++ b/python/versioned_docs/version-stable/api/class-mouse.mdx
@@ -246,6 +246,7 @@ mouse.wheel(delta_x, delta_y)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -275,6 +276,7 @@ mouse.wheel(delta_x, delta_y)
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-page.mdx b/python/versioned_docs/version-stable/api/class-page.mdx
index 47ad69d582..7436478859 100644
--- a/python/versioned_docs/version-stable/api/class-page.mdx
+++ b/python/versioned_docs/version-stable/api/class-page.mdx
@@ -870,7 +870,7 @@ print(await page.evaluate(f"1 + {x}")) # prints "11"
```py
-body_handle = page.evaluate("document.body")
+body_handle = page.evaluate_handle("document.body")
html = page.evaluate("([body, suffix]) => body.innerHTML + suffix", [body_handle, "hello"])
body_handle.dispose()
```
@@ -879,7 +879,7 @@ body_handle.dispose()
```py
-body_handle = await page.evaluate("document.body")
+body_handle = await page.evaluate_handle("document.body")
html = await page.evaluate("([body, suffix]) => body.innerHTML + suffix", [body_handle, "hello"])
await body_handle.dispose()
```
@@ -3613,6 +3613,23 @@ page.keyboard
---
+### local_storage {/* #page-local-storage */}
+
+Added in: v1.61page.local_storage
+
+Provides access to the page's `localStorage` for the current origin. See [WebStorage].
+
+**Usage**
+
+```python
+page.local_storage
+```
+
+**Type**
+- [WebStorage]
+
+---
+
### main_frame {/* #page-main-frame */}
Added before v1.9page.main_frame
@@ -3675,6 +3692,23 @@ page.request
---
+### session_storage {/* #page-session-storage */}
+
+Added in: v1.61page.session_storage
+
+Provides access to the page's `sessionStorage` for the current origin. See [WebStorage].
+
+**Usage**
+
+```python
+page.session_storage
+```
+
+**Type**
+- [WebStorage]
+
+---
+
### touchscreen {/* #page-touchscreen */}
Added before v1.9page.touchscreen
@@ -4702,7 +4736,7 @@ div_counts = await page.eval_on_selector_all("div", "(divs, min) => divs.length
Added before v1.9page.expect_navigation
-:::warning Deprecated
+:::warning[Deprecated]
This method is inherently racy, please use [page.wait_for_url()](/api/class-page.mdx#page-wait-for-url) instead.
@@ -5698,7 +5732,7 @@ When all steps combined have not finished during the specified [timeout](/api/cl
:::note
-[page.tap()](/api/class-page.mdx#page-tap) the method will throw if [has_touch](/api/class-browser.mdx#browser-new-context-option-has-touch) option of the browser context is false.
+[page.tap()](/api/class-page.mdx#page-tap) will throw if the [has_touch](/api/class-browser.mdx#browser-new-context-option-has-touch) option of the browser context is false.
:::
**Usage**
@@ -5789,7 +5823,7 @@ page.text_content(selector, **kwargs)
Added before v1.9page.type
-:::warning Deprecated
+:::warning[Deprecated]
In most cases, you should use [locator.fill()](/api/class-locator.mdx#locator-fill) instead. You only need to press keys one by one if there is special keyboard handling on the page - in this case use [locator.press_sequentially()](/api/class-locator.mdx#locator-press-sequentially).
@@ -6060,6 +6094,7 @@ await page.wait_for_timeout(1000)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -6089,6 +6124,7 @@ await page.wait_for_timeout(1000)
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-pageassertions.mdx b/python/versioned_docs/version-stable/api/class-pageassertions.mdx
index a571a4e1b6..637163c977 100644
--- a/python/versioned_docs/version-stable/api/class-pageassertions.mdx
+++ b/python/versioned_docs/version-stable/api/class-pageassertions.mdx
@@ -298,6 +298,7 @@ await expect(page).to_match_aria_snapshot('''
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -327,6 +328,7 @@ await expect(page).to_match_aria_snapshot('''
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-playwright.mdx b/python/versioned_docs/version-stable/api/class-playwright.mdx
index de050ac5ad..18ab50fad1 100644
--- a/python/versioned_docs/version-stable/api/class-playwright.mdx
+++ b/python/versioned_docs/version-stable/api/class-playwright.mdx
@@ -260,6 +260,7 @@ playwright.webkit
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -289,6 +290,7 @@ playwright.webkit
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-request.mdx b/python/versioned_docs/version-stable/api/class-request.mdx
index 654fc9f7c5..14a4925d96 100644
--- a/python/versioned_docs/version-stable/api/class-request.mdx
+++ b/python/versioned_docs/version-stable/api/class-request.mdx
@@ -531,6 +531,7 @@ request.url
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -560,6 +561,7 @@ request.url
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-response.mdx b/python/versioned_docs/version-stable/api/class-response.mdx
index 20978efa7d..e7c7daa2a6 100644
--- a/python/versioned_docs/version-stable/api/class-response.mdx
+++ b/python/versioned_docs/version-stable/api/class-response.mdx
@@ -386,6 +386,7 @@ response.url
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -415,6 +416,7 @@ response.url
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-route.mdx b/python/versioned_docs/version-stable/api/class-route.mdx
index 346dd5c938..d192a7364e 100644
--- a/python/versioned_docs/version-stable/api/class-route.mdx
+++ b/python/versioned_docs/version-stable/api/class-route.mdx
@@ -496,6 +496,7 @@ route.request
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -525,6 +526,7 @@ route.request
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-screencast.mdx b/python/versioned_docs/version-stable/api/class-screencast.mdx
index 1528d3d237..f95ed42a81 100644
--- a/python/versioned_docs/version-stable/api/class-screencast.mdx
+++ b/python/versioned_docs/version-stable/api/class-screencast.mdx
@@ -62,6 +62,9 @@ screencast.show_actions(**kwargs)
```
**Arguments**
+- `cursor` "none" | "pointer" *(optional)* Added in: v1.61#
+
+ 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.
- `duration` [float] *(optional)*#
How long each annotation is displayed in milliseconds. Defaults to `500`.
@@ -162,6 +165,9 @@ Starts the screencast. When [path](/api/class-screencast.mdx#screencast-start-op
- `data` [bytes]
JPEG-encoded frame data.
+ - `timestamp` [float]
+
+ The timestamp of when the frame was presented by the browser, in milliseconds since the Unix epoch.
- `viewportWidth` [int]
Width of the page viewport at the time the frame was captured.
@@ -176,6 +182,15 @@ Starts the screencast. When [path](/api/class-screencast.mdx#screencast-start-op
- `quality` [int] *(optional)*#
The quality of the image, between 0-100.
+- `size` [Dict] *(optional)*#
+ - `width` [int]
+
+ Max frame width in pixels.
+ - `height` [int]
+
+ Max frame height in pixels.
+
+ Specifies the dimensions of screencast frames. The actual frame is scaled to preserve the page's aspect ratio and may be smaller than these bounds. If a screencast is already active (e.g. started by tracing or video recording), the existing configuration takes precedence and the frame size may exceed these bounds or this option may be ignored. If not specified the size will be equal to page viewport scaled down to fit into 800×800.
**Returns**
- [Disposable]#
@@ -208,6 +223,7 @@ screencast.stop()
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -237,6 +253,7 @@ screencast.stop()
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-selectors.mdx b/python/versioned_docs/version-stable/api/class-selectors.mdx
index e532743738..c0ae11463f 100644
--- a/python/versioned_docs/version-stable/api/class-selectors.mdx
+++ b/python/versioned_docs/version-stable/api/class-selectors.mdx
@@ -148,7 +148,7 @@ selectors.set_test_id_attribute(attribute_name)
**Arguments**
- `attribute_name` [str]#
- Test id attribute name.
+ Test id attribute name. To match elements with any of several attributes, pass them as a comma-separated list, e.g. `"data-pw,data-ti"`.
[APIRequest]: /api/class-apirequest.mdx "APIRequest"
@@ -161,6 +161,7 @@ selectors.set_test_id_attribute(attribute_name)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -190,6 +191,7 @@ selectors.set_test_id_attribute(attribute_name)
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-timeouterror.mdx b/python/versioned_docs/version-stable/api/class-timeouterror.mdx
index 3d26a66d4f..47d812b1ed 100644
--- a/python/versioned_docs/version-stable/api/class-timeouterror.mdx
+++ b/python/versioned_docs/version-stable/api/class-timeouterror.mdx
@@ -71,6 +71,7 @@ asyncio.run(main())
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -100,6 +101,7 @@ asyncio.run(main())
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-touchscreen.mdx b/python/versioned_docs/version-stable/api/class-touchscreen.mdx
index d25bdaf8b7..6dc86e7471 100644
--- a/python/versioned_docs/version-stable/api/class-touchscreen.mdx
+++ b/python/versioned_docs/version-stable/api/class-touchscreen.mdx
@@ -24,7 +24,7 @@ Dispatches a `touchstart` and `touchend` event with a single touch at the positi
:::note
-[page.tap()](/api/class-page.mdx#page-tap) the method will throw if [has_touch](/api/class-browser.mdx#browser-new-context-option-has-touch) option of the browser context is false.
+[touchscreen.tap()](/api/class-touchscreen.mdx#touchscreen-tap) will throw if the [has_touch](/api/class-browser.mdx#browser-new-context-option-has-touch) option of the browser context is false.
:::
**Usage**
@@ -55,6 +55,7 @@ touchscreen.tap(x, y)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -84,6 +85,7 @@ touchscreen.tap(x, y)
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-tracing.mdx b/python/versioned_docs/version-stable/api/class-tracing.mdx
index 286b51af4e..e2a5150bac 100644
--- a/python/versioned_docs/version-stable/api/class-tracing.mdx
+++ b/python/versioned_docs/version-stable/api/class-tracing.mdx
@@ -414,6 +414,7 @@ tracing.stop_har()
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -443,6 +444,7 @@ tracing.stop_har()
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-video.mdx b/python/versioned_docs/version-stable/api/class-video.mdx
index 044b9ae3c5..b584f52538 100644
--- a/python/versioned_docs/version-stable/api/class-video.mdx
+++ b/python/versioned_docs/version-stable/api/class-video.mdx
@@ -103,6 +103,7 @@ video.save_as(path)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -132,6 +133,7 @@ video.save_as(path)
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-weberror.mdx b/python/versioned_docs/version-stable/api/class-weberror.mdx
index 903ce0f489..6666784662 100644
--- a/python/versioned_docs/version-stable/api/class-weberror.mdx
+++ b/python/versioned_docs/version-stable/api/class-weberror.mdx
@@ -113,6 +113,7 @@ web_error.page
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -142,6 +143,7 @@ web_error.page
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-websocket.mdx b/python/versioned_docs/version-stable/api/class-websocket.mdx
index 9c30cdf185..61e79023d0 100644
--- a/python/versioned_docs/version-stable/api/class-websocket.mdx
+++ b/python/versioned_docs/version-stable/api/class-websocket.mdx
@@ -194,6 +194,7 @@ web_socket.on("socketerror", handler)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -223,6 +224,7 @@ web_socket.on("socketerror", handler)
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-websocketroute.mdx b/python/versioned_docs/version-stable/api/class-websocketroute.mdx
index 6ffa04b650..5a48d9861a 100644
--- a/python/versioned_docs/version-stable/api/class-websocketroute.mdx
+++ b/python/versioned_docs/version-stable/api/class-websocketroute.mdx
@@ -397,6 +397,7 @@ web_socket_route.url
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -426,6 +427,7 @@ web_socket_route.url
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/api/class-webstorage.mdx b/python/versioned_docs/version-stable/api/class-webstorage.mdx
new file mode 100644
index 0000000000..45dcd615d3
--- /dev/null
+++ b/python/versioned_docs/version-stable/api/class-webstorage.mdx
@@ -0,0 +1,234 @@
+---
+id: class-webstorage
+title: "WebStorage"
+---
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import HTMLCard from '@site/src/components/HTMLCard';
+
+
+WebStorage exposes the page's `localStorage` or `sessionStorage` for the current origin via an async, [browser-consistent](https://developer.mozilla.org/en-US/docs/Web/API/Storage) API.
+
+Instances are accessed through [page.local_storage](/api/class-page.mdx#page-local-storage) and [page.session_storage](/api/class-page.mdx#page-session-storage).
+
+
+
+
+```py
+page.goto("https://example.com")
+page.local_storage.set_item("token", "abc")
+token = page.local_storage.get_item("token")
+all = page.local_storage.items()
+page.local_storage.remove_item("token")
+page.local_storage.clear()
+```
+
+
+
+
+```py
+await page.goto("https://example.com")
+await page.local_storage.set_item("token", "abc")
+token = await page.local_storage.get_item("token")
+all = await page.local_storage.items()
+await page.local_storage.remove_item("token")
+await page.local_storage.clear()
+```
+
+
+
+
+
+---
+
+## Methods
+
+### clear {/* #web-storage-clear */}
+
+Added in: v1.61webStorage.clear
+
+Removes all items from the storage.
+
+**Usage**
+
+```python
+web_storage.clear()
+```
+
+**Returns**
+- [NoneType]#
+
+---
+
+### get_item {/* #web-storage-get-item */}
+
+Added in: v1.61webStorage.get_item
+
+Returns the value for the given [name](/api/class-webstorage.mdx#web-storage-get-item-option-name) if present.
+
+**Usage**
+
+```python
+web_storage.get_item(name)
+```
+
+**Arguments**
+- `name` [str]#
+
+ Name of the item to retrieve.
+
+**Returns**
+- [NoneType] | [str]#
+
+---
+
+### items {/* #web-storage-items */}
+
+Added in: v1.61webStorage.items
+
+Returns all items in the storage as name/value pairs.
+
+**Usage**
+
+```python
+web_storage.items()
+```
+
+**Returns**
+- [List]\[[Dict]\]#
+ - `name` [str]
+
+
+ - `value` [str]
+
+
+---
+
+### remove_item {/* #web-storage-remove-item */}
+
+Added in: v1.61webStorage.remove_item
+
+Removes the item with the given [name](/api/class-webstorage.mdx#web-storage-remove-item-option-name). No-op if the item is absent.
+
+**Usage**
+
+```python
+web_storage.remove_item(name)
+```
+
+**Arguments**
+- `name` [str]#
+
+ Name of the item to remove.
+
+**Returns**
+- [NoneType]#
+
+---
+
+### set_item {/* #web-storage-set-item */}
+
+Added in: v1.61webStorage.set_item
+
+Sets the value for the given [name](/api/class-webstorage.mdx#web-storage-set-item-option-name). Overwrites any existing value for that name.
+
+**Usage**
+
+```python
+web_storage.set_item(name, value)
+```
+
+**Arguments**
+- `name` [str]#
+
+ Name of the item to set.
+- `value` [str]#
+
+ New value for the item.
+
+**Returns**
+- [NoneType]#
+
+
+[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"
+[BrowserType]: /api/class-browsertype.mdx "BrowserType"
+[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
+[Clock]: /api/class-clock.mdx "Clock"
+[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
+[Debugger]: /api/class-debugger.mdx "Debugger"
+[Dialog]: /api/class-dialog.mdx "Dialog"
+[Download]: /api/class-download.mdx "Download"
+[ElementHandle]: /api/class-elementhandle.mdx "ElementHandle"
+[Error]: /api/class-error.mdx "Error"
+[FileChooser]: /api/class-filechooser.mdx "FileChooser"
+[FormData]: /api/class-formdata.mdx "FormData"
+[Frame]: /api/class-frame.mdx "Frame"
+[FrameLocator]: /api/class-framelocator.mdx "FrameLocator"
+[JSHandle]: /api/class-jshandle.mdx "JSHandle"
+[Keyboard]: /api/class-keyboard.mdx "Keyboard"
+[Locator]: /api/class-locator.mdx "Locator"
+[LocatorAssertions]: /api/class-locatorassertions.mdx "LocatorAssertions"
+[Mouse]: /api/class-mouse.mdx "Mouse"
+[Page]: /api/class-page.mdx "Page"
+[PageAssertions]: /api/class-pageassertions.mdx "PageAssertions"
+[Playwright]: /api/class-playwright.mdx "Playwright"
+[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"
+[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"
+[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"
+
+[Any]: https://docs.python.org/3/library/typing.html#typing.Any "Any"
+[bool]: https://docs.python.org/3/library/stdtypes.html "bool"
+[bytes]: https://docs.python.org/3/library/stdtypes.html#bytes "bytes"
+[Callable]: https://docs.python.org/3/library/typing.html#typing.Callable "Callable"
+[EventContextManager]: https://docs.python.org/3/reference/datamodel.html#context-managers "Event context manager"
+[EventEmitter]: https://pyee.readthedocs.io/en/latest/#pyee.BaseEventEmitter "EventEmitter"
+[Exception]: https://docs.python.org/3/library/exceptions.html#Exception "Exception"
+[Dict]: https://docs.python.org/3/library/typing.html#typing.Dict "Dict"
+[float]: https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex "float"
+[int]: https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex "int"
+[List]: https://docs.python.org/3/library/typing.html#typing.List "List"
+[NoneType]: https://docs.python.org/3/library/constants.html#None "None"
+[Pattern]: https://docs.python.org/3/library/re.html "Pattern"
+[URL]: https://en.wikipedia.org/wiki/URL "URL"
+[pathlib.Path]: https://realpython.com/python-pathlib/ "pathlib.Path"
+[str]: https://docs.python.org/3/library/stdtypes.html#text-sequence-type-str "str"
+[Union]: https://docs.python.org/3/library/typing.html#typing.Union "Union"
+[datetime]: https://docs.python.org/3/library/datetime.html#datetime.datetime "datetime"
+
+[all available image tags]: https://mcr.microsoft.com/en-us/product/playwright/python/about "all available image tags"
+[Microsoft Artifact Registry]: https://mcr.microsoft.com/en-us/product/playwright/python/about "Microsoft Artifact Registry"
+[Dockerfile.noble]: https://github.com/microsoft/playwright-python/blob/main/utils/docker/Dockerfile.noble "Dockerfile.noble"
diff --git a/python/versioned_docs/version-stable/api/class-worker.mdx b/python/versioned_docs/version-stable/api/class-worker.mdx
index e37295e58e..0c5c673d35 100644
--- a/python/versioned_docs/version-stable/api/class-worker.mdx
+++ b/python/versioned_docs/version-stable/api/class-worker.mdx
@@ -200,6 +200,7 @@ worker.on("console", handler)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -229,6 +230,7 @@ worker.on("console", handler)
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/aria-snapshots.mdx b/python/versioned_docs/version-stable/aria-snapshots.mdx
index ccc6c6b823..450ff4862b 100644
--- a/python/versioned_docs/version-stable/aria-snapshots.mdx
+++ b/python/versioned_docs/version-stable/aria-snapshots.mdx
@@ -113,7 +113,7 @@ Each accessible element in the tree is represented as a YAML node:
- **role**: Specifies the ARIA or HTML role of the element (e.g., `heading`, `list`, `listitem`, `button`).
- **"name"**: Accessible name of the element. Quoted strings indicate exact values, `/patterns/` are used for regular expression.
-- **[attribute=value]**: Attributes and values, in square brackets, represent specific ARIA attributes, such as `checked`, `disabled`, `expanded`, `level`, `pressed`, or `selected`.
+- **[attribute=value]**: Attributes and values, in square brackets, represent specific ARIA attributes, such as `checked`, `disabled`, `expanded`, `invalid`, `level`, `pressed`, or `selected`.
These values are derived from ARIA attributes or calculated based on HTML semantics. To inspect the accessibility tree structure of a page, use the [Chrome DevTools Accessibility Tab](https://developer.chrome.com/docs/devtools/accessibility/reference#tab).
@@ -420,7 +420,7 @@ Groups capture nested elements, such as `` elements with summary conten
### Attributes and states
-Commonly used ARIA attributes, like `checked`, `disabled`, `expanded`, `level`, `pressed`, and `selected`, represent control states.
+Commonly used ARIA attributes, like `checked`, `disabled`, `expanded`, `invalid`, `level`, `pressed`, and `selected`, represent control states.
#### Checkbox with `checked` attribute
@@ -442,6 +442,26 @@ Commonly used ARIA attributes, like `checked`, `disabled`, `expanded`, `level`,
- button "Toggle" [pressed=true]
```
+#### Input with `aria-invalid` attribute
+
+The `aria-invalid` value is surfaced directly. A value of `true` renders as `[invalid]`, while `grammar` and `spelling` render as `[invalid=grammar]` and `[invalid=spelling]`. A `false` value is omitted.
+
+```html
+
+```
+
+```yaml title="aria snapshot"
+- textbox "Email" [invalid]: not-an-email
+```
+
+```html
+
+```
+
+```yaml title="aria snapshot"
+- textbox "Bio" [invalid=spelling]
+```
+
[APIRequest]: /api/class-apirequest.mdx "APIRequest"
[APIRequestContext]: /api/class-apirequestcontext.mdx "APIRequestContext"
@@ -453,6 +473,7 @@ Commonly used ARIA attributes, like `checked`, `disabled`, `expanded`, `level`,
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -482,6 +503,7 @@ Commonly used ARIA attributes, like `checked`, `disabled`, `expanded`, `level`,
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/auth.mdx b/python/versioned_docs/version-stable/auth.mdx
index cf011468b8..2d1ed82fb9 100644
--- a/python/versioned_docs/version-stable/auth.mdx
+++ b/python/versioned_docs/version-stable/auth.mdx
@@ -214,6 +214,7 @@ await context.add_init_script("""(storage => {
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -243,6 +244,7 @@ await context.add_init_script("""(storage => {
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/browser-contexts.mdx b/python/versioned_docs/version-stable/browser-contexts.mdx
index 26fdbde992..b3d3a82fe5 100644
--- a/python/versioned_docs/version-stable/browser-contexts.mdx
+++ b/python/versioned_docs/version-stable/browser-contexts.mdx
@@ -127,6 +127,7 @@ asyncio.run(main())
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -156,6 +157,7 @@ asyncio.run(main())
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/browsers.mdx b/python/versioned_docs/version-stable/browsers.mdx
index 2bc878d5c8..bd646473d2 100644
--- a/python/versioned_docs/version-stable/browsers.mdx
+++ b/python/versioned_docs/version-stable/browsers.mdx
@@ -579,6 +579,7 @@ playwright uninstall --all
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -608,6 +609,7 @@ playwright uninstall --all
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/chrome-extensions.mdx b/python/versioned_docs/version-stable/chrome-extensions.mdx
index 8338cdb87d..6d8fcda45c 100644
--- a/python/versioned_docs/version-stable/chrome-extensions.mdx
+++ b/python/versioned_docs/version-stable/chrome-extensions.mdx
@@ -211,6 +211,7 @@ def test_popup_page(page: Page, extension_id: str) -> None:
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -240,6 +241,7 @@ def test_popup_page(page: Page, extension_id: str) -> None:
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/ci-intro.mdx b/python/versioned_docs/version-stable/ci-intro.mdx
index cacec445a1..7a10a55b9e 100644
--- a/python/versioned_docs/version-stable/ci-intro.mdx
+++ b/python/versioned_docs/version-stable/ci-intro.mdx
@@ -110,6 +110,7 @@ Artifacts like trace files or console logs contain information about your test e
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -139,6 +140,7 @@ Artifacts like trace files or console logs contain information about your test e
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/ci.mdx b/python/versioned_docs/version-stable/ci.mdx
index da419c80b2..bd562d536b 100644
--- a/python/versioned_docs/version-stable/ci.mdx
+++ b/python/versioned_docs/version-stable/ci.mdx
@@ -83,7 +83,7 @@ jobs:
name: 'Playwright Tests'
runs-on: ubuntu-latest
container:
- image: mcr.microsoft.com/playwright/python:v1.59.0-noble
+ image: mcr.microsoft.com/playwright/python:v1.60.0-noble
options: --user 1001
steps:
- uses: actions/checkout@v5
@@ -173,7 +173,7 @@ trigger:
pool:
vmImage: ubuntu-latest
-container: mcr.microsoft.com/playwright/python:v1.59.0-noble
+container: mcr.microsoft.com/playwright/python:v1.60.0-noble
steps:
- task: UsePythonVersion@0
@@ -197,7 +197,7 @@ Running Playwright on CircleCI is very similar to running on GitHub Actions. In
executors:
pw-noble-development:
docker:
- - image: mcr.microsoft.com/playwright/python:v1.59.0-noble
+ - image: mcr.microsoft.com/playwright/python:v1.60.0-noble
```
Note: When using the docker agent definition, you are specifying the resource class of where playwright runs to the 'medium' tier [here](https://circleci.com/docs/configuration-reference?#docker-execution-environment). The default behavior of Playwright is to set the number of workers to the detected core count (2 in the case of the medium tier). Overriding the number of workers to greater than this number will cause unnecessary timeouts and failures.
@@ -208,7 +208,7 @@ Jenkins supports Docker agents for pipelines. Use the [Playwright Docker image](
```groovy
pipeline {
- agent { docker { image 'mcr.microsoft.com/playwright/python:v1.59.0-noble' } }
+ agent { docker { image 'mcr.microsoft.com/playwright/python:v1.60.0-noble' } }
stages {
stage('e2e-tests') {
steps {
@@ -225,7 +225,7 @@ pipeline {
Bitbucket Pipelines can use public [Docker images as build environments](https://confluence.atlassian.com/bitbucket/use-docker-images-as-build-environments-792298897.html). To run Playwright tests on Bitbucket, use our public Docker image ([see Dockerfile](./docker.mdx)).
```yml
-image: mcr.microsoft.com/playwright/python:v1.59.0-noble
+image: mcr.microsoft.com/playwright/python:v1.60.0-noble
```
### GitLab CI
@@ -238,7 +238,7 @@ stages:
tests:
stage: test
- image: mcr.microsoft.com/playwright/python:v1.59.0-noble
+ image: mcr.microsoft.com/playwright/python:v1.60.0-noble
script:
...
```
@@ -278,6 +278,7 @@ xvfb-run pytest
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -307,6 +308,7 @@ xvfb-run pytest
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/clock.mdx b/python/versioned_docs/version-stable/clock.mdx
index b996bc6e0c..e69f17b0d7 100644
--- a/python/versioned_docs/version-stable/clock.mdx
+++ b/python/versioned_docs/version-stable/clock.mdx
@@ -316,6 +316,7 @@ await expect(locator).to_have_text("2/2/2024, 10:00:02 AM")
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -345,6 +346,7 @@ await expect(locator).to_have_text("2/2/2024, 10:00:02 AM")
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/codegen-intro.mdx b/python/versioned_docs/version-stable/codegen-intro.mdx
index 41a80b1b6b..7933518b54 100644
--- a/python/versioned_docs/version-stable/codegen-intro.mdx
+++ b/python/versioned_docs/version-stable/codegen-intro.mdx
@@ -73,6 +73,7 @@ You can generate tests using emulation for specific viewports, devices, color sc
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -102,6 +103,7 @@ You can generate tests using emulation for specific viewports, devices, color sc
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/codegen.mdx b/python/versioned_docs/version-stable/codegen.mdx
index 24192c67e6..f7895c033b 100644
--- a/python/versioned_docs/version-stable/codegen.mdx
+++ b/python/versioned_docs/version-stable/codegen.mdx
@@ -214,6 +214,7 @@ asyncio.run(main())
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -243,6 +244,7 @@ asyncio.run(main())
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/debug.mdx b/python/versioned_docs/version-stable/debug.mdx
index f4d395b074..2d2a71eeb7 100644
--- a/python/versioned_docs/version-stable/debug.mdx
+++ b/python/versioned_docs/version-stable/debug.mdx
@@ -331,6 +331,7 @@ await chromium.launch(headless=False, slow_mo=100)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -360,6 +361,7 @@ await chromium.launch(headless=False, slow_mo=100)
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/dialogs.mdx b/python/versioned_docs/version-stable/dialogs.mdx
index cc269a3e7b..b7651902fd 100644
--- a/python/versioned_docs/version-stable/dialogs.mdx
+++ b/python/versioned_docs/version-stable/dialogs.mdx
@@ -174,6 +174,7 @@ This will wait for the print dialog to be opened after the button is clicked. Ma
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -203,6 +204,7 @@ This will wait for the print dialog to be opened after the button is clicked. Ma
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/docker.mdx b/python/versioned_docs/version-stable/docker.mdx
index 1ba0a30b4c..871f30e29b 100644
--- a/python/versioned_docs/version-stable/docker.mdx
+++ b/python/versioned_docs/version-stable/docker.mdx
@@ -22,7 +22,7 @@ This Docker image is intended to be used for testing and development purposes on
### Pull the image
```bash
-docker pull mcr.microsoft.com/playwright/python:v1.59.0-noble
+docker pull mcr.microsoft.com/playwright/python:v1.60.0-noble
```
### Run the image
@@ -34,7 +34,7 @@ By default, the Docker image will use the `root` user to run the browsers. This
On trusted websites, you can avoid creating a separate user and use root for it since you trust the code which will run on the browsers.
```bash
-docker run -it --rm --ipc=host mcr.microsoft.com/playwright/python:v1.59.0-noble /bin/bash
+docker run -it --rm --ipc=host mcr.microsoft.com/playwright/python:v1.60.0-noble /bin/bash
```
#### Crawling and scraping
@@ -42,7 +42,7 @@ docker run -it --rm --ipc=host mcr.microsoft.com/playwright/python:v1.59.0-noble
On untrusted websites, it's recommended to use a separate user for launching the browsers in combination with the seccomp profile. Inside the container or if you are using the Docker image as a base image you have to use `adduser` for it.
```bash
-docker run -it --rm --ipc=host --user pwuser --security-opt seccomp=seccomp_profile.json mcr.microsoft.com/playwright/python:v1.59.0-noble /bin/bash
+docker run -it --rm --ipc=host --user pwuser --security-opt seccomp=seccomp_profile.json mcr.microsoft.com/playwright/python:v1.60.0-noble /bin/bash
```
[`seccomp_profile.json`](https://github.com/microsoft/playwright/blob/main/utils/docker/seccomp_profile.json) is needed to run Chromium with sandbox. This is a [default Docker seccomp profile](https://github.com/docker/engine/blob/d0d99b04cf6e00ed3fc27e81fc3d94e7eda70af3/profiles/seccomp/default.json) with extra user namespace cloning permissions:
@@ -82,7 +82,7 @@ You can run Playwright Server in Docker while keeping your tests running on the
Start the Playwright Server in Docker:
```bash
-docker run -p 3000:3000 --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.59.0-noble /bin/sh -c "npx -y playwright@1.59.0 run-server --port 3000 --host 0.0.0.0"
+docker run -p 3000:3000 --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.60.0-noble /bin/sh -c "npx -y playwright@1.60.0 run-server --port 3000 --host 0.0.0.0"
```
#### Connecting to the Server
@@ -122,7 +122,7 @@ async with async_playwright() as p:
If you need to access local servers from within the Docker container:
```bash
-docker run --add-host=hostmachine:host-gateway -p 3000:3000 --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.59.0-noble /bin/sh -c "npx -y playwright@1.59.0 run-server --port 3000 --host 0.0.0.0"
+docker run --add-host=hostmachine:host-gateway -p 3000:3000 --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.60.0-noble /bin/sh -c "npx -y playwright@1.60.0 run-server --port 3000 --host 0.0.0.0"
```
This makes `hostmachine` point to the host's localhost. Your tests should use `hostmachine` instead of `localhost` when accessing local servers.
@@ -155,9 +155,9 @@ Once this is enabled you can open the port specified in a new browser tab and yo
See [all available image tags].
We currently publish images with the following tags:
-- `:v1.59.0` - Playwright v1.59.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat).
-- `:v1.59.0-noble` - Playwright v1.59.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat).
-- `:v1.59.0-jammy` - Playwright v1.59.0 release docker image based on Ubuntu 22.04 LTS (Jammy Jellyfish).
+- `:v1.60.0` - Playwright v1.60.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat).
+- `:v1.60.0-noble` - Playwright v1.60.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat).
+- `:v1.60.0-jammy` - Playwright v1.60.0 release docker image based on Ubuntu 22.04 LTS (Jammy Jellyfish).
:::note
@@ -181,7 +181,7 @@ To run Playwright inside Docker, you need to have Python, [Playwright browsers](
```Dockerfile
FROM python:3.12-bookworm
-RUN pip install playwright==@1.59.0 && \
+RUN pip install playwright==@1.60.0 && \
playwright install --with-deps
```
@@ -196,6 +196,7 @@ RUN pip install playwright==@1.59.0 && \
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -225,6 +226,7 @@ RUN pip install playwright==@1.59.0 && \
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/downloads.mdx b/python/versioned_docs/version-stable/downloads.mdx
index 9311fff874..1abbd488d8 100644
--- a/python/versioned_docs/version-stable/downloads.mdx
+++ b/python/versioned_docs/version-stable/downloads.mdx
@@ -105,6 +105,7 @@ For uploading files, see the [uploading files](./input.mdx#upload-files) section
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -134,6 +135,7 @@ For uploading files, see the [uploading files](./input.mdx#upload-files) section
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/emulation.mdx b/python/versioned_docs/version-stable/emulation.mdx
index 20c325b57c..34bb01a03a 100644
--- a/python/versioned_docs/version-stable/emulation.mdx
+++ b/python/versioned_docs/version-stable/emulation.mdx
@@ -509,6 +509,7 @@ context = await browser.new_context(
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -538,6 +539,7 @@ context = await browser.new_context(
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/evaluating.mdx b/python/versioned_docs/version-stable/evaluating.mdx
index 6efd66e775..5129e76ab6 100644
--- a/python/versioned_docs/version-stable/evaluating.mdx
+++ b/python/versioned_docs/version-stable/evaluating.mdx
@@ -297,6 +297,7 @@ await page.add_init_script(path="mocks/preload.js")
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -326,6 +327,7 @@ await page.add_init_script(path="mocks/preload.js")
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/events.mdx b/python/versioned_docs/version-stable/events.mdx
index 42c97e1206..2cf537a8ff 100644
--- a/python/versioned_docs/version-stable/events.mdx
+++ b/python/versioned_docs/version-stable/events.mdx
@@ -167,6 +167,7 @@ await page.evaluate("prompt('Enter a number:')")
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -196,6 +197,7 @@ await page.evaluate("prompt('Enter a number:')")
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/extensibility.mdx b/python/versioned_docs/version-stable/extensibility.mdx
index 6c535d06b2..e999dc3cc1 100644
--- a/python/versioned_docs/version-stable/extensibility.mdx
+++ b/python/versioned_docs/version-stable/extensibility.mdx
@@ -105,6 +105,7 @@ button_count = await page.locator("tag=button").count()
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -134,6 +135,7 @@ button_count = await page.locator("tag=button").count()
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/frames.mdx b/python/versioned_docs/version-stable/frames.mdx
index 1c46a05555..fd2ed7b23f 100644
--- a/python/versioned_docs/version-stable/frames.mdx
+++ b/python/versioned_docs/version-stable/frames.mdx
@@ -94,6 +94,7 @@ await frame.fill('#username-input', 'John')
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -123,6 +124,7 @@ await frame.fill('#username-input', 'John')
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/getting-started-cli.mdx b/python/versioned_docs/version-stable/getting-started-cli.mdx
index 173690796f..f46575f00e 100644
--- a/python/versioned_docs/version-stable/getting-started-cli.mdx
+++ b/python/versioned_docs/version-stable/getting-started-cli.mdx
@@ -318,6 +318,7 @@ This requires the [Playwright Extension](https://github.com/microsoft/playwright
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -347,6 +348,7 @@ This requires the [Playwright Extension](https://github.com/microsoft/playwright
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/getting-started-mcp.mdx b/python/versioned_docs/version-stable/getting-started-mcp.mdx
index 81f383b8d4..39b8b67d4b 100644
--- a/python/versioned_docs/version-stable/getting-started-mcp.mdx
+++ b/python/versioned_docs/version-stable/getting-started-mcp.mdx
@@ -236,6 +236,7 @@ Then point your MCP client to the HTTP endpoint:
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -265,6 +266,7 @@ Then point your MCP client to the HTTP endpoint:
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/handles.mdx b/python/versioned_docs/version-stable/handles.mdx
index ff940e4588..42f5196f7a 100644
--- a/python/versioned_docs/version-stable/handles.mdx
+++ b/python/versioned_docs/version-stable/handles.mdx
@@ -256,6 +256,7 @@ await locator.click()
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -285,6 +286,7 @@ await locator.click()
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/input.mdx b/python/versioned_docs/version-stable/input.mdx
index d651ecdd4e..b65aa596cb 100644
--- a/python/versioned_docs/version-stable/input.mdx
+++ b/python/versioned_docs/version-stable/input.mdx
@@ -694,6 +694,7 @@ await page.get_by_test_id("scrolling-container").evaluate("e => e.scrollTop += 1
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -723,6 +724,7 @@ await page.get_by_test_id("scrolling-container").evaluate("e => e.scrollTop += 1
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/intro.mdx b/python/versioned_docs/version-stable/intro.mdx
index 93c6e8aa13..7ce16cead4 100644
--- a/python/versioned_docs/version-stable/intro.mdx
+++ b/python/versioned_docs/version-stable/intro.mdx
@@ -24,11 +24,11 @@ Playwright recommends using the official [Playwright Pytest plugin](./test-runne
Get started by installing Playwright and running the example test to see it in action.
-
+Install the [Pytest plugin](https://pypi.org/project/pytest-playwright/):
-
+
-Install the [Pytest plugin](https://pypi.org/project/pytest-playwright/):
+
```bash
pip install pytest-playwright
@@ -36,14 +36,18 @@ pip install pytest-playwright
-
+
+
+```bash
+poetry add pytest-playwright
+```
+
+
-Install the [Pytest plugin](https://anaconda.org/Microsoft/pytest-playwright):
+
```bash
-conda config --add channels conda-forge
-conda config --add channels microsoft
-conda install pytest-playwright
+uv add pytest-playwright
```
@@ -92,10 +96,34 @@ pytest
To update Playwright to the latest version run the following command:
+
+
+
+
```bash
pip install pytest-playwright playwright -U
```
+
+
+
+
+```bash
+poetry update pytest-playwright playwright
+```
+
+
+
+
+
+```bash
+uv add --upgrade pytest-playwright playwright
+```
+
+
+
+
+
## System requirements
- Python 3.8 or higher.
- Windows 11+, Windows Server 2019+ or Windows Subsystem for Linux (WSL).
@@ -119,6 +147,7 @@ pip install pytest-playwright playwright -U
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -148,6 +177,7 @@ pip install pytest-playwright playwright -U
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/languages.mdx b/python/versioned_docs/version-stable/languages.mdx
index 84a2746083..1e5aaf9c20 100644
--- a/python/versioned_docs/version-stable/languages.mdx
+++ b/python/versioned_docs/version-stable/languages.mdx
@@ -45,6 +45,7 @@ Playwright for .NET comes with MSTest, NUnit, xUnit, and xUnit v3 [base classes]
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -74,6 +75,7 @@ Playwright for .NET comes with MSTest, NUnit, xUnit, and xUnit v3 [base classes]
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/library.mdx b/python/versioned_docs/version-stable/library.mdx
index 5ee96dbae3..0141e22eac 100644
--- a/python/versioned_docs/version-stable/library.mdx
+++ b/python/versioned_docs/version-stable/library.mdx
@@ -8,27 +8,42 @@ import HTMLCard from '@site/src/components/HTMLCard';
## Installation
-### Pip
-
[
](https://pypi.python.org/pypi/playwright/)
+
+
+
+
```bash
pip install --upgrade pip
pip install playwright
playwright install
```
-### Conda
+
-[
](https://anaconda.org/Microsoft/playwright)
+
```bash
-conda config --add channels conda-forge
-conda config --add channels microsoft
-conda install playwright
+poetry self update
+poetry add playwright
playwright install
```
+
+
+
+
+```bash
+uv self update
+uv add playwright
+playwright install
+```
+
+
+
+
+
These commands download the Playwright package and install browser binaries for Chromium, Firefox and WebKit. To modify this behavior see [installation parameters](./browsers.mdx#install-browsers).
## Usage
@@ -210,6 +225,7 @@ Playwright's API is not thread-safe. If you are using Playwright in a multi-thre
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -239,6 +255,7 @@ Playwright's API is not thread-safe. If you are using Playwright in a multi-thre
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/locators.mdx b/python/versioned_docs/version-stable/locators.mdx
index b73d9820b5..4156641cc2 100644
--- a/python/versioned_docs/version-stable/locators.mdx
+++ b/python/versioned_docs/version-stable/locators.mdx
@@ -1872,6 +1872,7 @@ For less commonly used locators, look at the [other locators](./other-locators.m
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -1901,6 +1902,7 @@ For less commonly used locators, look at the [other locators](./other-locators.m
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/mock.mdx b/python/versioned_docs/version-stable/mock.mdx
index 7d53061853..d01585084e 100644
--- a/python/versioned_docs/version-stable/mock.mdx
+++ b/python/versioned_docs/version-stable/mock.mdx
@@ -382,6 +382,7 @@ For more details, see [WebSocketRoute].
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -411,6 +412,7 @@ For more details, see [WebSocketRoute].
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/navigations.mdx b/python/versioned_docs/version-stable/navigations.mdx
index 933bec760b..b801c2ed66 100644
--- a/python/versioned_docs/version-stable/navigations.mdx
+++ b/python/versioned_docs/version-stable/navigations.mdx
@@ -152,6 +152,7 @@ Playwright splits the process of showing a new document in a page into **navigat
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -181,6 +182,7 @@ Playwright splits the process of showing a new document in a page into **navigat
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/network.mdx b/python/versioned_docs/version-stable/network.mdx
index f4e626087d..2f338009bf 100644
--- a/python/versioned_docs/version-stable/network.mdx
+++ b/python/versioned_docs/version-stable/network.mdx
@@ -514,6 +514,7 @@ It might be that you are using a mock tool such as Mock Service Worker (MSW). Wh
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -543,6 +544,7 @@ It might be that you are using a mock tool such as Mock Service Worker (MSW). Wh
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/other-locators.mdx b/python/versioned_docs/version-stable/other-locators.mdx
index c5f49cfeed..6709059cea 100644
--- a/python/versioned_docs/version-stable/other-locators.mdx
+++ b/python/versioned_docs/version-stable/other-locators.mdx
@@ -875,6 +875,7 @@ For example, `css=article >> text=Hello` captures the element with the text `Hel
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -904,6 +905,7 @@ For example, `css=article >> text=Hello` captures the element with the text `Hel
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/pages.mdx b/python/versioned_docs/version-stable/pages.mdx
index 382c192d70..d5eccc4442 100644
--- a/python/versioned_docs/version-stable/pages.mdx
+++ b/python/versioned_docs/version-stable/pages.mdx
@@ -263,6 +263,7 @@ page.on("popup", handle_popup)
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -292,6 +293,7 @@ page.on("popup", handle_popup)
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/pom.mdx b/python/versioned_docs/version-stable/pom.mdx
index 71769e6da4..fb9ffee6bb 100644
--- a/python/versioned_docs/version-stable/pom.mdx
+++ b/python/versioned_docs/version-stable/pom.mdx
@@ -111,6 +111,7 @@ await search_page.search("search query")
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -140,6 +141,7 @@ await search_page.search("search query")
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/release-notes.mdx b/python/versioned_docs/version-stable/release-notes.mdx
index 505a9fc696..315cd817b6 100644
--- a/python/versioned_docs/version-stable/release-notes.mdx
+++ b/python/versioned_docs/version-stable/release-notes.mdx
@@ -9,6 +9,127 @@ import HTMLCard from '@site/src/components/HTMLCard';
import LiteYouTube from '@site/src/components/LiteYouTube';
+## Version 1.61
+
+### 🔑 WebAuthn passkeys
+
+New [Credentials] virtual authenticator, available via [browser_context.credentials](/api/class-browsercontext.mdx#browser-context-credentials), lets tests register passkeys and answer `navigator.credentials.create()` / `navigator.credentials.get()` ceremonies in the page — no real hardware key required, works in all browsers:
+
+```python
+context = browser.new_context()
+
+# Seed a passkey your backend provisioned for a test user.
+context.credentials.create("example.com",
+ id=credential_id,
+ user_handle=user_handle,
+ private_key=private_key,
+ public_key=public_key,
+)
+context.credentials.install()
+
+page = context.new_page()
+page.goto("https://example.com/login")
+# The page's navigator.credentials.get() is answered with the seeded passkey.
+```
+
+You can also let the app register a passkey once in a setup test, read it back with [credentials.get()](/api/class-credentials.mdx#credentials-get), and seed it into later tests — see [Credentials] for details.
+
+### 🗃️ Web Storage
+
+New [WebStorage] API, available via [page.local_storage](/api/class-page.mdx#page-local-storage) and [page.session_storage](/api/class-page.mdx#page-session-storage), reads and writes the page's storage for the current origin:
+
+```python
+page.local_storage.set_item("token", "abc")
+token = page.local_storage.get_item("token")
+items = page.session_storage.items()
+```
+
+### New APIs
+- [api_response.security_details()](/api/class-apiresponse.mdx#api-response-security-details) and [api_response.server_addr()](/api/class-apiresponse.mdx#api-response-server-addr) mirror the browser-side [response.security_details()](/api/class-response.mdx#response-security-details) and [response.server_addr()](/api/class-response.mdx#response-server-addr).
+- New option `artifacts_dir` in [browser_type.connect_over_cdp()](/api/class-browsertype.mdx#browser-type-connect-over-cdp) controls where artifacts such as traces and downloads are stored when attached to an existing browser.
+- New option `cursor` in [screencast.show_actions()](/api/class-screencast.mdx#screencast-show-actions) controls the cursor decoration rendered for pointer actions.
+- The `on_frame` callback in [screencast.start()](/api/class-screencast.mdx#screencast-start) now receives a `timestamp` of when the frame was presented by the browser.
+
+### 🛠️ Other improvements
+- Playwright now supports Ubuntu 26.04.
+
+### Browser Versions
+- Chromium 149.0.7827.55
+- Mozilla Firefox 151.0
+- WebKit 26.5
+
+This version was also tested against the following stable channels:
+- Google Chrome 149
+- Microsoft Edge 149
+
+## Version 1.60
+
+### 🌐 HAR recording on Tracing
+
+[tracing.start_har()](/api/class-tracing.mdx#tracing-start-har) / [tracing.stop_har()](/api/class-tracing.mdx#tracing-stop-har) expose HAR recording as a first-class tracing API, with the same `content`, `mode` and `url_filter` options as `record_har`:
+
+```python
+context.tracing.start_har("trace.har")
+page = context.new_page()
+page.goto("https://playwright.dev")
+context.tracing.stop_har()
+```
+
+### 🪝 Drop API
+
+New [locator.drop()](/api/class-locator.mdx#locator-drop) simulates an external drag-and-drop of files or clipboard-like data onto an element. Playwright dispatches `dragenter`, `dragover`, and `drop` with a synthetic [DataTransfer] in the page context — works cross-browser and is great for testing upload zones:
+
+```python
+page.locator("#dropzone").drop(
+ files={"name": "note.txt", "mime_type": "text/plain", "buffer": b"hello"},
+)
+
+page.locator("#dropzone").drop(
+ data={
+ "text/plain": "hello world",
+ "text/uri-list": "https://example.com",
+ },
+)
+```
+
+### 🎯 Aria snapshots
+- [expect(page).to_match_aria_snapshot()](/api/class-pageassertions.mdx#page-assertions-to-match-aria-snapshot) now works on a [Page], in addition to a [Locator] — equivalent to asserting against `page.locator("body")`.
+- New `boxes` option on [locator.aria_snapshot()](/api/class-locator.mdx#locator-aria-snapshot) / [page.aria_snapshot()](/api/class-page.mdx#page-aria-snapshot) appends each element's bounding box as `[box=x,y,width,height]`, useful for AI consumption.
+
+### New APIs
+
+#### Browser, Context and Page
+- Event [browser.on("context")](/api/class-browser.mdx#browser-event-context) — fired when a new context is created on the browser.
+- [BrowserContext] now mirrors lifecycle events from its pages: [browser_context.on("download")](/api/class-browsercontext.mdx#browser-context-event-download), [browser_context.on("frameattached")](/api/class-browsercontext.mdx#browser-context-event-frame-attached), [browser_context.on("framedetached")](/api/class-browsercontext.mdx#browser-context-event-frame-detached), [browser_context.on("framenavigated")](/api/class-browsercontext.mdx#browser-context-event-frame-navigated), [browser_context.on("pageclose")](/api/class-browsercontext.mdx#browser-context-event-page-close), [browser_context.on("pageload")](/api/class-browsercontext.mdx#browser-context-event-page-load).
+
+#### Locators and Assertions
+- New option `description` in [page.get_by_role()](/api/class-page.mdx#page-get-by-role) / [locator.get_by_role()](/api/class-locator.mdx#locator-get-by-role) / [frame.get_by_role()](/api/class-frame.mdx#frame-get-by-role) / [frame_locator.get_by_role()](/api/class-framelocator.mdx#frame-locator-get-by-role) for matching the [accessible description](https://www.w3.org/TR/wai-aria-1.2/#dfn-accessible-description).
+- New option `pseudo` in [expect(locator).to_have_css()](/api/class-locatorassertions.mdx#locator-assertions-to-have-css) reads computed styles from `::before` or `::after`.
+- New option `style` in [locator.highlight()](/api/class-locator.mdx#locator-highlight) applies extra inline CSS to the highlight overlay, plus new [page.hide_highlight()](/api/class-page.mdx#page-hide-highlight) to clear all highlights.
+
+#### Network
+- [web_socket_route.protocols](/api/class-websocketroute.mdx#web-socket-route-protocols) returns the WebSocket subprotocols requested by the page.
+- New option `no_defaults` in [browser_type.connect_over_cdp()](/api/class-browsertype.mdx#browser-type-connect-over-cdp) disables Playwright's default overrides on the default context (download behavior, focus emulation, media emulation), so attaching to a user's daily-driver browser doesn't disturb its state.
+
+#### Errors
+- New [web_error.location](/api/class-weberror.mdx#web-error-location) mirrors [console_message.location](/api/class-consolemessage.mdx#console-message-location).
+- [console_message.location](/api/class-consolemessage.mdx#console-message-location) now exposes `line` / `column` properties (`line_number` / `column_number` are deprecated).
+
+### 🛠️ Other improvements
+- Trace Viewer adds a pretty-print toggle for JSON / form request and response bodies in the network details panel.
+
+### Breaking Changes ⚠️
+- Removed long-deprecated `handle` option on `BrowserContext.expose_binding` and `Page.expose_binding`.
+
+### Browser Versions
+- Chromium 148.0.7778.96
+- Mozilla Firefox 150.0.2
+- WebKit 26.4
+
+This version was also tested against the following stable channels:
+- Google Chrome 147
+- Microsoft Edge 147
+
## Version 1.59
### 🎬 Screencast
@@ -2113,6 +2234,7 @@ This version of Playwright was also tested against the following stable channels
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -2142,6 +2264,7 @@ This version of Playwright was also tested against the following stable channels
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/running-tests.mdx b/python/versioned_docs/version-stable/running-tests.mdx
index c4bfb4c733..d97481114d 100644
--- a/python/versioned_docs/version-stable/running-tests.mdx
+++ b/python/versioned_docs/version-stable/running-tests.mdx
@@ -214,6 +214,7 @@ Check out our [debugging guide](./debug.mdx) to learn more about the [Playwright
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -243,6 +244,7 @@ Check out our [debugging guide](./debug.mdx) to learn more about the [Playwright
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/screenshots.mdx b/python/versioned_docs/version-stable/screenshots.mdx
index 18d21b2e63..fd9a5b0378 100644
--- a/python/versioned_docs/version-stable/screenshots.mdx
+++ b/python/versioned_docs/version-stable/screenshots.mdx
@@ -134,6 +134,7 @@ await page.locator(".header").screenshot(path="screenshot.png")
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -163,6 +164,7 @@ await page.locator(".header").screenshot(path="screenshot.png")
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/selenium-grid.mdx b/python/versioned_docs/version-stable/selenium-grid.mdx
index 3cc37ec6de..bf2ba60d83 100644
--- a/python/versioned_docs/version-stable/selenium-grid.mdx
+++ b/python/versioned_docs/version-stable/selenium-grid.mdx
@@ -134,6 +134,7 @@ This means that Selenium 3 is supported in a best-effort manner, where Playwrigh
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -163,6 +164,7 @@ This means that Selenium 3 is supported in a best-effort manner, where Playwrigh
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/service-workers.mdx b/python/versioned_docs/version-stable/service-workers.mdx
index 770f1b85cd..5a33c738da 100644
--- a/python/versioned_docs/version-stable/service-workers.mdx
+++ b/python/versioned_docs/version-stable/service-workers.mdx
@@ -200,6 +200,7 @@ Requests for updated Service Worker main script code currently cannot be routed
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -229,6 +230,7 @@ Requests for updated Service Worker main script code currently cannot be routed
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/test-assertions.mdx b/python/versioned_docs/version-stable/test-assertions.mdx
index c08b62e86e..3a1dff9f09 100644
--- a/python/versioned_docs/version-stable/test-assertions.mdx
+++ b/python/versioned_docs/version-stable/test-assertions.mdx
@@ -110,6 +110,7 @@ def test_foobar(page: Page) -> None:
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -139,6 +140,7 @@ def test_foobar(page: Page) -> None:
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/test-runners.mdx b/python/versioned_docs/version-stable/test-runners.mdx
index 14cd75e882..256940a34b 100644
--- a/python/versioned_docs/version-stable/test-runners.mdx
+++ b/python/versioned_docs/version-stable/test-runners.mdx
@@ -295,6 +295,7 @@ async def test_foo(page: Page):
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -324,6 +325,7 @@ async def test_foo(page: Page):
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/touch-events.mdx b/python/versioned_docs/version-stable/touch-events.mdx
index 9d6916f65c..48fe400cef 100644
--- a/python/versioned_docs/version-stable/touch-events.mdx
+++ b/python/versioned_docs/version-stable/touch-events.mdx
@@ -317,6 +317,7 @@ asyncio.run(main())
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -346,6 +347,7 @@ asyncio.run(main())
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/trace-viewer-intro.mdx b/python/versioned_docs/version-stable/trace-viewer-intro.mdx
index 810f4f977d..4afad24f75 100644
--- a/python/versioned_docs/version-stable/trace-viewer-intro.mdx
+++ b/python/versioned_docs/version-stable/trace-viewer-intro.mdx
@@ -107,6 +107,7 @@ To learn more check out our detailed guide on [Trace Viewer](/trace-viewer.mdx).
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -136,6 +137,7 @@ To learn more check out our detailed guide on [Trace Viewer](/trace-viewer.mdx).
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/trace-viewer.mdx b/python/versioned_docs/version-stable/trace-viewer.mdx
index fb9138a6f6..638d47eb69 100644
--- a/python/versioned_docs/version-stable/trace-viewer.mdx
+++ b/python/versioned_docs/version-stable/trace-viewer.mdx
@@ -205,6 +205,7 @@ Next to the Actions tab you will find the Metadata tab which will show you more
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -234,6 +235,7 @@ Next to the Actions tab you will find the Metadata tab which will show you more
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/videos.mdx b/python/versioned_docs/version-stable/videos.mdx
index 7e072b9a95..6896a7ddb1 100644
--- a/python/versioned_docs/version-stable/videos.mdx
+++ b/python/versioned_docs/version-stable/videos.mdx
@@ -116,6 +116,7 @@ Note that the video is only available after the page or browser context is close
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -145,6 +146,7 @@ Note that the video is only available after the page or browser context is close
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/webview2.mdx b/python/versioned_docs/version-stable/webview2.mdx
index 832ac46923..27a2027184 100644
--- a/python/versioned_docs/version-stable/webview2.mdx
+++ b/python/versioned_docs/version-stable/webview2.mdx
@@ -178,6 +178,7 @@ For debugging tests, see the Playwright [Debugging guide](./debug).
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -207,6 +208,7 @@ For debugging tests, see the Playwright [Debugging guide](./debug).
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"
diff --git a/python/versioned_docs/version-stable/writing-tests.mdx b/python/versioned_docs/version-stable/writing-tests.mdx
index 830e7cabe6..528be2ccdc 100644
--- a/python/versioned_docs/version-stable/writing-tests.mdx
+++ b/python/versioned_docs/version-stable/writing-tests.mdx
@@ -178,6 +178,7 @@ def test_main_navigation(page: Page):
[CDPSession]: /api/class-cdpsession.mdx "CDPSession"
[Clock]: /api/class-clock.mdx "Clock"
[ConsoleMessage]: /api/class-consolemessage.mdx "ConsoleMessage"
+[Credentials]: /api/class-credentials.mdx "Credentials"
[Debugger]: /api/class-debugger.mdx "Debugger"
[Dialog]: /api/class-dialog.mdx "Dialog"
[Download]: /api/class-download.mdx "Download"
@@ -207,6 +208,7 @@ def test_main_navigation(page: Page):
[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"
[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element"
[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument"