From 3f403b102d6828dd0d4f6b920bd5002852b3d196 Mon Sep 17 00:00:00 2001
From: "microsoft-playwright-automation[bot]"
<203992400+microsoft-playwright-automation[bot]@users.noreply.github.com>
Date: Wed, 20 May 2026 11:13:02 +0000
Subject: [PATCH] feat(roll): roll to ToT Playwright (20-05-26)
---
dotnet/docs/actionability.mdx | 2 +
dotnet/docs/api-testing.mdx | 2 +
dotnet/docs/api/class-apirequest.mdx | 2 +
dotnet/docs/api/class-apirequestcontext.mdx | 2 +
dotnet/docs/api/class-apiresponse.mdx | 2 +
.../docs/api/class-apiresponseassertions.mdx | 2 +
dotnet/docs/api/class-browser.mdx | 2 +
dotnet/docs/api/class-browsercontext.mdx | 19 ++
dotnet/docs/api/class-browsertype.mdx | 5 +
dotnet/docs/api/class-cdpsession.mdx | 2 +
dotnet/docs/api/class-cdpsessionevent.mdx | 2 +
dotnet/docs/api/class-clock.mdx | 2 +
dotnet/docs/api/class-consolemessage.mdx | 2 +
dotnet/docs/api/class-credentials.mdx | 250 +++++++++++++++
dotnet/docs/api/class-debugger.mdx | 2 +
dotnet/docs/api/class-dialog.mdx | 2 +
dotnet/docs/api/class-download.mdx | 2 +
dotnet/docs/api/class-elementhandle.mdx | 2 +
dotnet/docs/api/class-filechooser.mdx | 2 +
dotnet/docs/api/class-formdata.mdx | 2 +
dotnet/docs/api/class-frame.mdx | 2 +
dotnet/docs/api/class-framelocator.mdx | 2 +
dotnet/docs/api/class-jshandle.mdx | 2 +
dotnet/docs/api/class-keyboard.mdx | 10 +
dotnet/docs/api/class-locator.mdx | 12 +-
dotnet/docs/api/class-locatorassertions.mdx | 2 +
dotnet/docs/api/class-mouse.mdx | 2 +
dotnet/docs/api/class-page.mdx | 36 +++
dotnet/docs/api/class-pageassertions.mdx | 2 +
dotnet/docs/api/class-playwright.mdx | 2 +
.../docs/api/class-playwrightassertions.mdx | 2 +
dotnet/docs/api/class-request.mdx | 2 +
dotnet/docs/api/class-response.mdx | 2 +
dotnet/docs/api/class-route.mdx | 2 +
dotnet/docs/api/class-screencast.mdx | 5 +
dotnet/docs/api/class-selectors.mdx | 4 +-
dotnet/docs/api/class-timeouterror.mdx | 2 +
dotnet/docs/api/class-touchscreen.mdx | 2 +
dotnet/docs/api/class-tracing.mdx | 2 +
dotnet/docs/api/class-video.mdx | 2 +
dotnet/docs/api/class-weberror.mdx | 2 +
dotnet/docs/api/class-websocket.mdx | 2 +
dotnet/docs/api/class-websocketframe.mdx | 2 +
dotnet/docs/api/class-websocketroute.mdx | 2 +
dotnet/docs/api/class-webstorage.mdx | 212 +++++++++++++
dotnet/docs/api/class-worker.mdx | 2 +
dotnet/docs/aria-snapshots.mdx | 2 +
dotnet/docs/auth.mdx | 2 +
dotnet/docs/browser-contexts.mdx | 2 +
dotnet/docs/browsers.mdx | 2 +
dotnet/docs/ci-intro.mdx | 2 +
dotnet/docs/ci.mdx | 2 +
dotnet/docs/clock.mdx | 2 +
dotnet/docs/codegen-intro.mdx | 2 +
dotnet/docs/codegen.mdx | 2 +
dotnet/docs/debug.mdx | 2 +
dotnet/docs/dialogs.mdx | 2 +
dotnet/docs/docker.mdx | 2 +
dotnet/docs/downloads.mdx | 2 +
dotnet/docs/emulation.mdx | 2 +
dotnet/docs/evaluating.mdx | 2 +
dotnet/docs/events.mdx | 2 +
dotnet/docs/extensibility.mdx | 2 +
dotnet/docs/frames.mdx | 2 +
dotnet/docs/getting-started-cli.mdx | 2 +
dotnet/docs/getting-started-mcp.mdx | 2 +
dotnet/docs/handles.mdx | 2 +
dotnet/docs/input.mdx | 2 +
dotnet/docs/intro.mdx | 2 +
dotnet/docs/languages.mdx | 2 +
dotnet/docs/library.mdx | 2 +
dotnet/docs/locators.mdx | 2 +
dotnet/docs/mock.mdx | 2 +
dotnet/docs/navigations.mdx | 2 +
dotnet/docs/network.mdx | 2 +
dotnet/docs/other-locators.mdx | 2 +
dotnet/docs/pages.mdx | 2 +
dotnet/docs/pom.mdx | 2 +
dotnet/docs/release-notes.mdx | 2 +
dotnet/docs/running-tests.mdx | 2 +
dotnet/docs/screenshots.mdx | 2 +
dotnet/docs/selenium-grid.mdx | 2 +
dotnet/docs/test-assertions.mdx | 2 +
dotnet/docs/test-runners.mdx | 2 +
dotnet/docs/touch-events.mdx | 2 +
dotnet/docs/trace-viewer-intro.mdx | 2 +
dotnet/docs/trace-viewer.mdx | 2 +
dotnet/docs/videos.mdx | 2 +
dotnet/docs/webview2.mdx | 2 +
dotnet/docs/writing-tests.mdx | 2 +
java/docs/accessibility-testing.mdx | 2 +
java/docs/actionability.mdx | 2 +
java/docs/api-testing.mdx | 2 +
java/docs/api/class-apirequest.mdx | 2 +
java/docs/api/class-apirequestcontext.mdx | 2 +
java/docs/api/class-apiresponse.mdx | 2 +
java/docs/api/class-apiresponseassertions.mdx | 2 +
java/docs/api/class-browser.mdx | 2 +
java/docs/api/class-browsercontext.mdx | 19 ++
java/docs/api/class-browsertype.mdx | 5 +
java/docs/api/class-cdpsession.mdx | 2 +
java/docs/api/class-clock.mdx | 2 +
java/docs/api/class-consolemessage.mdx | 2 +
java/docs/api/class-credentials.mdx | 253 +++++++++++++++
java/docs/api/class-debugger.mdx | 2 +
java/docs/api/class-dialog.mdx | 2 +
java/docs/api/class-download.mdx | 2 +
java/docs/api/class-elementhandle.mdx | 2 +
java/docs/api/class-filechooser.mdx | 2 +
java/docs/api/class-formdata.mdx | 2 +
java/docs/api/class-frame.mdx | 2 +
java/docs/api/class-framelocator.mdx | 2 +
java/docs/api/class-jshandle.mdx | 2 +
java/docs/api/class-keyboard.mdx | 10 +
java/docs/api/class-locator.mdx | 12 +-
java/docs/api/class-locatorassertions.mdx | 2 +
java/docs/api/class-mouse.mdx | 2 +
java/docs/api/class-page.mdx | 36 +++
java/docs/api/class-pageassertions.mdx | 2 +
java/docs/api/class-playwright.mdx | 2 +
java/docs/api/class-playwrightassertions.mdx | 2 +
java/docs/api/class-playwrightexception.mdx | 2 +
java/docs/api/class-request.mdx | 2 +
java/docs/api/class-requestoptions.mdx | 2 +
java/docs/api/class-response.mdx | 2 +
java/docs/api/class-route.mdx | 2 +
java/docs/api/class-screencast.mdx | 5 +
java/docs/api/class-selectors.mdx | 4 +-
java/docs/api/class-timeouterror.mdx | 2 +
java/docs/api/class-touchscreen.mdx | 2 +
java/docs/api/class-tracing.mdx | 2 +
java/docs/api/class-video.mdx | 2 +
java/docs/api/class-weberror.mdx | 2 +
java/docs/api/class-websocket.mdx | 2 +
java/docs/api/class-websocketframe.mdx | 2 +
java/docs/api/class-websocketroute.mdx | 2 +
java/docs/api/class-webstorage.mdx | 214 +++++++++++++
java/docs/api/class-worker.mdx | 2 +
java/docs/aria-snapshots.mdx | 2 +
java/docs/auth.mdx | 2 +
java/docs/browser-contexts.mdx | 2 +
java/docs/browsers.mdx | 2 +
java/docs/ci-intro.mdx | 2 +
java/docs/ci.mdx | 14 +-
java/docs/clock.mdx | 2 +
java/docs/codegen-intro.mdx | 2 +
java/docs/codegen.mdx | 2 +
java/docs/debug.mdx | 2 +
java/docs/dialogs.mdx | 2 +
java/docs/docker.mdx | 18 +-
java/docs/downloads.mdx | 2 +
java/docs/emulation.mdx | 2 +
java/docs/evaluating.mdx | 2 +
java/docs/events.mdx | 2 +
java/docs/extensibility.mdx | 2 +
java/docs/frames.mdx | 2 +
java/docs/getting-started-cli.mdx | 2 +
java/docs/getting-started-mcp.mdx | 2 +
java/docs/handles.mdx | 2 +
java/docs/input.mdx | 2 +
java/docs/intro.mdx | 4 +-
java/docs/junit.mdx | 2 +
java/docs/languages.mdx | 2 +
java/docs/locators.mdx | 2 +
java/docs/mock.mdx | 2 +
java/docs/navigations.mdx | 2 +
java/docs/network.mdx | 2 +
java/docs/other-locators.mdx | 2 +
java/docs/pages.mdx | 2 +
java/docs/pom.mdx | 2 +
java/docs/release-notes.mdx | 2 +
java/docs/running-tests.mdx | 2 +
java/docs/screenshots.mdx | 2 +
java/docs/selenium-grid.mdx | 2 +
java/docs/test-assertions.mdx | 2 +
java/docs/test-runners.mdx | 6 +-
java/docs/threading.mdx | 2 +
java/docs/touch-events.mdx | 2 +
java/docs/trace-viewer-intro.mdx | 2 +
java/docs/trace-viewer.mdx | 2 +
java/docs/videos.mdx | 2 +
java/docs/webview2.mdx | 2 +
java/docs/writing-tests.mdx | 2 +
nodejs/docs/accessibility-testing.mdx | 2 +
nodejs/docs/actionability.mdx | 2 +
nodejs/docs/api-testing.mdx | 2 +
nodejs/docs/api/class-android.mdx | 2 +
nodejs/docs/api/class-androiddevice.mdx | 2 +
nodejs/docs/api/class-androidinput.mdx | 2 +
nodejs/docs/api/class-androidsocket.mdx | 2 +
nodejs/docs/api/class-androidwebview.mdx | 2 +
nodejs/docs/api/class-apirequest.mdx | 2 +
nodejs/docs/api/class-apirequestcontext.mdx | 2 +
nodejs/docs/api/class-apiresponse.mdx | 2 +
.../docs/api/class-apiresponseassertions.mdx | 2 +
nodejs/docs/api/class-browser.mdx | 2 +
nodejs/docs/api/class-browsercontext.mdx | 19 ++
nodejs/docs/api/class-browserserver.mdx | 2 +
nodejs/docs/api/class-browsertype.mdx | 5 +
nodejs/docs/api/class-cdpsession.mdx | 2 +
nodejs/docs/api/class-clock.mdx | 2 +
nodejs/docs/api/class-consolemessage.mdx | 2 +
nodejs/docs/api/class-coverage.mdx | 2 +
nodejs/docs/api/class-credentials.mdx | 291 ++++++++++++++++++
nodejs/docs/api/class-debugger.mdx | 2 +
nodejs/docs/api/class-dialog.mdx | 2 +
nodejs/docs/api/class-disposable.mdx | 2 +
nodejs/docs/api/class-download.mdx | 2 +
nodejs/docs/api/class-electron.mdx | 2 +
nodejs/docs/api/class-electronapplication.mdx | 2 +
nodejs/docs/api/class-elementhandle.mdx | 2 +
nodejs/docs/api/class-filechooser.mdx | 2 +
nodejs/docs/api/class-fixtures.mdx | 2 +
nodejs/docs/api/class-frame.mdx | 2 +
nodejs/docs/api/class-framelocator.mdx | 2 +
nodejs/docs/api/class-fullconfig.mdx | 19 ++
nodejs/docs/api/class-fullproject.mdx | 2 +
nodejs/docs/api/class-genericassertions.mdx | 2 +
nodejs/docs/api/class-jshandle.mdx | 2 +
nodejs/docs/api/class-keyboard.mdx | 10 +
nodejs/docs/api/class-location.mdx | 2 +
nodejs/docs/api/class-locator.mdx | 14 +-
nodejs/docs/api/class-locatorassertions.mdx | 2 +
nodejs/docs/api/class-logger.mdx | 2 +
nodejs/docs/api/class-mouse.mdx | 2 +
nodejs/docs/api/class-page.mdx | 46 +++
nodejs/docs/api/class-pageassertions.mdx | 2 +
nodejs/docs/api/class-playwright.mdx | 2 +
.../docs/api/class-playwrightassertions.mdx | 2 +
nodejs/docs/api/class-reporter.mdx | 2 +
nodejs/docs/api/class-request.mdx | 2 +
nodejs/docs/api/class-response.mdx | 2 +
nodejs/docs/api/class-route.mdx | 2 +
nodejs/docs/api/class-screencast.mdx | 5 +
nodejs/docs/api/class-selectors.mdx | 4 +-
nodejs/docs/api/class-snapshotassertions.mdx | 2 +
nodejs/docs/api/class-suite.mdx | 2 +
nodejs/docs/api/class-test.mdx | 2 +
nodejs/docs/api/class-testcase.mdx | 2 +
nodejs/docs/api/class-testconfig.mdx | 2 +
nodejs/docs/api/class-testerror.mdx | 2 +
nodejs/docs/api/class-testinfo.mdx | 2 +
nodejs/docs/api/class-testinfoerror.mdx | 2 +
nodejs/docs/api/class-testoptions.mdx | 21 +-
nodejs/docs/api/class-testproject.mdx | 100 ++++++
nodejs/docs/api/class-testresult.mdx | 2 +
nodejs/docs/api/class-teststep.mdx | 2 +
nodejs/docs/api/class-teststepinfo.mdx | 2 +
nodejs/docs/api/class-timeouterror.mdx | 2 +
nodejs/docs/api/class-touchscreen.mdx | 2 +
nodejs/docs/api/class-tracing.mdx | 2 +
nodejs/docs/api/class-video.mdx | 2 +
nodejs/docs/api/class-weberror.mdx | 2 +
nodejs/docs/api/class-websocket.mdx | 2 +
nodejs/docs/api/class-websocketroute.mdx | 2 +
nodejs/docs/api/class-webstorage.mdx | 243 +++++++++++++++
nodejs/docs/api/class-worker.mdx | 2 +
nodejs/docs/api/class-workerinfo.mdx | 2 +
nodejs/docs/aria-snapshots.mdx | 2 +
nodejs/docs/auth.mdx | 2 +
nodejs/docs/best-practices.mdx | 2 +
nodejs/docs/browser-contexts.mdx | 2 +
nodejs/docs/browsers.mdx | 2 +
nodejs/docs/canary-releases.mdx | 2 +
nodejs/docs/chrome-extensions.mdx | 2 +
nodejs/docs/ci-intro.mdx | 2 +
nodejs/docs/ci.mdx | 2 +
nodejs/docs/clock.mdx | 2 +
nodejs/docs/codegen-intro.mdx | 2 +
nodejs/docs/codegen.mdx | 2 +
nodejs/docs/debug.mdx | 2 +
nodejs/docs/dialogs.mdx | 2 +
nodejs/docs/docker.mdx | 2 +
nodejs/docs/downloads.mdx | 2 +
nodejs/docs/emulation.mdx | 2 +
nodejs/docs/evaluating.mdx | 2 +
nodejs/docs/events.mdx | 2 +
nodejs/docs/extensibility.mdx | 2 +
nodejs/docs/frames.mdx | 2 +
nodejs/docs/getting-started-cli.mdx | 2 +
nodejs/docs/getting-started-mcp.mdx | 2 +
nodejs/docs/getting-started-vscode.mdx | 2 +
nodejs/docs/handles.mdx | 2 +
nodejs/docs/input.mdx | 2 +
nodejs/docs/intro.mdx | 2 +
nodejs/docs/languages.mdx | 2 +
nodejs/docs/library.mdx | 2 +
nodejs/docs/locators.mdx | 2 +
nodejs/docs/mock-browser.mdx | 2 +
nodejs/docs/mock.mdx | 2 +
nodejs/docs/navigations.mdx | 2 +
nodejs/docs/network.mdx | 2 +
nodejs/docs/other-locators.mdx | 2 +
nodejs/docs/pages.mdx | 2 +
nodejs/docs/pom.mdx | 2 +
nodejs/docs/protractor.mdx | 2 +
nodejs/docs/puppeteer.mdx | 2 +
nodejs/docs/release-notes.mdx | 2 +
nodejs/docs/running-tests.mdx | 8 +
nodejs/docs/screenshots.mdx | 2 +
nodejs/docs/selenium-grid.mdx | 2 +
nodejs/docs/service-workers.mdx | 2 +
nodejs/docs/test-agents.mdx | 10 +
nodejs/docs/test-annotations.mdx | 2 +
nodejs/docs/test-assertions.mdx | 17 +-
nodejs/docs/test-cli.mdx | 5 +-
nodejs/docs/test-components.mdx | 2 +
nodejs/docs/test-configuration.mdx | 2 +
nodejs/docs/test-fixtures.mdx | 2 +
nodejs/docs/test-global-setup-teardown.mdx | 2 +
nodejs/docs/test-parallel.mdx | 2 +
nodejs/docs/test-parameterize.mdx | 2 +
nodejs/docs/test-projects.mdx | 2 +
nodejs/docs/test-reporters.mdx | 2 +
nodejs/docs/test-retries.mdx | 2 +
nodejs/docs/test-sharding.mdx | 2 +
nodejs/docs/test-snapshots.mdx | 2 +
nodejs/docs/test-timeouts.mdx | 2 +
nodejs/docs/test-typescript.mdx | 2 +
nodejs/docs/test-ui-mode.mdx | 2 +
nodejs/docs/test-use-options.mdx | 2 +
nodejs/docs/test-webserver.mdx | 2 +
nodejs/docs/testing-library.mdx | 2 +
nodejs/docs/touch-events.mdx | 2 +
nodejs/docs/trace-viewer-intro.mdx | 2 +
nodejs/docs/trace-viewer.mdx | 2 +
nodejs/docs/videos.mdx | 2 +
nodejs/docs/webview2.mdx | 2 +
nodejs/docs/writing-tests.mdx | 2 +
python/docs/actionability.mdx | 2 +
python/docs/api-testing.mdx | 2 +
python/docs/api/class-apirequest.mdx | 2 +
python/docs/api/class-apirequestcontext.mdx | 2 +
python/docs/api/class-apiresponse.mdx | 2 +
.../docs/api/class-apiresponseassertions.mdx | 2 +
python/docs/api/class-browser.mdx | 2 +
python/docs/api/class-browsercontext.mdx | 19 ++
python/docs/api/class-browsertype.mdx | 5 +
python/docs/api/class-cdpsession.mdx | 2 +
python/docs/api/class-clock.mdx | 2 +
python/docs/api/class-consolemessage.mdx | 2 +
python/docs/api/class-credentials.mdx | 247 +++++++++++++++
python/docs/api/class-debugger.mdx | 2 +
python/docs/api/class-dialog.mdx | 2 +
python/docs/api/class-download.mdx | 2 +
python/docs/api/class-elementhandle.mdx | 2 +
python/docs/api/class-error.mdx | 2 +
python/docs/api/class-filechooser.mdx | 2 +
python/docs/api/class-formdata.mdx | 2 +
python/docs/api/class-frame.mdx | 2 +
python/docs/api/class-framelocator.mdx | 2 +
python/docs/api/class-jshandle.mdx | 2 +
python/docs/api/class-keyboard.mdx | 13 +
python/docs/api/class-locator.mdx | 15 +-
python/docs/api/class-locatorassertions.mdx | 2 +
python/docs/api/class-mouse.mdx | 2 +
python/docs/api/class-page.mdx | 36 +++
python/docs/api/class-pageassertions.mdx | 2 +
python/docs/api/class-playwright.mdx | 2 +
python/docs/api/class-request.mdx | 2 +
python/docs/api/class-response.mdx | 2 +
python/docs/api/class-route.mdx | 2 +
python/docs/api/class-screencast.mdx | 5 +
python/docs/api/class-selectors.mdx | 4 +-
python/docs/api/class-timeouterror.mdx | 2 +
python/docs/api/class-touchscreen.mdx | 2 +
python/docs/api/class-tracing.mdx | 2 +
python/docs/api/class-video.mdx | 2 +
python/docs/api/class-weberror.mdx | 2 +
python/docs/api/class-websocket.mdx | 2 +
python/docs/api/class-websocketroute.mdx | 2 +
python/docs/api/class-webstorage.mdx | 234 ++++++++++++++
python/docs/api/class-worker.mdx | 2 +
python/docs/aria-snapshots.mdx | 2 +
python/docs/auth.mdx | 2 +
python/docs/browser-contexts.mdx | 2 +
python/docs/browsers.mdx | 2 +
python/docs/chrome-extensions.mdx | 2 +
python/docs/ci-intro.mdx | 2 +
python/docs/ci.mdx | 14 +-
python/docs/clock.mdx | 2 +
python/docs/codegen-intro.mdx | 2 +
python/docs/codegen.mdx | 2 +
python/docs/debug.mdx | 2 +
python/docs/dialogs.mdx | 2 +
python/docs/docker.mdx | 20 +-
python/docs/downloads.mdx | 2 +
python/docs/emulation.mdx | 2 +
python/docs/evaluating.mdx | 2 +
python/docs/events.mdx | 2 +
python/docs/extensibility.mdx | 2 +
python/docs/frames.mdx | 2 +
python/docs/getting-started-cli.mdx | 2 +
python/docs/getting-started-mcp.mdx | 2 +
python/docs/handles.mdx | 2 +
python/docs/input.mdx | 2 +
python/docs/intro.mdx | 2 +
python/docs/languages.mdx | 2 +
python/docs/library.mdx | 2 +
python/docs/locators.mdx | 2 +
python/docs/mock.mdx | 2 +
python/docs/navigations.mdx | 2 +
python/docs/network.mdx | 2 +
python/docs/other-locators.mdx | 2 +
python/docs/pages.mdx | 2 +
python/docs/pom.mdx | 2 +
python/docs/release-notes.mdx | 2 +
python/docs/running-tests.mdx | 2 +
python/docs/screenshots.mdx | 2 +
python/docs/selenium-grid.mdx | 2 +
python/docs/service-workers.mdx | 2 +
python/docs/test-assertions.mdx | 2 +
python/docs/test-runners.mdx | 2 +
python/docs/touch-events.mdx | 2 +
python/docs/trace-viewer-intro.mdx | 2 +
python/docs/trace-viewer.mdx | 2 +
python/docs/videos.mdx | 2 +
python/docs/webview2.mdx | 2 +
python/docs/writing-tests.mdx | 2 +
src/components/GitHubStarButton/index.tsx | 2 +-
420 files changed, 3275 insertions(+), 49 deletions(-)
create mode 100644 dotnet/docs/api/class-credentials.mdx
create mode 100644 dotnet/docs/api/class-webstorage.mdx
create mode 100644 java/docs/api/class-credentials.mdx
create mode 100644 java/docs/api/class-webstorage.mdx
create mode 100644 nodejs/docs/api/class-credentials.mdx
create mode 100644 nodejs/docs/api/class-webstorage.mdx
create mode 100644 python/docs/api/class-credentials.mdx
create mode 100644 python/docs/api/class-webstorage.mdx
diff --git a/dotnet/docs/actionability.mdx b/dotnet/docs/actionability.mdx
index 7f5775c1f2..59e74a3488 100644
--- a/dotnet/docs/actionability.mdx
+++ b/dotnet/docs/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/docs/api-testing.mdx b/dotnet/docs/api-testing.mdx
index 590d5003a9..86601ec14b 100644
--- a/dotnet/docs/api-testing.mdx
+++ b/dotnet/docs/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/docs/api/class-apirequest.mdx b/dotnet/docs/api/class-apirequest.mdx
index 3c3be17438..06cd1bd4e8 100644
--- a/dotnet/docs/api/class-apirequest.mdx
+++ b/dotnet/docs/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/docs/api/class-apirequestcontext.mdx b/dotnet/docs/api/class-apirequestcontext.mdx
index c796f0c33d..81992d2f70 100644
--- a/dotnet/docs/api/class-apirequestcontext.mdx
+++ b/dotnet/docs/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/docs/api/class-apiresponse.mdx b/dotnet/docs/api/class-apiresponse.mdx
index 6beb295061..11534cb98a 100644
--- a/dotnet/docs/api/class-apiresponse.mdx
+++ b/dotnet/docs/api/class-apiresponse.mdx
@@ -202,6 +202,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 +233,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/docs/api/class-apiresponseassertions.mdx b/dotnet/docs/api/class-apiresponseassertions.mdx
index e7744a6df1..d15f3f9e29 100644
--- a/dotnet/docs/api/class-apiresponseassertions.mdx
+++ b/dotnet/docs/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/docs/api/class-browser.mdx b/dotnet/docs/api/class-browser.mdx
index 3f3df12d13..26c79fa5a7 100644
--- a/dotnet/docs/api/class-browser.mdx
+++ b/dotnet/docs/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/docs/api/class-browsercontext.mdx b/dotnet/docs/api/class-browsercontext.mdx
index fbfa060530..f99a74cec9 100644
--- a/dotnet/docs/api/class-browsercontext.mdx
+++ b/dotnet/docs/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
@@ -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/docs/api/class-browsertype.mdx b/dotnet/docs/api/class-browsertype.mdx
index de74132e1d..b20d6a1880 100644
--- a/dotnet/docs/api/class-browsertype.mdx
+++ b/dotnet/docs/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/docs/api/class-cdpsession.mdx b/dotnet/docs/api/class-cdpsession.mdx
index aebbb0cc23..e1f013d3ea 100644
--- a/dotnet/docs/api/class-cdpsession.mdx
+++ b/dotnet/docs/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/docs/api/class-cdpsessionevent.mdx b/dotnet/docs/api/class-cdpsessionevent.mdx
index 6e297e9406..7766231652 100644
--- a/dotnet/docs/api/class-cdpsessionevent.mdx
+++ b/dotnet/docs/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/docs/api/class-clock.mdx b/dotnet/docs/api/class-clock.mdx
index a444ade601..b9c4bd4bd8 100644
--- a/dotnet/docs/api/class-clock.mdx
+++ b/dotnet/docs/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/docs/api/class-consolemessage.mdx b/dotnet/docs/api/class-consolemessage.mdx
index b39243d75f..f50b54c633 100644
--- a/dotnet/docs/api/class-consolemessage.mdx
+++ b/dotnet/docs/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/docs/api/class-credentials.mdx b/dotnet/docs/api/class-credentials.mdx
new file mode 100644
index 0000000000..2819e81627
--- /dev/null
+++ b/dotnet/docs/api/class-credentials.mdx
@@ -0,0 +1,250 @@
+---
+id: class-credentials
+title: "Credentials"
+---
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import HTMLCard from '@site/src/components/HTMLCard';
+
+
+`Credentials` provides a virtual WebAuthn authenticator scoped to a [BrowserContext]. It lets tests seed credentials, intercept `navigator.credentials.create()` / `navigator.credentials.get()` calls in pages, and complete WebAuthn ceremonies without a real authenticator.
+
+Implemented in userland via an injected script, so it works across Chromium, Firefox and WebKit.
+
+**Usage**
+
+
+---
+
+## Methods
+
+### CreateAsync {#credentials-create}
+
+Added in: v1.61credentials.CreateAsync
+
+Seeds a virtual WebAuthn credential. With only `rpId`, generates a fresh ECDSA P-256 keypair, credential id and user handle. To import a pre-registered credential (e.g. authenticating as an existing test user the server already knows about), supply all four of `id`, `userHandle`, `privateKey` and `publicKey` together. Call [Credentials.InstallAsync()](/api/class-credentials.mdx#credentials-install) before navigating to a page that uses WebAuthn.
+
+**Usage**
+
+```csharp
+await Credentials.CreateAsync(options);
+```
+
+**Arguments**
+- `options` `CredentialsCreateOptions?`
+ - `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.
+ - `RpId` [string]#
+
+ Relying party id (typically the site's effective domain).
+ - `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 previously seeded credential.
+
+**Usage**
+
+```csharp
+await Credentials.DeleteAsync(id);
+```
+
+**Arguments**
+- `id` [string]#
+
+ Base64url-encoded credential id.
+
+**Returns**
+- [void]#
+
+---
+
+### GetAsync {#credentials-get}
+
+Added in: v1.61credentials.GetAsync
+
+Returns seeded credentials, optionally filtered by `rpId` or `id`.
+
+**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 `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 `install()` populates the registry but the page will never see those credentials.
+
+**Usage**
+
+```csharp
+await Credentials.InstallAsync();
+```
+
+**Returns**
+- [void]#
+
+---
+
+### SetUserVerifiedAsync {#credentials-set-user-verified}
+
+Added in: v1.61credentials.SetUserVerifiedAsync
+
+Toggles whether the virtual authenticator auto-approves user-verification prompts. Useful for simulating a user denying biometric verification.
+
+**Usage**
+
+```csharp
+await Credentials.SetUserVerifiedAsync(value);
+```
+
+**Arguments**
+- `value` [bool]#
+
+ `true` to auto-approve user verification (default), `false` to refuse.
+
+**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/docs/api/class-debugger.mdx b/dotnet/docs/api/class-debugger.mdx
index f1ff02ea9e..300a1d4f88 100644
--- a/dotnet/docs/api/class-debugger.mdx
+++ b/dotnet/docs/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/docs/api/class-dialog.mdx b/dotnet/docs/api/class-dialog.mdx
index a82f613bc8..edfb22cc19 100644
--- a/dotnet/docs/api/class-dialog.mdx
+++ b/dotnet/docs/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/docs/api/class-download.mdx b/dotnet/docs/api/class-download.mdx
index 40e27bba72..92ae66d3ac 100644
--- a/dotnet/docs/api/class-download.mdx
+++ b/dotnet/docs/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/docs/api/class-elementhandle.mdx b/dotnet/docs/api/class-elementhandle.mdx
index d822b15a5c..d5060d7a17 100644
--- a/dotnet/docs/api/class-elementhandle.mdx
+++ b/dotnet/docs/api/class-elementhandle.mdx
@@ -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/docs/api/class-filechooser.mdx b/dotnet/docs/api/class-filechooser.mdx
index 1862ccf44c..1e0df2ead8 100644
--- a/dotnet/docs/api/class-filechooser.mdx
+++ b/dotnet/docs/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/docs/api/class-formdata.mdx b/dotnet/docs/api/class-formdata.mdx
index 4bf909aa2a..3c2a112ab5 100644
--- a/dotnet/docs/api/class-formdata.mdx
+++ b/dotnet/docs/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/docs/api/class-frame.mdx b/dotnet/docs/api/class-frame.mdx
index e4e9da284b..8e3d26b7a1 100644
--- a/dotnet/docs/api/class-frame.mdx
+++ b/dotnet/docs/api/class-frame.mdx
@@ -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/docs/api/class-framelocator.mdx b/dotnet/docs/api/class-framelocator.mdx
index 7ee279cbb3..8e2572433c 100644
--- a/dotnet/docs/api/class-framelocator.mdx
+++ b/dotnet/docs/api/class-framelocator.mdx
@@ -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/docs/api/class-jshandle.mdx b/dotnet/docs/api/class-jshandle.mdx
index 9e1fa7011f..bdd1c8c745 100644
--- a/dotnet/docs/api/class-jshandle.mdx
+++ b/dotnet/docs/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/docs/api/class-keyboard.mdx b/dotnet/docs/api/class-keyboard.mdx
index 6aa4f3aa39..2d51402bc4 100644
--- a/dotnet/docs/api/class-keyboard.mdx
+++ b/dotnet/docs/api/class-keyboard.mdx
@@ -174,6 +174,8 @@ In most cases, you should use [Locator.FillAsync()](/api/class-locator.mdx#locat
Sends a `keydown`, `keypress`/`input`, and `keyup` event for each character in the text.
+When [NamedKeys](/api/class-keyboard.mdx#keyboard-type-option-named-keys) is `true`, anything inside `{}` is treated as a key name (same format as [Keyboard.PressAsync()](/api/class-keyboard.mdx#keyboard-press)).
+
To press a special key, like `Control` or `ArrowDown`, use [Keyboard.PressAsync()](/api/class-keyboard.mdx#keyboard-press).
**Usage**
@@ -181,6 +183,9 @@ To press a special key, like `Control` or `ArrowDown`, use [Keyboard.PressAsync(
```csharp
await page.Keyboard.TypeAsync("Hello"); // types instantly
await page.Keyboard.TypeAsync("World", new() { Delay = 100 }); // types slower, like a user
+
+// Mix text and special keys
+await page.Keyboard.TypeAsync("Hello{Enter}World", new() { NamedKeys = true });
```
:::note
@@ -199,6 +204,9 @@ For characters that are not on a US keyboard, only an `input` event will be sent
- `Delay` [float]? *(optional)*#
Time to wait between key presses in milliseconds. Defaults to 0.
+ - `NamedKeys` [bool]? *(optional)* Added in: v1.61#
+
+ When [NamedKeys](/api/class-keyboard.mdx#keyboard-type-option-named-keys) is `true`, anything inside `{}` is treated as a key name (same format as [Keyboard.PressAsync()](/api/class-keyboard.mdx#keyboard-press)). Use `{{` to type a literal brace character. Defaults to `false`.
**Returns**
- [void]#
@@ -237,6 +245,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 +276,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/docs/api/class-locator.mdx b/dotnet/docs/api/class-locator.mdx
index 5e7f72c91a..1fcd918d03 100644
--- a/dotnet/docs/api/class-locator.mdx
+++ b/dotnet/docs/api/class-locator.mdx
@@ -1972,6 +1972,8 @@ In most cases, you should use [Locator.FillAsync()](/api/class-locator.mdx#locat
Focuses the element, and then sends a `keydown`, `keypress`/`input`, and `keyup` event for each character in the text.
+When [NamedKeys](/api/class-locator.mdx#locator-press-sequentially-option-named-keys) is `true`, anything inside `{}` is treated as a key name (same format as [Locator.PressAsync()](/api/class-locator.mdx#locator-press)).
+
To press a special key, like `Control` or `ArrowDown`, use [Locator.PressAsync()](/api/class-locator.mdx#locator-press).
**Usage**
@@ -1979,6 +1981,9 @@ To press a special key, like `Control` or `ArrowDown`, use [Locator.PressAsync()
```csharp
await locator.PressSequentiallyAsync("Hello"); // Types instantly
await locator.PressSequentiallyAsync("World", new() { Delay = 100 }); // Types slower, like a user
+
+// Mix characters and named keys
+await locator.PressSequentiallyAsync("Hello{Enter}World", new() { NamedKeys = true });
```
An example of typing into a text field and then submitting the form:
@@ -1992,11 +1997,14 @@ await locator.PressAsync("Enter");
**Arguments**
- `text` [string]#
- String of characters to sequentially press into a focused element.
+ String of characters to sequentially press into a focused element. When [NamedKeys](/api/class-locator.mdx#locator-press-sequentially-option-named-keys) is `true`, anything inside `{}` is treated as a key name (same format as [Locator.PressAsync()](/api/class-locator.mdx#locator-press)).
- `options` `LocatorPressSequentiallyOptions?` *(optional)*
- `Delay` [float]? *(optional)*#
Time to wait between key presses in milliseconds. Defaults to 0.
+ - `NamedKeys` [bool]? *(optional)* Added in: v1.61#
+
+ When [NamedKeys](/api/class-locator.mdx#locator-press-sequentially-option-named-keys) is `true`, anything inside `{}` is treated as a key name (same format as [Locator.PressAsync()](/api/class-locator.mdx#locator-press)). Use `{{` to type a literal brace character. Defaults to `false`.
- `NoWaitAfter` [bool]? *(optional)*#
:::warning[Deprecated]
@@ -2628,6 +2636,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 +2667,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/docs/api/class-locatorassertions.mdx b/dotnet/docs/api/class-locatorassertions.mdx
index a1d9edb7c5..4ec8cf2248 100644
--- a/dotnet/docs/api/class-locatorassertions.mdx
+++ b/dotnet/docs/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/docs/api/class-mouse.mdx b/dotnet/docs/api/class-mouse.mdx
index 08514fcc58..a4da666c11 100644
--- a/dotnet/docs/api/class-mouse.mdx
+++ b/dotnet/docs/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/docs/api/class-page.mdx b/dotnet/docs/api/class-page.mdx
index 6ab853b2e6..750dd02efd 100644
--- a/dotnet/docs/api/class-page.mdx
+++ b/dotnet/docs/api/class-page.mdx
@@ -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
@@ -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/docs/api/class-pageassertions.mdx b/dotnet/docs/api/class-pageassertions.mdx
index 26ba9efb51..ad8cdeafdb 100644
--- a/dotnet/docs/api/class-pageassertions.mdx
+++ b/dotnet/docs/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/docs/api/class-playwright.mdx b/dotnet/docs/api/class-playwright.mdx
index b3670d11bc..24d8998ae8 100644
--- a/dotnet/docs/api/class-playwright.mdx
+++ b/dotnet/docs/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/docs/api/class-playwrightassertions.mdx b/dotnet/docs/api/class-playwrightassertions.mdx
index a3a5c0ee90..236de1c18b 100644
--- a/dotnet/docs/api/class-playwrightassertions.mdx
+++ b/dotnet/docs/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/docs/api/class-request.mdx b/dotnet/docs/api/class-request.mdx
index 8517d08c1b..fc2e37024a 100644
--- a/dotnet/docs/api/class-request.mdx
+++ b/dotnet/docs/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/docs/api/class-response.mdx b/dotnet/docs/api/class-response.mdx
index 1966b2a87b..9d1f5400ef 100644
--- a/dotnet/docs/api/class-response.mdx
+++ b/dotnet/docs/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/docs/api/class-route.mdx b/dotnet/docs/api/class-route.mdx
index e85047547d..8ab228dddb 100644
--- a/dotnet/docs/api/class-route.mdx
+++ b/dotnet/docs/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/docs/api/class-screencast.mdx b/dotnet/docs/api/class-screencast.mdx
index f4b172b1d4..cbade9d152 100644
--- a/dotnet/docs/api/class-screencast.mdx
+++ b/dotnet/docs/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`.
@@ -210,6 +213,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 +244,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/docs/api/class-selectors.mdx b/dotnet/docs/api/class-selectors.mdx
index 1562cf228b..543f717ef6 100644
--- a/dotnet/docs/api/class-selectors.mdx
+++ b/dotnet/docs/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/docs/api/class-timeouterror.mdx b/dotnet/docs/api/class-timeouterror.mdx
index 163c9827b0..36e8f6c33e 100644
--- a/dotnet/docs/api/class-timeouterror.mdx
+++ b/dotnet/docs/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/docs/api/class-touchscreen.mdx b/dotnet/docs/api/class-touchscreen.mdx
index c6c3083b57..39f4e805ba 100644
--- a/dotnet/docs/api/class-touchscreen.mdx
+++ b/dotnet/docs/api/class-touchscreen.mdx
@@ -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/docs/api/class-tracing.mdx b/dotnet/docs/api/class-tracing.mdx
index ee6eba9625..44a9cfe584 100644
--- a/dotnet/docs/api/class-tracing.mdx
+++ b/dotnet/docs/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/docs/api/class-video.mdx b/dotnet/docs/api/class-video.mdx
index 08272896c8..9c5404c05a 100644
--- a/dotnet/docs/api/class-video.mdx
+++ b/dotnet/docs/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/docs/api/class-weberror.mdx b/dotnet/docs/api/class-weberror.mdx
index 65ce5c9374..a1ecdeac03 100644
--- a/dotnet/docs/api/class-weberror.mdx
+++ b/dotnet/docs/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/docs/api/class-websocket.mdx b/dotnet/docs/api/class-websocket.mdx
index 830bf38ff3..10ac783eb2 100644
--- a/dotnet/docs/api/class-websocket.mdx
+++ b/dotnet/docs/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/docs/api/class-websocketframe.mdx b/dotnet/docs/api/class-websocketframe.mdx
index 1b1e568f3d..82c440e596 100644
--- a/dotnet/docs/api/class-websocketframe.mdx
+++ b/dotnet/docs/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/docs/api/class-websocketroute.mdx b/dotnet/docs/api/class-websocketroute.mdx
index 95663db1a0..d709f45152 100644
--- a/dotnet/docs/api/class-websocketroute.mdx
+++ b/dotnet/docs/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/docs/api/class-webstorage.mdx b/dotnet/docs/api/class-webstorage.mdx
new file mode 100644
index 0000000000..cba6ed2fe4
--- /dev/null
+++ b/dotnet/docs/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`, or `null` if the key is not 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`. 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`. 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/docs/api/class-worker.mdx b/dotnet/docs/api/class-worker.mdx
index f5f95f39a3..c1e1f4236b 100644
--- a/dotnet/docs/api/class-worker.mdx
+++ b/dotnet/docs/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/docs/aria-snapshots.mdx b/dotnet/docs/aria-snapshots.mdx
index 6cadb300dd..f34c12c04b 100644
--- a/dotnet/docs/aria-snapshots.mdx
+++ b/dotnet/docs/aria-snapshots.mdx
@@ -382,6 +382,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 +413,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/docs/auth.mdx b/dotnet/docs/auth.mdx
index 883e6faaa7..e3a858646e 100644
--- a/dotnet/docs/auth.mdx
+++ b/dotnet/docs/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/docs/browser-contexts.mdx b/dotnet/docs/browser-contexts.mdx
index 255c169e83..237c167e01 100644
--- a/dotnet/docs/browser-contexts.mdx
+++ b/dotnet/docs/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/docs/browsers.mdx b/dotnet/docs/browsers.mdx
index 0c67dad32f..f3e6ebc4fb 100644
--- a/dotnet/docs/browsers.mdx
+++ b/dotnet/docs/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/docs/ci-intro.mdx b/dotnet/docs/ci-intro.mdx
index 29649a351b..f81a489f8f 100644
--- a/dotnet/docs/ci-intro.mdx
+++ b/dotnet/docs/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/docs/ci.mdx b/dotnet/docs/ci.mdx
index 60c1b37cc0..bdd6afc587 100644
--- a/dotnet/docs/ci.mdx
+++ b/dotnet/docs/ci.mdx
@@ -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/docs/clock.mdx b/dotnet/docs/clock.mdx
index efbc288672..fd3a10b7bd 100644
--- a/dotnet/docs/clock.mdx
+++ b/dotnet/docs/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/docs/codegen-intro.mdx b/dotnet/docs/codegen-intro.mdx
index 06ecfcd7ac..c36d4fcac9 100644
--- a/dotnet/docs/codegen-intro.mdx
+++ b/dotnet/docs/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/docs/codegen.mdx b/dotnet/docs/codegen.mdx
index 0bbde2b0b6..0a5ffda372 100644
--- a/dotnet/docs/codegen.mdx
+++ b/dotnet/docs/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/docs/debug.mdx b/dotnet/docs/debug.mdx
index f6fbb71189..c61f68e5a7 100644
--- a/dotnet/docs/debug.mdx
+++ b/dotnet/docs/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/docs/dialogs.mdx b/dotnet/docs/dialogs.mdx
index 8b77950c3e..8688d3ac8c 100644
--- a/dotnet/docs/dialogs.mdx
+++ b/dotnet/docs/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/docs/docker.mdx b/dotnet/docs/docker.mdx
index f987fb51a0..6b3a367e80 100644
--- a/dotnet/docs/docker.mdx
+++ b/dotnet/docs/docker.mdx
@@ -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/docs/downloads.mdx b/dotnet/docs/downloads.mdx
index 879ad85fe5..0ddb0c9be3 100644
--- a/dotnet/docs/downloads.mdx
+++ b/dotnet/docs/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/docs/emulation.mdx b/dotnet/docs/emulation.mdx
index ab73dd9561..a25624864d 100644
--- a/dotnet/docs/emulation.mdx
+++ b/dotnet/docs/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/docs/evaluating.mdx b/dotnet/docs/evaluating.mdx
index c133800184..3f7aafb1e5 100644
--- a/dotnet/docs/evaluating.mdx
+++ b/dotnet/docs/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/docs/events.mdx b/dotnet/docs/events.mdx
index 8a58435e80..f572b26859 100644
--- a/dotnet/docs/events.mdx
+++ b/dotnet/docs/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/docs/extensibility.mdx b/dotnet/docs/extensibility.mdx
index fe813ece6a..8bf546442d 100644
--- a/dotnet/docs/extensibility.mdx
+++ b/dotnet/docs/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/docs/frames.mdx b/dotnet/docs/frames.mdx
index 28cb148248..51474a8b6b 100644
--- a/dotnet/docs/frames.mdx
+++ b/dotnet/docs/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/docs/getting-started-cli.mdx b/dotnet/docs/getting-started-cli.mdx
index 5fa86be55a..2ac184da29 100644
--- a/dotnet/docs/getting-started-cli.mdx
+++ b/dotnet/docs/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/docs/getting-started-mcp.mdx b/dotnet/docs/getting-started-mcp.mdx
index 1eb6afbde3..7a3727592f 100644
--- a/dotnet/docs/getting-started-mcp.mdx
+++ b/dotnet/docs/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/docs/handles.mdx b/dotnet/docs/handles.mdx
index f00c8924ce..3a4f311e83 100644
--- a/dotnet/docs/handles.mdx
+++ b/dotnet/docs/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/docs/input.mdx b/dotnet/docs/input.mdx
index 4dec23697f..ccf2ae16f8 100644
--- a/dotnet/docs/input.mdx
+++ b/dotnet/docs/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/docs/intro.mdx b/dotnet/docs/intro.mdx
index f16deaff8c..703841ea58 100644
--- a/dotnet/docs/intro.mdx
+++ b/dotnet/docs/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/docs/languages.mdx b/dotnet/docs/languages.mdx
index c80bf30f45..6e92242a75 100644
--- a/dotnet/docs/languages.mdx
+++ b/dotnet/docs/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/docs/library.mdx b/dotnet/docs/library.mdx
index 2055e75ed4..23b23ce71b 100644
--- a/dotnet/docs/library.mdx
+++ b/dotnet/docs/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/docs/locators.mdx b/dotnet/docs/locators.mdx
index 8d3f4f9f1f..a82698820c 100644
--- a/dotnet/docs/locators.mdx
+++ b/dotnet/docs/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/docs/mock.mdx b/dotnet/docs/mock.mdx
index 8de9b823d8..c153bd2714 100644
--- a/dotnet/docs/mock.mdx
+++ b/dotnet/docs/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/docs/navigations.mdx b/dotnet/docs/navigations.mdx
index e7476b7873..0d44a3c7aa 100644
--- a/dotnet/docs/navigations.mdx
+++ b/dotnet/docs/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/docs/network.mdx b/dotnet/docs/network.mdx
index a8737693fe..ddde942ff2 100644
--- a/dotnet/docs/network.mdx
+++ b/dotnet/docs/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/docs/other-locators.mdx b/dotnet/docs/other-locators.mdx
index 003b7b8efa..8d98547d24 100644
--- a/dotnet/docs/other-locators.mdx
+++ b/dotnet/docs/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/docs/pages.mdx b/dotnet/docs/pages.mdx
index 6d227e03dc..f2bc2793c6 100644
--- a/dotnet/docs/pages.mdx
+++ b/dotnet/docs/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/docs/pom.mdx b/dotnet/docs/pom.mdx
index 89795ab142..5c22272afa 100644
--- a/dotnet/docs/pom.mdx
+++ b/dotnet/docs/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/docs/release-notes.mdx b/dotnet/docs/release-notes.mdx
index b04da66bed..12c35a72af 100644
--- a/dotnet/docs/release-notes.mdx
+++ b/dotnet/docs/release-notes.mdx
@@ -1873,6 +1873,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"
@@ -1903,6 +1904,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/docs/running-tests.mdx b/dotnet/docs/running-tests.mdx
index 0eb848c5f9..65a73c2cc1 100644
--- a/dotnet/docs/running-tests.mdx
+++ b/dotnet/docs/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/docs/screenshots.mdx b/dotnet/docs/screenshots.mdx
index 71efa5a710..085a19655a 100644
--- a/dotnet/docs/screenshots.mdx
+++ b/dotnet/docs/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/docs/selenium-grid.mdx b/dotnet/docs/selenium-grid.mdx
index 6401dc4025..4a4421751e 100644
--- a/dotnet/docs/selenium-grid.mdx
+++ b/dotnet/docs/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/docs/test-assertions.mdx b/dotnet/docs/test-assertions.mdx
index 3f1ba60730..70afa39a03 100644
--- a/dotnet/docs/test-assertions.mdx
+++ b/dotnet/docs/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/docs/test-runners.mdx b/dotnet/docs/test-runners.mdx
index 05339cc488..52e0601bb5 100644
--- a/dotnet/docs/test-runners.mdx
+++ b/dotnet/docs/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/docs/touch-events.mdx b/dotnet/docs/touch-events.mdx
index c36383ba52..13f3a6ef1f 100644
--- a/dotnet/docs/touch-events.mdx
+++ b/dotnet/docs/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/docs/trace-viewer-intro.mdx b/dotnet/docs/trace-viewer-intro.mdx
index 24220fe82f..a7d0a6295f 100644
--- a/dotnet/docs/trace-viewer-intro.mdx
+++ b/dotnet/docs/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/docs/trace-viewer.mdx b/dotnet/docs/trace-viewer.mdx
index e01cff1d1a..d6eac80738 100644
--- a/dotnet/docs/trace-viewer.mdx
+++ b/dotnet/docs/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/docs/videos.mdx b/dotnet/docs/videos.mdx
index 18c5b8de87..50e9d8d514 100644
--- a/dotnet/docs/videos.mdx
+++ b/dotnet/docs/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/docs/webview2.mdx b/dotnet/docs/webview2.mdx
index d0465e3577..c02800d27f 100644
--- a/dotnet/docs/webview2.mdx
+++ b/dotnet/docs/webview2.mdx
@@ -152,6 +152,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"
@@ -182,6 +183,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/docs/writing-tests.mdx b/dotnet/docs/writing-tests.mdx
index 0d251ac9b4..6e682aae33 100644
--- a/dotnet/docs/writing-tests.mdx
+++ b/dotnet/docs/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/docs/accessibility-testing.mdx b/java/docs/accessibility-testing.mdx
index 939438f5c1..51d7c6ad10 100644
--- a/java/docs/accessibility-testing.mdx
+++ b/java/docs/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/docs/actionability.mdx b/java/docs/actionability.mdx
index 2bb69ebedf..a5e69d3819 100644
--- a/java/docs/actionability.mdx
+++ b/java/docs/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/docs/api-testing.mdx b/java/docs/api-testing.mdx
index 7265f5e561..216add3efa 100644
--- a/java/docs/api-testing.mdx
+++ b/java/docs/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/docs/api/class-apirequest.mdx b/java/docs/api/class-apirequest.mdx
index 3383f2b544..9e836b4db8 100644
--- a/java/docs/api/class-apirequest.mdx
+++ b/java/docs/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/docs/api/class-apirequestcontext.mdx b/java/docs/api/class-apirequestcontext.mdx
index 412105b015..b670192bac 100644
--- a/java/docs/api/class-apirequestcontext.mdx
+++ b/java/docs/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/docs/api/class-apiresponse.mdx b/java/docs/api/class-apiresponse.mdx
index 55a4eabff8..fcf8499f7e 100644
--- a/java/docs/api/class-apiresponse.mdx
+++ b/java/docs/api/class-apiresponse.mdx
@@ -182,6 +182,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 +215,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/docs/api/class-apiresponseassertions.mdx b/java/docs/api/class-apiresponseassertions.mdx
index 1fd0ac641c..2d4791d58f 100644
--- a/java/docs/api/class-apiresponseassertions.mdx
+++ b/java/docs/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/docs/api/class-browser.mdx b/java/docs/api/class-browser.mdx
index 0d5870cc3f..98834b3f93 100644
--- a/java/docs/api/class-browser.mdx
+++ b/java/docs/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/docs/api/class-browsercontext.mdx b/java/docs/api/class-browsercontext.mdx
index fef529a63b..0e43d987db 100644
--- a/java/docs/api/class-browsercontext.mdx
+++ b/java/docs/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()
@@ -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/docs/api/class-browsertype.mdx b/java/docs/api/class-browsertype.mdx
index 70f7ab8fd0..e1e7a4f1e7 100644
--- a/java/docs/api/class-browsertype.mdx
+++ b/java/docs/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/docs/api/class-cdpsession.mdx b/java/docs/api/class-cdpsession.mdx
index 47b6395c09..aae218451a 100644
--- a/java/docs/api/class-cdpsession.mdx
+++ b/java/docs/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/docs/api/class-clock.mdx b/java/docs/api/class-clock.mdx
index 4b50514706..5ef41cb53d 100644
--- a/java/docs/api/class-clock.mdx
+++ b/java/docs/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/docs/api/class-consolemessage.mdx b/java/docs/api/class-consolemessage.mdx
index de1eb8ed5f..a8e471abcc 100644
--- a/java/docs/api/class-consolemessage.mdx
+++ b/java/docs/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/docs/api/class-credentials.mdx b/java/docs/api/class-credentials.mdx
new file mode 100644
index 0000000000..fa680a1d49
--- /dev/null
+++ b/java/docs/api/class-credentials.mdx
@@ -0,0 +1,253 @@
+---
+id: class-credentials
+title: "Credentials"
+---
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import HTMLCard from '@site/src/components/HTMLCard';
+
+
+`Credentials` provides a virtual WebAuthn authenticator scoped to a [BrowserContext]. It lets tests seed credentials, intercept `navigator.credentials.create()` / `navigator.credentials.get()` calls in pages, and complete WebAuthn ceremonies without a real authenticator.
+
+Implemented in userland via an injected script, so it works across Chromium, Firefox and WebKit.
+
+**Usage**
+
+
+---
+
+## Methods
+
+### create {#credentials-create}
+
+Added in: v1.61credentials.create
+
+Seeds a virtual WebAuthn credential. With only `rpId`, generates a fresh ECDSA P-256 keypair, credential id and user handle. To import a pre-registered credential (e.g. authenticating as an existing test user the server already knows about), supply all four of `id`, `userHandle`, `privateKey` and `publicKey` together. Call [Credentials.install()](/api/class-credentials.mdx#credentials-install) before navigating to a page that uses WebAuthn.
+
+**Usage**
+
+```java
+Credentials.create(options);
+```
+
+**Arguments**
+- `options` `Credentials.CreateOptions`
+ - `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.
+ - `setRpId` [String]#
+
+ Relying party id (typically the site's effective domain).
+ - `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 previously seeded credential.
+
+**Usage**
+
+```java
+Credentials.delete(id);
+```
+
+**Arguments**
+- `id` [String]#
+
+ Base64url-encoded credential id.
+
+**Returns**
+- [void]#
+
+---
+
+### get {#credentials-get}
+
+Added in: v1.61credentials.get
+
+Returns seeded credentials, optionally filtered by `rpId` or `id`.
+
+**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 `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 `install()` populates the registry but the page will never see those credentials.
+
+**Usage**
+
+```java
+Credentials.install();
+```
+
+**Returns**
+- [void]#
+
+---
+
+### setUserVerified {#credentials-set-user-verified}
+
+Added in: v1.61credentials.setUserVerified
+
+Toggles whether the virtual authenticator auto-approves user-verification prompts. Useful for simulating a user denying biometric verification.
+
+**Usage**
+
+```java
+Credentials.setUserVerified(value);
+```
+
+**Arguments**
+- `value` [boolean]#
+
+ `true` to auto-approve user verification (default), `false` to refuse.
+
+**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/docs/api/class-debugger.mdx b/java/docs/api/class-debugger.mdx
index a1d87b5a9b..ccfda0710d 100644
--- a/java/docs/api/class-debugger.mdx
+++ b/java/docs/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/docs/api/class-dialog.mdx b/java/docs/api/class-dialog.mdx
index 3564c2de9b..fb31333841 100644
--- a/java/docs/api/class-dialog.mdx
+++ b/java/docs/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/docs/api/class-download.mdx b/java/docs/api/class-download.mdx
index a0a3f11de5..411a759b99 100644
--- a/java/docs/api/class-download.mdx
+++ b/java/docs/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/docs/api/class-elementhandle.mdx b/java/docs/api/class-elementhandle.mdx
index 06d4ad7f05..7796c14c4a 100644
--- a/java/docs/api/class-elementhandle.mdx
+++ b/java/docs/api/class-elementhandle.mdx
@@ -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/docs/api/class-filechooser.mdx b/java/docs/api/class-filechooser.mdx
index fa2215e0d2..ceb33207fc 100644
--- a/java/docs/api/class-filechooser.mdx
+++ b/java/docs/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/docs/api/class-formdata.mdx b/java/docs/api/class-formdata.mdx
index 1c2c669fce..1f5c73a291 100644
--- a/java/docs/api/class-formdata.mdx
+++ b/java/docs/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/docs/api/class-frame.mdx b/java/docs/api/class-frame.mdx
index b211e48472..81bb349edf 100644
--- a/java/docs/api/class-frame.mdx
+++ b/java/docs/api/class-frame.mdx
@@ -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/docs/api/class-framelocator.mdx b/java/docs/api/class-framelocator.mdx
index ebf1f38fd4..352b811c11 100644
--- a/java/docs/api/class-framelocator.mdx
+++ b/java/docs/api/class-framelocator.mdx
@@ -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/docs/api/class-jshandle.mdx b/java/docs/api/class-jshandle.mdx
index c16a481a1d..7c75fe56a4 100644
--- a/java/docs/api/class-jshandle.mdx
+++ b/java/docs/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/docs/api/class-keyboard.mdx b/java/docs/api/class-keyboard.mdx
index 381c7d8c38..f728cdfcea 100644
--- a/java/docs/api/class-keyboard.mdx
+++ b/java/docs/api/class-keyboard.mdx
@@ -172,6 +172,8 @@ In most cases, you should use [Locator.fill()](/api/class-locator.mdx#locator-fi
Sends a `keydown`, `keypress`/`input`, and `keyup` event for each character in the text.
+When [setNamedKeys](/api/class-keyboard.mdx#keyboard-type-option-named-keys) is `true`, anything inside `{}` is treated as a key name (same format as [Keyboard.press()](/api/class-keyboard.mdx#keyboard-press)).
+
To press a special key, like `Control` or `ArrowDown`, use [Keyboard.press()](/api/class-keyboard.mdx#keyboard-press).
**Usage**
@@ -181,6 +183,9 @@ To press a special key, like `Control` or `ArrowDown`, use [Keyboard.press()](/a
page.keyboard().type("Hello");
// Types slower, like a user
page.keyboard().type("World", new Keyboard.TypeOptions().setDelay(100));
+
+// Mix text and special keys
+page.keyboard().type("Hello{Enter}World", new Keyboard.TypeOptions().setNamedKeys(true));
```
:::note
@@ -199,6 +204,9 @@ For characters that are not on a US keyboard, only an `input` event will be sent
- `setDelay` [double] *(optional)*#
Time to wait between key presses in milliseconds. Defaults to 0.
+ - `setNamedKeys` [boolean] *(optional)* Added in: v1.61#
+
+ When [setNamedKeys](/api/class-keyboard.mdx#keyboard-type-option-named-keys) is `true`, anything inside `{}` is treated as a key name (same format as [Keyboard.press()](/api/class-keyboard.mdx#keyboard-press)). Use `{{` to type a literal brace character. Defaults to `false`.
**Returns**
- [void]#
@@ -236,6 +244,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 +277,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/docs/api/class-locator.mdx b/java/docs/api/class-locator.mdx
index 1ab7aed228..76a92feb71 100644
--- a/java/docs/api/class-locator.mdx
+++ b/java/docs/api/class-locator.mdx
@@ -1976,6 +1976,8 @@ In most cases, you should use [Locator.fill()](/api/class-locator.mdx#locator-fi
Focuses the element, and then sends a `keydown`, `keypress`/`input`, and `keyup` event for each character in the text.
+When [setNamedKeys](/api/class-locator.mdx#locator-press-sequentially-option-named-keys) is `true`, anything inside `{}` is treated as a key name (same format as [Locator.press()](/api/class-locator.mdx#locator-press)).
+
To press a special key, like `Control` or `ArrowDown`, use [Locator.press()](/api/class-locator.mdx#locator-press).
**Usage**
@@ -1983,6 +1985,9 @@ To press a special key, like `Control` or `ArrowDown`, use [Locator.press()](/ap
```java
locator.pressSequentially("Hello"); // Types instantly
locator.pressSequentially("World", new Locator.pressSequentiallyOptions().setDelay(100)); // Types slower, like a user
+
+// Mix characters and named keys
+locator.pressSequentially("Hello{Enter}World", new Locator.pressSequentiallyOptions().setNamedKeys(true));
```
An example of typing into a text field and then submitting the form:
@@ -1996,11 +2001,14 @@ locator.press("Enter");
**Arguments**
- `text` [String]#
- String of characters to sequentially press into a focused element.
+ String of characters to sequentially press into a focused element. When [setNamedKeys](/api/class-locator.mdx#locator-press-sequentially-option-named-keys) is `true`, anything inside `{}` is treated as a key name (same format as [Locator.press()](/api/class-locator.mdx#locator-press)).
- `options` `Locator.PressSequentiallyOptions` *(optional)*
- `setDelay` [double] *(optional)*#
Time to wait between key presses in milliseconds. Defaults to 0.
+ - `setNamedKeys` [boolean] *(optional)* Added in: v1.61#
+
+ When [setNamedKeys](/api/class-locator.mdx#locator-press-sequentially-option-named-keys) is `true`, anything inside `{}` is treated as a key name (same format as [Locator.press()](/api/class-locator.mdx#locator-press)). Use `{{` to type a literal brace character. Defaults to `false`.
- `setNoWaitAfter` [boolean] *(optional)*#
:::warning[Deprecated]
@@ -2631,6 +2639,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 +2672,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/docs/api/class-locatorassertions.mdx b/java/docs/api/class-locatorassertions.mdx
index b92765d243..c090340a8a 100644
--- a/java/docs/api/class-locatorassertions.mdx
+++ b/java/docs/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/docs/api/class-mouse.mdx b/java/docs/api/class-mouse.mdx
index 8b9352f25a..f1161b5e5b 100644
--- a/java/docs/api/class-mouse.mdx
+++ b/java/docs/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/docs/api/class-page.mdx b/java/docs/api/class-page.mdx
index 60bc842994..cff2f45a6b 100644
--- a/java/docs/api/class-page.mdx
+++ b/java/docs/api/class-page.mdx
@@ -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()
@@ -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/docs/api/class-pageassertions.mdx b/java/docs/api/class-pageassertions.mdx
index 45869cb2c2..01777966c9 100644
--- a/java/docs/api/class-pageassertions.mdx
+++ b/java/docs/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/docs/api/class-playwright.mdx b/java/docs/api/class-playwright.mdx
index e0e4883d7c..7e74c117da 100644
--- a/java/docs/api/class-playwright.mdx
+++ b/java/docs/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/docs/api/class-playwrightassertions.mdx b/java/docs/api/class-playwrightassertions.mdx
index b479e10ff6..7b4768d696 100644
--- a/java/docs/api/class-playwrightassertions.mdx
+++ b/java/docs/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/docs/api/class-playwrightexception.mdx b/java/docs/api/class-playwrightexception.mdx
index 336d0385ad..b05e4b6f64 100644
--- a/java/docs/api/class-playwrightexception.mdx
+++ b/java/docs/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/docs/api/class-request.mdx b/java/docs/api/class-request.mdx
index 362601b109..3e7cfef4d5 100644
--- a/java/docs/api/class-request.mdx
+++ b/java/docs/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/docs/api/class-requestoptions.mdx b/java/docs/api/class-requestoptions.mdx
index 5ada86a8db..47f774885c 100644
--- a/java/docs/api/class-requestoptions.mdx
+++ b/java/docs/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/docs/api/class-response.mdx b/java/docs/api/class-response.mdx
index 655e963312..2a8e17b4d8 100644
--- a/java/docs/api/class-response.mdx
+++ b/java/docs/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/docs/api/class-route.mdx b/java/docs/api/class-route.mdx
index 9c28381bee..9f821ed7cf 100644
--- a/java/docs/api/class-route.mdx
+++ b/java/docs/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/docs/api/class-screencast.mdx b/java/docs/api/class-screencast.mdx
index 1a39d6173c..ee040b1aa5 100644
--- a/java/docs/api/class-screencast.mdx
+++ b/java/docs/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`.
@@ -212,6 +215,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 +248,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/docs/api/class-selectors.mdx b/java/docs/api/class-selectors.mdx
index 0afd4a0a26..cfcb099a13 100644
--- a/java/docs/api/class-selectors.mdx
+++ b/java/docs/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/docs/api/class-timeouterror.mdx b/java/docs/api/class-timeouterror.mdx
index 0a491bd4fe..828509af88 100644
--- a/java/docs/api/class-timeouterror.mdx
+++ b/java/docs/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/docs/api/class-touchscreen.mdx b/java/docs/api/class-touchscreen.mdx
index dbae880411..59ad8251ff 100644
--- a/java/docs/api/class-touchscreen.mdx
+++ b/java/docs/api/class-touchscreen.mdx
@@ -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/docs/api/class-tracing.mdx b/java/docs/api/class-tracing.mdx
index 7a81048b18..66594e28ea 100644
--- a/java/docs/api/class-tracing.mdx
+++ b/java/docs/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/docs/api/class-video.mdx b/java/docs/api/class-video.mdx
index 0c431905df..0967d6dce5 100644
--- a/java/docs/api/class-video.mdx
+++ b/java/docs/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/docs/api/class-weberror.mdx b/java/docs/api/class-weberror.mdx
index 13b9c9abee..890ac73812 100644
--- a/java/docs/api/class-weberror.mdx
+++ b/java/docs/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/docs/api/class-websocket.mdx b/java/docs/api/class-websocket.mdx
index e8a1fac38e..c7efb0f113 100644
--- a/java/docs/api/class-websocket.mdx
+++ b/java/docs/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/docs/api/class-websocketframe.mdx b/java/docs/api/class-websocketframe.mdx
index 20f5dcce1f..20d9f604ff 100644
--- a/java/docs/api/class-websocketframe.mdx
+++ b/java/docs/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/docs/api/class-websocketroute.mdx b/java/docs/api/class-websocketroute.mdx
index 714143dbeb..d5e8084a31 100644
--- a/java/docs/api/class-websocketroute.mdx
+++ b/java/docs/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/docs/api/class-webstorage.mdx b/java/docs/api/class-webstorage.mdx
new file mode 100644
index 0000000000..100f866da2
--- /dev/null
+++ b/java/docs/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`, or `null` if the key is not 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`. 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`. 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/docs/api/class-worker.mdx b/java/docs/api/class-worker.mdx
index 1c5e53a9d7..3279f4e04a 100644
--- a/java/docs/api/class-worker.mdx
+++ b/java/docs/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/docs/aria-snapshots.mdx b/java/docs/aria-snapshots.mdx
index 8982b4980d..8165623d25 100644
--- a/java/docs/aria-snapshots.mdx
+++ b/java/docs/aria-snapshots.mdx
@@ -381,6 +381,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 +414,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/docs/auth.mdx b/java/docs/auth.mdx
index ead9badede..ee32fbdbe5 100644
--- a/java/docs/auth.mdx
+++ b/java/docs/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/docs/browser-contexts.mdx b/java/docs/browser-contexts.mdx
index cd2f0a2a7c..fdfed43ce3 100644
--- a/java/docs/browser-contexts.mdx
+++ b/java/docs/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/docs/browsers.mdx b/java/docs/browsers.mdx
index d92ef9e05b..5b214a230a 100644
--- a/java/docs/browsers.mdx
+++ b/java/docs/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/docs/ci-intro.mdx b/java/docs/ci-intro.mdx
index 93489f2dea..03ce5c94d9 100644
--- a/java/docs/ci-intro.mdx
+++ b/java/docs/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/docs/ci.mdx b/java/docs/ci.mdx
index ba5f47aa02..7326ec4996 100644
--- a/java/docs/ci.mdx
+++ b/java/docs/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/docs/clock.mdx b/java/docs/clock.mdx
index b86884d05e..ffd4f1868e 100644
--- a/java/docs/clock.mdx
+++ b/java/docs/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/docs/codegen-intro.mdx b/java/docs/codegen-intro.mdx
index 71cc5ce35b..a8244a11ae 100644
--- a/java/docs/codegen-intro.mdx
+++ b/java/docs/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/docs/codegen.mdx b/java/docs/codegen.mdx
index fc4af54384..9966510e50 100644
--- a/java/docs/codegen.mdx
+++ b/java/docs/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/docs/debug.mdx b/java/docs/debug.mdx
index 0dd4cf50c0..b12eb996c4 100644
--- a/java/docs/debug.mdx
+++ b/java/docs/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/docs/dialogs.mdx b/java/docs/dialogs.mdx
index 6a963c3740..fc58a2b2ed 100644
--- a/java/docs/dialogs.mdx
+++ b/java/docs/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/docs/docker.mdx b/java/docs/docker.mdx
index 7d2149cd3d..c401cc3b9e 100644
--- a/java/docs/docker.mdx
+++ b/java/docs/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/docs/downloads.mdx b/java/docs/downloads.mdx
index 1e8392cee6..9c1985b409 100644
--- a/java/docs/downloads.mdx
+++ b/java/docs/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/docs/emulation.mdx b/java/docs/emulation.mdx
index 161c77fa44..4a5aa0f692 100644
--- a/java/docs/emulation.mdx
+++ b/java/docs/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/docs/evaluating.mdx b/java/docs/evaluating.mdx
index 2b017bbb90..2e20fb0cf7 100644
--- a/java/docs/evaluating.mdx
+++ b/java/docs/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/docs/events.mdx b/java/docs/events.mdx
index e6e83fb299..7f9186d3b6 100644
--- a/java/docs/events.mdx
+++ b/java/docs/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/docs/extensibility.mdx b/java/docs/extensibility.mdx
index 48db082a94..8931085026 100644
--- a/java/docs/extensibility.mdx
+++ b/java/docs/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/docs/frames.mdx b/java/docs/frames.mdx
index ffee4df7a7..771b4a30fa 100644
--- a/java/docs/frames.mdx
+++ b/java/docs/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/docs/getting-started-cli.mdx b/java/docs/getting-started-cli.mdx
index d111e62480..36ffe77e57 100644
--- a/java/docs/getting-started-cli.mdx
+++ b/java/docs/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/docs/getting-started-mcp.mdx b/java/docs/getting-started-mcp.mdx
index 337b94958c..c1d766e4cf 100644
--- a/java/docs/getting-started-mcp.mdx
+++ b/java/docs/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/docs/handles.mdx b/java/docs/handles.mdx
index 7c4f0f53d6..44a590599c 100644
--- a/java/docs/handles.mdx
+++ b/java/docs/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/docs/input.mdx b/java/docs/input.mdx
index 87cdb7b433..eb5b236c9f 100644
--- a/java/docs/input.mdx
+++ b/java/docs/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/docs/intro.mdx b/java/docs/intro.mdx
index 4891ca3823..09055f2e32 100644
--- a/java/docs/intro.mdx
+++ b/java/docs/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/docs/junit.mdx b/java/docs/junit.mdx
index 6426a0444d..61752123b2 100644
--- a/java/docs/junit.mdx
+++ b/java/docs/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/docs/languages.mdx b/java/docs/languages.mdx
index 643430c51c..996c1d154d 100644
--- a/java/docs/languages.mdx
+++ b/java/docs/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/docs/locators.mdx b/java/docs/locators.mdx
index 628d0ec5f1..d02d60b64a 100644
--- a/java/docs/locators.mdx
+++ b/java/docs/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/docs/mock.mdx b/java/docs/mock.mdx
index 14d3612462..f4b7dfc341 100644
--- a/java/docs/mock.mdx
+++ b/java/docs/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/docs/navigations.mdx b/java/docs/navigations.mdx
index 75a4164ea2..ca04efa537 100644
--- a/java/docs/navigations.mdx
+++ b/java/docs/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/docs/network.mdx b/java/docs/network.mdx
index 1f21b10a8a..9c1913cf71 100644
--- a/java/docs/network.mdx
+++ b/java/docs/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/docs/other-locators.mdx b/java/docs/other-locators.mdx
index ebf27a4a8e..6b561f489b 100644
--- a/java/docs/other-locators.mdx
+++ b/java/docs/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/docs/pages.mdx b/java/docs/pages.mdx
index 0191c9a485..8c1f326607 100644
--- a/java/docs/pages.mdx
+++ b/java/docs/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/docs/pom.mdx b/java/docs/pom.mdx
index b621d735da..ddbdcc192c 100644
--- a/java/docs/pom.mdx
+++ b/java/docs/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/docs/release-notes.mdx b/java/docs/release-notes.mdx
index 621ecd4c15..a5a5d40ca1 100644
--- a/java/docs/release-notes.mdx
+++ b/java/docs/release-notes.mdx
@@ -2023,6 +2023,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"
@@ -2055,6 +2056,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/docs/running-tests.mdx b/java/docs/running-tests.mdx
index 7943a1ed6d..392d3b08ee 100644
--- a/java/docs/running-tests.mdx
+++ b/java/docs/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/docs/screenshots.mdx b/java/docs/screenshots.mdx
index de8689d6d8..f25ad47d5d 100644
--- a/java/docs/screenshots.mdx
+++ b/java/docs/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/docs/selenium-grid.mdx b/java/docs/selenium-grid.mdx
index 912069e496..c65e586b72 100644
--- a/java/docs/selenium-grid.mdx
+++ b/java/docs/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/docs/test-assertions.mdx b/java/docs/test-assertions.mdx
index c0d1a39601..1d9fc5d623 100644
--- a/java/docs/test-assertions.mdx
+++ b/java/docs/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/docs/test-runners.mdx b/java/docs/test-runners.mdx
index 457c4e4e0a..7a2f856cf5 100644
--- a/java/docs/test-runners.mdx
+++ b/java/docs/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/docs/threading.mdx b/java/docs/threading.mdx
index 370d0cbde3..4b97e19dc5 100644
--- a/java/docs/threading.mdx
+++ b/java/docs/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/docs/touch-events.mdx b/java/docs/touch-events.mdx
index 0fd1ac56b2..8d5537fe99 100644
--- a/java/docs/touch-events.mdx
+++ b/java/docs/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/docs/trace-viewer-intro.mdx b/java/docs/trace-viewer-intro.mdx
index 84eef3b432..9459a33855 100644
--- a/java/docs/trace-viewer-intro.mdx
+++ b/java/docs/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/docs/trace-viewer.mdx b/java/docs/trace-viewer.mdx
index 3494800f11..779d894041 100644
--- a/java/docs/trace-viewer.mdx
+++ b/java/docs/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/docs/videos.mdx b/java/docs/videos.mdx
index c1ef143a57..196f1242f3 100644
--- a/java/docs/videos.mdx
+++ b/java/docs/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/docs/webview2.mdx b/java/docs/webview2.mdx
index 30cdec7533..4667ae8c68 100644
--- a/java/docs/webview2.mdx
+++ b/java/docs/webview2.mdx
@@ -187,6 +187,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"
@@ -219,6 +220,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/docs/writing-tests.mdx b/java/docs/writing-tests.mdx
index 6f1cd4308c..41919432e7 100644
--- a/java/docs/writing-tests.mdx
+++ b/java/docs/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/docs/accessibility-testing.mdx b/nodejs/docs/accessibility-testing.mdx
index 812c0bb4ed..dfa4ed637a 100644
--- a/nodejs/docs/accessibility-testing.mdx
+++ b/nodejs/docs/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/docs/actionability.mdx b/nodejs/docs/actionability.mdx
index e6f1a43fd8..26c038cf49 100644
--- a/nodejs/docs/actionability.mdx
+++ b/nodejs/docs/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/docs/api-testing.mdx b/nodejs/docs/api-testing.mdx
index 7a3af73f09..2f654041e8 100644
--- a/nodejs/docs/api-testing.mdx
+++ b/nodejs/docs/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/docs/api/class-android.mdx b/nodejs/docs/api/class-android.mdx
index 073464576d..c6f2352fa0 100644
--- a/nodejs/docs/api/class-android.mdx
+++ b/nodejs/docs/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/docs/api/class-androiddevice.mdx b/nodejs/docs/api/class-androiddevice.mdx
index 5e88b81d47..2490ed22a4 100644
--- a/nodejs/docs/api/class-androiddevice.mdx
+++ b/nodejs/docs/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/docs/api/class-androidinput.mdx b/nodejs/docs/api/class-androidinput.mdx
index 0aa881da65..b4f1e48daa 100644
--- a/nodejs/docs/api/class-androidinput.mdx
+++ b/nodejs/docs/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/docs/api/class-androidsocket.mdx b/nodejs/docs/api/class-androidsocket.mdx
index cadc138201..279617a6c5 100644
--- a/nodejs/docs/api/class-androidsocket.mdx
+++ b/nodejs/docs/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/docs/api/class-androidwebview.mdx b/nodejs/docs/api/class-androidwebview.mdx
index 5f4e00bd09..5b4f46a52f 100644
--- a/nodejs/docs/api/class-androidwebview.mdx
+++ b/nodejs/docs/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/docs/api/class-apirequest.mdx b/nodejs/docs/api/class-apirequest.mdx
index a58b143d7e..cc7e8e7701 100644
--- a/nodejs/docs/api/class-apirequest.mdx
+++ b/nodejs/docs/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/docs/api/class-apirequestcontext.mdx b/nodejs/docs/api/class-apirequestcontext.mdx
index 11f1fdebc5..8e7822bb41 100644
--- a/nodejs/docs/api/class-apirequestcontext.mdx
+++ b/nodejs/docs/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/docs/api/class-apiresponse.mdx b/nodejs/docs/api/class-apiresponse.mdx
index d4d11e32b7..94c1d09a04 100644
--- a/nodejs/docs/api/class-apiresponse.mdx
+++ b/nodejs/docs/api/class-apiresponse.mdx
@@ -203,6 +203,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 +236,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/docs/api/class-apiresponseassertions.mdx b/nodejs/docs/api/class-apiresponseassertions.mdx
index 0cc65a9450..2e138a7d46 100644
--- a/nodejs/docs/api/class-apiresponseassertions.mdx
+++ b/nodejs/docs/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/docs/api/class-browser.mdx b/nodejs/docs/api/class-browser.mdx
index 7b0dc4a986..b7a4b11a8b 100644
--- a/nodejs/docs/api/class-browser.mdx
+++ b/nodejs/docs/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/docs/api/class-browsercontext.mdx b/nodejs/docs/api/class-browsercontext.mdx
index 2aa93596a6..1ff8fadbea 100644
--- a/nodejs/docs/api/class-browsercontext.mdx
+++ b/nodejs/docs/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
@@ -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/docs/api/class-browserserver.mdx b/nodejs/docs/api/class-browserserver.mdx
index c98887c36d..61506a516d 100644
--- a/nodejs/docs/api/class-browserserver.mdx
+++ b/nodejs/docs/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/docs/api/class-browsertype.mdx b/nodejs/docs/api/class-browsertype.mdx
index 12f61cd1ee..cdd57c2c76 100644
--- a/nodejs/docs/api/class-browsertype.mdx
+++ b/nodejs/docs/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/docs/api/class-cdpsession.mdx b/nodejs/docs/api/class-cdpsession.mdx
index 904b7be342..f9286390b0 100644
--- a/nodejs/docs/api/class-cdpsession.mdx
+++ b/nodejs/docs/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/docs/api/class-clock.mdx b/nodejs/docs/api/class-clock.mdx
index 73c83820d9..03b2c54853 100644
--- a/nodejs/docs/api/class-clock.mdx
+++ b/nodejs/docs/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/docs/api/class-consolemessage.mdx b/nodejs/docs/api/class-consolemessage.mdx
index 758f506a53..0f60cf4af5 100644
--- a/nodejs/docs/api/class-consolemessage.mdx
+++ b/nodejs/docs/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/docs/api/class-coverage.mdx b/nodejs/docs/api/class-coverage.mdx
index 01293a5d28..682164e46e 100644
--- a/nodejs/docs/api/class-coverage.mdx
+++ b/nodejs/docs/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/docs/api/class-credentials.mdx b/nodejs/docs/api/class-credentials.mdx
new file mode 100644
index 0000000000..6f3517a5d8
--- /dev/null
+++ b/nodejs/docs/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` provides a virtual WebAuthn authenticator scoped to a [BrowserContext]. It lets tests seed credentials, intercept `navigator.credentials.create()` / `navigator.credentials.get()` calls in pages, and complete WebAuthn ceremonies without a real authenticator.
+
+Implemented in userland via an injected script, so it works across Chromium, Firefox and WebKit.
+
+**Usage**
+
+```js
+const context = await browser.newContext();
+await context.credentials.install();
+await context.credentials.create({ rpId: 'example.com' });
+const page = await context.newPage();
+await page.goto('https://example.com/login');
+// Page's navigator.credentials.get() will be answered using the seeded credential.
+```
+
+
+---
+
+## Methods
+
+### create {#credentials-create}
+
+Added in: v1.61credentials.create
+
+Seeds a virtual WebAuthn credential. With only `rpId`, generates a fresh ECDSA P-256 keypair, credential id and user handle. To import a pre-registered credential (e.g. authenticating as an existing test user the server already knows about), supply all four of `id`, `userHandle`, `privateKey` and `publicKey` together. Call [credentials.install()](/api/class-credentials.mdx#credentials-install) before navigating to a page that uses WebAuthn.
+
+**Usage**
+
+```js
+await credentials.create(options);
+```
+
+**Arguments**
+- `options` [Object]
+ - `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.
+ - `rpId` [string]#
+
+ Relying party id (typically the site's effective domain).
+ - `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 previously seeded credential.
+
+**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 seeded credentials, optionally filtered by `rpId` or `id`.
+
+**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 `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 `install()` populates the registry but the page will never see those credentials.
+
+**Usage**
+
+```js
+await credentials.install();
+```
+
+**Returns**
+- [Promise]<[void]>#
+
+---
+
+### setUserVerified {#credentials-set-user-verified}
+
+Added in: v1.61credentials.setUserVerified
+
+Toggles whether the virtual authenticator auto-approves user-verification prompts. Useful for simulating a user denying biometric verification.
+
+**Usage**
+
+```js
+await credentials.setUserVerified(value);
+```
+
+**Arguments**
+- `value` [boolean]#
+
+ `true` to auto-approve user verification (default), `false` to refuse.
+
+**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/docs/api/class-debugger.mdx b/nodejs/docs/api/class-debugger.mdx
index 62db8a0a48..b279390d44 100644
--- a/nodejs/docs/api/class-debugger.mdx
+++ b/nodejs/docs/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/docs/api/class-dialog.mdx b/nodejs/docs/api/class-dialog.mdx
index ff66d95aaf..406225dbcf 100644
--- a/nodejs/docs/api/class-dialog.mdx
+++ b/nodejs/docs/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/docs/api/class-disposable.mdx b/nodejs/docs/api/class-disposable.mdx
index f78d6e6a56..cfb397e11a 100644
--- a/nodejs/docs/api/class-disposable.mdx
+++ b/nodejs/docs/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/docs/api/class-download.mdx b/nodejs/docs/api/class-download.mdx
index c5074ec492..4474a6db5c 100644
--- a/nodejs/docs/api/class-download.mdx
+++ b/nodejs/docs/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/docs/api/class-electron.mdx b/nodejs/docs/api/class-electron.mdx
index c3dc1f6524..a6efe70472 100644
--- a/nodejs/docs/api/class-electron.mdx
+++ b/nodejs/docs/api/class-electron.mdx
@@ -210,6 +210,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 +243,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/docs/api/class-electronapplication.mdx b/nodejs/docs/api/class-electronapplication.mdx
index 2bc03bc1d7..6aa61c27bd 100644
--- a/nodejs/docs/api/class-electronapplication.mdx
+++ b/nodejs/docs/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/docs/api/class-elementhandle.mdx b/nodejs/docs/api/class-elementhandle.mdx
index b0e0aed2ca..fa03da600c 100644
--- a/nodejs/docs/api/class-elementhandle.mdx
+++ b/nodejs/docs/api/class-elementhandle.mdx
@@ -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/docs/api/class-filechooser.mdx b/nodejs/docs/api/class-filechooser.mdx
index 63b6cabdcf..7dbb132bae 100644
--- a/nodejs/docs/api/class-filechooser.mdx
+++ b/nodejs/docs/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/docs/api/class-fixtures.mdx b/nodejs/docs/api/class-fixtures.mdx
index b2d17ad523..8b439bdc63 100644
--- a/nodejs/docs/api/class-fixtures.mdx
+++ b/nodejs/docs/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/docs/api/class-frame.mdx b/nodejs/docs/api/class-frame.mdx
index 765706564a..1297c908d7 100644
--- a/nodejs/docs/api/class-frame.mdx
+++ b/nodejs/docs/api/class-frame.mdx
@@ -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/docs/api/class-framelocator.mdx b/nodejs/docs/api/class-framelocator.mdx
index c616f5c12f..a7d7119360 100644
--- a/nodejs/docs/api/class-framelocator.mdx
+++ b/nodejs/docs/api/class-framelocator.mdx
@@ -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/docs/api/class-fullconfig.mdx b/nodejs/docs/api/class-fullconfig.mdx
index 6b8b0a8bfd..329c43ed39 100644
--- a/nodejs/docs/api/class-fullconfig.mdx
+++ b/nodejs/docs/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
@@ -434,6 +451,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 +484,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/docs/api/class-fullproject.mdx b/nodejs/docs/api/class-fullproject.mdx
index 2a0800cad0..7fc108f64c 100644
--- a/nodejs/docs/api/class-fullproject.mdx
+++ b/nodejs/docs/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/docs/api/class-genericassertions.mdx b/nodejs/docs/api/class-genericassertions.mdx
index c4fadbf64a..f084e76a14 100644
--- a/nodejs/docs/api/class-genericassertions.mdx
+++ b/nodejs/docs/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/docs/api/class-jshandle.mdx b/nodejs/docs/api/class-jshandle.mdx
index 9ae30aa04b..607d5eb9a3 100644
--- a/nodejs/docs/api/class-jshandle.mdx
+++ b/nodejs/docs/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/docs/api/class-keyboard.mdx b/nodejs/docs/api/class-keyboard.mdx
index d9caaf1141..07090a30c4 100644
--- a/nodejs/docs/api/class-keyboard.mdx
+++ b/nodejs/docs/api/class-keyboard.mdx
@@ -174,6 +174,8 @@ In most cases, you should use [locator.fill()](/api/class-locator.mdx#locator-fi
Sends a `keydown`, `keypress`/`input`, and `keyup` event for each character in the text.
+When [namedKeys](/api/class-keyboard.mdx#keyboard-type-option-named-keys) is `true`, anything inside `{}` is treated as a key name (same format as [keyboard.press()](/api/class-keyboard.mdx#keyboard-press)).
+
To press a special key, like `Control` or `ArrowDown`, use [keyboard.press()](/api/class-keyboard.mdx#keyboard-press).
**Usage**
@@ -181,6 +183,9 @@ To press a special key, like `Control` or `ArrowDown`, use [keyboard.press()](/a
```js
await page.keyboard.type('Hello'); // Types instantly
await page.keyboard.type('World', { delay: 100 }); // Types slower, like a user
+
+// Mix text and special keys
+await page.keyboard.type('Hello{Enter}World', { namedKeys: true });
```
:::note
@@ -199,6 +204,9 @@ For characters that are not on a US keyboard, only an `input` event will be sent
- `delay` [number] *(optional)*#
Time to wait between key presses in milliseconds. Defaults to 0.
+ - `namedKeys` [boolean] *(optional)* Added in: v1.61#
+
+ When [namedKeys](/api/class-keyboard.mdx#keyboard-type-option-named-keys) is `true`, anything inside `{}` is treated as a key name (same format as [keyboard.press()](/api/class-keyboard.mdx#keyboard-press)). Use `{{` to type a literal brace character. Defaults to `false`.
**Returns**
- [Promise]<[void]>#
@@ -238,6 +246,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 +279,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/docs/api/class-location.mdx b/nodejs/docs/api/class-location.mdx
index ac39f91155..7aa1f67767 100644
--- a/nodejs/docs/api/class-location.mdx
+++ b/nodejs/docs/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/docs/api/class-locator.mdx b/nodejs/docs/api/class-locator.mdx
index 4f56c2d43d..291911d38f 100644
--- a/nodejs/docs/api/class-locator.mdx
+++ b/nodejs/docs/api/class-locator.mdx
@@ -2000,6 +2000,8 @@ In most cases, you should use [locator.fill()](/api/class-locator.mdx#locator-fi
Focuses the element, and then sends a `keydown`, `keypress`/`input`, and `keyup` event for each character in the text.
+When [namedKeys](/api/class-locator.mdx#locator-press-sequentially-option-named-keys) is `true`, anything inside `{}` is treated as a key name (same format as [locator.press()](/api/class-locator.mdx#locator-press)).
+
To press a special key, like `Control` or `ArrowDown`, use [locator.press()](/api/class-locator.mdx#locator-press).
**Usage**
@@ -2007,6 +2009,11 @@ To press a special key, like `Control` or `ArrowDown`, use [locator.press()](/ap
```js
await locator.pressSequentially('Hello'); // Types instantly
await locator.pressSequentially('World', { delay: 100 }); // Types slower, like a user
+
+// Mix characters and named keys
+await locator.pressSequentially('Hello{Enter}World', { namedKeys: true });
+// Use modifier combos
+await locator.pressSequentially('{Control+A}{Delete}Hello', { namedKeys: true });
```
An example of typing into a text field and then submitting the form:
@@ -2020,11 +2027,14 @@ await locator.press('Enter');
**Arguments**
- `text` [string]#
- String of characters to sequentially press into a focused element.
+ String of characters to sequentially press into a focused element. When [namedKeys](/api/class-locator.mdx#locator-press-sequentially-option-named-keys) is `true`, anything inside `{}` is treated as a key name (same format as [locator.press()](/api/class-locator.mdx#locator-press)).
- `options` [Object] *(optional)*
- `delay` [number] *(optional)*#
Time to wait between key presses in milliseconds. Defaults to 0.
+ - `namedKeys` [boolean] *(optional)* Added in: v1.61#
+
+ When [namedKeys](/api/class-locator.mdx#locator-press-sequentially-option-named-keys) is `true`, anything inside `{}` is treated as a key name (same format as [locator.press()](/api/class-locator.mdx#locator-press)). Use `{{` to type a literal brace character. Defaults to `false`.
- `noWaitAfter` [boolean] *(optional)*#
:::warning[Deprecated]
@@ -2680,6 +2690,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 +2723,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/docs/api/class-locatorassertions.mdx b/nodejs/docs/api/class-locatorassertions.mdx
index 752c443ebf..a597df2924 100644
--- a/nodejs/docs/api/class-locatorassertions.mdx
+++ b/nodejs/docs/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/docs/api/class-logger.mdx b/nodejs/docs/api/class-logger.mdx
index 8393c3d77b..8a2477f10c 100644
--- a/nodejs/docs/api/class-logger.mdx
+++ b/nodejs/docs/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/docs/api/class-mouse.mdx b/nodejs/docs/api/class-mouse.mdx
index 96af6da2b4..ac711eec23 100644
--- a/nodejs/docs/api/class-mouse.mdx
+++ b/nodejs/docs/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/docs/api/class-page.mdx b/nodejs/docs/api/class-page.mdx
index cd77135d07..76f1c9923a 100644
--- a/nodejs/docs/api/class-page.mdx
+++ b/nodejs/docs/api/class-page.mdx
@@ -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
@@ -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/docs/api/class-pageassertions.mdx b/nodejs/docs/api/class-pageassertions.mdx
index a676394e53..ac1f73c636 100644
--- a/nodejs/docs/api/class-pageassertions.mdx
+++ b/nodejs/docs/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/docs/api/class-playwright.mdx b/nodejs/docs/api/class-playwright.mdx
index 2263eb6fb2..73096b0bed 100644
--- a/nodejs/docs/api/class-playwright.mdx
+++ b/nodejs/docs/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/docs/api/class-playwrightassertions.mdx b/nodejs/docs/api/class-playwrightassertions.mdx
index 0dc9c93edc..45a50a0ded 100644
--- a/nodejs/docs/api/class-playwrightassertions.mdx
+++ b/nodejs/docs/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/docs/api/class-reporter.mdx b/nodejs/docs/api/class-reporter.mdx
index 65a6422735..1f253fa4ac 100644
--- a/nodejs/docs/api/class-reporter.mdx
+++ b/nodejs/docs/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/docs/api/class-request.mdx b/nodejs/docs/api/class-request.mdx
index c2891e14b1..df55dd71cd 100644
--- a/nodejs/docs/api/class-request.mdx
+++ b/nodejs/docs/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/docs/api/class-response.mdx b/nodejs/docs/api/class-response.mdx
index a427242dad..493b21e7b8 100644
--- a/nodejs/docs/api/class-response.mdx
+++ b/nodejs/docs/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/docs/api/class-route.mdx b/nodejs/docs/api/class-route.mdx
index 00f41de1b2..59b4db4ce2 100644
--- a/nodejs/docs/api/class-route.mdx
+++ b/nodejs/docs/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/docs/api/class-screencast.mdx b/nodejs/docs/api/class-screencast.mdx
index 708334be8d..263ae0d06a 100644
--- a/nodejs/docs/api/class-screencast.mdx
+++ b/nodejs/docs/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`.
@@ -242,6 +245,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 +278,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/docs/api/class-selectors.mdx b/nodejs/docs/api/class-selectors.mdx
index e36d80e4b5..361fdd1589 100644
--- a/nodejs/docs/api/class-selectors.mdx
+++ b/nodejs/docs/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/docs/api/class-snapshotassertions.mdx b/nodejs/docs/api/class-snapshotassertions.mdx
index 1727f70af1..601d7f644c 100644
--- a/nodejs/docs/api/class-snapshotassertions.mdx
+++ b/nodejs/docs/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/docs/api/class-suite.mdx b/nodejs/docs/api/class-suite.mdx
index 86c8b2f575..696e3c8677 100644
--- a/nodejs/docs/api/class-suite.mdx
+++ b/nodejs/docs/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/docs/api/class-test.mdx b/nodejs/docs/api/class-test.mdx
index 6e19842a2b..0681832043 100644
--- a/nodejs/docs/api/class-test.mdx
+++ b/nodejs/docs/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/docs/api/class-testcase.mdx b/nodejs/docs/api/class-testcase.mdx
index c854f276b6..a82537739f 100644
--- a/nodejs/docs/api/class-testcase.mdx
+++ b/nodejs/docs/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/docs/api/class-testconfig.mdx b/nodejs/docs/api/class-testconfig.mdx
index e86caed870..b747ba3acf 100644
--- a/nodejs/docs/api/class-testconfig.mdx
+++ b/nodejs/docs/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/docs/api/class-testerror.mdx b/nodejs/docs/api/class-testerror.mdx
index 0f7a85b447..19e5af24c6 100644
--- a/nodejs/docs/api/class-testerror.mdx
+++ b/nodejs/docs/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/docs/api/class-testinfo.mdx b/nodejs/docs/api/class-testinfo.mdx
index c4d1d27a36..d1079ad28b 100644
--- a/nodejs/docs/api/class-testinfo.mdx
+++ b/nodejs/docs/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/docs/api/class-testinfoerror.mdx b/nodejs/docs/api/class-testinfoerror.mdx
index 4d7c2946de..96157e3a6e 100644
--- a/nodejs/docs/api/class-testinfoerror.mdx
+++ b/nodejs/docs/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/docs/api/class-testoptions.mdx b/nodejs/docs/api/class-testoptions.mdx
index 493766bcc3..ba854f499f 100644
--- a/nodejs/docs/api/class-testoptions.mdx
+++ b/nodejs/docs/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}
@@ -948,6 +960,7 @@ Whether to record trace for each test. Defaults to `'off'`.
* `'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.
+* `'retain-all-failures'`: Record trace for each test run. Retains the trace only for attempts that failed, regardless of the final test outcome.
For more control, pass an object that specifies `mode` and trace features to enable.
@@ -966,8 +979,8 @@ export default defineConfig({
Learn more about [recording trace](../test-use-options.mdx#recording-options).
**Type**
-- [Object] | "off" | "on" | "retain-on-failure" | "on-first-retry" | "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"
+- [Object] | "off" | "on" | "retain-on-failure" | "on-first-retry" | "retain-on-first-failure" | "retain-on-failure-and-retries" | "retain-all-failures"
+ - `mode` "off" | "on" | "retain-on-failure" | "on-first-retry" | "on-all-retries" | "retain-on-first-failure" | "retain-on-failure-and-retries" | "retain-all-failures"
Trace recording mode.
- `attachments` [boolean] *(optional)*
@@ -1124,6 +1137,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 +1170,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/docs/api/class-testproject.mdx b/nodejs/docs/api/class-testproject.mdx
index 669b3ea646..a6bcb4202e 100644
--- a/nodejs/docs/api/class-testproject.mdx
+++ b/nodejs/docs/api/class-testproject.mdx
@@ -737,6 +737,104 @@ testProject.use
---
+### webServer {#test-project-web-server}
+
+Added in: v1.61testProject.webServer
+
+Launch a development web server (or multiple) before running tests in this project. See [testConfig.webServer](/api/class-testconfig.mdx#test-config-web-server) for the shape of each entry.
+
+A per-project `webServer` is only launched when the project is selected (either directly via `--project` or indirectly through dependencies). This is useful when only a subset of your projects need a local backend, while others run against a deployed environment.
+
+Per-project web servers are launched in addition to any top-level [testConfig.webServer](/api/class-testconfig.mdx#test-config-web-server).
+
+**Usage**
+
+```js title="playwright.config.ts"
+import { defineConfig } from '@playwright/test';
+
+export default defineConfig({
+ projects: [
+ {
+ name: 'functional',
+ grepInvert: /@smoke/,
+ use: { baseURL: 'http://localhost:3000' },
+ webServer: [
+ {
+ command: 'npm run start',
+ url: 'http://localhost:3000',
+ reuseExistingServer: !process.env.CI,
+ },
+ {
+ command: 'npm run mock-server',
+ port: 3001,
+ reuseExistingServer: !process.env.CI,
+ },
+ ],
+ },
+ {
+ name: 'smoke',
+ grep: /@smoke/,
+ use: { baseURL: 'https://production.app.com' },
+ },
+ ],
+});
+```
+
+**Type**
+- [Object] | [Array]<[Object]>
+ - `command` [string]
+
+ Shell command to start. For example `npm run start`..
+ - `cwd` [string] *(optional)*
+
+ Current working directory of the spawned process, defaults to the directory of the configuration file.
+ - `env` [Object]<[string], [string]> *(optional)*
+
+ Environment variables to set for the command, `process.env` by default.
+ - `gracefulShutdown` [Object] *(optional)*
+ - `signal` "SIGINT" | "SIGTERM"
+
+
+ - `timeout` [number]
+
+
+ How to shut down the process. If unspecified, the process group is forcefully `SIGKILL`ed. If set to `{ signal: 'SIGTERM', timeout: 500 }`, the process group is sent a `SIGTERM` signal, followed by `SIGKILL` if it doesn't exit within 500ms. You can also use `SIGINT` as the signal instead. A `0` timeout means no `SIGKILL` will be sent. Windows doesn't support `SIGTERM` and `SIGINT` signals, so this option is ignored on Windows. Note that shutting down a Docker container requires `SIGTERM`.
+ - `ignoreHTTPSErrors` [boolean] *(optional)*
+
+ Whether to ignore HTTPS errors when fetching the `url`. Defaults to `false`.
+ - `name` [string] *(optional)*
+
+ Specifies a custom name for the web server. This name will be prefixed to log messages. Defaults to `[WebServer]`.
+ - `port` [number] *(optional)*
+
+ The port that your http server is expected to appear on. It does wait until it accepts connections. Either `port` or `url` should be specified.
+ - `reuseExistingServer` [boolean] *(optional)*
+
+ If true, it will re-use an existing server on the `port` or `url` when available. If no server is running on that `port` or `url`, it will run the command to start a new server. If `false`, it will throw if an existing process is listening on the `port` or `url`. This should be commonly set to `!process.env.CI` to allow the local dev server when running tests locally.
+ - `stderr` "pipe" | "ignore" *(optional)*
+
+ Whether to pipe the stderr of the command to the process stderr or ignore it. Defaults to `"pipe"`.
+ - `stdout` "pipe" | "ignore" *(optional)*
+
+ If `"pipe"`, it will pipe the stdout of the command to the process stdout. If `"ignore"`, it will ignore the stdout of the command. Default to `"ignore"`.
+ - `wait` [Object] *(optional)*
+ - `stdout` [RegExp] *(optional)*
+
+ Regular expression to wait for in the `stdout` of the command output. Named capture groups are stored in the environment, for example `/Listening on port (?\d+)/` will store the port number in `process.env['MY_SERVER_PORT']`.
+ - `stderr` [RegExp] *(optional)*
+
+ Regular expression to wait for in the `stderr` of the command output. Named capture groups are stored in the environment, for example `/Listening on port (?\d+)/` will store the port number in `process.env['MY_SERVER_PORT']`.
+
+ Consider command started only when given output has been produced.
+ - `timeout` [number] *(optional)*
+
+ How long to wait for the process to start up and be available in milliseconds. Defaults to 60000.
+ - `url` [string] *(optional)*
+
+ The url on your http server that is expected to return a 2xx, 3xx, 400, 401, 402, or 403 status code when the server is ready to accept connections. Redirects (3xx status codes) are being followed and the new location is checked. Either `port` or `url` should be specified.
+
+---
+
### workers {#test-project-workers}
Added in: v1.52testProject.workers
@@ -785,6 +883,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"
@@ -817,6 +916,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/docs/api/class-testresult.mdx b/nodejs/docs/api/class-testresult.mdx
index 5ba851d866..cade3096e2 100644
--- a/nodejs/docs/api/class-testresult.mdx
+++ b/nodejs/docs/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/docs/api/class-teststep.mdx b/nodejs/docs/api/class-teststep.mdx
index 87b713efaa..fe9885b736 100644
--- a/nodejs/docs/api/class-teststep.mdx
+++ b/nodejs/docs/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/docs/api/class-teststepinfo.mdx b/nodejs/docs/api/class-teststepinfo.mdx
index d5e10b5279..2342918eba 100644
--- a/nodejs/docs/api/class-teststepinfo.mdx
+++ b/nodejs/docs/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/docs/api/class-timeouterror.mdx b/nodejs/docs/api/class-timeouterror.mdx
index cf59bbc090..267e9c0013 100644
--- a/nodejs/docs/api/class-timeouterror.mdx
+++ b/nodejs/docs/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/docs/api/class-touchscreen.mdx b/nodejs/docs/api/class-touchscreen.mdx
index 6ae12c38fa..20ddcfb884 100644
--- a/nodejs/docs/api/class-touchscreen.mdx
+++ b/nodejs/docs/api/class-touchscreen.mdx
@@ -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/docs/api/class-tracing.mdx b/nodejs/docs/api/class-tracing.mdx
index 9771b2d4cb..ab72b23602 100644
--- a/nodejs/docs/api/class-tracing.mdx
+++ b/nodejs/docs/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/docs/api/class-video.mdx b/nodejs/docs/api/class-video.mdx
index 3029f4249a..4849c66edc 100644
--- a/nodejs/docs/api/class-video.mdx
+++ b/nodejs/docs/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/docs/api/class-weberror.mdx b/nodejs/docs/api/class-weberror.mdx
index 663283712f..95459b1a65 100644
--- a/nodejs/docs/api/class-weberror.mdx
+++ b/nodejs/docs/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/docs/api/class-websocket.mdx b/nodejs/docs/api/class-websocket.mdx
index a1c9ac4f04..e8361ab8b2 100644
--- a/nodejs/docs/api/class-websocket.mdx
+++ b/nodejs/docs/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/docs/api/class-websocketroute.mdx b/nodejs/docs/api/class-websocketroute.mdx
index ff7e89592d..81c24f95bb 100644
--- a/nodejs/docs/api/class-websocketroute.mdx
+++ b/nodejs/docs/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/docs/api/class-webstorage.mdx b/nodejs/docs/api/class-webstorage.mdx
new file mode 100644
index 0000000000..dfc510c151
--- /dev/null
+++ b/nodejs/docs/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`, or `null` if the key is not 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`. 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`. 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/docs/api/class-worker.mdx b/nodejs/docs/api/class-worker.mdx
index 4246aced53..ce4c5feedb 100644
--- a/nodejs/docs/api/class-worker.mdx
+++ b/nodejs/docs/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/docs/api/class-workerinfo.mdx b/nodejs/docs/api/class-workerinfo.mdx
index a87e340847..222a4c9265 100644
--- a/nodejs/docs/api/class-workerinfo.mdx
+++ b/nodejs/docs/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/docs/aria-snapshots.mdx b/nodejs/docs/aria-snapshots.mdx
index 949f13f84a..54ae14bf0c 100644
--- a/nodejs/docs/aria-snapshots.mdx
+++ b/nodejs/docs/aria-snapshots.mdx
@@ -450,6 +450,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 +483,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/docs/auth.mdx b/nodejs/docs/auth.mdx
index e72cb15a1e..07b97e1aa6 100644
--- a/nodejs/docs/auth.mdx
+++ b/nodejs/docs/auth.mdx
@@ -539,6 +539,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 +572,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/docs/best-practices.mdx b/nodejs/docs/best-practices.mdx
index de1155cacd..4e00648623 100644
--- a/nodejs/docs/best-practices.mdx
+++ b/nodejs/docs/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/docs/browser-contexts.mdx b/nodejs/docs/browser-contexts.mdx
index 68875d839b..214e1d432c 100644
--- a/nodejs/docs/browser-contexts.mdx
+++ b/nodejs/docs/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/docs/browsers.mdx b/nodejs/docs/browsers.mdx
index 65d6086fdc..1a4995c287 100644
--- a/nodejs/docs/browsers.mdx
+++ b/nodejs/docs/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/docs/canary-releases.mdx b/nodejs/docs/canary-releases.mdx
index fbf6147c1a..fb6c7be5c1 100644
--- a/nodejs/docs/canary-releases.mdx
+++ b/nodejs/docs/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/docs/chrome-extensions.mdx b/nodejs/docs/chrome-extensions.mdx
index 2dd26e8a89..7ad4e9822f 100644
--- a/nodejs/docs/chrome-extensions.mdx
+++ b/nodejs/docs/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/docs/ci-intro.mdx b/nodejs/docs/ci-intro.mdx
index 22764f5c8a..3147c86902 100644
--- a/nodejs/docs/ci-intro.mdx
+++ b/nodejs/docs/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/docs/ci.mdx b/nodejs/docs/ci.mdx
index edd9da231c..3ef2360bc1 100644
--- a/nodejs/docs/ci.mdx
+++ b/nodejs/docs/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/docs/clock.mdx b/nodejs/docs/clock.mdx
index 82b826a42c..1ab76daf3e 100644
--- a/nodejs/docs/clock.mdx
+++ b/nodejs/docs/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/docs/codegen-intro.mdx b/nodejs/docs/codegen-intro.mdx
index acf4aace2f..c1086276d6 100644
--- a/nodejs/docs/codegen-intro.mdx
+++ b/nodejs/docs/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/docs/codegen.mdx b/nodejs/docs/codegen.mdx
index 8d5742e3d5..7c210f4629 100644
--- a/nodejs/docs/codegen.mdx
+++ b/nodejs/docs/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/docs/debug.mdx b/nodejs/docs/debug.mdx
index 9a2c2553bb..dd7b926464 100644
--- a/nodejs/docs/debug.mdx
+++ b/nodejs/docs/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/docs/dialogs.mdx b/nodejs/docs/dialogs.mdx
index 5aa3902aac..fdde5fee39 100644
--- a/nodejs/docs/dialogs.mdx
+++ b/nodejs/docs/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/docs/docker.mdx b/nodejs/docs/docker.mdx
index ea02d6e978..eeec19ffc5 100644
--- a/nodejs/docs/docker.mdx
+++ b/nodejs/docs/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/docs/downloads.mdx b/nodejs/docs/downloads.mdx
index cac130fef1..c7fce80c06 100644
--- a/nodejs/docs/downloads.mdx
+++ b/nodejs/docs/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/docs/emulation.mdx b/nodejs/docs/emulation.mdx
index 36124bf7f9..d18689a167 100644
--- a/nodejs/docs/emulation.mdx
+++ b/nodejs/docs/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/docs/evaluating.mdx b/nodejs/docs/evaluating.mdx
index 6ed0e592a2..f8a969bd0d 100644
--- a/nodejs/docs/evaluating.mdx
+++ b/nodejs/docs/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/docs/events.mdx b/nodejs/docs/events.mdx
index 22f3b85dbb..1311ca782b 100644
--- a/nodejs/docs/events.mdx
+++ b/nodejs/docs/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/docs/extensibility.mdx b/nodejs/docs/extensibility.mdx
index 91bc9af60b..9ed97fa3d1 100644
--- a/nodejs/docs/extensibility.mdx
+++ b/nodejs/docs/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/docs/frames.mdx b/nodejs/docs/frames.mdx
index 9ccad48c16..42c78b7b86 100644
--- a/nodejs/docs/frames.mdx
+++ b/nodejs/docs/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/docs/getting-started-cli.mdx b/nodejs/docs/getting-started-cli.mdx
index 0896a54e6c..fb8c675dc3 100644
--- a/nodejs/docs/getting-started-cli.mdx
+++ b/nodejs/docs/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/docs/getting-started-mcp.mdx b/nodejs/docs/getting-started-mcp.mdx
index 67b32c0d35..5d44cbf9c7 100644
--- a/nodejs/docs/getting-started-mcp.mdx
+++ b/nodejs/docs/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/docs/getting-started-vscode.mdx b/nodejs/docs/getting-started-vscode.mdx
index 748565b2ce..0db9b1d691 100644
--- a/nodejs/docs/getting-started-vscode.mdx
+++ b/nodejs/docs/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/docs/handles.mdx b/nodejs/docs/handles.mdx
index 509865f5d8..e376aae525 100644
--- a/nodejs/docs/handles.mdx
+++ b/nodejs/docs/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/docs/input.mdx b/nodejs/docs/input.mdx
index 2e9006bb32..acb7df7f56 100644
--- a/nodejs/docs/input.mdx
+++ b/nodejs/docs/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/docs/intro.mdx b/nodejs/docs/intro.mdx
index 93ff7efafd..999c7772ca 100644
--- a/nodejs/docs/intro.mdx
+++ b/nodejs/docs/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/docs/languages.mdx b/nodejs/docs/languages.mdx
index e7fdbeb2ac..da6a803019 100644
--- a/nodejs/docs/languages.mdx
+++ b/nodejs/docs/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/docs/library.mdx b/nodejs/docs/library.mdx
index 782140966b..726c0997b5 100644
--- a/nodejs/docs/library.mdx
+++ b/nodejs/docs/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/docs/locators.mdx b/nodejs/docs/locators.mdx
index ef24eb6d5e..5b1f89133e 100644
--- a/nodejs/docs/locators.mdx
+++ b/nodejs/docs/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/docs/mock-browser.mdx b/nodejs/docs/mock-browser.mdx
index e9b23f03df..f0c1e021b4 100644
--- a/nodejs/docs/mock-browser.mdx
+++ b/nodejs/docs/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/docs/mock.mdx b/nodejs/docs/mock.mdx
index 84aadd0a5e..7c8e0db639 100644
--- a/nodejs/docs/mock.mdx
+++ b/nodejs/docs/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/docs/navigations.mdx b/nodejs/docs/navigations.mdx
index 0091fa57d2..33d7353cc3 100644
--- a/nodejs/docs/navigations.mdx
+++ b/nodejs/docs/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/docs/network.mdx b/nodejs/docs/network.mdx
index c4ad75e968..9af502c942 100644
--- a/nodejs/docs/network.mdx
+++ b/nodejs/docs/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/docs/other-locators.mdx b/nodejs/docs/other-locators.mdx
index f00870cbe1..4f1a0ddf2d 100644
--- a/nodejs/docs/other-locators.mdx
+++ b/nodejs/docs/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/docs/pages.mdx b/nodejs/docs/pages.mdx
index dd32cb3b6c..9dfb7823f9 100644
--- a/nodejs/docs/pages.mdx
+++ b/nodejs/docs/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/docs/pom.mdx b/nodejs/docs/pom.mdx
index 1ea2dc8144..33b1964d30 100644
--- a/nodejs/docs/pom.mdx
+++ b/nodejs/docs/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/docs/protractor.mdx b/nodejs/docs/protractor.mdx
index ab7d9bd140..fbb4355519 100644
--- a/nodejs/docs/protractor.mdx
+++ b/nodejs/docs/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/docs/puppeteer.mdx b/nodejs/docs/puppeteer.mdx
index de630d0835..a477ee1fb8 100644
--- a/nodejs/docs/puppeteer.mdx
+++ b/nodejs/docs/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/docs/release-notes.mdx b/nodejs/docs/release-notes.mdx
index 67ee1ffec0..bcd7a4035d 100644
--- a/nodejs/docs/release-notes.mdx
+++ b/nodejs/docs/release-notes.mdx
@@ -3547,6 +3547,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 +3580,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/docs/running-tests.mdx b/nodejs/docs/running-tests.mdx
index d74a38f338..5625ba72db 100644
--- a/nodejs/docs/running-tests.mdx
+++ b/nodejs/docs/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/docs/screenshots.mdx b/nodejs/docs/screenshots.mdx
index eb0e4840e1..f4e02b934f 100644
--- a/nodejs/docs/screenshots.mdx
+++ b/nodejs/docs/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/docs/selenium-grid.mdx b/nodejs/docs/selenium-grid.mdx
index 2782a8c2eb..d42d3b5393 100644
--- a/nodejs/docs/selenium-grid.mdx
+++ b/nodejs/docs/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/docs/service-workers.mdx b/nodejs/docs/service-workers.mdx
index 07dc916dc5..621cf92425 100644
--- a/nodejs/docs/service-workers.mdx
+++ b/nodejs/docs/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/docs/test-agents.mdx b/nodejs/docs/test-agents.mdx
index 9fbf5da0d6..72d9c6b3de 100644
--- a/nodejs/docs/test-agents.mdx
+++ b/nodejs/docs/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/docs/test-annotations.mdx b/nodejs/docs/test-annotations.mdx
index 91bfc3e6c2..8b1d0effb8 100644
--- a/nodejs/docs/test-annotations.mdx
+++ b/nodejs/docs/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/docs/test-assertions.mdx b/nodejs/docs/test-assertions.mdx
index 43ff0f9c57..679c8abae3 100644
--- a/nodejs/docs/test-assertions.mdx
+++ b/nodejs/docs/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/docs/test-cli.mdx b/nodejs/docs/test-cli.mdx
index c15c943373..c472e39bf8 100644
--- a/nodejs/docs/test-cli.mdx
+++ b/nodejs/docs/test-cli.mdx
@@ -94,6 +94,7 @@ npx playwright test --ui
| `--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. |
@@ -109,7 +110,7 @@ npx playwright test --ui
| `--test-list ` | Path to a file containing a list of tests to run. See [test list](#test-list) for details. |
| `--test-list-invert ` | Path to a file containing a list of tests to skip. See [test list](#test-list) for details. |
| `--timeout ` | Specify test timeout threshold in milliseconds, zero for unlimited (default: 30 seconds). |
-| `--trace ` | Force tracing mode, can be `on`, `off`, `on-first-retry`, `on-all-retries`, `retain-on-failure`, `retain-on-first-failure`, `retain-on-failure-and-retries`. |
+| `--trace ` | Force tracing mode, can be `on`, `off`, `on-first-retry`, `on-all-retries`, `retain-on-failure`, `retain-on-first-failure`, `retain-on-failure-and-retries`, `retain-all-failures`. |
| `--tsconfig ` | Path to a single tsconfig applicable to all imported files (default: look up tsconfig for each imported file separately). |
| `--ui` | Run tests in interactive UI mode. |
| `--ui-host ` | Host to serve UI on; specifying this option opens UI in a browser tab. |
@@ -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/docs/test-components.mdx b/nodejs/docs/test-components.mdx
index dc9c1f6922..a0df80c6a9 100644
--- a/nodejs/docs/test-components.mdx
+++ b/nodejs/docs/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/docs/test-configuration.mdx b/nodejs/docs/test-configuration.mdx
index 1ee6d9899a..f706c70785 100644
--- a/nodejs/docs/test-configuration.mdx
+++ b/nodejs/docs/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/docs/test-fixtures.mdx b/nodejs/docs/test-fixtures.mdx
index b1e73cfee4..f2babbe513 100644
--- a/nodejs/docs/test-fixtures.mdx
+++ b/nodejs/docs/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/docs/test-global-setup-teardown.mdx b/nodejs/docs/test-global-setup-teardown.mdx
index fef86f7f8a..2736c00a8d 100644
--- a/nodejs/docs/test-global-setup-teardown.mdx
+++ b/nodejs/docs/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/docs/test-parallel.mdx b/nodejs/docs/test-parallel.mdx
index 6882dea254..afbf5c49f1 100644
--- a/nodejs/docs/test-parallel.mdx
+++ b/nodejs/docs/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/docs/test-parameterize.mdx b/nodejs/docs/test-parameterize.mdx
index 9c52a721da..d4864e6d74 100644
--- a/nodejs/docs/test-parameterize.mdx
+++ b/nodejs/docs/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/docs/test-projects.mdx b/nodejs/docs/test-projects.mdx
index 415d1d4d62..5c34c17dbe 100644
--- a/nodejs/docs/test-projects.mdx
+++ b/nodejs/docs/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/docs/test-reporters.mdx b/nodejs/docs/test-reporters.mdx
index d3ed91f538..ca3d4de2dc 100644
--- a/nodejs/docs/test-reporters.mdx
+++ b/nodejs/docs/test-reporters.mdx
@@ -517,6 +517,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 +550,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/docs/test-retries.mdx b/nodejs/docs/test-retries.mdx
index 21d087f6c7..f55f6d3399 100644
--- a/nodejs/docs/test-retries.mdx
+++ b/nodejs/docs/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/docs/test-sharding.mdx b/nodejs/docs/test-sharding.mdx
index d2f57ac01d..4174df90e6 100644
--- a/nodejs/docs/test-sharding.mdx
+++ b/nodejs/docs/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/docs/test-snapshots.mdx b/nodejs/docs/test-snapshots.mdx
index 75803c1382..8e63f6617b 100644
--- a/nodejs/docs/test-snapshots.mdx
+++ b/nodejs/docs/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/docs/test-timeouts.mdx b/nodejs/docs/test-timeouts.mdx
index 7cc3820729..60c947559a 100644
--- a/nodejs/docs/test-timeouts.mdx
+++ b/nodejs/docs/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/docs/test-typescript.mdx b/nodejs/docs/test-typescript.mdx
index 9a01c508ac..868588fd30 100644
--- a/nodejs/docs/test-typescript.mdx
+++ b/nodejs/docs/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/docs/test-ui-mode.mdx b/nodejs/docs/test-ui-mode.mdx
index 6652fdfabe..4e8862c49e 100644
--- a/nodejs/docs/test-ui-mode.mdx
+++ b/nodejs/docs/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/docs/test-use-options.mdx b/nodejs/docs/test-use-options.mdx
index e32f311b87..0336f5504d 100644
--- a/nodejs/docs/test-use-options.mdx
+++ b/nodejs/docs/test-use-options.mdx
@@ -360,6 +360,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 +393,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/docs/test-webserver.mdx b/nodejs/docs/test-webserver.mdx
index 87c1a9d4c6..e930621834 100644
--- a/nodejs/docs/test-webserver.mdx
+++ b/nodejs/docs/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/docs/testing-library.mdx b/nodejs/docs/testing-library.mdx
index fd25d5e692..95f586245a 100644
--- a/nodejs/docs/testing-library.mdx
+++ b/nodejs/docs/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/docs/touch-events.mdx b/nodejs/docs/touch-events.mdx
index 1916fbfdf4..bb6280a402 100644
--- a/nodejs/docs/touch-events.mdx
+++ b/nodejs/docs/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/docs/trace-viewer-intro.mdx b/nodejs/docs/trace-viewer-intro.mdx
index 223cde781c..1de729f8ae 100644
--- a/nodejs/docs/trace-viewer-intro.mdx
+++ b/nodejs/docs/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/docs/trace-viewer.mdx b/nodejs/docs/trace-viewer.mdx
index 2f13aeea44..8884cf69b5 100644
--- a/nodejs/docs/trace-viewer.mdx
+++ b/nodejs/docs/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/docs/videos.mdx b/nodejs/docs/videos.mdx
index 461f33e95f..a100a58f25 100644
--- a/nodejs/docs/videos.mdx
+++ b/nodejs/docs/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/docs/webview2.mdx b/nodejs/docs/webview2.mdx
index c061ce43f3..c2650822de 100644
--- a/nodejs/docs/webview2.mdx
+++ b/nodejs/docs/webview2.mdx
@@ -130,6 +130,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"
@@ -162,6 +163,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/docs/writing-tests.mdx b/nodejs/docs/writing-tests.mdx
index e10f677bbc..d7c472658a 100644
--- a/nodejs/docs/writing-tests.mdx
+++ b/nodejs/docs/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/docs/actionability.mdx b/python/docs/actionability.mdx
index 1884b0ff9a..c7c4906604 100644
--- a/python/docs/actionability.mdx
+++ b/python/docs/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/docs/api-testing.mdx b/python/docs/api-testing.mdx
index 562a8d48ee..5b2e281a2f 100644
--- a/python/docs/api-testing.mdx
+++ b/python/docs/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/docs/api/class-apirequest.mdx b/python/docs/api/class-apirequest.mdx
index 6b52b21065..9f57542eaa 100644
--- a/python/docs/api/class-apirequest.mdx
+++ b/python/docs/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/docs/api/class-apirequestcontext.mdx b/python/docs/api/class-apirequestcontext.mdx
index d805cdf9f5..73b5164dfb 100644
--- a/python/docs/api/class-apirequestcontext.mdx
+++ b/python/docs/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/docs/api/class-apiresponse.mdx b/python/docs/api/class-apiresponse.mdx
index 225764927b..0702e74a52 100644
--- a/python/docs/api/class-apiresponse.mdx
+++ b/python/docs/api/class-apiresponse.mdx
@@ -254,6 +254,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 +284,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/docs/api/class-apiresponseassertions.mdx b/python/docs/api/class-apiresponseassertions.mdx
index 0fbea12f0a..fdb5a6cc1f 100644
--- a/python/docs/api/class-apiresponseassertions.mdx
+++ b/python/docs/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/docs/api/class-browser.mdx b/python/docs/api/class-browser.mdx
index 649ce654da..6d5541715c 100644
--- a/python/docs/api/class-browser.mdx
+++ b/python/docs/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/docs/api/class-browsercontext.mdx b/python/docs/api/class-browsercontext.mdx
index 1ab1bc40dc..6dca6e30f5 100644
--- a/python/docs/api/class-browsercontext.mdx
+++ b/python/docs/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
@@ -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/docs/api/class-browsertype.mdx b/python/docs/api/class-browsertype.mdx
index b88429a0a9..a175d74a1c 100644
--- a/python/docs/api/class-browsertype.mdx
+++ b/python/docs/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/docs/api/class-cdpsession.mdx b/python/docs/api/class-cdpsession.mdx
index 1177a2b09b..5b1becd962 100644
--- a/python/docs/api/class-cdpsession.mdx
+++ b/python/docs/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/docs/api/class-clock.mdx b/python/docs/api/class-clock.mdx
index b437f4b54b..a653fff23f 100644
--- a/python/docs/api/class-clock.mdx
+++ b/python/docs/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/docs/api/class-consolemessage.mdx b/python/docs/api/class-consolemessage.mdx
index 4545ca9753..0b53ad151d 100644
--- a/python/docs/api/class-consolemessage.mdx
+++ b/python/docs/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/docs/api/class-credentials.mdx b/python/docs/api/class-credentials.mdx
new file mode 100644
index 0000000000..626d899129
--- /dev/null
+++ b/python/docs/api/class-credentials.mdx
@@ -0,0 +1,247 @@
+---
+id: class-credentials
+title: "Credentials"
+---
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import HTMLCard from '@site/src/components/HTMLCard';
+
+
+`Credentials` provides a virtual WebAuthn authenticator scoped to a [BrowserContext]. It lets tests seed credentials, intercept `navigator.credentials.create()` / `navigator.credentials.get()` calls in pages, and complete WebAuthn ceremonies without a real authenticator.
+
+Implemented in userland via an injected script, so it works across Chromium, Firefox and WebKit.
+
+**Usage**
+
+
+---
+
+## Methods
+
+### create {#credentials-create}
+
+Added in: v1.61credentials.create
+
+Seeds a virtual WebAuthn credential. With only `rpId`, generates a fresh ECDSA P-256 keypair, credential id and user handle. To import a pre-registered credential (e.g. authenticating as an existing test user the server already knows about), supply all four of `id`, `userHandle`, `privateKey` and `publicKey` 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**
+- `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.
+- `rp_id` [str]#
+
+ Relying party id (typically the site's effective domain).
+- `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 previously seeded credential.
+
+**Usage**
+
+```python
+credentials.delete(id)
+```
+
+**Arguments**
+- `id` [str]#
+
+ Base64url-encoded credential id.
+
+**Returns**
+- [NoneType]#
+
+---
+
+### get {#credentials-get}
+
+Added in: v1.61credentials.get
+
+Returns seeded credentials, optionally filtered by `rpId` or `id`.
+
+**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 `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 `install()` populates the registry but the page will never see those credentials.
+
+**Usage**
+
+```python
+credentials.install()
+```
+
+**Returns**
+- [NoneType]#
+
+---
+
+### set_user_verified {#credentials-set-user-verified}
+
+Added in: v1.61credentials.set_user_verified
+
+Toggles whether the virtual authenticator auto-approves user-verification prompts. Useful for simulating a user denying biometric verification.
+
+**Usage**
+
+```python
+credentials.set_user_verified(value)
+```
+
+**Arguments**
+- `value` [bool]#
+
+ `true` to auto-approve user verification (default), `false` to refuse.
+
+**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/docs/api/class-debugger.mdx b/python/docs/api/class-debugger.mdx
index 1abc51a28d..f37dfbbfe0 100644
--- a/python/docs/api/class-debugger.mdx
+++ b/python/docs/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/docs/api/class-dialog.mdx b/python/docs/api/class-dialog.mdx
index f829551f91..653dc41703 100644
--- a/python/docs/api/class-dialog.mdx
+++ b/python/docs/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/docs/api/class-download.mdx b/python/docs/api/class-download.mdx
index bc8e3f5250..9a6a2c5522 100644
--- a/python/docs/api/class-download.mdx
+++ b/python/docs/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/docs/api/class-elementhandle.mdx b/python/docs/api/class-elementhandle.mdx
index ccc57899e9..5f81a41948 100644
--- a/python/docs/api/class-elementhandle.mdx
+++ b/python/docs/api/class-elementhandle.mdx
@@ -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/docs/api/class-error.mdx b/python/docs/api/class-error.mdx
index 0874af577e..c6013ab4d3 100644
--- a/python/docs/api/class-error.mdx
+++ b/python/docs/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/docs/api/class-filechooser.mdx b/python/docs/api/class-filechooser.mdx
index 673798c934..ebd692ef42 100644
--- a/python/docs/api/class-filechooser.mdx
+++ b/python/docs/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/docs/api/class-formdata.mdx b/python/docs/api/class-formdata.mdx
index eaf350fed1..79cbee3b0c 100644
--- a/python/docs/api/class-formdata.mdx
+++ b/python/docs/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/docs/api/class-frame.mdx b/python/docs/api/class-frame.mdx
index 729feee6c0..a4c967d9ca 100644
--- a/python/docs/api/class-frame.mdx
+++ b/python/docs/api/class-frame.mdx
@@ -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/docs/api/class-framelocator.mdx b/python/docs/api/class-framelocator.mdx
index 6dabfcde52..55721d610f 100644
--- a/python/docs/api/class-framelocator.mdx
+++ b/python/docs/api/class-framelocator.mdx
@@ -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/docs/api/class-jshandle.mdx b/python/docs/api/class-jshandle.mdx
index 5bfda72843..1893cbde69 100644
--- a/python/docs/api/class-jshandle.mdx
+++ b/python/docs/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/docs/api/class-keyboard.mdx b/python/docs/api/class-keyboard.mdx
index f657bf564b..da2b809217 100644
--- a/python/docs/api/class-keyboard.mdx
+++ b/python/docs/api/class-keyboard.mdx
@@ -289,6 +289,8 @@ In most cases, you should use [locator.fill()](/api/class-locator.mdx#locator-fi
Sends a `keydown`, `keypress`/`input`, and `keyup` event for each character in the text.
+When [named_keys](/api/class-keyboard.mdx#keyboard-type-option-named-keys) is `true`, anything inside `{}` is treated as a key name (same format as [keyboard.press()](/api/class-keyboard.mdx#keyboard-press)).
+
To press a special key, like `Control` or `ArrowDown`, use [keyboard.press()](/api/class-keyboard.mdx#keyboard-press).
**Usage**
@@ -306,6 +308,9 @@ To press a special key, like `Control` or `ArrowDown`, use [keyboard.press()](/a
```py
page.keyboard.type("Hello") # types instantly
page.keyboard.type("World", delay=100) # types slower, like a user
+
+# Mix text and special keys
+page.keyboard.type("Hello{Enter}World", named_keys=True)
```
@@ -314,6 +319,9 @@ page.keyboard.type("World", delay=100) # types slower, like a user
```py
await page.keyboard.type("Hello") # types instantly
await page.keyboard.type("World", delay=100) # types slower, like a user
+
+# Mix text and special keys
+await page.keyboard.type("Hello{Enter}World", named_keys=True)
```
@@ -335,6 +343,9 @@ For characters that are not on a US keyboard, only an `input` event will be sent
- `delay` [float] *(optional)*#
Time to wait between key presses in milliseconds. Defaults to 0.
+- `named_keys` [bool] *(optional)* Added in: v1.61#
+
+ When [named_keys](/api/class-keyboard.mdx#keyboard-type-option-named-keys) is `true`, anything inside `{}` is treated as a key name (same format as [keyboard.press()](/api/class-keyboard.mdx#keyboard-press)). Use `{{` to type a literal brace character. Defaults to `false`.
**Returns**
- [NoneType]#
@@ -372,6 +383,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 +413,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/docs/api/class-locator.mdx b/python/docs/api/class-locator.mdx
index 1bab9732d5..9f9ac49b7b 100644
--- a/python/docs/api/class-locator.mdx
+++ b/python/docs/api/class-locator.mdx
@@ -2638,6 +2638,8 @@ In most cases, you should use [locator.fill()](/api/class-locator.mdx#locator-fi
Focuses the element, and then sends a `keydown`, `keypress`/`input`, and `keyup` event for each character in the text.
+When [named_keys](/api/class-locator.mdx#locator-press-sequentially-option-named-keys) is `true`, anything inside `{}` is treated as a key name (same format as [locator.press()](/api/class-locator.mdx#locator-press)).
+
To press a special key, like `Control` or `ArrowDown`, use [locator.press()](/api/class-locator.mdx#locator-press).
**Usage**
@@ -2655,6 +2657,9 @@ To press a special key, like `Control` or `ArrowDown`, use [locator.press()](/ap
```py
locator.press_sequentially("hello") # types instantly
locator.press_sequentially("world", delay=100) # types slower, like a user
+
+# Mix characters and named keys
+locator.press_sequentially("Hello{Enter}World", named_keys=True)
```
@@ -2663,6 +2668,9 @@ locator.press_sequentially("world", delay=100) # types slower, like a user
```py
await locator.press_sequentially("hello") # types instantly
await locator.press_sequentially("world", delay=100) # types slower, like a user
+
+# Mix characters and named keys
+await locator.press_sequentially("Hello{Enter}World", named_keys=True)
```
@@ -2701,10 +2709,13 @@ await locator.press("Enter")
**Arguments**
- `text` [str]#
- String of characters to sequentially press into a focused element.
+ String of characters to sequentially press into a focused element. When [named_keys](/api/class-locator.mdx#locator-press-sequentially-option-named-keys) is `true`, anything inside `{}` is treated as a key name (same format as [locator.press()](/api/class-locator.mdx#locator-press)).
- `delay` [float] *(optional)*#
Time to wait between key presses in milliseconds. Defaults to 0.
+- `named_keys` [bool] *(optional)* Added in: v1.61#
+
+ When [named_keys](/api/class-locator.mdx#locator-press-sequentially-option-named-keys) is `true`, anything inside `{}` is treated as a key name (same format as [locator.press()](/api/class-locator.mdx#locator-press)). Use `{{` to type a literal brace character. Defaults to `false`.
- `no_wait_after` [bool] *(optional)*#
:::warning[Deprecated]
@@ -3652,6 +3663,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 +3693,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/docs/api/class-locatorassertions.mdx b/python/docs/api/class-locatorassertions.mdx
index 35245daadf..08267bf871 100644
--- a/python/docs/api/class-locatorassertions.mdx
+++ b/python/docs/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/docs/api/class-mouse.mdx b/python/docs/api/class-mouse.mdx
index 95406d371e..33c4c0dc21 100644
--- a/python/docs/api/class-mouse.mdx
+++ b/python/docs/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/docs/api/class-page.mdx b/python/docs/api/class-page.mdx
index 011641fb15..2d84d3cd1d 100644
--- a/python/docs/api/class-page.mdx
+++ b/python/docs/api/class-page.mdx
@@ -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
@@ -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/docs/api/class-pageassertions.mdx b/python/docs/api/class-pageassertions.mdx
index bdc5cf598e..6d2b59bf53 100644
--- a/python/docs/api/class-pageassertions.mdx
+++ b/python/docs/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/docs/api/class-playwright.mdx b/python/docs/api/class-playwright.mdx
index 79ae989899..b055746a46 100644
--- a/python/docs/api/class-playwright.mdx
+++ b/python/docs/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/docs/api/class-request.mdx b/python/docs/api/class-request.mdx
index e9f3105ea4..adc1596f05 100644
--- a/python/docs/api/class-request.mdx
+++ b/python/docs/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/docs/api/class-response.mdx b/python/docs/api/class-response.mdx
index 6dbfac165f..dace74547a 100644
--- a/python/docs/api/class-response.mdx
+++ b/python/docs/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/docs/api/class-route.mdx b/python/docs/api/class-route.mdx
index 564e1e6568..9757a59009 100644
--- a/python/docs/api/class-route.mdx
+++ b/python/docs/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/docs/api/class-screencast.mdx b/python/docs/api/class-screencast.mdx
index 1a5f944619..c81b422ef0 100644
--- a/python/docs/api/class-screencast.mdx
+++ b/python/docs/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`.
@@ -208,6 +211,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 +241,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/docs/api/class-selectors.mdx b/python/docs/api/class-selectors.mdx
index f50bb416f3..3b98e35079 100644
--- a/python/docs/api/class-selectors.mdx
+++ b/python/docs/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/docs/api/class-timeouterror.mdx b/python/docs/api/class-timeouterror.mdx
index 3d26a66d4f..47d812b1ed 100644
--- a/python/docs/api/class-timeouterror.mdx
+++ b/python/docs/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/docs/api/class-touchscreen.mdx b/python/docs/api/class-touchscreen.mdx
index 203de6bc86..b7675c4a2f 100644
--- a/python/docs/api/class-touchscreen.mdx
+++ b/python/docs/api/class-touchscreen.mdx
@@ -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/docs/api/class-tracing.mdx b/python/docs/api/class-tracing.mdx
index dcc20443ff..64b0a0ce73 100644
--- a/python/docs/api/class-tracing.mdx
+++ b/python/docs/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/docs/api/class-video.mdx b/python/docs/api/class-video.mdx
index f321b705ec..912ff6263b 100644
--- a/python/docs/api/class-video.mdx
+++ b/python/docs/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/docs/api/class-weberror.mdx b/python/docs/api/class-weberror.mdx
index b91be9f22e..4ac6658ac3 100644
--- a/python/docs/api/class-weberror.mdx
+++ b/python/docs/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/docs/api/class-websocket.mdx b/python/docs/api/class-websocket.mdx
index d485720f5a..caafd087f5 100644
--- a/python/docs/api/class-websocket.mdx
+++ b/python/docs/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/docs/api/class-websocketroute.mdx b/python/docs/api/class-websocketroute.mdx
index 16ce94b677..1c1525c2d3 100644
--- a/python/docs/api/class-websocketroute.mdx
+++ b/python/docs/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/docs/api/class-webstorage.mdx b/python/docs/api/class-webstorage.mdx
new file mode 100644
index 0000000000..37e84bce8a
--- /dev/null
+++ b/python/docs/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`, or `null` if the key is not 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`. 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`. 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/docs/api/class-worker.mdx b/python/docs/api/class-worker.mdx
index 7ecb63f5b6..1956b20011 100644
--- a/python/docs/api/class-worker.mdx
+++ b/python/docs/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/docs/aria-snapshots.mdx b/python/docs/aria-snapshots.mdx
index ccc6c6b823..bcd693f223 100644
--- a/python/docs/aria-snapshots.mdx
+++ b/python/docs/aria-snapshots.mdx
@@ -453,6 +453,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 +483,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/docs/auth.mdx b/python/docs/auth.mdx
index cf011468b8..2d1ed82fb9 100644
--- a/python/docs/auth.mdx
+++ b/python/docs/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/docs/browser-contexts.mdx b/python/docs/browser-contexts.mdx
index 26fdbde992..b3d3a82fe5 100644
--- a/python/docs/browser-contexts.mdx
+++ b/python/docs/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/docs/browsers.mdx b/python/docs/browsers.mdx
index 2bc878d5c8..bd646473d2 100644
--- a/python/docs/browsers.mdx
+++ b/python/docs/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/docs/chrome-extensions.mdx b/python/docs/chrome-extensions.mdx
index 8338cdb87d..6d8fcda45c 100644
--- a/python/docs/chrome-extensions.mdx
+++ b/python/docs/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/docs/ci-intro.mdx b/python/docs/ci-intro.mdx
index cacec445a1..7a10a55b9e 100644
--- a/python/docs/ci-intro.mdx
+++ b/python/docs/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/docs/ci.mdx b/python/docs/ci.mdx
index da419c80b2..bd562d536b 100644
--- a/python/docs/ci.mdx
+++ b/python/docs/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/docs/clock.mdx b/python/docs/clock.mdx
index b996bc6e0c..e69f17b0d7 100644
--- a/python/docs/clock.mdx
+++ b/python/docs/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/docs/codegen-intro.mdx b/python/docs/codegen-intro.mdx
index 41a80b1b6b..7933518b54 100644
--- a/python/docs/codegen-intro.mdx
+++ b/python/docs/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/docs/codegen.mdx b/python/docs/codegen.mdx
index 24192c67e6..f7895c033b 100644
--- a/python/docs/codegen.mdx
+++ b/python/docs/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/docs/debug.mdx b/python/docs/debug.mdx
index f4d395b074..2d2a71eeb7 100644
--- a/python/docs/debug.mdx
+++ b/python/docs/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/docs/dialogs.mdx b/python/docs/dialogs.mdx
index cc269a3e7b..b7651902fd 100644
--- a/python/docs/dialogs.mdx
+++ b/python/docs/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/docs/docker.mdx b/python/docs/docker.mdx
index 1ba0a30b4c..871f30e29b 100644
--- a/python/docs/docker.mdx
+++ b/python/docs/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/docs/downloads.mdx b/python/docs/downloads.mdx
index 9311fff874..1abbd488d8 100644
--- a/python/docs/downloads.mdx
+++ b/python/docs/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/docs/emulation.mdx b/python/docs/emulation.mdx
index 20c325b57c..34bb01a03a 100644
--- a/python/docs/emulation.mdx
+++ b/python/docs/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/docs/evaluating.mdx b/python/docs/evaluating.mdx
index 6efd66e775..5129e76ab6 100644
--- a/python/docs/evaluating.mdx
+++ b/python/docs/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/docs/events.mdx b/python/docs/events.mdx
index 42c97e1206..2cf537a8ff 100644
--- a/python/docs/events.mdx
+++ b/python/docs/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/docs/extensibility.mdx b/python/docs/extensibility.mdx
index 6c535d06b2..e999dc3cc1 100644
--- a/python/docs/extensibility.mdx
+++ b/python/docs/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/docs/frames.mdx b/python/docs/frames.mdx
index 1c46a05555..fd2ed7b23f 100644
--- a/python/docs/frames.mdx
+++ b/python/docs/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/docs/getting-started-cli.mdx b/python/docs/getting-started-cli.mdx
index 173690796f..f46575f00e 100644
--- a/python/docs/getting-started-cli.mdx
+++ b/python/docs/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/docs/getting-started-mcp.mdx b/python/docs/getting-started-mcp.mdx
index 81f383b8d4..39b8b67d4b 100644
--- a/python/docs/getting-started-mcp.mdx
+++ b/python/docs/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/docs/handles.mdx b/python/docs/handles.mdx
index ff940e4588..42f5196f7a 100644
--- a/python/docs/handles.mdx
+++ b/python/docs/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/docs/input.mdx b/python/docs/input.mdx
index d651ecdd4e..b65aa596cb 100644
--- a/python/docs/input.mdx
+++ b/python/docs/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/docs/intro.mdx b/python/docs/intro.mdx
index 93c6e8aa13..320b2e5557 100644
--- a/python/docs/intro.mdx
+++ b/python/docs/intro.mdx
@@ -119,6 +119,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 +149,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/docs/languages.mdx b/python/docs/languages.mdx
index 84a2746083..1e5aaf9c20 100644
--- a/python/docs/languages.mdx
+++ b/python/docs/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/docs/library.mdx b/python/docs/library.mdx
index 5ee96dbae3..a96935bad9 100644
--- a/python/docs/library.mdx
+++ b/python/docs/library.mdx
@@ -210,6 +210,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 +240,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/docs/locators.mdx b/python/docs/locators.mdx
index b73d9820b5..4156641cc2 100644
--- a/python/docs/locators.mdx
+++ b/python/docs/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/docs/mock.mdx b/python/docs/mock.mdx
index 7d53061853..d01585084e 100644
--- a/python/docs/mock.mdx
+++ b/python/docs/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/docs/navigations.mdx b/python/docs/navigations.mdx
index 933bec760b..b801c2ed66 100644
--- a/python/docs/navigations.mdx
+++ b/python/docs/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/docs/network.mdx b/python/docs/network.mdx
index f4e626087d..2f338009bf 100644
--- a/python/docs/network.mdx
+++ b/python/docs/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/docs/other-locators.mdx b/python/docs/other-locators.mdx
index c5f49cfeed..6709059cea 100644
--- a/python/docs/other-locators.mdx
+++ b/python/docs/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/docs/pages.mdx b/python/docs/pages.mdx
index 382c192d70..d5eccc4442 100644
--- a/python/docs/pages.mdx
+++ b/python/docs/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/docs/pom.mdx b/python/docs/pom.mdx
index 71769e6da4..fb9ffee6bb 100644
--- a/python/docs/pom.mdx
+++ b/python/docs/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/docs/release-notes.mdx b/python/docs/release-notes.mdx
index 653eb492b9..75c04eabbb 100644
--- a/python/docs/release-notes.mdx
+++ b/python/docs/release-notes.mdx
@@ -2181,6 +2181,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"
@@ -2210,6 +2211,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/docs/running-tests.mdx b/python/docs/running-tests.mdx
index c4bfb4c733..d97481114d 100644
--- a/python/docs/running-tests.mdx
+++ b/python/docs/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/docs/screenshots.mdx b/python/docs/screenshots.mdx
index 18d21b2e63..fd9a5b0378 100644
--- a/python/docs/screenshots.mdx
+++ b/python/docs/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/docs/selenium-grid.mdx b/python/docs/selenium-grid.mdx
index 3cc37ec6de..bf2ba60d83 100644
--- a/python/docs/selenium-grid.mdx
+++ b/python/docs/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/docs/service-workers.mdx b/python/docs/service-workers.mdx
index 770f1b85cd..5a33c738da 100644
--- a/python/docs/service-workers.mdx
+++ b/python/docs/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/docs/test-assertions.mdx b/python/docs/test-assertions.mdx
index c08b62e86e..3a1dff9f09 100644
--- a/python/docs/test-assertions.mdx
+++ b/python/docs/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/docs/test-runners.mdx b/python/docs/test-runners.mdx
index 14cd75e882..256940a34b 100644
--- a/python/docs/test-runners.mdx
+++ b/python/docs/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/docs/touch-events.mdx b/python/docs/touch-events.mdx
index 9d6916f65c..48fe400cef 100644
--- a/python/docs/touch-events.mdx
+++ b/python/docs/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/docs/trace-viewer-intro.mdx b/python/docs/trace-viewer-intro.mdx
index 810f4f977d..4afad24f75 100644
--- a/python/docs/trace-viewer-intro.mdx
+++ b/python/docs/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/docs/trace-viewer.mdx b/python/docs/trace-viewer.mdx
index fb9138a6f6..638d47eb69 100644
--- a/python/docs/trace-viewer.mdx
+++ b/python/docs/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/docs/videos.mdx b/python/docs/videos.mdx
index 7e072b9a95..6896a7ddb1 100644
--- a/python/docs/videos.mdx
+++ b/python/docs/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/docs/webview2.mdx b/python/docs/webview2.mdx
index 9fe3d09759..16ebccc5fa 100644
--- a/python/docs/webview2.mdx
+++ b/python/docs/webview2.mdx
@@ -180,6 +180,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"
@@ -209,6 +210,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/docs/writing-tests.mdx b/python/docs/writing-tests.mdx
index 830e7cabe6..528be2ccdc 100644
--- a/python/docs/writing-tests.mdx
+++ b/python/docs/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"
diff --git a/src/components/GitHubStarButton/index.tsx b/src/components/GitHubStarButton/index.tsx
index e5ea219c78..13f819549d 100644
--- a/src/components/GitHubStarButton/index.tsx
+++ b/src/components/GitHubStarButton/index.tsx
@@ -6,7 +6,7 @@ type StarButtonProps = {
repo: string
}
-const STARS = '88k+'; // NOTE: this line is generated by src/generate.js. Do not change!
+const STARS = '89k+'; // NOTE: this line is generated by src/generate.js. Do not change!
const StarButton: React.FC = ({owner, repo}) => {
if (!repo)