From d013c7569fd420d0d093db8eb56ab2ca20275327 Mon Sep 17 00:00:00 2001 From: "microsoft-playwright-automation[bot]" <203992400+microsoft-playwright-automation[bot]@users.noreply.github.com> Date: Mon, 6 Oct 2025 15:07:21 +0000 Subject: [PATCH] feat(roll): roll to 1.56 Playwright --- .../images/test-agents/generator-prompt.png | Bin 0 -> 34718 bytes .../images/test-agents/healer-prompt.png | Bin 0 -> 28393 bytes .../images/test-agents/planner-prompt.png | Bin 0 -> 32863 bytes .../version-stable/actionability.mdx | 1 - .../version-stable/api-testing.mdx | 1 - .../api/class-accessibility.mdx | 1 - .../version-stable/api/class-apirequest.mdx | 1 - .../api/class-apirequestcontext.mdx | 1 - .../version-stable/api/class-apiresponse.mdx | 1 - .../api/class-apiresponseassertions.mdx | 1 - .../version-stable/api/class-browser.mdx | 1 - .../api/class-browsercontext.mdx | 103 +++--- .../version-stable/api/class-browsertype.mdx | 1 - .../version-stable/api/class-cdpsession.mdx | 1 - .../api/class-cdpsessionevent.mdx | 1 - .../version-stable/api/class-clock.mdx | 1 - .../api/class-consolemessage.mdx | 1 - .../version-stable/api/class-dialog.mdx | 1 - .../version-stable/api/class-download.mdx | 1 - .../api/class-elementhandle.mdx | 1 - .../version-stable/api/class-filechooser.mdx | 1 - .../version-stable/api/class-formdata.mdx | 1 - .../version-stable/api/class-frame.mdx | 1 - .../version-stable/api/class-framelocator.mdx | 1 - .../version-stable/api/class-jshandle.mdx | 1 - .../version-stable/api/class-keyboard.mdx | 1 - .../version-stable/api/class-locator.mdx | 1 - .../api/class-locatorassertions.mdx | 1 - .../version-stable/api/class-mouse.mdx | 1 - .../version-stable/api/class-page.mdx | 56 ++- .../api/class-pageassertions.mdx | 1 - .../version-stable/api/class-playwright.mdx | 1 - .../api/class-playwrightassertions.mdx | 1 - .../version-stable/api/class-request.mdx | 1 - .../version-stable/api/class-response.mdx | 1 - .../version-stable/api/class-route.mdx | 1 - .../version-stable/api/class-selectors.mdx | 1 - .../version-stable/api/class-timeouterror.mdx | 1 - .../version-stable/api/class-touchscreen.mdx | 1 - .../version-stable/api/class-tracing.mdx | 1 - .../version-stable/api/class-video.mdx | 1 - .../version-stable/api/class-weberror.mdx | 1 - .../version-stable/api/class-websocket.mdx | 1 - .../api/class-websocketframe.mdx | 1 - .../api/class-websocketroute.mdx | 1 - .../version-stable/api/class-worker.mdx | 1 - .../version-stable/aria-snapshots.mdx | 1 - dotnet/versioned_docs/version-stable/auth.mdx | 1 - .../version-stable/browser-contexts.mdx | 1 - .../version-stable/browsers.mdx | 1 - .../version-stable/ci-intro.mdx | 9 +- dotnet/versioned_docs/version-stable/ci.mdx | 23 +- .../versioned_docs/version-stable/clock.mdx | 1 - .../version-stable/codegen-intro.mdx | 5 +- .../versioned_docs/version-stable/codegen.mdx | 1 - .../versioned_docs/version-stable/debug.mdx | 3 - .../versioned_docs/version-stable/dialogs.mdx | 1 - .../versioned_docs/version-stable/docker.mdx | 17 +- .../version-stable/downloads.mdx | 1 - .../version-stable/emulation.mdx | 1 - .../version-stable/evaluating.mdx | 1 - .../versioned_docs/version-stable/events.mdx | 1 - .../version-stable/extensibility.mdx | 1 - .../versioned_docs/version-stable/frames.mdx | 1 - .../versioned_docs/version-stable/handles.mdx | 1 - .../versioned_docs/version-stable/input.mdx | 1 - .../versioned_docs/version-stable/intro.mdx | 5 +- .../version-stable/languages.mdx | 1 - .../versioned_docs/version-stable/library.mdx | 1 - .../version-stable/locators.mdx | 1 - dotnet/versioned_docs/version-stable/mock.mdx | 1 - .../version-stable/navigations.mdx | 1 - .../versioned_docs/version-stable/network.mdx | 1 - .../version-stable/other-locators.mdx | 7 +- .../versioned_docs/version-stable/pages.mdx | 1 - dotnet/versioned_docs/version-stable/pom.mdx | 1 - .../version-stable/release-notes.mdx | 3 +- .../version-stable/running-tests.mdx | 1 - .../version-stable/screenshots.mdx | 1 - .../version-stable/selenium-grid.mdx | 1 - .../version-stable/test-assertions.mdx | 1 - .../version-stable/test-runners.mdx | 3 +- .../version-stable/touch-events.mdx | 1 - .../version-stable/trace-viewer-intro.mdx | 1 - .../version-stable/trace-viewer.mdx | 1 - .../versioned_docs/version-stable/videos.mdx | 1 - .../version-stable/webview2.mdx | 1 - .../version-stable/writing-tests.mdx | 1 - .../images/test-agents/generator-prompt.png | Bin 0 -> 34718 bytes .../images/test-agents/healer-prompt.png | Bin 0 -> 28393 bytes .../images/test-agents/planner-prompt.png | Bin 0 -> 32863 bytes .../version-stable/accessibility-testing.mdx | 1 - .../version-stable/actionability.mdx | 1 - .../version-stable/api-testing.mdx | 1 - .../version-stable/api/class-apirequest.mdx | 1 - .../api/class-apirequestcontext.mdx | 1 - .../version-stable/api/class-apiresponse.mdx | 1 - .../api/class-apiresponseassertions.mdx | 1 - .../version-stable/api/class-browser.mdx | 1 - .../api/class-browsercontext.mdx | 101 +++-- .../version-stable/api/class-browsertype.mdx | 1 - .../version-stable/api/class-cdpsession.mdx | 1 - .../version-stable/api/class-clock.mdx | 1 - .../api/class-consolemessage.mdx | 1 - .../version-stable/api/class-dialog.mdx | 1 - .../version-stable/api/class-download.mdx | 1 - .../api/class-elementhandle.mdx | 1 - .../version-stable/api/class-filechooser.mdx | 1 - .../version-stable/api/class-formdata.mdx | 1 - .../version-stable/api/class-frame.mdx | 1 - .../version-stable/api/class-framelocator.mdx | 1 - .../version-stable/api/class-jshandle.mdx | 1 - .../version-stable/api/class-keyboard.mdx | 1 - .../version-stable/api/class-locator.mdx | 1 - .../api/class-locatorassertions.mdx | 1 - .../version-stable/api/class-mouse.mdx | 1 - .../version-stable/api/class-page.mdx | 56 ++- .../api/class-pageassertions.mdx | 1 - .../version-stable/api/class-playwright.mdx | 1 - .../api/class-playwrightassertions.mdx | 1 - .../api/class-playwrightexception.mdx | 1 - .../version-stable/api/class-request.mdx | 1 - .../api/class-requestoptions.mdx | 1 - .../version-stable/api/class-response.mdx | 1 - .../version-stable/api/class-route.mdx | 1 - .../version-stable/api/class-selectors.mdx | 1 - .../version-stable/api/class-timeouterror.mdx | 1 - .../version-stable/api/class-touchscreen.mdx | 1 - .../version-stable/api/class-tracing.mdx | 1 - .../version-stable/api/class-video.mdx | 1 - .../version-stable/api/class-weberror.mdx | 1 - .../version-stable/api/class-websocket.mdx | 1 - .../api/class-websocketframe.mdx | 1 - .../api/class-websocketroute.mdx | 1 - .../version-stable/api/class-worker.mdx | 1 - .../version-stable/aria-snapshots.mdx | 1 - java/versioned_docs/version-stable/auth.mdx | 1 - .../version-stable/browser-contexts.mdx | 1 - .../version-stable/browsers.mdx | 1 - .../version-stable/ci-intro.mdx | 11 +- java/versioned_docs/version-stable/ci.mdx | 39 +- java/versioned_docs/version-stable/clock.mdx | 1 - .../version-stable/codegen-intro.mdx | 5 +- .../versioned_docs/version-stable/codegen.mdx | 1 - java/versioned_docs/version-stable/debug.mdx | 3 - .../versioned_docs/version-stable/dialogs.mdx | 1 - java/versioned_docs/version-stable/docker.mdx | 17 +- .../version-stable/downloads.mdx | 1 - .../version-stable/emulation.mdx | 1 - .../version-stable/evaluating.mdx | 1 - java/versioned_docs/version-stable/events.mdx | 1 - .../version-stable/extensibility.mdx | 1 - java/versioned_docs/version-stable/frames.mdx | 1 - .../versioned_docs/version-stable/handles.mdx | 1 - java/versioned_docs/version-stable/input.mdx | 1 - java/versioned_docs/version-stable/intro.mdx | 5 +- java/versioned_docs/version-stable/junit.mdx | 1 - .../version-stable/languages.mdx | 1 - .../version-stable/locators.mdx | 1 - java/versioned_docs/version-stable/mock.mdx | 1 - .../version-stable/navigations.mdx | 1 - .../versioned_docs/version-stable/network.mdx | 1 - .../version-stable/other-locators.mdx | 7 +- java/versioned_docs/version-stable/pages.mdx | 1 - java/versioned_docs/version-stable/pom.mdx | 1 - .../version-stable/release-notes.mdx | 3 +- .../version-stable/running-tests.mdx | 1 - .../version-stable/screenshots.mdx | 1 - .../version-stable/selenium-grid.mdx | 1 - .../version-stable/test-assertions.mdx | 1 - .../version-stable/test-runners.mdx | 5 +- .../version-stable/threading.mdx | 1 - .../version-stable/touch-events.mdx | 1 - .../version-stable/trace-viewer-intro.mdx | 1 - .../version-stable/trace-viewer.mdx | 1 - java/versioned_docs/version-stable/videos.mdx | 1 - .../version-stable/webview2.mdx | 1 - .../version-stable/writing-tests.mdx | 1 - .../images/test-agents/generator-prompt.png | Bin 0 -> 34718 bytes .../images/test-agents/healer-prompt.png | Bin 0 -> 28393 bytes .../images/test-agents/planner-prompt.png | Bin 0 -> 32863 bytes .../version-stable/accessibility-testing.mdx | 1 - .../version-stable/actionability.mdx | 1 - .../version-stable/api-testing.mdx | 1 - .../api/class-accessibility.mdx | 1 - .../version-stable/api/class-android.mdx | 1 - .../api/class-androiddevice.mdx | 1 - .../version-stable/api/class-androidinput.mdx | 1 - .../api/class-androidsocket.mdx | 1 - .../api/class-androidwebview.mdx | 1 - .../version-stable/api/class-apirequest.mdx | 1 - .../api/class-apirequestcontext.mdx | 1 - .../version-stable/api/class-apiresponse.mdx | 1 - .../api/class-apiresponseassertions.mdx | 1 - .../version-stable/api/class-browser.mdx | 1 - .../api/class-browsercontext.mdx | 97 +++-- .../api/class-browserserver.mdx | 1 - .../version-stable/api/class-browsertype.mdx | 13 +- .../version-stable/api/class-cdpsession.mdx | 1 - .../version-stable/api/class-clock.mdx | 1 - .../api/class-consolemessage.mdx | 1 - .../version-stable/api/class-coverage.mdx | 1 - .../version-stable/api/class-dialog.mdx | 1 - .../version-stable/api/class-download.mdx | 1 - .../version-stable/api/class-electron.mdx | 1 - .../api/class-electronapplication.mdx | 1 - .../api/class-elementhandle.mdx | 1 - .../version-stable/api/class-filechooser.mdx | 1 - .../version-stable/api/class-fixtures.mdx | 1 - .../version-stable/api/class-frame.mdx | 1 - .../version-stable/api/class-framelocator.mdx | 1 - .../version-stable/api/class-fullconfig.mdx | 1 - .../version-stable/api/class-fullproject.mdx | 1 - .../api/class-genericassertions.mdx | 1 - .../version-stable/api/class-jshandle.mdx | 1 - .../version-stable/api/class-keyboard.mdx | 1 - .../version-stable/api/class-location.mdx | 1 - .../version-stable/api/class-locator.mdx | 1 - .../api/class-locatorassertions.mdx | 1 - .../version-stable/api/class-logger.mdx | 1 - .../version-stable/api/class-mouse.mdx | 1 - .../version-stable/api/class-page.mdx | 56 ++- .../api/class-pageassertions.mdx | 1 - .../version-stable/api/class-playwright.mdx | 1 - .../api/class-playwrightassertions.mdx | 1 - .../version-stable/api/class-reporter.mdx | 1 - .../version-stable/api/class-request.mdx | 1 - .../version-stable/api/class-response.mdx | 1 - .../version-stable/api/class-route.mdx | 1 - .../version-stable/api/class-selectors.mdx | 1 - .../api/class-snapshotassertions.mdx | 1 - .../version-stable/api/class-suite.mdx | 1 - .../version-stable/api/class-test.mdx | 1 - .../version-stable/api/class-testcase.mdx | 1 - .../version-stable/api/class-testconfig.mdx | 5 +- .../version-stable/api/class-testerror.mdx | 1 - .../version-stable/api/class-testinfo.mdx | 1 - .../api/class-testinfoerror.mdx | 1 - .../version-stable/api/class-testoptions.mdx | 1 - .../version-stable/api/class-testproject.mdx | 1 - .../version-stable/api/class-testresult.mdx | 1 - .../version-stable/api/class-teststep.mdx | 3 +- .../version-stable/api/class-teststepinfo.mdx | 1 - .../version-stable/api/class-timeouterror.mdx | 1 - .../version-stable/api/class-touchscreen.mdx | 1 - .../version-stable/api/class-tracing.mdx | 1 - .../version-stable/api/class-video.mdx | 1 - .../version-stable/api/class-weberror.mdx | 1 - .../version-stable/api/class-websocket.mdx | 1 - .../api/class-websocketroute.mdx | 1 - .../version-stable/api/class-worker.mdx | 1 - .../version-stable/api/class-workerinfo.mdx | 1 - .../version-stable/aria-snapshots.mdx | 1 - nodejs/versioned_docs/version-stable/auth.mdx | 1 - .../version-stable/best-practices.mdx | 1 - .../version-stable/browser-contexts.mdx | 1 - .../version-stable/browsers.mdx | 3 +- .../version-stable/canary-releases.mdx | 1 - .../version-stable/chrome-extensions.mdx | 1 - .../version-stable/ci-intro.mdx | 5 +- nodejs/versioned_docs/version-stable/ci.mdx | 53 ++- .../versioned_docs/version-stable/clock.mdx | 1 - .../version-stable/codegen-intro.mdx | 5 +- .../versioned_docs/version-stable/codegen.mdx | 1 - .../versioned_docs/version-stable/debug.mdx | 3 - .../versioned_docs/version-stable/dialogs.mdx | 1 - .../versioned_docs/version-stable/docker.mdx | 19 +- .../version-stable/downloads.mdx | 1 - .../version-stable/emulation.mdx | 1 - .../version-stable/evaluating.mdx | 1 - .../versioned_docs/version-stable/events.mdx | 1 - .../version-stable/extensibility.mdx | 1 - .../versioned_docs/version-stable/frames.mdx | 1 - .../version-stable/getting-started-vscode.mdx | 41 +- .../versioned_docs/version-stable/handles.mdx | 1 - .../versioned_docs/version-stable/input.mdx | 1 - .../versioned_docs/version-stable/intro.mdx | 9 +- .../version-stable/languages.mdx | 1 - .../versioned_docs/version-stable/library.mdx | 1 - .../version-stable/locators.mdx | 1 - .../version-stable/mock-browser.mdx | 1 - nodejs/versioned_docs/version-stable/mock.mdx | 1 - .../version-stable/navigations.mdx | 1 - .../versioned_docs/version-stable/network.mdx | 1 - .../version-stable/other-locators.mdx | 7 +- .../versioned_docs/version-stable/pages.mdx | 1 - nodejs/versioned_docs/version-stable/pom.mdx | 1 - .../version-stable/protractor.mdx | 1 - .../version-stable/puppeteer.mdx | 1 - .../version-stable/release-notes.mdx | 49 ++- .../version-stable/running-tests.mdx | 19 +- .../version-stable/screenshots.mdx | 1 - .../version-stable/selenium-grid.mdx | 1 - ...ce-workers-experimental-network-events.mdx | 1 - .../version-stable/test-agents.mdx | 350 ++++++++++++++++++ .../version-stable/test-annotations.mdx | 1 - .../version-stable/test-assertions.mdx | 1 - .../version-stable/test-cli.mdx | 27 +- .../version-stable/test-components.mdx | 1 - .../version-stable/test-configuration.mdx | 3 +- .../version-stable/test-fixtures.mdx | 3 +- .../test-global-setup-teardown.mdx | 1 - .../version-stable/test-parallel.mdx | 1 - .../version-stable/test-parameterize.mdx | 1 - .../version-stable/test-projects.mdx | 1 - .../version-stable/test-reporters.mdx | 2 +- .../version-stable/test-retries.mdx | 1 - .../version-stable/test-sharding.mdx | 11 +- .../version-stable/test-snapshots.mdx | 1 - .../version-stable/test-timeouts.mdx | 1 - .../version-stable/test-typescript.mdx | 1 - .../version-stable/test-ui-mode.mdx | 1 - .../version-stable/test-use-options.mdx | 3 +- .../version-stable/test-webserver.mdx | 3 +- .../version-stable/testing-library.mdx | 1 - .../version-stable/touch-events.mdx | 1 - .../version-stable/trace-viewer-intro.mdx | 7 +- .../version-stable/trace-viewer.mdx | 1 - .../versioned_docs/version-stable/videos.mdx | 1 - .../version-stable/webview2.mdx | 1 - .../version-stable/writing-tests.mdx | 1 - .../version-stable-sidebars.json | 12 +- .../images/test-agents/generator-prompt.png | Bin 0 -> 34718 bytes .../images/test-agents/healer-prompt.png | Bin 0 -> 28393 bytes .../images/test-agents/planner-prompt.png | Bin 0 -> 32863 bytes .../version-stable/actionability.mdx | 1 - .../version-stable/api-testing.mdx | 1 - .../api/class-accessibility.mdx | 1 - .../version-stable/api/class-apirequest.mdx | 1 - .../api/class-apirequestcontext.mdx | 1 - .../version-stable/api/class-apiresponse.mdx | 1 - .../api/class-apiresponseassertions.mdx | 1 - .../version-stable/api/class-browser.mdx | 1 - .../api/class-browsercontext.mdx | 119 +++--- .../version-stable/api/class-browsertype.mdx | 1 - .../version-stable/api/class-cdpsession.mdx | 1 - .../version-stable/api/class-clock.mdx | 1 - .../api/class-consolemessage.mdx | 1 - .../version-stable/api/class-dialog.mdx | 1 - .../version-stable/api/class-download.mdx | 1 - .../api/class-elementhandle.mdx | 1 - .../version-stable/api/class-error.mdx | 1 - .../version-stable/api/class-filechooser.mdx | 1 - .../version-stable/api/class-frame.mdx | 1 - .../version-stable/api/class-framelocator.mdx | 1 - .../version-stable/api/class-jshandle.mdx | 1 - .../version-stable/api/class-keyboard.mdx | 1 - .../version-stable/api/class-locator.mdx | 5 +- .../api/class-locatorassertions.mdx | 1 - .../version-stable/api/class-mouse.mdx | 1 - .../version-stable/api/class-page.mdx | 56 ++- .../api/class-pageassertions.mdx | 1 - .../version-stable/api/class-playwright.mdx | 1 - .../version-stable/api/class-request.mdx | 1 - .../version-stable/api/class-response.mdx | 1 - .../version-stable/api/class-route.mdx | 1 - .../version-stable/api/class-selectors.mdx | 1 - .../version-stable/api/class-timeouterror.mdx | 1 - .../version-stable/api/class-touchscreen.mdx | 1 - .../version-stable/api/class-tracing.mdx | 1 - .../version-stable/api/class-video.mdx | 1 - .../version-stable/api/class-weberror.mdx | 1 - .../version-stable/api/class-websocket.mdx | 1 - .../api/class-websocketroute.mdx | 1 - .../version-stable/api/class-worker.mdx | 1 - .../version-stable/aria-snapshots.mdx | 1 - python/versioned_docs/version-stable/auth.mdx | 1 - .../version-stable/browser-contexts.mdx | 1 - .../version-stable/browsers.mdx | 1 - .../version-stable/chrome-extensions.mdx | 1 - .../version-stable/ci-intro.mdx | 11 +- python/versioned_docs/version-stable/ci.mdx | 35 +- .../versioned_docs/version-stable/clock.mdx | 1 - .../version-stable/codegen-intro.mdx | 5 +- .../versioned_docs/version-stable/codegen.mdx | 1 - .../versioned_docs/version-stable/debug.mdx | 3 - .../versioned_docs/version-stable/dialogs.mdx | 1 - .../versioned_docs/version-stable/docker.mdx | 19 +- .../version-stable/downloads.mdx | 1 - .../version-stable/emulation.mdx | 1 - .../version-stable/evaluating.mdx | 1 - .../versioned_docs/version-stable/events.mdx | 1 - .../version-stable/extensibility.mdx | 1 - .../versioned_docs/version-stable/frames.mdx | 1 - .../versioned_docs/version-stable/handles.mdx | 1 - .../versioned_docs/version-stable/input.mdx | 1 - .../versioned_docs/version-stable/intro.mdx | 3 +- .../version-stable/languages.mdx | 1 - .../versioned_docs/version-stable/library.mdx | 1 - .../version-stable/locators.mdx | 1 - python/versioned_docs/version-stable/mock.mdx | 1 - .../version-stable/navigations.mdx | 1 - .../versioned_docs/version-stable/network.mdx | 1 - .../version-stable/other-locators.mdx | 7 +- .../versioned_docs/version-stable/pages.mdx | 1 - python/versioned_docs/version-stable/pom.mdx | 1 - .../version-stable/release-notes.mdx | 3 +- .../version-stable/running-tests.mdx | 1 - .../version-stable/screenshots.mdx | 1 - .../version-stable/selenium-grid.mdx | 1 - .../version-stable/test-assertions.mdx | 1 - .../version-stable/test-runners.mdx | 14 +- .../version-stable/touch-events.mdx | 1 - .../version-stable/trace-viewer-intro.mdx | 1 - .../version-stable/trace-viewer.mdx | 1 - .../versioned_docs/version-stable/videos.mdx | 1 - .../version-stable/webview2.mdx | 1 - .../version-stable/writing-tests.mdx | 1 - 408 files changed, 1076 insertions(+), 834 deletions(-) create mode 100644 dotnet/versioned_docs/images/test-agents/generator-prompt.png create mode 100644 dotnet/versioned_docs/images/test-agents/healer-prompt.png create mode 100644 dotnet/versioned_docs/images/test-agents/planner-prompt.png create mode 100644 java/versioned_docs/images/test-agents/generator-prompt.png create mode 100644 java/versioned_docs/images/test-agents/healer-prompt.png create mode 100644 java/versioned_docs/images/test-agents/planner-prompt.png create mode 100644 nodejs/versioned_docs/images/test-agents/generator-prompt.png create mode 100644 nodejs/versioned_docs/images/test-agents/healer-prompt.png create mode 100644 nodejs/versioned_docs/images/test-agents/planner-prompt.png create mode 100644 nodejs/versioned_docs/version-stable/test-agents.mdx create mode 100644 python/versioned_docs/images/test-agents/generator-prompt.png create mode 100644 python/versioned_docs/images/test-agents/healer-prompt.png create mode 100644 python/versioned_docs/images/test-agents/planner-prompt.png diff --git a/dotnet/versioned_docs/images/test-agents/generator-prompt.png b/dotnet/versioned_docs/images/test-agents/generator-prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..56c67cf3ce8b2e027acd979f812980b9629925b0 GIT binary patch literal 34718 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 DEo27{ literal 0 HcmV?d00001 diff --git a/dotnet/versioned_docs/images/test-agents/healer-prompt.png b/dotnet/versioned_docs/images/test-agents/healer-prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..5b6116972cfb69d06226a14385b9c9db685f8110 GIT binary patch literal 28393 zcmeFYWmp|a^9M?TOYi^*?(Xgc2rehMJHaKK;1&V|3+};#dvJFP4#5u=Jhnx&;7mk= zy-!ZwB9R-wRXnTq1OJG>**hzL&+(9#Eb_H~%Ob)^oyk9th%7-Kd=0)IeSdoxlUPiU z-t|)BoJm`zgyU^eoismZXPg%CYF*6Pce>!3Ct~j^9LEeolC?vl;Npd?DWkx~BQQ9t zvL_3COPHjL>xcobY?0o5qT=Q7`kqH8L6lSNcP+u#eckL9d`?z|)epP&$u?r}Z8!R; zC$mKF2HLUmb>%D4xSNdU{K!P{B6(@ltIxJgBLcOLWieIB(djU0rNm2~yvq@yWwHHE zQ^OWU$Zt!j+Rb2E@j;6w1`b+$R&j!+4cd$H)=&51bJ=rCNW$k2VBN6j2`X?36vjS6 zybG!@@}@whHP(`*${-RU3IpL{7K9ShhEXBEV<4G{-GufP^{%@7SolTmxnLMaSh7A$ z7LkbG{VbCCdr+8aZe*g&Y4)1B&uaYK?U-e}=#>a2dOaD;w+~OJ-?PD*!M>ArP-Sga zJ%@WD66L2r_7q)W=qNa+g9N#`*H8RNP?Ca-^u?CwEaOx7s0Xf4b*EJL8`A`H9FMo%+mTg>$l%V%xp%I<&ymP*4>=M!EdVi~IDn;dczcy%j*gX541W^i z<$&_d%yma;W**}~q^E>)!Dr5Qus=UEwY&4xv!>2HuUsH+i`O;||8cJiXDFOSE*Odf zpZhuM>W!^b}DM$o(Z6Y&p*=mK8Qvz7a|=(a{eBkj-Jo`_;1iNC@P zM(j6wc_xBd27ZwQzvj@NQ2i+V_TM@2yEP+Ly}F<2?*Cr-e{pD`1OB-*P_>mP&a+1h3YkuSiw?)?-_*i z4q>E|_$LZ_2ae+t5gfx0tbL5fFPpJM0}Xo**SxPRo`xIAe4};4b_?haQ0Qb5N6t$9 z7V8-7__9@gF&58cX_a{+q_=oI-;)aw*Z{0$Laab6*}0k?i%Wh-*rRKC)Q4-gH= z4WP@RZamFRIq@rcU6bdbx>h(h*)xe^4SUXYj(#5h<;$1kFF`t=zi8P->jXkXYO1U+ zrs(XcNiyK3rRKG3hzUuvbD!=E$OShASgP_`&9cR`=tmHU2pvJ$tSf6 z-sFxKypvsnPZO`p0sor#6?o=!^XdlPqnzgTgj{TK|BPOycCNeDY2({AJPDhR8gUxw z(@v!VrC=T98d-=2#1A6AZ?eA+p{*h1VEe@HKZwbez~;iH#M$T^EHEt~lxCa8ktQra zEa2S;X=G^(X{>TCejoYEg`GX`d2HX1d6^lBk%4I|sVUbdPARUpb4j1r6MLJ-35&P# zX@4+I%@@0>AGV0di-JU@eQSJT@AY99+DFKGjS@QW{3j4vOr3i@!k>R;CiXPiW0sg4 z8)2JvEL(Bua_RD+G|e`mEF720j+JWZRWKD@vt4uUl@9k*AfOSUF^P4i=~GCrc&|;Q z!BYIuIdsax+VZ7I5!>Qhi1AIw5QM3tQDF`rYP)Bh&Dzqr?Pk+Lt?ht=!;IreigiRfFz_lGX#~EN7-xJh^LG`8eO@1JM;MG$;@H#k#VIt$pRizyB9I8rs z6v^YS(^8A!wGrtr?o`p(X$0~ZHs9?9%(_=ttP;GNSld}O=!5o^e{M@Nip`X0$-&6{NJO13#Aeu@kRhmjdS(VKk~!XDmGD7*-~I=q7g^@sqUu1&3( z3zVpde{fTX9*yDFm_$-C_a53y7{uEOl%ZT=^ zO|I9d_io2&dGW3^g&rbkn3ep}+OBmPWLRbBFS052)|@FB*HNwCT!94FgzswY%FW!> z_}tupH&`}wc|p8%Jnz*5G`SqAXX~xk`UXk{iq-GcJ$YZ)>(p)!zg^js*S)RfvgL;8 z)Slm6t{ytrqApEq*{SQdrq#C?LDz^w1V?V$@3UO;J4PzgGF)U`oTs{{Q;VF-OG`OR zbhRU=8FxHg@()_;X^oV@{t{iaEkiBl&~}lYRtxCFg`ps(OXfZq)Tk>mLDXKLn@VYO zs`30;?K~}QMza&crdr?jw+Rbh^qcGT7bD507A>Q->8C=jSNIpKid%~#ytPfWq&HLN zGZMu1#Nqf0tXzg?^|L?t3r~MhFU!-iAnM&;qZ|%g7e{LfmQ(9By%Rq7n0dAmp3e(* zXl+(^-0j+b?TX|ocWAxD+-Bice#1MzeBsjIOx!@~*mn17!G9hD9wS3EM)YP@|2FBO z{x+mP7Lq@rtn2yFgGD6eqy*Y=8O6&+wlR3+ z-}aOML}JGQa|OnSsWyWlI9iZN`zk<+jwk7yM=beM)OhNJ)3^F3V=xcfrXDNH!_F`l z`!MY&I}@r;g7cnW9zGch!I9oM(zZWZC}fg!g@$AFhb3>WZx<(!Y}~$NHB0uUc$fwcTa#**Fs9I3M%;d4-Mn1cL}XVFRaI=F`94hAqm3{p%iP2%y2dQk9UE1+J>5 zPUhzJU`vPh)xqM9KmxL(j5Zhs29Nsjd?Kqtbp(_@ZKbC5UQ1Cyz|_Hx#n{Zj#GJ*= z?(uCH7$G+S;MUIky)l`aovl4sz)hIqk2eH>`^RKf3bH?5d2b_3p`{2SlW=e{C*xsZ zV_~BZK_Md}6LK!{H$yotQ;K7 zz#Gh9cl-CoZp`*z%0CPFs~kylu&I-k<9jOyd$PxJjZGY!-wRVvJbvi!-=Fm~ceDEM zm+Zm+X%^5x)<+5}I}01@-(>??g&tD{Kvr(%w%U?bc0iv2-w@$o;}ZJg{eMyZ`^Eps zsrBES{G5FMoAZAtzvom3n>$H3*a4q>FY@2v`cLNnCH^O)5bI;h|EDMZ?B+jGfqoW2 z5n}y&%tTNYl#?ofVI;DWR8|A70F(Xkdkg&20q5ftIN3zLA0Y$-R}@*vS88rg_RQ2{YgPq&vvaFzzms|+DiPw;EXPE?lK>F=)dx~9Tjr8w4ffQs}It4o*V@WZ%-wrCZDTLpW zfJc2RMQPl>As zp-}$bK%lNgJpXDo1&9u4TwoFUbE)5(AW2pS+HdZqDVs-VYWP$mvM*3pn;;YVuimLP zek#A&x{cR*U7~w5z*lEE-BwHyEnjf4bYV8*{ry`JOG)hOe|6AKZ2RrQXXmPndV$Mf zbG)LvR>x=?Ehy*x$3erkWoBQSuVC=nUgb1fWxDI(X+gn4}oZprlIFa$r zLG-f1*1QGG_gFQ^Sl*#GP_Og{k{Oyuc{6yJ#k`#XJuQETh0fz(Ov zPvJ*giNf!)B&~_-7#F|%&H!q!VJaH;BfapddehV0M}SP$OKPMC(366qf&bUWrHD0! zqdNsW**Y%D!z;2maLqPc)Lfdpu~%pm{Cyw`ko_W?i%JlL)-L-j1~_U!#BS>Z8ON1~ zRr+MAR`0+4UYTIAMNG>!X!yNB-eRL`o@WebI6xjT>|f)OLrs?TB_S>X=eI6+f@O&Z zjQQ|KZTx?8m5jWYI5#srG3~#4eT)f?N-YJxiiP4|q^JadOLbHPl>Ws+nc7IzFS8(p zsV?PC45B3D!{~BX*OkmO9!DH50$79j^g~w{3H^r^{^;Z447VY27z)cWiwu|dr z%0Z!dN->s)T#b?i$(F{Lsj->CD=okfxoRIy;bql)5emB3gP)Q8dvXTSg2Ka9u2NK= z06Yg_^6NyMGHCH|XJz27HtKkKxTsfYCR?SZ)fYkBf?uawXMgYErnxng9J>u+*1lJO zpX&I#q|#4f%(ihF;3|d!q+qcWDv)KCb-GNa?vn3=_l(|C?j`Ii_Fr>V`562o9M;-# zCw+&~zJFJL649@jN6vepFPAp>b;LFya~Nv(C^9E#r6Vaba}FMD6= z&!=8#cc0MWsS*A?Gj)Xhn0Vxh+q4$}P7+Ib%-Puc(&h>!iQ7iwAoM3UkACC(!a`{t zyM`YmiO|jWU;oRPaByaxaBOGlKvSo13gojIZ+42CC?ohfpAid8vUdhwg7;=C4x*(= z3L86r+#}@(m+d^IhyAOqPq2cKzF&Yi0r6Ep`_!3M4XaS}W<2s%??-ILr?of=NacjJ*N=Q{hAr48RI_++h7S+dhD@355Er|Y$IVlwF0uP z+T*D+wc320!=cahpkd?dFg$nTm#wbOr^CFi`KeB!(7Qw5!~2uOw)L|5YSE`wk%RhC z8eS$668?gF-?|n~HU<|<>y~!3QW+F=99qs7Seo`$m)y6AFM~vH$%pBgeTE_g4}N_@ zd$DTZwgP|IjiX%c=KcfEXe{&9!BH26>%;wJn|Fq+=hBwQCI4liviHEG#^I7A(eUn|TxAwgZlrrj~o@u5m(UiU9 z*fzEmx_H>=e!7|4$o=_*)%SYvpbJCv%pbi_$$G`#=c%>F1*IqkK2snaUBB4Ya@b(LcYu8%_pJI zer2DSln&Oi#sTMT$P`8^JJQUgRo$Ws7+{zJpur)u>9doGs`nIQMM!K(9=$Itu3pU= z-mc>NWU>xFBU9N{Mk{zY&3JgbY=<6JEVHt0uFQm!#-#us1Ol;CsDKPN4-awCJNnhAJa;(+J8Za@-c(~naAtO&+ zYF-K$&2ZmLUc!WqxVBaed~XY|-e8$;09&}KQ?Y5s-})hvIA%+Q7kR0KP*SPMe<&Q^ z-1IS+ESR;UNRb=;n(zS=MTw&6*A{EbnabSPBciKK-nMO#yKQCYmKB~~N?e6)BozbX zQAX+@S8HbtbTtF=Wa+fZ?Ra(aJn@fe=CU*|wvX5cIlq+KznD*C0Uw;uZrvR2e|@Oa zDXxO6=(Jk~~K5HNs`bjO!tb+c;{; zoiNtcr1zFPc2f|NLe?DEM_HBm0tslQ$K)Gn{!NT@&x3{oV1CJk3+zXVLDuB--5#>^ z7w;t+<01QXtlG5;#KN2UGlkxQt~Wfz4T?}_osBDuL>5;~VeT1WUd|Q*L+aRBgaDF< zq@Y-y<25_*rwNp)D`#u0o0OiT?qITw7UdB|Ml}hMRLx1Xem({4B6q&Lh6gvOj3@dA zJI1>&;3GFP{&XRmHyKt3<rsKL5)D~wS|*qy(&8tFf2 z{@Get%RHd63$28ricT!pxCt$vE-0t(uJZ?-sC(eOQ%E{7pdF&zcTInRG{#)F@FQ%B zv8>)Co`1bMzTEe2*S@&4_N4Epx4FGrreKPy=?~N0h1bXZ!l)2)8+m zKd1%IFAPaiYRB%j+Zda*W@A*hSe&8Hws+788pS7%qWxQU7`PQ`#3%pXq#$!wlau4Vg+k zJ$1Oh-4cafcdkcsNjsOfTsQ%8&tDfj%-vGa?cDqM#oDvRX0Tc^I3y?vN=7b%MS9rw z(3;`D%`5fb9KH#y7@LqHv|GP9+g{^64W-;nx(E1MyT||glLbOljEZ2Xa)XxUXi)3)@9LevZv$74+BEBD>2rUQ52BI2d-_^?%i zfI^r~Cj@(9ksi5UF1jxK8h3@dTdeSlLgz-k(l}rH2{D`RThw3{Eij%cvEP;sk7kH2 zv->7^JbUc{R1O1X6zdba6z?6bM2ZVGexvq*&Chl}pASJo^$2!fY{o>`H?16~YT3(2 zZ@BwZ5AxGJ1}@c2U;3!-JI8&bu5I_{<#*RY_?T?XD&gKj#coO!F~Xyx)gd0{PhO?B zDY*VLz-Q9>d4EyY)&OV|&s^K0ZN_zF(PhW3XWkh(7#z}RTWF(|IdQq=RB0KT+THF7 zhDIM^f6+rQykjhw!dNs2hojWW90|Qw18|faGw${*yqC#7-%e>7o(Fw9yjqLA+|P@d z;U3}~c6}5o?>_^!iVZoi3Yu57%oH8!X3_n|i=A5X>Ut~V@Y(p4`)zoIH(+^C?=v*nwcTBu`om7bgXNixGfll>-wuD- z7_^1DK&)t4tFfq%Fk&`vPS_7)(kwE9ajs$%3QRCf>1d}!VV}Ee+DXY&vAslwO~2iL zsTX@;M&gJE78e>y7Z$8I=%=(=!9FpqU=0vg@wi$ET6FM*&d0mhHSO0P)UQS8TIpW( zkv?2WU*?P66~4oH8s!rRBH^`9T~5!>P-j$QPqI4AJ#ao)Xz*E~6_KS;vzkZ3hI1D> zzF|G7jyrF~j22RsnWTrsPCyFxI%wExreiqwTG7%dmcspn413>+%E~mi)#;MD>Hcb| zkHoVCunYD(2f2KF0b_{}nrfG$+$H2=IF#77otNT;MCUyQ;p#;3NdQVB;dR;5f>y25 z`ZET5!7@IFq~gUBP*Dz)y~G2-PY)6)gmD!O@K;6Vcm*1aMEbE4eUAvpXbr8XZ zcoUeop&VJySy!eKpiC+9%yp*$qbwrY4ZlPqg!5Tut%A#+I}&uBEcKA=2i{6^ZM-6y z0y&<9!puJevU+taGrD(&I~s6y?h42ZF;f^CWSsgwT>2ig!(!NS@kwNbzKg^P$3i9r zJTOz3G-Tl2@O(M<`<#*_Pwl zTZqS-9^0>6x3fw7^s+i^xkITzN{v+#2$A5(?TEe%0a;^{7&q?`oVh7ll2REYJ3ZW8 zLJ!}1ogz{Yy$f-TS9j$nQO2al4Z9^?f}MGlv>MG%ArSODT-L4a=wmdd1{2$B?IW)W z5PmQJe!`8}2e_`QNmXULv+uOXQzdtwZ8RCxe2@G|uV&Vx@ISu5l5ERW)LlkLR8%N% z61sdZkIOAKPwim>eDu;T$@`2NK~hHhkP){ib(9kdEG3TbLV0?eU#xeW$~|<%inyPc z8D+KwSDA&FyqM_6F{+f~Ew5V01$=EkHK7ngBrOBfJlb)#`|$N}`IVe28K)WrgL zw0Em#LRoabtmQ&yaAYgejr^D?%a>B+R~Q=0oEVzFuh$lT@UNWoU-QRL3VJ`A8XiTd zYOaUzt3~<5VUK zw4t9Ja1pI#xdsTh%jJDhA>3dMaU`r1?bwh+P&K*1@YriIPPZ2XP@avO9c4QJ%Y@xZ7sbgE-hTGLEByhQu*<#NCc){YJGTC__& z#JczzQw*owHlKKGM4ZHhBwb@uYb_)zT_)IGJld*`pkp$HTHK01=;HZiB9&Uz1!tMD z^KesERcktp?P)NNq(zdE?djH#ASsGELQJRY28H7aT2s?OPk)i7lFR2PQ&flC z$=LAiKc6g3jWPD}z|n7C%mb_OO)m^6(cT();pQu9uGpJOHKl?dKA5J*9gHJ2%js8{ zpWW58@%_%RR{J6F9h6<0rvEi(T)XDadLfNpwsZVqeSsj7>3Rp2n?I*V{`)4n6K&W8phbvA5XL6L; zWQ>+v;fmcg=L`p_vUKFX49Ej^a4xb;!St(Ntl~P-4sR=+^OxR`O0h_hf5h$*_Hv*BI}ix>GJYTnq1_DLCw8Ba$ujE5B%>l& z!|@|jCU9}<5YLk1KU$BI3vl@)B}duikJM zL3{@c1TQ)@cCFfFA83r1);g*LJ}jn0RNRKhu!Qx@y52xUv>=Plwp*mk9(e>-f3QY# zI@M<33KkWhabB3Q9oCPs-C$rLv8wRRU`Eyqho1@hKM)XgpvqAQeB^hfLUZgSD>USz zrsiyAtdZD(EFr)2IPZFbJeX0-V>`=+|4DM5>;rp^>7e%)vJg-3+E(1I1yKr>n)@(3 zxFi;vgddKRo`_FOjI4+u7gRuVjzf5cw53P0p?%OQp7qk>F6IQeZiT%%O7n(_#5E;M zzi>40I$&8|n3b>hBG6yNrL3hcrLD^%6?w{WtaD^#BHgdrib4}J*G;{OMqD1bf_j`~ z1rz1Q&By&FG~`$X*7|~FlWmAk*)Sw=>YjyGt;>S54gW~$wr>kf*Ff=3)*W!7eW^Ub z2TXQpzzgS0p;r2CRsD6z0aroCvz@td2Oql;Y}bweetX&HBkGb*QQ!Wo5wAY(BFqC7 zd>M~jxB8hn*8bh3JJ}c)MZGzhpf4AjA}ESW{;giGgfFuiy2Pg*-5Bg8iqFR4R9FN7 z1lZG36lbygCCA-*!cz5$T$LH_PL51Hh!qhXawa6tv#PWYVqZN)K>du9eHD=YM%oRP zJ{Fl7juQcwJf3E&A%#3Pjq{= zquI98}j1YXu~KJYYRgol+Xcd0L2wCe4+RA+HV%6C1J(=_z>x0 zWn3+hWt1jA4Y(SbwgA7t^*pE^VDh%*l z*Yg{pwL?&i44>V#hGOlPZeD(rXe6I$(e!jP>2PU+i|_BCChxJ zx=x3_@jU4j2{09^W)?zx(=XFV-6XYeB(xe#>1C;(RF`I&K~vBhNqPtvQ?)T4=OeZz z(Aq%-8ml;=D&pAM>(l__BR)69FQ-|0F4Q~3`u3nSgb?l-_$G-p(2{GEVZ&Z2D>QMk zbE@7YDXA@}PCy|*Y&Fn4D`zZI+AD*QnZTTc&XklT24@oog@OW>P0x-kV2#as4f&Ao z>lg1-f3{klc$X}~6JY794SjK~rT;0bO_J%zpf^VnS{oRVlrN8D2XT*FPn0fr+fx3` zKn_`bHpswqrz2gq76dGzSX3*{s&vr zd)qC0qUo8s@#SW=<#6wfF1`IJxR>MxZtI;O9ZzLTIyE~ImBJ`CA#x;g6*{$K-A}Iq z-vp79D!WaynGA;XU-2Ke4TC}n(}#Mh+#`7o8H9MzbaQRvuwGf7>hxds(`KM4A1{aN z1LYhT(u=Gtlsk@Rt8=hcb!@7vUcatqqaD_wL_2mg{!V$5r2O{MOq(YkRAaMw-8~_p z{omNZ?n`9J>8sSql5eM~GQ@ir1dPI_ zpnw=69X(%Wy(Ed8H8;2boR~idoI!GNfm=OorzPUwC?E>oyTWDQRMK0;Q;fx^K6?Zk z^4`0qw_=ZW-78V5?Q4l7UyfFN`uKp%ROw8s)vIQM( zkz11+B6aq3iJok|c9LxcS#7f0YEx-#sKs7WG%Z^yZD_}*=&k}c<^YEDo+JH_D|*9k zvZbz%_y)}A^;TlXj8b;Z#Ge3maHES7-yt_{QSB_Q7g9#o8YT@M`AZHn8TC(b?iu+? zX*>Ap$X$nQlWZK?WANov8)8DIR`lT@^Ns|!xl;753nTXvt52etGycN?vgQpl(4 zUygTm__&wUuA+yoHe0Voih7MJ?*h=*^l4TCP41cKtq#a%9@c3^w>9^wr;HV^*2XEj zqm|{|j0#O}u)>H}!fCbJDn#P*GomAF+Qza6F1SJ}$#-P33aY@zz2gV$znF)(i$TL+ z!}x$AVM98L`bt*cAh1N2XC&nn0_{v!*pF zw|wt*+~i%Vf6zR|ixRy_%JU8z4_il0z=*kB&By|Ui-!Hm2i777SZ}asQZ`>TOrT2z zZslL28>SbcAsh=Cv2_v5UL$E!AlPE?b-FpYe$o@pMIU+&3$MX!NiFRG@+{ zX*))Wg?{FY@a`8lV2)xycEzUls%hc06EA#?udIhiMUrO5q{beCs%J&WlGt}^4za!Q3bwu?k3?MRHE_j+ZpcHUP@ZB<$m`xMgDDdk}TGfZd8PsOSp56mcnZ%8EAQnbjX9|OiaD&AqhZ)x!n zyPGg|c8`#^0i_YAFEoYpL}5VJgys^s=T?aqnY=%;T_((a}B3t0!0zJ>>g$J;Tn^%(ipkV4S!ChyT(j)|04mjFvS z=Hir4La;(;?NA&rc>5zeL=kvoCgIIjU56khe3tF()e^e2WO~(B8QvG~s%5bi2>7y; z+FTXc+vHwqr^LRQrL-jSK4b!WM5m-9n-rv zypd)v<#k?(U7`-EU-JpgL5k&bIDR`nzp_LFk3w6QI7H*Y4|E$j3zOg_HJf=#2mbfz zk1@*0k7D}B>L1vwM(y}qB4SbJ5XVwuj*@0*>0Vu{lA=UvtrlAjiL?>B# zs8Qb`^&&}yyr3e0XHt>;MMti+;z?cF?nX~A_o<4yll9no-n!v_}@lHBc z3}%0W(=7S}f!OHdOnQ_M+JGB{8CInBEIQvOM**S8V>XeCjyO%!K=ZC6vv_q+MU=ki zAys@2&)M{vjAWy*Fpd+s6ieS~cerF^w4_yH395kN?1RSLvWRa^2ZNh+pJra2oeVu| zvD_PVGMuasCY58(3;6kUQ6~<5CX>Ydk}fL^>G0?-ZI5=PLEz_yyKMNd8{P|kIP$yL z+V)E}bq|B~ur0(@2*NTSsUMGkPBW9<_wfBqee~DV^UTLYd^f+c@5C}{)Gx*jj!`(6 z$rTWZ-$!AL=80S}qr#J)jwXLJhGk0ayJK$`Z(1RepE`SvKz%HydU!#UeaFVu+m74T zcMN!(Z|!&%Td#)|h>#T72u zMlxNNnF3N~CsJ$?Ssk^nGsP?`<=DFFwPdH`_bc|?d!;`Do+>l+J1)&S1R$h|`Zt?wNIAG#vF@olrTAwMN*MHm?y6w} zFlLa$p(`ID6%4DWxNZ()~s-{dmM53uDl!mA;$IJ&*)i9}!rj&O+W=YfX9j zwkS>h&rqy}lJ|cBRASr!Y(h;!c?(Fw4Hq+(@O58Aq=@CuQEa(-1(7qZfZc4TaM3oe z)?+Za9*oz7{tYP8VSU7E?6%0q>j7V4#-b|$ndfS0oS2?>U!QK_e^t_=PM8warmtOK z_>5co{{bU1(5&LAY>L%f#G@ihe1v@=H`s??daF3*5|{fI%0ui4l3C3g6p-2TSC42D z25jJ?x$B$pRFesp>osafY@#s2o)>3X->sSprCR7V>P~(E%jN&TQd*JLYu@aHeLMhA zW|<_&xH<(-Qxnrqzr4UUZb!vuvE}I)=*mdU#W|2)t>I}V6Op&>Ke3?C|HCBw1CwDX z3}^2nB%aQD^88ie=V*r7cu=?1Yzfd(5%z@Hc|vhU^grL<;vFAK;#I znM`#g^>)rJoI{!=bq!ei2+8m425Qaq@tZjs49fCxZ7RvthJRPq8M`1i{D%N?!Q^9J zrA$Drdz2$BX8hF?e}V4#?|y4{}x`@jF0AYd7ds!q%R#N__& zqW|0k6hVGZ0_Iy5fO^C$5>O-fYuNrq;51iV)eMtFyg!as>ivO_xial2~< z(Olc@$>6~cc~-jtdHTPn)n7wmSp$c{s#e~5V-3LiqEL<|3swKX0!7-{XEm-x2sYZ) z&Gi~WA-iSZ)6HSs+@aUFMF6NLLhvj~!b|(G>A@$cz+qdho1=ycNB{4M_XjgUu>CYB z)e@!2n`Kv7OPGX;co*NtE}Lbw$tSQl*DW}Or3ibvxLFRjW&8)>b#$E$RNo#_ZB?w7 z9W3q)xXHke(MQ(ZyJ!%xu*VtT0y}v2nn@MRId=ZH1bw{8WX7@N7I*IW2!8;?rI>B? zWecXutf|y&`c(Ks{+C_FY^Z<;bGFVPqgs>8{tnNQo9X3Fad{&@cr%AV5qhytyi#FP z){vLN56+`pceh&SABn9D?X)gi1Q3h7X5TS+y>H%MPU||vGucmb#1F{`{-YjZa5~g} zjn9jKnx_b!jY)Xt>H+wJgJg^JcX!ZB*RCLpM+6Qy0Gl(CyY;1`8_7yjz;S~79x0!r zQNP3p{}vIiX)juvDB7Jj5cDN3h5=xPEyoK0R_%J~1G2i3TnT~KY6xxPV_<06pSY`~ z`D!)nps2XaNj`z8V%S{NxT_^W&b0UQJAkJg)())8ycgc}HI&vu2Fl%RU#Pr=yVyuH zJlGsb+vT-jj@`)p8>RRsKLA)oP@TB*sPN@`L=v~m^3q2@+Oad6^y~5x;}uF3y0y1BIrB1!AasN8>E0J}2m5u)7kvpghhM{3oL~{q=xXNET$kLJ0N@9W+A;u;o2heH zj_-b()DeJ;v+zBdvPq;O#B*R=3LvW9+4hRD$3T?JR z55TU=-mYu+LNmS4f%f*7HYMXp%D1SUU*NwTeS6ESD#Uun{7-QWB87vbf^s2Jp9xkx z&UZF!j)35gYoy3c!Gq7uc79WqM9|IQqMsII@r28Uh8X; zjiqT&ff#1x^{va(CH6r>Xv;x zU5D8Fu7r-ha2T~0yVIQlt(~W9)P~y)Wh`^l9$4p`^8IbTPnDbr3q!gr_DY9En)9?A1>U%KKXqcgQkuZEDcxXaAnM(v+=KcT44vT``Yi-P z+n-?{Ts@{sw8MKk=H;~BXNY)vT{-_kE>p|vRXBV7m#Y0!ePpsAuRkw(z<_~yc$m3Q ziiLq;4SU=bu%CwPr8afmr;IH#+u4eW#A2%gU-P_4Ygb2aC!&Vgu12S{rp&qUuDD=I z=W?;gPT#r*Z)V!NC%jQz4Hq8Qj8+WE1_=D#AA0VmEh)T>>5r0pyXh*DVfJ>(WBIa` z7wmhP>S=GV-0E$^3_riqr(9nOL=!{;OLrZd012!6=FOYC=kMgLt*!R}T;^xyMc;?J z{qK~K?=ueT*U&wo`*o(fZs1>8K@b4M_bXxe3-=(voo2vXtx`&Toz*L@nPa zYdWYbRLyVPSZRB=);qTnM0$X?=mXuq0P+PC$F>5%q{V#z)dAiG@P#it0rcIjZ4*BL z6I}p50zSZfDO^@DEx=57j!4^+Fg2H}%}Dqgp8ThRHbeBg^?q1qF&l3&w5(MtXK;|m zDMA_oAOQ3l_aGx`04CrzXWmw|)B^3kSQ!?+TrdR~Qzy;5(91Fuq+e+kq7T^r=jijb zcDhXfr!SsFir&vYhSD$Zt0$DI06%NP<>N%MoBfux)cVGI769yRC$s^uESJNU%jtQV z@sGWdE1Ri;C9oqcCOs&gyQOt|!@SGYJz@B?3=z81TFEg71&PB{q+&Mz8A=tzULU zTgUS?IiMDx-QkrcA7dON`^J7&`=c86H?u@rOU6OOdzt>|9O5acC@4E| z`L(sv@y-A;u3{rRp1w9~={Kv&jM^_1ujmoUd=4Ofm3l;uyKzPaH7$%$NOe>S(gDyZ zk4ZO@W~i#N@Du|Bg9_an>l7{;loaR!AaB35TrSPK%-iu&PQEBEDdDf{dvXh!Ro`n-rrg(3^PH>sc9v{%d6IBR9a^w!dg&)Refh^co5AyY>1l1|T0jxB#H zA@YBhK5U*vM>U5f8!2v62;SP*m;=DOM*EOD*L*<$YFAQHGSuQwqF{V|X7EojKn6ux z&jIaE6>G-HY;#C3*#$Sp=BN2I?gNen7eI2>zci?^jvu_8kK3VHW9w@NAl|Z`>(SCX z`{`w%9#r@7*Z2)Wx@8tGGH1iZR0K&!uuuMXRli0hG1Q6vl3n~w_Ez-;ZCB9XP zGgB_DI{6d%V74NA@M1T=w}W!%OrTh^+-08U0%QCDN2Y>xNhh!N`fNhkw3B@iZ0L2| zGu`Ivs|i1K!zcx~3uGZAV@2|oA;k7}|@=rK`cp-g)<%gZH{<-?FL zj8#O0k3lst#$|T7?Ar#+3;AbuDh>dAP2VC-z`3aEb~`_#_7RZJEPuK1xmZ~EL<4H3 z?yPjQjNzu89211rp2e+^=cwBPgt`BNssH2VJIm7-lxj2OhKG{MMOVmy!hmOIaT5S* zr?fy1npnVP_+OEzIu+M&a01iE-INVYw`k1HzjdL9ZNA+np67}Nh2wv(2+!s<81gwA zmv#Xn8$rc-1kC+$pPmtJcE7KW;g>sXIutQ&%Y$g>+L;3=`EPc$b2KgskJv{Nz*L^i zLRwMWS^#jPuBp(oZ5%-!#GXMt6%`XC6;U2;m&#v?4CW|xGymcO@^3w;QwoxcB667B zhU)6-OkTD8<^J>r1cGu`9OSKlk;}Omy{Kn1kr)0PA7AiQgVV-9K+t?Dc=+7GdD8U!0@=Md1f1ocU#HD*qS~V0gYG1FI+gH^YrG|Dq59lw?&+hQfc=`2*5A z9Dp}YEqJS+^E<^19iR*qGRCX@vo&IHP9K3VpORV?i^}g5jv#=tIT>?!{% zU_TOVkv2a4@04T-fCAo;qkaq<{qNzIN(O9v!kH=w`|pm9Kk0r$08;b|zjJQPZ(=T3 zOzCkDLae7>|BLef4-ee`rQsoSMF!B{y)LuHh=f9J-_G~uCNxU4jH#)qFM$0vx>iorh+o8vku?SS=f8!3G8&1xcVjxtinBzU+NZFKwLZuvnQ*uG{rS80CnD?1Xh&;Z^C zpzPlqymxhLJaqlN>(ctP72k;Jo?UU*x?HFgmzEZ)`r4IDd(3F)Zr#3wHrI~v zBqf$Q^GqQAHsv%Z903D#{<8J5Wp)l}u4T8Z34lY3gfWNt#wI3OSfsh#C;1t3CQfVB(($uO{=4+5aO?ZWU`BbIA=L?cN>mo64v4H;Qk>pp&b%E-Xrv~>&U z!!)Cw2_0R=I_(Rjsb6oIESHBN)w`B&!gb%w7)&=TlkK+bI}&m^#hnvZq%rI0+kh?X zszY5#>tbf^ZFdI}rW&y3Uw57p)-Flm*;V#W_0(49WsZ1w|3h*BP!Qp#NF%!T4LyN7 zOW;vq9*;9i{NAuAPryGC>!Ep^bbr++>LL#4L)My|9c#gz@050Jbn7m6H|I(@EPC~9 zF60477zAwX?%Y^W%vOR2_1Sj-&Z*LQclyPWx=>HB#lQzhmE*_O$*OQjNXSH+ua`-)yKV3~I$`Tg z-+RX6%sszeRwC$jRWEgG?Aj}Av8*JXRc~9Q{g0~ue<`KK-PtL^;cFePN7-?&Lo%ej zt9JkldJL@UJmBkG==8h+oN!Ya5^kFrzoUhamGR6fD3Qrm;MCtpSr+_ODb$-0F)mlMQ!CLNraeRBBgC+rJR5|4+vx^GhXIkRqWmi^J0DOk~K?rXcGrwMna#Ne*@6%^fAKNcCb zZKHT1Gb{Q%07m-m;(g78#WTWp9&K>UgizW>MZYX#O;`rANQiV7e=Uq~_em z!{yJ*x=HO_?9u$?n%L*>9sq7Zw|XB&AKypj0ys)yXhmW@L$~(=3RGcD$2~v+wtFnK zny8z>eq1+cCL~=mrw~6Ncz+Mjzx#GHcbg5#-S{mxQ;J;x(6tL0d>CcVG(B2rftYda zS#IC&0cjRFalT|WSRnWNAfr&H5sx>sW0bD@5@O|6XtcW2P(B|!Uy0yr92;P6xQ<@G zu?6GPIpL(}qXv>jY{ra-PzknL%|=I(e#|2-4&R^K>%Mn7F-hSd6z@Q8o)VapU`@Xm zBpc%UAWHx^K#|cslF*>EqHWxPo7ug9w^*1?Ca$Kn$=WgiWPwbYdL5~5wvAfAjIIEn zwOKw`@Zi$MRc^+2uWc8Teb%1&E=E7&sQ`k~?QqciT5uL&EBDv&Gqr?$>XHdn*jMoB zy<^b^RnU^!5nkt6RcQ9uvNkmH&Og+v<_SGrZXh0F?IaAMjMPIhFh7lU&in}lo1kLF zm#{7Xe~x{$+7*KS`u#6=6Q{O1lCqZV>L`*~ag_qCY{wz#!)O55b1%wH*Yf+q>`2ei zfn)Kag=I4ne%FzBXXj50^k%w4W3JL5HM0f=uWTj?RNki774@uXn%IB}uDg?4Z_4!9 z`Y1))OU9Z>$55aC*sa%85J}%XsjbM@E!5<7hY{jA9B)rM&U{ICYTxidV6iXa5F*t2 z8ZqRsWG6#_^W$9q;%q2zcZy$&s_mm+Q$o-ldj7ip@F!E_!c(WWqG(#LnZ>Tv`I~Dm zvCnL?_N|4ke5Wems8&PcYIjY8__ZyB789)kl{-Gs%w(?OW zseTgRqE?t_u|db=k@`Ii2UPJooGG{&DM|>{9ZLB0E--be_N(zf{#e-f8_%PR-vrVK{DdqT_4a@Kv#F zJ_o;kC#QZQzi48BTXZ_%;1AUz-ugPen~~?TeqTkOVw5iLypLR+kfqK%H)^3Xh@W&; z$hTyI%~3yu6xu;ImJshjsFWVgz;-dt0JP<5<3|eQ#&_NtfX0(MaDPrx$GcaaF8TI_*1c&Bs3BRs(m|dHR zGR~hTWcB+yK(-Xw{Alyg308rced&m5bP&X4=xsP_$nNM|S=nF0Z{ zQMDl^g*RIN1kH?(4QDZHGi~v76cAf!EmB$SDVhuqn=mo@tOS1RU3AMD8ydu_c?u~I z(E0p?``9)QNp3y9r59!??pe{apdBZ8xuggl61am!ofqVpOJAO@j!en^ju!9~NF{V~ zxLJF(*C9`6pUAnL8YM^I<|1JIW_2Jbw6UAI1jpyWt=q71PI~k1Q_Eamz$3F6VZm0) z=6&bL9dK~>WTX6yI2mjA-^2|Q_Xr(t{OI*?cAj^RbIBGJewySl!~I+I4NP+AWk`-b0XMyJ$btl!Y|0l@l)`Vh;`PqC|Y9Q6^2x#5>j+*6u zlXUz*_s7Ds{Fryct6rJ54!71~Np!;)ChAUYmAU_szG1B1km5SjZ;4g9I`JZe!c4VD z>V=FbBC1nKw|F}RDO*e<2Aoswb*2-OMh(bdht+o@_05%qWXC_jAtQQ1%F6l^oRL?i z5^vM|&nLF(FB<8m+t2t+Dh7sjVyqyL^Cd15khckU3DXF*2*b&%rl|>~{?r1GUE4aH z;7UduWvmz|^~!!dW3x*D3EoFGw-hnzG~BTQqRc)szkTHt<*AD0P^EBa&}PboVeI$s znx`z}$=qf|2ZZO^>Kz?{`CkWLdr%M0`EAQh2FV|hM+$U2z9!pu0Z6+>vs}P4D8*Ve zU^IM7T459Ugtt2=($E1O{?C*^cc2jPOPV~3QmSTE5)Gc~=MQ5o#gVSXy<9g_wPbnw z=mFkU9G_L4_n*6dZV*_zX2XD$xq)R5;$GHzw%{LGXN|Dqay;+X$V}G zp0;;=>f_YZ=z+L_E{+*Yoy`~}!{5T4+4v9XOLis?C51{-O7n(|oi?@+?Hb;(ewd+h zg@LQ7=lbpyg?87*D`&9Mq1RJ-@HD(3tCDZEng2n<@}5LFvq~+0%nRaHYyhm@TEK-Z z&JVU8Dn*0W(Z~0|^4Lil)4pWm5 zTOC7g(*}k#le)G#p2w9X<7yDoem{`#xm0~`UqHRecvOAw&(9NV2mBh@hF0`^MsE*O zlF*T?rI6AgawA&{sf$mIElFkNv7NzN)-HJPP$t+a*0PUFP7)G;H9aRM|YV-}x z=W*sLG3sm#J-=|P=)p*~%bzM$tI&XtIh2Uyu9$a=M=bgxyMfYHmb%?9u*L8`RF)Z4 zb>8}gr55G$E^bYT_A|_l*dKnafqMPc7JGHOvd`2ARtFhWmMr)=N#DU2OFh@?ogF9`TG@ZkYI4hhC5 zWRQo@}Xukg`Xra0N91SCk(+7F8mmgg|>jv$7|LSP_}owW~kQcz8oZ+ahC=wz2-G< zpQ$sqxnVoU8Kg7sIqgy_E4)%#Vnux{rjCDEd-Q^+G++v(`%u8FzKN$4wpkCFKrbZO zI~c5UC^>)8tZ%JsD=&?$u6Ro2htqQ0;HcPP+txyk;yv7}BnpXgu+V@XQ401QUrcZe za@&AK$gJv%-Q#)AEaUwTHn>b)jLcn|qQ1^$cL;KxXu}8{`!&d^=~!9|gx(_EF=~y& zQoAHw8Dl?sKFf$yi2qJw8g8|VfWkKs z9z=@axx=athF%A>CbRIWcH@gL+&NJs?BKCz#WIuhT0$)QQxO(gHsbNL8Y=R6aY$~+ z;32|^ilL%a!&@0h*$rux3^8CCWx8r&#MvLy+>M3AYFpi?2k>%ssQ*P3DBP=Tua4(s|nyg5?D4>fc-V^w4xZiPrJEIIPsH!gTHxLXoL9#iMn46ZubppF=K%yTeK z`C4DqSh(sj%|+~{T<>wF2htauwk|8GT&EyKoqK?`53={(EEAkX>L)#}KbcFnT~&Kt zUR@@5&_|9^-*OrXXcf1e4P|2a{qCH$wGpe=E!2#cx^>1GKJwuSMr~E4yaI?w1d9*` z5r4@4*pNf74J%6&l6JThvc4)4++>RzMn})5M-q{IdIdUT?zY7s7?;7f$C z?1&QE#cThx98w}@z;W-Y9cu=Nftd1Vk!HcQJwdbhSou9Rd(lOtuCN?Mp%Ys;p3aA1 zwxG1g4(t37lWO@0XmzHbzegc0Gap@F<4c8)PP1pOhu=H5f0WG^*oN13j*saB^WF>0 z5H&1vMXLMrf|l|<{=#1>cPv6Vx(SO{{GMQCk>gb{MhXOArL)5(iP#@4)z$HkmR!~s zqOS4K_bgJQqM}Tvgv_kyMJVVwsT}8reTf~Jpd=Ccp~gh3M}R?BoXI zFLZY*Qbe?*d6cbg&n`(PIIwhyZUVk%V=`&`PM_SP3g5t5=DB$lkw~@?I-m`*fR9F( z{xD33a5dlnRF9WtmbI9);H1w=Ma@2%+^EBGb|YeBS2Gq2^)up3?9i&5rqB-^n83hZ(|g`w`#LyEUl$GIXX-}octjE zXi+7O%={4+sdP8Yi8$*kg<1)LZ7{oCPm)=mb07bacS)hmPda!*B#X-L0M?R}?_?#= zxnB!mosS=enN?%c3LCWvvLspRc0RmD-%3yocg)+ z1adl_95eo=j9Db#gF=noW{AX)m+;CUyr*aCu44zml$3DIkUhkk9CJ`E-$YA={rCm!QM9d^}zUNVHdX?@4a)R-BWG!b0BvGSo%xBu}VzCnMxGwYJDNMjecuqk~;h$nH%-T^GVh6;=shf^T-; z-6HYMYy2wCyY(xX_zhJyA!ZyAVd*w3xSB(7Ub^TAJ$S>#YGWBQ#M@`o+83A2zZ z0E$F`SzRa*M6*4A?%P}Nxn7h{&VXR<&`T-1FOnfxx2XqM7DnT8AM&GYhLNv94IM8@5!eeKgSZmTkfn)2iNX2?)H2 zWdGo{@4WaOyLWEUo0`Tu=LJzoz>GO1@5WI4c3o2l*ZLD&qJaSlY&ex)m2fX2ahqE7 ztwe4xzwTq>zFIli;GtXT#rj>AC&bA=>9Bj%mY%FEvNt7(9p@vM;U?Xw^v|MnmpDhmA1K_U z?s|BU7WeK664^!fvqTV^=?2tnK;KHC1_8#z3Y9gu#+e={bevc6otQ%_|bj?D@;6 zJ4$h_ltq9kAaZPAZ9M@KbEBv z0jtqg8!d!|(Cie*fomVlX>CRmTFPn03j+NCw&W>}$Js-?-y5Tamx$xS?xUrM z-|OH9R;b{RM#qy+FFWAeHl+=1uBBMPVtL33a8r4^r-&lN&nMMFdD}sF1>X`UB>~+x{HwJr>OFMMY4sA33aX^eH1Y+YS@oi-?c8huOyy0H^1$F`BPg7K+W* zfooU0=Ypkutw)355XP@8%%mqESrWKsa6Qk}bIks347Qh4 zewIi+{uDbY!Bb7B zVqwH1<1k|nd%rZo>YmK<%BWR4e==U1I$DrF>%-QXT9U)aOyNumv>S9dcQ&U`|2ByRBm*2?JtTYa4R{?Ff6+}wKk>B6^oy)d>N6*aAw!A1Ve|FL+8XN;OS!Fu zG<#>PDX)lI0%sl+?#DUP2p;Yu7WZO=@$*doV$B)yuo#qVy+#78D2Zt&l)#KHT$&%h zY8;jz`1NVGs+W#eJqeZ+t{-Z8=KOj-;8c)zPKxU1tAbbklBrF+C|WGN>`9C;k{y){ z8Fq~mwVo=e*9LWuF^{8rVsp4mB$TF2e$AuXhAN6<~{~lE^sbZua zY%U&cml)nQ@y981?|;c{JlS(yQ57wW8-tO|pn*-1*e`j+z#J0B9gYlsTN z%F~H!z!8WLn2UAzO1VX-Dm*4|j3`Zr)V8{C)-;f178d6tkP-zFnG8iw7|+?^=MN%I zT{<7H4hBj7j(A@LB0l=H&ND5u)RycJwvbCVoeX|Groy3D3|8>=Z>yob*S)vA#Yb8~ z6E^p>eW7(-L*&U9$V?&xn=T6`R@MX}l6U ze!a?zju%cW4hISYJOr;NEM=E$F0F63{sW~E#k-xvl098`MerN zXYAIG1Znb7Ok5o?_sP0k$-KH16&<7MU=NtrKdQEPROw}G5{ zmg6HI$DsD;`eFRJ&oOnS#`fuwWF{>(18H&Okji4AL5BvUJ!C$JcBd`IeC!A@CHU>Bx zDQ~?N^v1zhe9sQN%5?Z^stP=t;~HqDbO)aDTiwOM2^zow{)jzQF<57KpPsSNUAPNm z9zKJ!e*~bVUu>>J&S^` z1t6DgMSZb#Xj3&Gyuz7ThsZoq$oiX2?Oa0D;$SkE@iV1ZeB_xw))fcmv#cb^Ya0=IKkSx8aac-9Qc}JiZkNRLd%3t5{b976oI5j}Adw@9 z+>}J0FEukpKizRCOvCsH)UF6rQ4Y6(|Y z$~pI=YJE$!)fe(45tP|pZe{V}dxXw?P}Ym&9T02I4D-RA9}-$pG5Fs1xh9jNlJynH zZfw`nVxIC_*gi2~#(cq4JYBC59##|GQ~I!l-hK6jRSs(2MRS$^jLLj|r}BVZZC1PMaJ8@`3VaChPx* zG`1nWn_$GmLDjnvQ{guRvsuiGQJIY$r1VjpcKYR0SLFm&0rM*$#>Zr< zmdc9`dpx>Skj&_B@&3#iy%kTUP<$ zQ9X?bt?}Q!d3)C}-~n18TlpWn|Cj^dBaaFYd%Zff+4t{9wt((N10&7z-$}$a62N#o zy#^|O+c*Cyh*X0Cxe)bmZPY)tN8$2=fI|c#Q7>8j??=>t{^`fNg8z3h|CiY6Wh^k> zVAXj1KQtJ?YmMG&i5?2?{5$k`*cBMhB(^;Ezd~sLdcXG%0ST0FjxELCRT98&4@zcc zfTLU;JS_kHNEn#fg1Z_m|B!hCA8ToV@sh!%%>U5u0*^jD$>|QU%SK#VLLx7Wzk^af zmS<)^C93;hrUpsKL1%de=BwSTQ!87EUru+Q_6C~nCBo>QJq+?!%3D-3*sl9PXL z+9u_9+wDneb2SG;W;O@FjsL)Tae)H7Bqoi!QGhvgAVQlhadq0!AY3m5~{R>{BK2^Pk0jY zsH|tvR7})pIPxFSUUf&al>C~LK^lxGdG~DoX`iW-fs2Leo=~>SxQ0FE z<1hS?pW?7AV?SgC#JSj4Dw9at*m3afThn zB^5r;=p@lRXVH0G#AW%VR!)$+BSD*dwKndok1?zoUc#~5Vbm}@StlYE>9eRcZ7jqD z3WvY?=43%&35Sw-9VO@$7}YW41wWT}Uml|rSx!~JwG?yLb(4G8IaLX6KjK;lIC{{s z3v0xSRjOwL<5>B+;uU4WO(uaL8rf&DymY!%%x$yiV4dSPIBL{bj5rLkl11>2IU)>f z;6D0lj!05LFs)h_lUcdHHhmn@ZQ)t@35Jf!UaXHnhPQz0o_pdKBEcZ`4N!OJcc)-c zyd#vm&~jrR8Z-tIZMhejWMX8ID$j7fN02i_zCd$iqL_}~yzTwbv+6p&@SECe!6<>W zXnmL}I*F(YGlsPgQS5==;y&S7JC=byRR={s>df9Ej$Kj&k;D z>`iLtNbq8@0dJ`gu%w2L!gAUv(3*MzB#(rpX{acPx5Q_d5s+gacp@~MR&kYFT;PbM zeB?iq9X($a!Fl4e(rl{ohHLc|jXM(YvAD=;CzC(tddH8whf5g8ZSaZ&y?2-@#z@~c zY&|^0aQH49Q=BnE{x%;6b`dheJ7brg*}7f_GNV1T7_{^tl%T>OwvOTLRhn5wc3KId zpV%Y=$~V*3?ZsJn%m*=EQZC;=ayuga@^5VO5U68MnF|>~;cv5xu=EaX}T(S<3Z^`RC*W;Ys0h0U!1AjY!KaW+T}H zjBT=H0dD5Z?f~JCu_k~BlCq{+I^5sYW!9bVNd)o%L4)eGFu$J z_QK5^Vu_=LwmR^E>#D!QJ6x1WP&2DI)}2WD8(|4~-=3}9TVjEYMWAh%?(pI`sFJUq zg`xBtlbng6mq3WWAa4eAXCWm7Xc&urN78F|RYAP)N6bR2`hfon z8AUM+#76xPi$l^OafXZEg;y?@hRe4ah(xpUnkDXI4s~)Ek}B0{EZuA3iYEoqHPqF8 zzUv%L2!f%`H2j}#Ut^yzoKSSDxTvG>N*0eEGm>s(nY?iQ8>2v zp4JmVG{#V-adhjw_!AD^kKxItSkFnh$!v75PNYE|N4bboM?aQGnv)+ zlQ(oZQ8|k_W;qHucH?>#B(p(#Z?S0dW9imuoCNEmy%W5{VL`BfZ*R(T+~0j;lpG)% zkRQO3N8domO+5+tAyb{_skT-y`?LG!Q)|R?o^!18&nYP>$tj__A5*k#Kj{X~iB(rx zUrsI+*c8qeKql2D33ix&x)o4rwHDk*$Y$$|!QQ{D@}7ID%ewz!pJKoGiBzX*U_SLv z?eD6&W8WR$tRbgM*5*KdPy7x(bGmtTgX~#KFEb$@U)VpbpQV%Qp?%t5*-9v7^FcE~ zGh@oBSg07Ht6cqNPIE3`PIBLLe}9glnv#nnL@;m=ha-{0l|zZU!6i&+N=PIfoX(Xl zDnu^i(=gY-))3xM=~Cz%^V^k^Gmjv?cgUi|oWj`9tcB8yCxly;$8z>d2xn4H(->*t zRzAZx^W=P?o5o?Yn1Z;9xSU_LZ~VOh;zApgs>e97oiK3XNwb+tk7pFYM^i-+3a}P=AO4^;%neFmmaw&ueZ^rE(q7aDE}b=i{1BWM>GV$bNcG4J4wnh)7K!wX z)JuG(P-Bs}@nn!Y(Y~mtIIbvBmsdx$da80$he&r?Z@K*I?A6>*RY6U?sX~>-{N{{Z zP4oNEx%xSaS&dnPGP(W5z3z+Dec@i*9*>Xl9}6km7GEs}tf~A`IdoY5wEg@*dwpj8 z%CxEbD&e@WHFv{mTDKH40N|o?J`M zPX)DX!H|#_+bO!OA8U`o5P#)8!<6h8=M>%Nqx#Psz&Z=SWZExwv)^y|etk>@q zav1XHr|4VWJbkSj|C84PwtgKy!a({WGCo!9^~>;=!fH49NJ={5xx$mY)i2KH)OQOi z^D|N{IauB1K5d_E!?sZ-P_5orxmZzNtHP{({e;+k)I2l&nP;fn+0O7w@GrueWNf6B zxth4A%teOJp!%t^@f)cc8I#PL5zO7}l~NV8maYBa1GAsGV^b3v`D4*u=CrYHc&No4QXAMz)5QYv6QZTe57wUU#epFGhYKnqQhV{PqYChTmKgm}AqF!D5 zMj=^E$78m4Y+UteQ8SDR>Pnry{_5#c8xq-7z%5<|LU6G4y{PfbbaIMGTAki_QR#L zxR|?0PbX%IdB@8&|DdIg!B`m*DAifhJk)G)+a}iC0=k{JFcQXb&Dy8BHSUZ_6t@%V z5>THD&^K6?YeIj4DTq?_2ZQ77KmzGT%_$8C%Up?0p(@PMJh; zDEi4`)nxvxW}bl|v&o5RQ@wY)Yy#wmb#uK=3{5rzHILL}oQk+z5nZq=ZY@IjYZ_}P zZzj*DrO55bqlgyRd5q5LX2t~zPJh!aD=@I3=-*#IJsh|${G=sZN~hoGD0=QWjkyw) z&kwP0Y0_}m?cA4fLv@osv|eIu1-X~r@Xs$_xYoOn*Hb#Q-o07~oX1AS&J>RmznL+B zeYvQEh4;tLLW_+8zNE%Dcv-sbLYv}Fz& zZMV*yCk-0e-i_T|8g4b;ALX4D-_NJG?YV)L7@GY~Os3?;ku+V;Esi+9Y1ni^2A;FWtAp?8xz$yk$`k#GSct$wHzm6lo z!G&7EA^qzbC1Csbi3QfjHh*ss<3iw2fM0mP>Yj!0@2e5ZvJn5h4>t~+gL|bW_2vz* zRWoz4u&{%?w|7qV5_|v-pgFwOfxy8L(mk&5Z{EE)0{Wk_QrC9YR(vaDW^c=8Vs3A0 z!RBu3@YoNWh`SK5Yir?bLgj7?wu1<{i_-jcg%Gg+c$l4r>aRzvteV-QY zR)0pagZyh+zy#SJ&#-f{aj^fVZ=k8j<53|MD|ZX9j(rF)mIHk-x70pEG|( z{6|aeKP?4$c>dY)A7}o%r3S>pNy^?97}8nn54--=_@5{L)lh`}apwP^#NTB8>nK2H zv8N*J|KXX~(}n?0e1MH)R?^Dqz!ng)zdlyLHzTktLZ*XG$S;KpCq$B?8j6dq@HYV)e9r&b(_?d_qLcsWCG7vUAtaWNz@2>Qit*KMd<4u7-9L>?EItwZFSX4OA}t@l zgfLim^5waMn&5e4Q*2+Pziqt+<%Dyy=t&%v49$OYfkvefb%ovP*WpE@@DUij#~H+?Xnz11{3 zMh5uQvLi#eNzUbTlN%nu8vO=My=_{gZg9)&3Sxn^e&ood$)a zX8qM_!cFeQxc_G9dN3S~YherDj{+&^fTt383SmmeXuoU)O?h)8<5~EBUmhm0|3U?{ zh=|b{4k_=jWHp{YZ<;RQW7)OYAJT7N{%?WpV-656Dl1YF@fhXQkx8%iH#jeAzxbeF z*niNWldBmZErIl3i+rNQqQOD6Rpy!TWzoSa1U_c)(-;3ksF5w({r117lJR2whZDZQBL7G3f1(D&5tU(* z@Nf_i5agM3hU6JGdrl%a9j!_-3yUXR_G(kv(ycB1ScwrE8Eb32Fg!+VS-H$T0^nWNJ z^D4_685~K-S~N)zak@ENIW;O1NvMJT^X7b4uh2f8UUBcdtOuGV$enF7ZGOWo|6L?f zf*7YyE}0GSZG+4oPJMSopnGYYz7c2QS7|xSHA$!6sT?V54|KUdy79J%uRHGk=B6-)uXF3(P2?$Jc80HMn?!Qny|h!z zm(F5AGk=#ih!<<8`=_aOm_$F?%v7=7JauEYv5(8hkPi6yxQOi>kDI_Yh%-;zO43CI zY2b?ly+y-E&h06g|43Ta92zjD?L=NwFpta5&mxoZMWt-ns1xh zedzF?C!37bU;L4XSS2ChfXH=6yJ)JB6j27`%37{3Wev z_&ER`isVF-Rgr=(hD`V$y%O*NhmjOM(tUrvwluv^$aPP<6K5ToE=(GYP0BYUa@>V4 z2p>H^6Sd2p-^Eyl8YTfnQrCpYet+!kUklYC(tvE+#r8z6^ZwkV$j$F;%k{obgfBY7 zMnq2ER&J))q}Y_y_ql!tP}tUDut|i= zrv2?q!f7hqgEniGpFZ?^EPEdU6*!`VSJ$kh%Xj!gLlpr83u@!}8e5x^h8?EU``g1* zuY>yhr^6bWI^FuNvlg4@(?mEo0=A?l@jEI(`MRR~TSu;%;uO!nWjlR$c^ki~)o z2CVBaftJ3>lJ}|NX&WN8I(5p9K0%C?Z`WV*+;kF3rvtRh`Y))^F3Uu@nH;zEPe#bH z&n4ZZ`mkK1+o9dXqMMP|WPYaa90s`%kL^>}WgoYRLM`^)!&y)!Zy*Y`5-I&a;DGfr zVsfHC+)tsUf+xkR<p5wd&0cdG)J&C=CgGf&xWFmSy^Qd!jIL z*h3oc^&=p=h3f9m@4?2Z4yiOoN6Tbo{gwHi6h-U`D@wO;74)Av&)S}IjDt6cU}{H8R&7MaMxD~FL`N%FJU z3_9n8JYkXhWbit()xDtpymQuaDB+66r~b7h%1laMrV*J?^TLRb%g*yn26n?H_j-sb zN=5yXX`Kr5WbF}+HoPQCBXyz9UT#HxF9J|U@UDd?rg&5`>WqHLni2QG<)Z8S@Lub~ z{nYJRjJRD0Hf4+cXu8|dESdA@tBWf&Wl;-5&+Xg|n7Jp_bVbVc`MS{`eoIq{0*u7N zFB@jwNg*Vd(MYPdsj;_eZ4$K#@K`CdfZQdr@ox6cMkj4$sq(fNH$TtQ;$mD(#ql3<8(8bf62Ym7+GQS zOJKwGW-4ij{hB2-%}VS62087cjhP9q=`acN%JjM5+%2k%UVMT!C_s3UWaK;ReKsa% za(Ka?*l1h3I8|jc4SlM#*~FDr1sD^Z;ecE-vv@_m@@cs?Ho%s={ld|{;Cs8T!E%n_ zwehgtAHVOti?1ZmzQka%Ih1VH6GaN5@Y>__8d(YItZ+MA%2P;U%L8meBHeM*<&xJY zDHAOt9~a>v*Zt~gKE+hNYLj2rQ+oEqA)|SaPzulQvzDp0MOSoDBI46%j!?m^86JET zW*17Yy>eG2CWJ(+0G&$9S&e4#`>QqQr2cEz^25E`U`QD3bJz9oH~ojJUhymI+D=ow zB5wh-8E+MJvOkY~tPuiU867ognOuwU?vH5IM5&HRJjak&J9pMp2ARwAUXsO-`d_{h$`XGe4C**908zS}t6%Ji%8 zI=?~D3BMR%E-k_<6^@x{*sqx%0v^sCtXX9wuEZ&GySXZ>JeS=mV%F6zNePyVV5vIl zv#S`XqDl>QFLM*BKKOW{2``HzHvFU)Tuvj=zgK$QZXwE$6iHW{YS&QkDy-29OMDBI;n9OZ z%=N;G>{_I6paX@{yNqDg*|q6n&c^a~zm}ha!S<-%vU~MAk9?c#r!mKWSY$y2iD0-tCQx-(r+cdZn~$+uCosH#;C>PCTM^**e0P{Q<+Q4L!UDoWd5uS(#& zzyh5GQ>S7qN{1~vPbh8<8sEPlgwn={a8XA<#UH#+cS~F6+}##kv>YdVr7&D48_T7FjBdN2nlx;VIgzkJ3_IYp9S&fZqo*C$=KqsQD5bAhDjV# zhF|4Wr{pEhhDTuB1?}uvP`waYIwEu~!oqWqwYDm$o9Xt^TJxgem3ed*^!>xQvLg+= zYrCN#h`4{+eP3^yhDhqWQ-B2C?Qt3Y>}O+=!mppF>G!3%uj$S#*W;P^&v0)w57 zq!Jmrw^O+J)m?tp)b01aTy&cv89rvMnd!jV-na!!dHI5hHA^Y0UJcK(_i2 zq*|jbPE?oohmEJ3ovC(no#E)OURKQe=3}W`59hrFV+wHM<}_7Cc8u5@xO!5P4>}@t zI|QwlHkYYyJZzbd;9*(b>)#cwrDX4Y9v4|X60RFk&XvZycXP3C^96ASTchQmVRsK_ zh10BOW~Fe1j}^UwaNzTWM5Z!{J;mXaV0eiPOuD&Kab=+A29Y? zlx<&?f>O88E2fweX`6=SL&9W{^vHU}at>Q=OR5tA|L2EQVA+?^#CEwkm1D~Xth7a*|^?yDiLV4!a;&}cebu&y0=e-+~ms#7s1DE(vb6P^Hu@t5GF zCVZnQN6_9-Vzm@4WF|z>7R#b_Mzs|t$j>(c9vrCGMk#;71)3ldEP6JC z@D{b@Jn%YQ$sF)q`3sOM0kbgm?P^pCdzQK!gWI)JpqwX!yzqdA!tZ9Aq4CSJt#pC2 zt=yXxZKSYn|JA43M1+Nu%quh`cV1mgo{q+7u7qzGjMcgirE5~vcBOfz_Q zKsi}byjpgCFbDeR%_o<(-p}cK?N_rU>-gp2l}QgkjOl)t1jx)Cmi<~7Y$sc02rRaF zx?dHh_7#oU_m47V^aV^$JNJ)bgqjB^tKvNU`HObQ~WKb>kdg7)Y;~Xxk0Qox)MNbkLog&N6;)d@GpB;5(~Q)-DT`xOF8JkU)C=B zas#T#kf}5r!U7J8we%w2vKH85Bjbdlx)(7#--xeIKM9 zky&Uye|9ZDIaziCn{?7Be~_*3KXP{AMCrarw*i_zr5bI5sR^7#;@wtK)Wb+w_`%AAZ&M)`1Pw-JDSQdRb_u+?LD55~_efX5iD#>cHSuM~Qth{AiEXK#CMpXuaWR3e z%}9pAg3%8>cG(l8Q_6Q%jh&QY*#vGA-+wW&mHpTmVbTRSY}xxf#^2dH8yvyxogE5w z-@Vq!B%i$+AhSGa!MEK@R+w|p9xl%i-a44{vpmpm5t}tE&?+_L6XFL6FxhS5a%VnI zDmtZN(*JqvoizD<_jlbNRT3uQ{TR{_zmqqk+$HGLP8JTQi>?nAAY6DQ!HE=Sk_nFK z@Kz*5iP&A`b6vZM^jcKox3O%F#wz+=>eFgmZyXT9J71z{Qlp*wm0am#=*v^W)Y=cl z&P%ri<1GE}n(#)Jybf(I`8I@Uo)~JsD|cSq98LwzO!c@WJ(-`W3rAdO^G3pshQC7E~baJ&9TB;%GeVGD5O4a3N*_zZ-hJ9%l|-KyT?o73Z4wq_ypSQBK}|pyE>lgNG-|^h(_h_O1?T0 z2ZCK;jOQ!lgk?&MYe_3*VcJ_b_C<_CKL(+=l+3u7hs(=vlexOdl~A=e^Gxr$R(B5K zIrdmTR?lqIO1J$&@BCW+j+g zn%f{(ccQQD_&kyy3x1HIB~5rWjCL>a%>mgKZauB+M-FAN>lfmuJI^&0b=H%yNqG92 zfS|N|Z5c8mx=&`oGL_)g3ZZp<5zsrQsmWdMcKr{PXiBHThcJa{)LpR|iT}_JuIQ)V z%!yax0zWt%HecT4kNd{_g)HnNM-CxQ2^4)srQnD07~m044Yqv8@ae8dhEnG&AiTxc zkip4=bj4KTpj)~7O*&|Uaxo+Awy=+TL}{L8Uo^T9YWq3TNk88f9r)AxJ!#5q=FLnnog5qlR7hiyvcNOh|9f=jgHG@zVaVwV3a|ypfxV9s?f&Qr0pt5HTz9LlE@&<)+u)TWd0jf z7nkGTNRN~4H7f-|KN9#jN9kpMkpF-+ebu_wpK$m`sKhL)wu9^L)NskdK$B!hohfc- zx!iWcZi&s785WtqC>C!u1J@OPZ8_<*(UYXaX&S(^=t*PK_U3#q+C)`p{|AT$hcqDH z)=_HE=(_nU5SwqexYp3rgfiqkSLR81F9mlzgEI6fh_Pr?api*t%KOI`L2UOsf9jJ1t&lHCYdJj0C(i+r#AE}F4th@hKlD!6ml9N&r z7S)~tyG;KGE71bt@XPiT!mrGunND>g+sjQ^AYk0~qPM971ZFpCxmsJ&S!92qho52& zbpDXSIs!lswKZQ`L}F?drwhB;DLNK98EDp9bZgh_zOLo6;mm6t82%j!s5ygrA-iNk zwmUGo1$krx^BzYJ%$y^x6miKll$k zE+fz5-NHF)z75%frtlW_gy2n#+AcNKlaG`2-t16Vmgg+z%KZx{)ywNv{&T<5S)Ql~ zIsV9s0N#r+zw+z3Qj>A}2W$Ka9w%ldroA$g5+fZQD*$xppPnh9pP&@}bi#;WAxTAP z(ePGfo9{nlmd=tzODOUWPN_7XdeQ!trF6xaQ0k`BYTO=|(d`jrb^_(!{sXfDOr;e( zI@xA|DP}jx;7-@%%JYVglLUqAUVWRZ)--qZIa($%S$ueXpyZM$Z)fE{tWjY>k~eH4 zM1P$t^^a-%4P<7O0kH!5pjP=GAo<^M#Co_t5;#MGiR2&j{+omW9RLu|%3{>b_6Gz1 z*Kn~6fQ#pWQ1JdwEcb83^r->>?3Z~HH2%Y2{XLdM29W;RM9cYx`wtfVoswZ>0ledm z6OFw;)A@I{4amE}r!vGw`~y||*P#FZr2fsa|NA+W7iqZ`#n1N$=IAsy7kFH)gbuHE zM@}FY5Nv7bTG3Tb8+y%p{bh}hdns+YeF%2wFJ?iM6F)SVPdl;2zpQkI676tR3mKj) z;D%D#B_dha{%Q-bygA#hKJg{x1Hb2+2Xj}pKOvnFIh{}zPnM(b$kALXw3A1&#t(Q0 z#(oCzf&Bg&ngZl;te#=jG|R0{i6qn<;HGOvq1FIg8IBkC8bQ-qY>JJi&X$x2b%? zX@H*^+@xL{MQZm5X*Rb$hVctdgRIpDhNS#<;F7x4rxV{~BDKPvWPqka|UZZ%ebOb+IcKNO1tSyE8U;?6^S19D>ntCo8 z+-93^A%L}KBPyB!g5p8|KK8A5?h$kV$dwGh2VKW0)s$#6MPqabgz{}AHFMURSxe3P zE+J3IIm6acoSZ+Hc(_DkVaxKz%5BJ}wzXW%|jV6}q5$ zf{^&}Gc-kz8%Hb2z*Q$oEa07&Nq6vMtDj$G$5ZAn0BlQqz_}Np*k+onFqJ&^U6pns z>lI?EH;WEBAq(nqME&`c-Y^h=HZB}{Qveyt^gL3@CdTJ^519|JUJe9WN;|+LD`_7R zziA8mkm6Lb;CNR#A|`BqsjYUIy?g&AOF2_4&t|&hqAfSc&>8?K&bIpT?lzI0q_gne zvALq!a4F_aQ7~TI^oS0=D{FJz9`DAYz6bI(yg@SrJtS8jPsKo}ocGTqMNGTGNM7f% zB?BfEedZAjpHLEJofIYPuK#OFn}*H4Kr{aprv8ra40E_${Aa+U0MFaU7|5h6Fxew=0x2 z%vUIcGB5zzI89+Mdw;H)yRfvS0YGStz{-MzE9Ptm=!JHR4VD|9wQ3&9$xfZ_fV^tF z46#QMaEp0r`AVArcC6I!9*=OMdP;YY&tK=Y|E~FN1wmP{UM=5{+#P_OVG@oAM0?N% zQQv9P(JN<=F=(@h&!Wy)4yVk5MqpIq+!h1R8eeOrq1S+C$Hfq3vAs`+`7Qh7==ikt z;Zp~zfx>s#^j9gAiJUk1+;$6fGb26S{gpZZ{5o8uQ@KY&fU!K%)y=A$+?5PvXPMTs z7j1Ny0s>arX3$MXAYErd9mB~J3&Dx*`6(kmpIa8OyEC=5N@q-YStNazNsUidt_*Xv z_V$`O76ej=_7{7z2M%+}A*!mas&bDRz+%6xudx=B2DG!Fnr%8ZS>v*{0oe8FFj2e8 zblKpB2Ulsji0pz9pfmPKF%!;LS(%-ZpVOkxb^D;4 zV7%mZ2CJ3IHpjd%%d?VqHCi!q+%2u!575tiwa~!oO}Vn1{F8sZSF+ZmV;eFuPE^*E zCce|=(EOioC8yS&AQ*)MiFMzKad{7~9* z!*o&Ux{+F~GfK6wIiS?WCHHaVn}8;x4*;|mia-n{SfVAVbN#s&5|VyBhLfIWzfJCz z96B*;OwC;kG+Q9iJ=?(3Y5ABxabrAAJ_wc(VQK3)!YkQt1PC;_;I{0;XLj3reSm~* zdJs%x$Whd@b$|^&Uu(ZCjidQWY&}*A17X^Y2am$%Z0w`vVdGk~@Q;N?%1rSs0g<3D z@`t5ZyL_|qrU@g69wE`AYUu8qXq4I@ zXA6+n+Uo)3{D<^Oh8TfWROXJmH6!2a+Kbrn0o{lgMRx3p94$$j-a2w=y#YhVQt9a&6~p!rcY>t8rEN7oF8|vX%f64zo4x zy~|CD^X+11CKt{NkGwn16&kRD2g@ zCSPIU_>;K)+ccOYNX#RoK*%IX(ThdjZM25!P}MgrJNq%8UV7r|uyyrV8nBOr(MvVzve-a-_^y;!$RAD_X4K#=7a+=BWP{HLp^S2fSIMA^ z0w4$OuQ=`gRrN9F#eRw4CK)FmL?Ji*Yh$&=KUXV7<0tIY7oi`ft!8E1>lnuB$rLY0 z(zn14B`SMX;*h)70r4@ET%kL{Rezh~R(K)!aKAPBRSJ{6SYKZsJ~DXorvjD3avUY>s0jtO`WIX*QLGu%QMKlUI9pEp4!W@AM<2(Q=ccz~x$`neH zclD)jNl8t+jesyyYF!C`2x9v_Py-jyXj*tkY)GC2N4jMB-?$qPI!aV7N+QrY6X1HESg`UI?1RoN&PHJd& zZV%8m9}ue^jt2Dh!EbdSOkKNdb!PTwF!=r!>H2`TQOAcV&R-jGlE9?=&g}|;ZQfZX zH*_sIPf$Z2&?Ys4hfSw6%|Z3oE|L`z&Uv_$BZF>5OfkH41MSI5L_%|1ifZa#^%h1Eo!b!a-}lS1-Hm}-wt(y(ysQS!Q| zTQdYI*h?aD6*YQckS3G>Q|?u!PaF}rynKY>>oa^k^~t4(za50{7_WJ&-;S{}`z{=K zRXFW$feyHv*2370xmnqhn?};xBfTM0I-vR&^CRGSGcoMVR}-!gPR^FMwoY>kB3?+o z3E6kULWmp2pIC+A2c>#{$g|@``*bc43O61!6bk?Ia&TrZNS+o4Emj&H9;FP>Ig;CzD#`^Ig{n+ zFU}>NOb)-|X`?Ord5P;FK(vH0On}LSsYtz(ana@d7iuPD^e+8u31^f3EC!NZQ7TQx z7XJ+DebWL6j_NM_LB^_<=M}vqpg@oI#pu zrXvyy0VW}`n_^KU;38)Dd;${}kqk5o^(@dvscqrpu^b*2`KS-rH=iexkM}nprTKh1 zh{Rp(+n9SaJ8y`ZKPvr>%`7i*j5%|s30e>|gyo=bwHoU;tqXRXde>1N3?3U7!qs3n zuuY$=ufDk;mTSX{hK;OZtjmy*s{?>T&9b0eeU4d}Eb^toRuaBzkmK#yiD@roG=<9v ze6(5D$dS>&B~}1x9zT(syHG$H`e|0$M+(uoDbAc=Z&~8b4?)?uU68Nsd=9_-_BaQG zH7&?ol9>51a)ZRPdA{e@%$P<>8+ML=M4lBK??b2Pb$Nq0@+?5kV|S+9j7I$G!w;ds z9}3Kwvw73JL;CuVEok+5wGB%fY101bnXtT-N)wa!MTLMO5>JnTgT~-?C@Ic7-Zk(0K-j%Vm&7udlfJI~N7&bUi9piR3$C`5?%Rx(iP z#oveq4KYODpx6ldI{Y-!&T&W}mc_$Oq%P7<{od&yVl)7ux2k}ry$>2>wxFZj4*+Mr zsuQCZb=;{5o39KlXk44(54P*fk!RQfYQ^qr=XzKDMj+XBPQ7GlsZ}Tir)DuEB7Gp?#O`~ju zvf+VJ*+(+LaV)x%J5KYkBr?0vtXJWz93AY>rQ_zghl8>8?)oX$@%2kK`X60TefV8H zkb#I8NGKHcwW6tLk)oqtliKnofE4cy#iqpp_QqEe1X_L(yp@hY^sQ5W+$n+Oxy|t{ zu{Xj9e6wWQB=i7Ne%d6cE?;kiJjs}6f)n=*)vloM@VokKq@@nhIX|SEKf7^ZI%jR| z>|B6&WF)*CAhbxkNrAF0Uz20}M7|gP=>4h_LoS`jFjyeT`PvHAZ-j1mrLLnjy)DaZ zqWREU-1+Jq+pl0MOnX(C`qdUk-?6{Y` z)V*KJi)tQ(Qxd~nJWpfC?I@t(qegD~MOu=kr4H0@wUqv|`Tq8ElN3XXS8E)K0fQGH zui#U|1po8XXZvy?MGY5-m%+w)Z28T-%_g{AMnYTDpQ^A8w$jjh&ms>N8|O1k6taz! zorcZ#`F9u@Ogm|-0dIH(mIiL1M1$5e;qWcql8LJ#OxZJ-&k>$wavyr;gvs2B7$NAL``S~q#w zZoSSWJL5UP3wtX!f{iSk-1+nkyHN1rh&wO@k&^aannrI-YWViE7hLb%Gg1rF>N42B zz>Z3A#=lrTcjVf-n8egF?uXsPPRmT ze3|!#?|GQYr&eJ^7@s*3Aq+})yH|-cvO-jz4)uu)47p&kOf1>ay*w&fwr;(W_ocA>QBJ zvfB0aW0N|X2D(mfN|!mZec#r!LfA$oayfV6>!-tf$!PJ*Vuh2G+6cJ}9?gMTu3)m? z!x#ML{YWh2Staqvk>V}}GuI*)0q_eVYj`ola!GQf4?a6yIFev$Xd08KM?*VwX=HbESf#DVoP6F=n<%j)rlr(aU+0bRh*)v(8SR7r+LpmxN znpdxIN!t+^!^oc@Gs`?veFipurQQ}1;eW=ah$D^G9HjJG5-%=xiGNuHW$6y8Wa+vE zU0h6EylZV;K4^9uNah|%yAaOzTivVsT}1r4U)ho(zWP{B{N@wpbB;F6QbXGXv$@9t($k~+ z>k+>>pqe#KtZV6Js&+0^9JW$+2lQ461OT=xw=sS&v)$!ZzpMMCR+vTl=}cQaP^*G* z>wDEnIR{jRBzx#9kS-rbyUpAJrFjlBMh`byjX=#oN}8lD?Xby+=w+JEq1Uoa#j@Yg z$MjAB5(N9*&M$YAWZs|UPu1ER>D4>s`W!$qPdih+PrN;#Gff_+dxb`K)>nr6)lyW* z4^hP2^haa@4#vhKm5cVRcOA3JBF90;P313^=ZQgSxGnJyN`Oy)Bzk8Lj8cxaF5u0O7~v@F3>1`2O}33mx~T`_8B0!AwJaIx&@+Nrs@H;U{7cr$6L|mKM)agq3RbbAPV^ zN0z3ZH`kx!70+`3e*$5D3aa;>%~U?bYBiJf*cZWK(M3sA^fJ00&;kQhaTty_ zT?}HlV%J(ZQKRk-?d-P)jiuxs>z`KM@8sB&`ZO=5i=}fp08>OyEtoa}DsGP!2jBRP z@+AwoSkGkK%gsmL(AlAA#+R;vWbPDiZ2Fn{*@GtE`9L|}2P`#v&3`~f-ve-3Q?*g@ z$tvWviolypSBW`OTghwL`mkEZt4C0kNJGl1- zuyd?iKoEcD^Ic2lG;ny{UvKR`0A$$pU{1 z;7EhMmyOHa`N4-_B;(?m1^(wsc@9niemrBd;7ztooQB5Bj{xaF?rTf`{v3Gh<7BOqh`s|=60r6j4+7#2{dMUU~1T!HO5eQFrUt z&k%vu8cQ$#!32*dj)ARjXA>KmU3~epma1GxEz|qV!HhR7cVe5+bQ`1FxoHw9CN&f% zr{t<6I^&n61-IpibEqp>A0A9i=Jb<&AL~;AT}~kx6H~eZPZ0R*FjP3XBDS-$kGZ4p7w!FS^%{W+>9xhEU%LRb23O`qRB%p$6d%T&1+O?1^xMD65qXT84U zbw+{PTsJTo2Nkx>^BS)&_r&@3H5-dwHX9nPcC%MbE&M|%_+^tKBLbM7-iQw`lt0x1 z38m>7L9GJ+VtPZ0q@oe))ieUbreeVWTsLWV@@JX5%l-V$Tv%_w`S5B(*M6>;}4R zt8wck&iDRns<_KNptRo+4H(@e&mAqJnTw{JTKh=@qL3#a-yEpBsm`kg3R|NO-r@6C z=y4x7YO|uvSTDNY8NT=D?1;0dcA$=yyC9~{{ct(vvpQ1=QoikG_r?8|%3z#Y=x{k> zh7I8_n8|IJgC%s2)OLR+xtuVhEi<|qPwM!Mc6{Z%+Ec^g2>O58JIko3+Be)wql6A9 zH8fH(Gz<*}AtGha44uOe(hbrLDkUxDD>c;6A(B!8l0!%h4Z_gn*}QSi|NVPDo^{sw zaK5;7Z5^E1&)m;*-`DTDHjk}fT;mg7@?Nm1E^d-g{|qlRuiov^&UP>mSxd8xcY=Q+pgFol1nPZtQ> zEWeBYyjhj47FmiWqKYe|HbFl3iQa?R?4uj&ME_$e;5s9X6gfseX+^n$Id*8<(HFW@ zt}L;I@$X9T7B|k0SZ(-KT329~}X>F~rfPIaZM9*%& ztF0F&;lt6w+P}VV3ooE8j`q4Z`UrgiKB>L+(CX(Cim{q4#7@{Wir$?<9e+R*@R5uP5L4tM#&rQXVTW#wo-YT{2H zlpeey`voDtUXw7(+>3U}3$az=^s>9kJ3(DBh*PGe8LT4pO5CQQpSq-i)k9l1{R2{-;5Y?%zc-I&j|dowoU zF!QL9vptgVj`Q$>O&oVx+1~aeAkp?)-SQ6Ii^#l+?%1 zm=cbUIcn&7>R)Ybewy(=+Q5GU;zBG-C_sqZ{;eD`^u_rFIOp0|d{&d&98IfP6y%zw_f; zH?{~GtA|6=_*{jyw8n%Zq|!#Z_P`HfYTGlPj1ft2rWU=oC|(n^n?SlwmB7?qscB_& zxvf*KyDi*qu20E7LWv{oW|t9b$~#=7p0(R=nPGk5EPT#x~YBQ{brh2pngn zNfYgevuE^Y$^AOW$k_K!zKxW&rXVL{rV}XSB(eCBB!83g%rRtsp6z&gLB0!m<0i(S zv$IW5BvVjPc9q+`ml6rKuQgfxKo#EV;Ijzcxc$V5Wv}Je#o(2v;U=m>0!iO}fv6f% zoTtZs<@MmM!I>ktb2(l!S9~^x`s>MpjKk(7My$nVEn;buScmQ_QS;}wAx~@Ls#wx} zWUtADt!)&>4W1dww+`EU#=WUC)`t6nFAqF?Yb`SK@i0Z_g7_JG)RHmedxsPKqT=#r z;q14#D%9Ph2I#VcgEay{rV()z(l&P_IP4Om|r^HOWX=wsKl^dXPi|~B{VY`dIFQ5@>t@SBO z$Hga}PP(^AbYiWlX1tv$CHEGD_|$H0rD{hM>Q5efr9P>*+GpwgDm&=mldJ+! zYi`&oB(U2&OcpI`v1_c@9;$f>wz|o=GeSUklC_@<-3edz{I<5hVCYAGK)puiF41^h zM}#n!KL06)!TOHN$*-K7zTJm&{=Xa{8&pWYKz$Xby~PUI#q+P1W7aocVE?HrN??u+ zpst+jR`613`t^l_*xJ1CU@aB#G}!X;3RmOFsxD96DDkGVnH|(4a*4a`5jJ*x?D?vz zp&EHj9RY+V!H#=W7yHh~`;8s$;`vfqYc2}YW@`_~`8g-MMAtOFY;Z!?rN7>VG%x|V>_J!R%JnV>zsa$P63&<|5L!WcV3v}-Xx0g!aqQB!sGDdXs2 za^->`!?zyVFBcf7aP`%Hxq9HJbR>$}(qcKDFEp=qKKZcUY`puL$VpM{=u>AzEVeuT zX-YG|COpjl`cS?Zm-{TWm!_wG3*O8sWM^S_8F}H}W53yN!RMzG2X2M0pc>nP%(8RLD-gdlQ|00uy;a0TmyJ}Y4B*JU-O%!=b*je*xm3w^=l$>RV&Q5Yv6^$o#Z2W9VxfWIQuTKErO4yC* zMU_VZ(rQ6dEBzza101_nGn%C89JJ&u2G|&An(HA)Dsc_&Z#tG$VEI(IzKcfAxKPF( zrN`K(5j+f#7pB|S?`zoLfE$)6l<4lhOIT9K00h1HtG zfMq(wOlZUo+lDv9cv9VvFbrtryfRJ`_ujjO=ub)_?WTajl;=Ptu`kMbi@R7Oiij-A zX_#uin&iDVEbJ9gLN%cJh7iYT|ZCu=;ugV^ZP>`1GlBo15ezf`XO}VyNoN-&&OQa z7!18X-jjODu$Qx*S~_~@;24H|qcCcuLT#7x4acGE`EX5%XFt7i0}#96rkj=&oRS9h zDbg8MyBiPBQ!x0Du5W1zxp{tS=gJ)_JCWMQ&1K;M%M%%HQ`~(;KRXMvnEc-;a|aCD z=j{rv?UYCTv6IV;g&hK`c3v}OWMd`wp9^ut+en#22kbh!I4GvM8Xe$+Ny!=7Y_dchEWU+ZHX z;5;}g$Fk}@WgRPk{mJ+Wib3&FLmBzj_HR>$G?bo9&4Va^Rsfa!47n22NK=zM1932OgbSPR&mW2^s~t zu*1vpoAb}0Fem!qxuOVX$>RN;35%&CP1sxQX;c0?b4iy^3*(Z8>$8|vH0QMLs`=TS z{?%gteXe@e+Exg3*K1a{e!1bOaEcwgl-xNkce!L^UW|?Yv-l-*8b`1(bk<_Mlxn)9 zF7x_2g(KB|exQolYIGiEyg^T${MH%sjfy7KQ*xQhl?@SGmDn?`Ff2UIon|B*%R9OP zd`8$_6woUJN8v$AWO41&y5%4)Kc-zyo3sH5$?ww(36r(H+h`-J#6tc@mg&Ze z5}udWXb<+?_1 zF+s#^)YG8u#SGa_{}FWOv$fribZ3u$?sv}%=|p%OINID7s&D6_q_T=XZu+QORycp` z!S_&$B~tvgk>2f}KE|&A`bqmmigSNe#|O?{S0PzOO|_6)WqV)!#D~w~(3Y7)3HKdz zPH6?+d;1C5s^5gPvCafx=3hD^Zn9nUgwuzZN~*n3bcsLy^mTXDr~Y-$_#xo(w0(-_ zM`jSkoj0=fY3h7w-paRAW}tm;?hm@7S`2UFLrw}ZL5NCTdDhXopcop<&6e)sRyTz6 zfUz+8rFNB^#$eYL&kMdNuA$b7KWmArVV2L`tD}qQb zb|J~kTn^UTmuFWDTAB|IetrL3oY49;-O0DFvP1ZFy>P~yc%^mv0{rC2wzmv3g=dlZ z0R9f)=b)R#n<$n(!iY#It}X8;fE=ve=~-}IvN3pSmdln1HIja~de-|rFkPQxtHasM zH}Fv$QPz^@u(Q|wAh%JHh%-LKgo`g-R@PC*8k2`m`!cBOP0eLO^pb_AP$zEEnqGS{ z2wki886J;fU;`@3pB>qSp2c2N7W$d*c9gsz-8P<)A77Tml$pZ%smCWZF9!T!Q9K7= z0%^BL|51OnmBlx2L>%VF1Q>z8?DjVi3N_cn{%rbkW8yG0trXc<7(vJyO3f^j!~4@{!Ywm zK;{&Zo$!q3QEOX5B-lhl*(a2ofi6?{4v0_ng<7JH==eYbxhX;Nt6=dq%E1t66%rl) z!h1GRYRs8(3-|aLs{IG4M?3#WTy# z336W}8m+XUu>KjisFOXP!Qs%gAe>y2ccQwAi_vn2i+s8+15~>O=bsJJI{h@q6c%oG zRmyxVL-`QyHdP%S9a?|69U;7hKa6V=P#=EyLPblNA%(oiZb~I=v1QFT$M>^uJkiHT zdS4o&^X#)JxyvpW^vVMcVr3P7aSeu3BQlFS3icLsp++kq)DC4FEw}#|T!iPhIB!)T zKD+27o)_3#4)AOpCn+u|qouKpP+j(ML!;Ql0N&%fd-sZ87j6iER$t)n;oA+Rz3{vD zKJ-SN|pU{{3ZbC66bOX4Uu=_;%GM>pmcBUVykJQ2x|*kN8QL>viA{ zh6{oE`gp% z{%;U)48XO+FNuNpkpIs131kH>MQIER{{DiZ0K}+|Rm%R2P!Ax!%>rBseiQpUqW)0= zK-AyM;r=hO{~zLAKARZ0#QM%9`nMOn-+%pa>)1Jn>o~Sv;PqO;rBtnB?YcEn%`b9@IBzKEjeM+ z_{}i@ki-A~R{i5a_`h_k?(-4@Hl+a+5T`H&n6`i+fXN|XoS(WvSND4PYwDa=##o=! zTao}PTmM=fa0LI?D#(ax&3+KH3FKc?UAfG6JAp_b3mNZ2(iZ;aW77seU;rOgcO?T5 z-rVe!A_VAk)_}v-`PRsm(@d-z*>#l7__*@C)Cx!&M>V`8~k6( zek!f?3j4kiEmQ$-+7*5NC>UiPU6uLjEB9ELkzAUL_g_j80R7HhDbn89v^hI~q()vr z(b4Uw+gk8#xr6V|5t|d`EZw1@gx)^_i8g_$;|(Wx|Axyxvc4doWW#c1<4ni**Jr5t zIUm$KIjA^i+&ay#|0ZH+t-g2Vzl;7H|4d;&mzQT>sBJEm?@SrqhFodlVK5i>sf+d-_ zo8Y!1-0ro%ZKeDK2@48Cw+@*h+A;c*69`nLroMy82z7DwN?~b*#Z3dV%F6?NeQAHU zxA;?1pelz7c9d$FsN32)&f$|sM;vDd|K;Y%z943n2lUP?qU5=`i*0ul0Dlv>8{^ON z)=a;VqU$Bz&{Sf$gTD@_gC<4VWvDN*KXIf4oMsFw%$0AI0SPm&7Gr+cHtu$U!!$L5 zE%c|zr8bQL#&_rMHuiHW7}fDOc@0D32i;os5@tg&qtQZZ>-}q7r?@Dj&?OBL)yFQ|VTP#n`7P zy~;k>QTK=oUJ&xAbS*Ku2NkmgV4WyHX`KWJ?5!*96m1}%Q<{u_dbGpjHKnH~VC<{L zb|uoqFv-m_0+i;JWPpyrb|V z9B8rBG6UA?wlmq=xqWaw4OLrnKr1NZ!~nBibe|k^%c`yG_qF|G=-5_{vK=x2BiG2G ze#6&Mn6)&7q7X%crRqo>vT3XsHR!5uJVKe^-7$5Es)(5mSC`yv|1o?YlcW83tnNDV zA(!>qWG*L&ZHvY9N`!5g4+W3mAY}^^t}+Wc*^7>4F7`(bfr+PaMr{oy^eO=Y1>k{? zj=#h*YI`XHawhlLXqg|opgzlHneP@n=QXAZNTuPbHGWAGO#ZhgEzpe}xmJ)ibtT<> zBRt-AZ-E2V#9)audbh|n|r>f({(9{^;I&?G)!h8G!`_bOM14)PRnJZ-j3BPge2(My8LQHloHkWipVe{ZW8QesW4!(FmNNG<`cPBk)&AZjJJACDg}#;b#G+juEB(a zaD9q+CCOV6PjGJjcOeE2Qa?R&NiPL#*AN_puW2MM+NhgvN!HfIu{;V5CU;YWN>Dwz z?FZ=nBy1VPios?O7?a8YHqA7V0$S~>XI!S+Wu-u9Qz^pD#zP;0Y06)-%)$>0d@2}^xD zbG-F_FH#2U=Y?Vu*yk|R@{xhHFjIXG5IJlN^;|XpfA=jh9QMW2hv1+iDjuB8eFcDV z)2x#|AQ+0)Dc`XXpz5RBBHa@hfMLqKp*em0_U^_y?%_z*WtFBefNCA47y=Xr6i9*l zQbMS?a;DQdUtBqGqsz6^zi-Zjad6L~ck_7Azj>ecS?co#r(Do13S_?1y8NFdI?#*?_Ddov&l}74wZr=fb_Omvu}6Vmxo(iLRvsARfB$j zZ%K@AeZSwqZ$#auQhh2gnw+iu#31QA))VTo`t65a-)%mlpFpNk_~w;Lttgn~?x!>} zyGCGFBX1o`SDV{}+8slgTLdAHGnY{F=>n*ioe|o{P96N6$4SZn)oIDMl}S87i&~Av zBF1uSraqZJbe|$Ogm#_Ytu!jzl=+@CnyBA>UCxaoYDHJmY51AA?tJBY+SHskqrLZJ z!aDi=&TObRi;vsUTs}HDrA0I$Ry(szU$(9gi)tk%UzZI1qpDVNj1e-=`xy4Ezws&E zb?T2lj85qkl#G?N6AM6bRE;zt{Tr#$hZAN9fbAe%OMk+{-;$svxbw%sPyN$k5%pWJ z{FU21N+s;ZO|QEy=#Fyxq3EZ$sC@bCi@#Rn#vL5R$1U%QAy4(+5X2$@51ULQ$I9ER zbMv<-ezvkk#W2)MX@3!_^7J^5i)DU)n`k$o{?I#7XfJZexI*~wSk6}KfoGzcieiIx z%f%tQ;s+(nI^4-1H<{mP_Sr24TmP#)p(oy}h26JgF7^yPZO>M0ze)oZw|ov3sG3!b zeXPX=6Y3?5rO9|Yk!eO^RaTY54?~PFHGRSG8KTW|3haBz@TmJLMti2m8wg2j?l_3} zVKbpJvLYBzl=&^X(fyC{G(85gY1toWVe%UAElMxp$;B;i?*N8B4rl2FxP|YpD@p}QX*GM41jV%b zG3%<{Is<%fQ+X?I!~s%@b%bh1u?xFZa=bIq3PHxTp>Gy~M9gT!rTGxM-JIuXT1n_-9&0#zzM@@w%Fwlk^V`u;BPi`^EO ztV_E4t|SGM;!Wa5=QfY%k@8S}4YyuO&RWIc+J50_u0;a>>7A^e4UyH#=uR0KVS9^# z`DwFQ36A1Z%zS&6u+;!5PkRSi$2e?=U(x55jeYrJEMiUl20ex;J~gUz*atX&5cgO3MCLArXzBs6-ujVrS!pA-*Ir4!QkDSmw#@IK=nfGcNxMhm56Z2yU*{`wZh)&U z><{fk{QBlmtl`7f*e70$p@T*iSk6sE**=|}Gqt+PEE&4XYm75DhXhvMQ3QTeh69&Jtv*HZp0<*pH0VJ1&4izt8fN1TTfS!u|85McXR3EMe$ z#_4re^tuXx`q^efBk-V^-RuwNHa=Fd@9rDudS$Mtp0cV6uPeXr9L616>;nctpkfbv`qb#9Jys{u8hXWfeIa)cM*JQH z=JPBN8fel!ht<@gDgRke*(K%hm@QLlge}fuPd?T8>k`|J4WAUzn0NLran5Ey{?T!P zg!%4MhmF+}Az!&u-aos#Z@bq8^1~0Q5Z`N>4@y42O+ew2FwRdtX7B(ELSb&o(jBpG zLJP@IT=ZJ7gW4(z${j4uXh_3w)Oau6iw^YufVxYDA$k9``leNa29?hTvX|e-3cZ?D zh$s4!`OBTKR8!vr*^19PrKZwPWlUI8n2wRME!l7rLbW8d2v$bRTCS`t4w&rEu~=x&Po6{AQB~|50ieF4fT2$C`GH zDaSw~N}6^q13VES)Nk|QQ;rXTQSlbXOy%o`Ni~h^wa$Csniotldx|0v8J*m;-x0%k z$`9^ir822CFzJBNhBNw>rKpE)Te|Xct(Xw?5HNzpZqWqtne9Ji@cH?cQ>(!mh`Vv(IWSYF=(2SeWG{aG;&&R`aQnBh7)i#=0 zlD z*5O!^zojbmdd<A9PtZCRuLnG-Kpa^Qb30Uf~GEYL#d}5W)Dg` zy)oiO8X_CV#fS|RnK^d+P4ZqUbg=yX%r}RC82a?^2^RF^=7UAM(Et-IG3(s+(d=YI z#Xck2ek}j+xTtqC$>soMzWeHIo726zC(Pb~$EqI*Bx`+58c2upV9FjVI&N%nqrcgE znJSJ|l3mTwrSdDL4QcPN2X;E2G@3AyOf*LQz?g_7NSIPV66j6#O8k1%L zXI$DX{j6wm5=9`?#?I+npC_i4rvKGk|0@=Z1a|Y-j$0L2JT;VxXGk6TQ<(1e6qGzc{ zbfzHvo+%wp&T*eSz;i^TG`FS;X+sXzyo-(6BxMq(PBjMIy>QUHYY8c}b~%U|uMopw zD`d%It%e!vR*elQTTcCHe>43dc>F>23Djjf1LgYV?U?gEF}QLo$!(miC$bElH1&tl zj(JP7OXS6V$E+SCn7Qz84<&B@KCe3q^snF1zaX{U#H zX&_a)t#BrJ`Kbzg2+zmz1%w^&$$$i4m*>EUD0FA`C!ZI2({lwS4Q_#y#mKsVt0~8r zuFpMsjn8rz0xWfu&W?o{Yz2U3wH{b+IdkPkvr$sJ;`^o^MO16iIf0(PXx)2;*nybH zDryA|&_7Qqj{}$nw`q!bNFaJxVw011yXj~ag|=@Xh`WXwqU`aWIX1tW>B;ZGisbEe z9I+DJ^e`!Tg2kWL@=}}hd7;&MdbYe;l5ZDD?P5)aLlP95!XHud_Z@KtWg~u;$N560 zZ$D48j$$R(jWY+}!RyWsXmzp;`|q7Y?0bIP+-@uHGV^}UVn3^RzL(rGomX0VmoK_r zsN^PS(AUgkXvPQ2>vm;w-_B9+&cVuY4#*$UR@0NF+jn2k-E9GWHL_uJltpQF9`eT0O zX7*O+#Egmv6Cf%aQ0MSiG`q%vw z$m4TiD<~=nnC&~8ipgX4hMCpCSZ9!JtuZ_pwG6xRet+^t>q%?6pW`M zf2S^g?lO8lv4%$7+2r_ScU3o4O8xaC>H`rgx2n0rS(MA-$`&{^ps`qu^IQAHCKr8WCOnH zgL&DDx%n`4wR<}WInPPPy{W!FDSNlwh1#DS+OtqO%Kf`@V2A<+{Z|cr*kfVqHc2ok z@sOHvAX~vJ!GK^5i{N1+?ONICe0OMahJ7bm}Dy<6mt3T&T9_x@$tw4lb)Seoj~c0nf*n?e1;msY{`raX&~7bX^0;nb(kCRJ zHAgR&?EKY{F{E8X+@$i&EAe+)Ana=}vFQ?s3GYawu~29n&inxkeLF+Odpcms)puK` zB-$fHWmYx#Y_AA?Yf9`_#chUhvssbW*Q&*pLsMEsf9~e)Wtk3(XQPw++GG_3@Lxu) zP}z3*@Aggex6-8T1GlP1?}LR*NWASVgUFcTA$wJ(_N>M$Q;n%4TPKA^l@@UCNjx~T z>g+8+Ivw2@gVVkMuu;Yl^}2LX#nm&LgSd2(#CH*EiJ=mVL!G9II^HBYrE6s(yW@_? z{+QRe<7A}CWK6nn5}aO9u40-*w@k>l6Z2=HXpwUNxUq9f5!4ATw2*883(#+#&6$mQ!f;65Ph zTE1`=?DLyWth@na#LU(@&DM}SRMeWGWPvNJd)zVhvh*FQJiLXRR!Q|)!bQDNpjjog z8Q5Y{%TtjA|J*b73LH%4%(N)ZUFsD&DscWwZyA%r1^P7jYH@*V?nQ7B1o2F=0*K;W zQQVD82EmN`z!^YNN_j2Uj=YsOFYjT}p4(IB-FaD1akw%*M3G^@S9rDKMkm6i`s0dJ zQ$UFdo#|UGeq;pRo0nZ$q{ub6x4G;W!7oJU1bx2Bj8675F!F6dVn~~91$>^>ccd^=_FQxm{qad<^5q*CKa;wU}0TN zwzZb(NKx`Lao7Ou0K7*hdJTx}bchyn3eg9KO<*jQ$ILS!yWn$b%@^`5^s2a^Rv1Y5t3oce$6wAu!vyf&L3yPmHI2cZFr>jbfjs@by z7AJv8QPk{$4v*gH>0TdFV(K3R5=7?0HHTSqH~3z0Lp(v^GJ(WJ9u|m!&mJWdY%zH% zJ1!Wd39pprqWsWFT9r>zFkX)(@&??+usP=C#H zDu;dAC8C$GZ(OODZH5K}6KR%lPITCii5es2e{Ck!904S}xk=yiWnYFvZ#@5Cz45K| zFhP4EQfw)LGm}P|kha8pSAD80TxW^~g8a%%33J>+%*Osa`?;|=6OPPh%R$q~okg_OH z7FuiWk6*iwzo@B8)6?o&p!4!7z2?l@Qvz9~OHeN-9=V6@IbvRo=USDVH-8hQzEI{N>a#= zH@#rCsa_7XbQ;)2kQjZ@-9?T@UmWg76d z8-(EfNE9J!lBkR$5I|Zr(ss(wXu-1K8s=&8vht!&c#!n@E^&~JR(p^(X~l8=<}ZM? zxRfLLR{|tJg{(5;>+})l^hj%pVM;TBJ^oIdRt4krs24(eJ*V{17)zk7DI1~6f*gNk zRefIY^g4+tszX%rQ3?ezW1f4R@n3vKHVMW3{arnJS>IUeNdneXN-591r5}=gUz=-h z*DSrBCP)}RPh$W7NXnlp>i-oa<$gc@X7|x$rxz&=g6zl-Z8xN%u<+@B1K!l%3&b%i zLAQ_C9ehZIZbX`?Xnq8X+J2uBvLes)NIwAk$CvodE9#%^=Ucq~Ch=Dl{?A_xgYVBI zh3U@J)}Y_~F^+~GT^4^gOr}B}e5par6J=2HebStGw(0uYGr?TQa2=wXUsXDn%Jpas zcz*cq3;ZL4ekBvcnjPHZ*r$#n*$ZD%`5(3WAM!|25T|{EJPW!Z_2JWyHt|b#(#9P=8{}Ya3dT`z}1EG(CCts-GC;q-aqEOC;eZN=yuC_3sSP5sHtNvvAVwcq%vWt4i{olw1fMW%gDg=y% zYWMkkOOo}5uSt~In3ixDkKk<7{P+I`V8N<50D@{P?+@g^zHEQ~+^J{){z}Vv`P3?ESf2WYbfmBn3>iZii|NUvoXZHh07K&Dn z0P?Sb_-CPdf5qIqEoh_ojWn|s2Iwk8s20xe*{c5s-|> ZlXEJpo-%tM0#~jnE2znrJ~V#)KLAt<*;oJo literal 0 HcmV?d00001 diff --git a/dotnet/versioned_docs/version-stable/actionability.mdx b/dotnet/versioned_docs/version-stable/actionability.mdx index d12555758f3..62de3c36f0a 100644 --- a/dotnet/versioned_docs/version-stable/actionability.mdx +++ b/dotnet/versioned_docs/version-stable/actionability.mdx @@ -5,7 +5,6 @@ title: "Auto-waiting" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/api-testing.mdx b/dotnet/versioned_docs/version-stable/api-testing.mdx index caf826b691c..53f8f232501 100644 --- a/dotnet/versioned_docs/version-stable/api-testing.mdx +++ b/dotnet/versioned_docs/version-stable/api-testing.mdx @@ -5,7 +5,6 @@ title: "API testing" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/api/class-accessibility.mdx b/dotnet/versioned_docs/version-stable/api/class-accessibility.mdx index b989859c06e..be54f8d7c9e 100644 --- a/dotnet/versioned_docs/version-stable/api/class-accessibility.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-accessibility.mdx @@ -5,7 +5,6 @@ title: "Accessibility" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; :::warning[Deprecated] diff --git a/dotnet/versioned_docs/version-stable/api/class-apirequest.mdx b/dotnet/versioned_docs/version-stable/api/class-apirequest.mdx index 5af8dd1c77c..01989086592 100644 --- a/dotnet/versioned_docs/version-stable/api/class-apirequest.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-apirequest.mdx @@ -5,7 +5,6 @@ title: "APIRequest" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Exposes API that can be used for the Web API testing. This class is used for creating [APIRequestContext] instance which in turn can be used for sending web requests. An instance of this class can be obtained via [Playwright.APIRequest](/api/class-playwright.mdx#playwright-request). For more information see [APIRequestContext]. diff --git a/dotnet/versioned_docs/version-stable/api/class-apirequestcontext.mdx b/dotnet/versioned_docs/version-stable/api/class-apirequestcontext.mdx index 7aac00a3fc4..b583a1bf242 100644 --- a/dotnet/versioned_docs/version-stable/api/class-apirequestcontext.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-apirequestcontext.mdx @@ -5,7 +5,6 @@ title: "APIRequestContext" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; This API is used for the Web API testing. You can use it to trigger API endpoints, configure micro-services, prepare environment or the service to your e2e test. diff --git a/dotnet/versioned_docs/version-stable/api/class-apiresponse.mdx b/dotnet/versioned_docs/version-stable/api/class-apiresponse.mdx index fe29aa32cee..d18b3c8497b 100644 --- a/dotnet/versioned_docs/version-stable/api/class-apiresponse.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-apiresponse.mdx @@ -5,7 +5,6 @@ title: "APIResponse" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [APIResponse] class represents responses returned by [ApiRequestContext.GetAsync()](/api/class-apirequestcontext.mdx#api-request-context-get) and similar methods. diff --git a/dotnet/versioned_docs/version-stable/api/class-apiresponseassertions.mdx b/dotnet/versioned_docs/version-stable/api/class-apiresponseassertions.mdx index bb51496e1a8..b003204b53c 100644 --- a/dotnet/versioned_docs/version-stable/api/class-apiresponseassertions.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-apiresponseassertions.mdx @@ -5,7 +5,6 @@ title: "APIResponseAssertions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The [APIResponseAssertions] class provides assertion methods that can be used to make assertions about the [APIResponse] in the tests. diff --git a/dotnet/versioned_docs/version-stable/api/class-browser.mdx b/dotnet/versioned_docs/version-stable/api/class-browser.mdx index 032996c48f7..170d2ad2ac8 100644 --- a/dotnet/versioned_docs/version-stable/api/class-browser.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-browser.mdx @@ -5,7 +5,6 @@ title: "Browser" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; A Browser is created via [BrowserType.LaunchAsync()](/api/class-browsertype.mdx#browser-type-launch). An example of using a [Browser] to create a [Page]: diff --git a/dotnet/versioned_docs/version-stable/api/class-browsercontext.mdx b/dotnet/versioned_docs/version-stable/api/class-browsercontext.mdx index 774212a731c..7ccec4d86a9 100644 --- a/dotnet/versioned_docs/version-stable/api/class-browsercontext.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-browsercontext.mdx @@ -5,7 +5,6 @@ title: "BrowserContext" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; BrowserContexts provide a way to operate multiple independent browser sessions. @@ -118,28 +117,6 @@ The order of evaluation of multiple scripts installed via [BrowserContext.AddIni --- -### BackgroundPages {#browser-context-background-pages} - -Added in: v1.11browserContext.BackgroundPages - -:::note - -Background pages are only supported on Chromium-based browsers. -::: - -All existing background pages in the context. - -**Usage** - -```csharp -BrowserContext.BackgroundPages -``` - -**Returns** -- [IReadOnlyList]<[Page]># - ---- - ### Browser {#browser-context-browser} Added before v1.9browserContext.Browser @@ -1042,36 +1019,6 @@ BrowserContext.Tracing ## Events -### event BackgroundPage {#browser-context-event-background-page} - -Added in: v1.11browserContext.event BackgroundPage - -:::note - -Only works with Chromium browser's persistent context. -::: - -Emitted when new background page is created in the context. - -```csharp -context.BackgroundPage += (_, backgroundPage) => -{ - Console.WriteLine(backgroundPage.Url); -}; - -``` - -**Usage** - -```csharp -BrowserContext.BackgroundPage += async (_, page) => {}; -``` - -**Event data** -- [Page] - ---- - ### event Close {#browser-context-event-close} Added before v1.9browserContext.event Close @@ -1262,6 +1209,56 @@ BrowserContext.WebError += async (_, webError) => {}; **Event data** - [WebError] +--- + +## Deprecated + +### event BackgroundPage {#browser-context-event-background-page} + +Added in: v1.11browserContext.event BackgroundPage + +:::warning Deprecated + +Background pages have been removed from Chromium together with Manifest V2 extensions. + +::: + + +This event is not emitted. + +**Usage** + +```csharp +BrowserContext.BackgroundPage += async (_, page) => {}; +``` + +**Event data** +- [Page] + +--- + +### BackgroundPages {#browser-context-background-pages} + +Added in: v1.11browserContext.BackgroundPages + +:::warning Deprecated + +Background pages have been removed from Chromium together with Manifest V2 extensions. + +::: + + +Returns an empty list. + +**Usage** + +```csharp +BrowserContext.BackgroundPages +``` + +**Returns** +- [IReadOnlyList]<[Page]># + [Accessibility]: /api/class-accessibility.mdx "Accessibility" [APIRequest]: /api/class-apirequest.mdx "APIRequest" diff --git a/dotnet/versioned_docs/version-stable/api/class-browsertype.mdx b/dotnet/versioned_docs/version-stable/api/class-browsertype.mdx index b576416d2b6..9ccd0f5dd15 100644 --- a/dotnet/versioned_docs/version-stable/api/class-browsertype.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-browsertype.mdx @@ -5,7 +5,6 @@ title: "BrowserType" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; BrowserType provides methods to launch a specific browser instance or connect to an existing one. The following is a typical example of using Playwright to drive automation: diff --git a/dotnet/versioned_docs/version-stable/api/class-cdpsession.mdx b/dotnet/versioned_docs/version-stable/api/class-cdpsession.mdx index 5ebb93bc6ba..fcf218add1a 100644 --- a/dotnet/versioned_docs/version-stable/api/class-cdpsession.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-cdpsession.mdx @@ -5,7 +5,6 @@ title: "CDPSession" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The `CDPSession` instances are used to talk raw Chrome Devtools Protocol: diff --git a/dotnet/versioned_docs/version-stable/api/class-cdpsessionevent.mdx b/dotnet/versioned_docs/version-stable/api/class-cdpsessionevent.mdx index 2db7f37d770..018340872b1 100644 --- a/dotnet/versioned_docs/version-stable/api/class-cdpsessionevent.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-cdpsessionevent.mdx @@ -5,7 +5,6 @@ title: "CDPSessionEvent" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [CDPSessionEvent] objects are returned by page via the [CdpSession.Event()](/api/class-cdpsession.mdx#cdp-session-event) method. diff --git a/dotnet/versioned_docs/version-stable/api/class-clock.mdx b/dotnet/versioned_docs/version-stable/api/class-clock.mdx index 713c7a0a2bf..ed4ad039663 100644 --- a/dotnet/versioned_docs/version-stable/api/class-clock.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-clock.mdx @@ -5,7 +5,6 @@ title: "Clock" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Accurately simulating time-dependent behavior is essential for verifying the correctness of applications. Learn more about [clock emulation](../clock.mdx). diff --git a/dotnet/versioned_docs/version-stable/api/class-consolemessage.mdx b/dotnet/versioned_docs/version-stable/api/class-consolemessage.mdx index 424a5880baf..d468abddc16 100644 --- a/dotnet/versioned_docs/version-stable/api/class-consolemessage.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-consolemessage.mdx @@ -5,7 +5,6 @@ title: "ConsoleMessage" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [ConsoleMessage] objects are dispatched by page via the [Page.Console](/api/class-page.mdx#page-event-console) event. For each console message logged in the page there will be corresponding event in the Playwright context. diff --git a/dotnet/versioned_docs/version-stable/api/class-dialog.mdx b/dotnet/versioned_docs/version-stable/api/class-dialog.mdx index e8f598a308c..0c239aea28b 100644 --- a/dotnet/versioned_docs/version-stable/api/class-dialog.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-dialog.mdx @@ -5,7 +5,6 @@ title: "Dialog" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [Dialog] objects are dispatched by page via the [Page.Dialog](/api/class-page.mdx#page-event-dialog) event. diff --git a/dotnet/versioned_docs/version-stable/api/class-download.mdx b/dotnet/versioned_docs/version-stable/api/class-download.mdx index a3cd0571e21..1ead454fc71 100644 --- a/dotnet/versioned_docs/version-stable/api/class-download.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-download.mdx @@ -5,7 +5,6 @@ title: "Download" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [Download] objects are dispatched by page via the [Page.Download](/api/class-page.mdx#page-event-download) event. diff --git a/dotnet/versioned_docs/version-stable/api/class-elementhandle.mdx b/dotnet/versioned_docs/version-stable/api/class-elementhandle.mdx index 247890d904d..406f1bb3a5c 100644 --- a/dotnet/versioned_docs/version-stable/api/class-elementhandle.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-elementhandle.mdx @@ -5,7 +5,6 @@ title: "ElementHandle" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; * extends: [JSHandle] diff --git a/dotnet/versioned_docs/version-stable/api/class-filechooser.mdx b/dotnet/versioned_docs/version-stable/api/class-filechooser.mdx index e9efa17d517..df3ad9642ab 100644 --- a/dotnet/versioned_docs/version-stable/api/class-filechooser.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-filechooser.mdx @@ -5,7 +5,6 @@ title: "FileChooser" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [FileChooser] objects are dispatched by the page in the [Page.FileChooser](/api/class-page.mdx#page-event-file-chooser) event. diff --git a/dotnet/versioned_docs/version-stable/api/class-formdata.mdx b/dotnet/versioned_docs/version-stable/api/class-formdata.mdx index bb1ff1ff8e6..7419df2b6f5 100644 --- a/dotnet/versioned_docs/version-stable/api/class-formdata.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-formdata.mdx @@ -5,7 +5,6 @@ title: "FormData" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The [FormData] is used create form data that is sent via [APIRequestContext]. diff --git a/dotnet/versioned_docs/version-stable/api/class-frame.mdx b/dotnet/versioned_docs/version-stable/api/class-frame.mdx index 2f9d8d91b31..3b49f0a7f87 100644 --- a/dotnet/versioned_docs/version-stable/api/class-frame.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-frame.mdx @@ -5,7 +5,6 @@ title: "Frame" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; At every point of time, page exposes its current frame tree via the [Page.MainFrame](/api/class-page.mdx#page-main-frame) and [Frame.ChildFrames](/api/class-frame.mdx#frame-child-frames) methods. diff --git a/dotnet/versioned_docs/version-stable/api/class-framelocator.mdx b/dotnet/versioned_docs/version-stable/api/class-framelocator.mdx index d9574aa8ed2..df3f9feee08 100644 --- a/dotnet/versioned_docs/version-stable/api/class-framelocator.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-framelocator.mdx @@ -5,7 +5,6 @@ title: "FrameLocator" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; FrameLocator represents a view to the `iframe` on the page. It captures the logic sufficient to retrieve the `iframe` and locate elements in that iframe. FrameLocator can be created with either [Locator.ContentFrame](/api/class-locator.mdx#locator-content-frame), [Page.FrameLocator()](/api/class-page.mdx#page-frame-locator) or [Locator.FrameLocator()](/api/class-locator.mdx#locator-frame-locator) method. diff --git a/dotnet/versioned_docs/version-stable/api/class-jshandle.mdx b/dotnet/versioned_docs/version-stable/api/class-jshandle.mdx index f3707490794..b289757ebad 100644 --- a/dotnet/versioned_docs/version-stable/api/class-jshandle.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-jshandle.mdx @@ -5,7 +5,6 @@ title: "JSHandle" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; JSHandle represents an in-page JavaScript object. JSHandles can be created with the [Page.EvaluateHandleAsync()](/api/class-page.mdx#page-evaluate-handle) method. diff --git a/dotnet/versioned_docs/version-stable/api/class-keyboard.mdx b/dotnet/versioned_docs/version-stable/api/class-keyboard.mdx index c82c326ec81..29c525e9cb2 100644 --- a/dotnet/versioned_docs/version-stable/api/class-keyboard.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-keyboard.mdx @@ -5,7 +5,6 @@ title: "Keyboard" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Keyboard provides an api for managing a virtual keyboard. The high level api is [Keyboard.TypeAsync()](/api/class-keyboard.mdx#keyboard-type), which takes raw characters and generates proper `keydown`, `keypress`/`input`, and `keyup` events on your page. diff --git a/dotnet/versioned_docs/version-stable/api/class-locator.mdx b/dotnet/versioned_docs/version-stable/api/class-locator.mdx index 46d4d580d63..62f77c78daa 100644 --- a/dotnet/versioned_docs/version-stable/api/class-locator.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-locator.mdx @@ -5,7 +5,6 @@ title: "Locator" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Locators are the central piece of Playwright's auto-waiting and retry-ability. In a nutshell, locators represent a way to find element(s) on the page at any moment. A locator can be created with the [Page.Locator()](/api/class-page.mdx#page-locator) method. diff --git a/dotnet/versioned_docs/version-stable/api/class-locatorassertions.mdx b/dotnet/versioned_docs/version-stable/api/class-locatorassertions.mdx index 07979a6c83b..5d69ecf63ff 100644 --- a/dotnet/versioned_docs/version-stable/api/class-locatorassertions.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-locatorassertions.mdx @@ -5,7 +5,6 @@ title: "LocatorAssertions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The [LocatorAssertions] class provides assertion methods that can be used to make assertions about the [Locator] state in the tests. diff --git a/dotnet/versioned_docs/version-stable/api/class-mouse.mdx b/dotnet/versioned_docs/version-stable/api/class-mouse.mdx index eb18625877c..ace213b7186 100644 --- a/dotnet/versioned_docs/version-stable/api/class-mouse.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-mouse.mdx @@ -5,7 +5,6 @@ title: "Mouse" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The Mouse class operates in main-frame CSS pixels relative to the top-left corner of the viewport. diff --git a/dotnet/versioned_docs/version-stable/api/class-page.mdx b/dotnet/versioned_docs/version-stable/api/class-page.mdx index 372b3d6b77b..efa5c7059b8 100644 --- a/dotnet/versioned_docs/version-stable/api/class-page.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-page.mdx @@ -5,7 +5,6 @@ title: "Page" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Page provides methods to interact with a single tab in a [Browser], or an [extension background page](https://developer.chrome.com/extensions/background_pages) in Chromium. One [Browser] instance might have multiple [Page] instances. @@ -295,6 +294,23 @@ await Page.CloseAsync(options); --- +### ConsoleMessagesAsync {#page-console-messages} + +Added in: v1.56page.ConsoleMessagesAsync + +Returns up to (currently) 200 last console messages from this page. See [Page.Console](/api/class-page.mdx#page-event-console) for more details. + +**Usage** + +```csharp +await Page.ConsoleMessagesAsync(); +``` + +**Returns** +- [IReadOnlyList]<[ConsoleMessage]># + +--- + ### ContentAsync {#page-content} Added before v1.9page.ContentAsync @@ -1311,6 +1327,23 @@ await Page.OpenerAsync(); --- +### PageErrorsAsync {#page-page-errors} + +Added in: v1.56page.PageErrorsAsync + +Returns up to (currently) 200 last page errors from this page. See [Page.PageError](/api/class-page.mdx#page-event-page-error) for more details. + +**Usage** + +```csharp +await Page.PageErrorsAsync(); +``` + +**Returns** +- [IReadOnlyList]<[string]># + +--- + ### PauseAsync {#page-pause} Added in: v1.9page.PauseAsync @@ -1537,6 +1570,27 @@ await Page.RequestGCAsync(); --- +### RequestsAsync {#page-requests} + +Added in: v1.56page.RequestsAsync + +Returns up to (currently) 100 last network request from this page. See [Page.Request](/api/class-page.mdx#page-event-request) for more details. + +Returned requests should be accessed immediately, otherwise they might be collected to prevent unbounded memory growth as new requests come in. Once collected, retrieving most information about the request is impossible. + +Note that requests reported through the [Page.Request](/api/class-page.mdx#page-event-request) request are not collected, so there is a trade off between efficient memory usage with [Page.RequestsAsync()](/api/class-page.mdx#page-requests) and the amount of available information reported through [Page.Request](/api/class-page.mdx#page-event-request). + +**Usage** + +```csharp +await Page.RequestsAsync(); +``` + +**Returns** +- [IReadOnlyList]<[Request]># + +--- + ### RouteAsync {#page-route} Added before v1.9page.RouteAsync diff --git a/dotnet/versioned_docs/version-stable/api/class-pageassertions.mdx b/dotnet/versioned_docs/version-stable/api/class-pageassertions.mdx index bbd6921715c..9952a82d1fc 100644 --- a/dotnet/versioned_docs/version-stable/api/class-pageassertions.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-pageassertions.mdx @@ -5,7 +5,6 @@ title: "PageAssertions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The [PageAssertions] class provides assertion methods that can be used to make assertions about the [Page] state in the tests. diff --git a/dotnet/versioned_docs/version-stable/api/class-playwright.mdx b/dotnet/versioned_docs/version-stable/api/class-playwright.mdx index 80d716b4846..4b552226802 100644 --- a/dotnet/versioned_docs/version-stable/api/class-playwright.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-playwright.mdx @@ -5,7 +5,6 @@ title: "Playwright" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Playwright module provides a method to launch a browser instance. The following is a typical example of using Playwright to drive automation: diff --git a/dotnet/versioned_docs/version-stable/api/class-playwrightassertions.mdx b/dotnet/versioned_docs/version-stable/api/class-playwrightassertions.mdx index 731359e6ca9..cee9cdd51ca 100644 --- a/dotnet/versioned_docs/version-stable/api/class-playwrightassertions.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-playwrightassertions.mdx @@ -5,7 +5,6 @@ title: "PlaywrightAssertions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Playwright gives you Web-First Assertions with convenience methods for creating assertions that will wait and retry until the expected condition is met. diff --git a/dotnet/versioned_docs/version-stable/api/class-request.mdx b/dotnet/versioned_docs/version-stable/api/class-request.mdx index 9e42852d09c..a346c9fe0a1 100644 --- a/dotnet/versioned_docs/version-stable/api/class-request.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-request.mdx @@ -5,7 +5,6 @@ title: "Request" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Whenever the page sends a request for a network resource the following sequence of events are emitted by [Page]: diff --git a/dotnet/versioned_docs/version-stable/api/class-response.mdx b/dotnet/versioned_docs/version-stable/api/class-response.mdx index 5d51fc8756a..3b4f13d59d0 100644 --- a/dotnet/versioned_docs/version-stable/api/class-response.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-response.mdx @@ -5,7 +5,6 @@ title: "Response" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [Response] class represents responses which are received by page. diff --git a/dotnet/versioned_docs/version-stable/api/class-route.mdx b/dotnet/versioned_docs/version-stable/api/class-route.mdx index 5f8e803f5e4..78748892afd 100644 --- a/dotnet/versioned_docs/version-stable/api/class-route.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-route.mdx @@ -5,7 +5,6 @@ title: "Route" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Whenever a network route is set up with [Page.RouteAsync()](/api/class-page.mdx#page-route) or [BrowserContext.RouteAsync()](/api/class-browsercontext.mdx#browser-context-route), the `Route` object allows to handle the route. diff --git a/dotnet/versioned_docs/version-stable/api/class-selectors.mdx b/dotnet/versioned_docs/version-stable/api/class-selectors.mdx index 84096406f67..efee1d802b6 100644 --- a/dotnet/versioned_docs/version-stable/api/class-selectors.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-selectors.mdx @@ -5,7 +5,6 @@ title: "Selectors" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Selectors can be used to install custom selector engines. See [extensibility](../extensibility.mdx) for more information. diff --git a/dotnet/versioned_docs/version-stable/api/class-timeouterror.mdx b/dotnet/versioned_docs/version-stable/api/class-timeouterror.mdx index 723d1b04650..11864b08d11 100644 --- a/dotnet/versioned_docs/version-stable/api/class-timeouterror.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-timeouterror.mdx @@ -5,7 +5,6 @@ title: "TimeoutError" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; * extends: [Error] diff --git a/dotnet/versioned_docs/version-stable/api/class-touchscreen.mdx b/dotnet/versioned_docs/version-stable/api/class-touchscreen.mdx index 5ed2ffe0d9d..9a0fe300c8f 100644 --- a/dotnet/versioned_docs/version-stable/api/class-touchscreen.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-touchscreen.mdx @@ -5,7 +5,6 @@ title: "Touchscreen" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The Touchscreen class operates in main-frame CSS pixels relative to the top-left corner of the viewport. Methods on the touchscreen can only be used in browser contexts that have been initialized with `hasTouch` set to true. diff --git a/dotnet/versioned_docs/version-stable/api/class-tracing.mdx b/dotnet/versioned_docs/version-stable/api/class-tracing.mdx index 9ed1d08bae2..da363d22ed2 100644 --- a/dotnet/versioned_docs/version-stable/api/class-tracing.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-tracing.mdx @@ -5,7 +5,6 @@ title: "Tracing" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; API for collecting and saving Playwright traces. Playwright traces can be opened in [Trace Viewer](../trace-viewer.mdx) after Playwright script runs. diff --git a/dotnet/versioned_docs/version-stable/api/class-video.mdx b/dotnet/versioned_docs/version-stable/api/class-video.mdx index ece589175ee..a3d0ef4a679 100644 --- a/dotnet/versioned_docs/version-stable/api/class-video.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-video.mdx @@ -5,7 +5,6 @@ title: "Video" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; When browser context is created with the `recordVideo` option, each page has a video object associated with it. diff --git a/dotnet/versioned_docs/version-stable/api/class-weberror.mdx b/dotnet/versioned_docs/version-stable/api/class-weberror.mdx index 2eda5340524..bbe73bf2d2b 100644 --- a/dotnet/versioned_docs/version-stable/api/class-weberror.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-weberror.mdx @@ -5,7 +5,6 @@ title: "WebError" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [WebError] class represents an unhandled exception thrown in the page. It is dispatched via the [BrowserContext.WebError](/api/class-browsercontext.mdx#browser-context-event-web-error) event. diff --git a/dotnet/versioned_docs/version-stable/api/class-websocket.mdx b/dotnet/versioned_docs/version-stable/api/class-websocket.mdx index 6a068700f73..8ca4fb4a0c9 100644 --- a/dotnet/versioned_docs/version-stable/api/class-websocket.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-websocket.mdx @@ -5,7 +5,6 @@ title: "WebSocket" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The [WebSocket] class represents WebSocket connections within a page. It provides the ability to inspect and manipulate the data being transmitted and received. diff --git a/dotnet/versioned_docs/version-stable/api/class-websocketframe.mdx b/dotnet/versioned_docs/version-stable/api/class-websocketframe.mdx index ee59e81ab76..24903141f97 100644 --- a/dotnet/versioned_docs/version-stable/api/class-websocketframe.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-websocketframe.mdx @@ -5,7 +5,6 @@ title: "WebSocketFrame" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The [WebSocketFrame] class represents frames sent over [WebSocket] connections in the page. Frame payload is returned by either [WebSocketFrame.Text](/api/class-websocketframe.mdx#web-socket-frame-text) or [WebSocketFrame.Binary](/api/class-websocketframe.mdx#web-socket-frame-binary) method depending on the its type. diff --git a/dotnet/versioned_docs/version-stable/api/class-websocketroute.mdx b/dotnet/versioned_docs/version-stable/api/class-websocketroute.mdx index 5958716f5ed..0c0d8b2449b 100644 --- a/dotnet/versioned_docs/version-stable/api/class-websocketroute.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-websocketroute.mdx @@ -5,7 +5,6 @@ title: "WebSocketRoute" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Whenever a [`WebSocket`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) route is set up with [Page.RouteWebSocketAsync()](/api/class-page.mdx#page-route-web-socket) or [BrowserContext.RouteWebSocketAsync()](/api/class-browsercontext.mdx#browser-context-route-web-socket), the `WebSocketRoute` object allows to handle the WebSocket, like an actual server would do. diff --git a/dotnet/versioned_docs/version-stable/api/class-worker.mdx b/dotnet/versioned_docs/version-stable/api/class-worker.mdx index d16d830b939..11239d8db59 100644 --- a/dotnet/versioned_docs/version-stable/api/class-worker.mdx +++ b/dotnet/versioned_docs/version-stable/api/class-worker.mdx @@ -5,7 +5,6 @@ title: "Worker" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The Worker class represents a [WebWorker](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API). `worker` event is emitted on the page object to signal a worker creation. `close` event is emitted on the worker object when the worker is gone. diff --git a/dotnet/versioned_docs/version-stable/aria-snapshots.mdx b/dotnet/versioned_docs/version-stable/aria-snapshots.mdx index ac3bc8b1384..60443a16e55 100644 --- a/dotnet/versioned_docs/version-stable/aria-snapshots.mdx +++ b/dotnet/versioned_docs/version-stable/aria-snapshots.mdx @@ -5,7 +5,6 @@ title: "Snapshot testing" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; import LiteYouTube from '@site/src/components/LiteYouTube'; diff --git a/dotnet/versioned_docs/version-stable/auth.mdx b/dotnet/versioned_docs/version-stable/auth.mdx index 241a9a792fb..b852bb26e1c 100644 --- a/dotnet/versioned_docs/version-stable/auth.mdx +++ b/dotnet/versioned_docs/version-stable/auth.mdx @@ -5,7 +5,6 @@ title: "Authentication" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/browser-contexts.mdx b/dotnet/versioned_docs/version-stable/browser-contexts.mdx index cf0a0c0035b..6ecd9a8c626 100644 --- a/dotnet/versioned_docs/version-stable/browser-contexts.mdx +++ b/dotnet/versioned_docs/version-stable/browser-contexts.mdx @@ -5,7 +5,6 @@ title: "Isolation" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/browsers.mdx b/dotnet/versioned_docs/version-stable/browsers.mdx index bf8638f5b62..56090e76f05 100644 --- a/dotnet/versioned_docs/version-stable/browsers.mdx +++ b/dotnet/versioned_docs/version-stable/browsers.mdx @@ -5,7 +5,6 @@ title: "Browsers" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/ci-intro.mdx b/dotnet/versioned_docs/version-stable/ci-intro.mdx index 8bc37bbc5ce..c8a4abbe3e7 100644 --- a/dotnet/versioned_docs/version-stable/ci-intro.mdx +++ b/dotnet/versioned_docs/version-stable/ci-intro.mdx @@ -5,11 +5,10 @@ title: "Setting up CI" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction -Playwright tests can be run on any CI provider. In this section we cover running tests on GitHub using GitHub Actions. If you would like to see how to configure other CI providers, check out our detailed doc on Continuous Integration. +Playwright tests can be run on any CI provider. In this section we cover running tests on GitHub using GitHub Actions. If you would like to see how to configure other CI providers, check out our detailed [doc on Continuous Integration](./ci.mdx). #### You will learn - [How to set up GitHub Actions](/ci-intro.mdx#setting-up-github-actions) @@ -32,9 +31,9 @@ jobs: timeout-minutes: 60 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup dotnet - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: 8.0.x - name: Build & Install @@ -84,7 +83,7 @@ Clicking on the workflow run shows you all the actions that GitHub performed and You can upload Traces which get created on your CI like GitHub Actions as artifacts. This requires [starting and stopping the trace](./trace-viewer-intro#recording-a-trace). We recommend only recording traces for failing tests. Once your traces have been uploaded to CI, they can then be downloaded and opened using [trace.playwright.dev](https://trace.playwright.dev), which is a statically hosted variant of the Trace Viewer. You can upload trace files using drag and drop. ###### - +![playwright trace viewer](../images/getting-started/trace-viewer-failed-test.png) ## Properly handling Secrets diff --git a/dotnet/versioned_docs/version-stable/ci.mdx b/dotnet/versioned_docs/version-stable/ci.mdx index 1bed1d75218..bd7fb4c8306 100644 --- a/dotnet/versioned_docs/version-stable/ci.mdx +++ b/dotnet/versioned_docs/version-stable/ci.mdx @@ -5,7 +5,6 @@ title: "Continuous Integration" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -48,9 +47,9 @@ jobs: timeout-minutes: 60 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup dotnet - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: 8.0.x - name: Build & Install @@ -77,12 +76,12 @@ jobs: name: 'Playwright Tests' runs-on: ubuntu-latest container: - image: mcr.microsoft.com/playwright/dotnet:v1.54.0-noble + image: mcr.microsoft.com/playwright/dotnet:v1.55.0-noble options: --user 1001 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup dotnet - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: 8.0.x - run: dotnet build @@ -104,9 +103,9 @@ jobs: runs-on: ubuntu-latest if: github.event.deployment_status.state == 'success' steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup dotnet - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: 8.0.x - run: dotnet build @@ -160,7 +159,7 @@ trigger: pool: vmImage: ubuntu-latest -container: mcr.microsoft.com/playwright/dotnet:v1.54.0-noble +container: mcr.microsoft.com/playwright/dotnet:v1.55.0-noble steps: - task: UseDotNet@2 @@ -183,7 +182,7 @@ Running Playwright on CircleCI is very similar to running on GitHub Actions. In executors: pw-noble-development: docker: - - image: mcr.microsoft.com/playwright/dotnet:v1.54.0-noble + - image: mcr.microsoft.com/playwright/dotnet:v1.55.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 +193,7 @@ Jenkins supports Docker agents for pipelines. Use the [Playwright Docker image]( ```groovy pipeline { - agent { docker { image 'mcr.microsoft.com/playwright/dotnet:v1.54.0-noble' } } + agent { docker { image 'mcr.microsoft.com/playwright/dotnet:v1.55.0-noble' } } stages { stage('e2e-tests') { steps { @@ -211,7 +210,7 @@ pipeline { Bitbucket Pipelines can use public [Docker images as build environments](https://confluence.atlassian.com/bitbucket/use-docker-images-as-build-environments-792298897.html). To run Playwright tests on Bitbucket, use our public Docker image ([see Dockerfile](./docker.mdx)). ```yml -image: mcr.microsoft.com/playwright/dotnet:v1.54.0-noble +image: mcr.microsoft.com/playwright/dotnet:v1.55.0-noble ``` ### GitLab CI diff --git a/dotnet/versioned_docs/version-stable/clock.mdx b/dotnet/versioned_docs/version-stable/clock.mdx index 28de6df39d8..07adfe38211 100644 --- a/dotnet/versioned_docs/version-stable/clock.mdx +++ b/dotnet/versioned_docs/version-stable/clock.mdx @@ -5,7 +5,6 @@ title: "Clock" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; import LiteYouTube from '@site/src/components/LiteYouTube'; diff --git a/dotnet/versioned_docs/version-stable/codegen-intro.mdx b/dotnet/versioned_docs/version-stable/codegen-intro.mdx index 2c90212ac51..5ab0448b62d 100644 --- a/dotnet/versioned_docs/version-stable/codegen-intro.mdx +++ b/dotnet/versioned_docs/version-stable/codegen-intro.mdx @@ -5,7 +5,6 @@ title: "Generating tests" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -35,7 +34,7 @@ With the test generator you can record: * `'assert value'` to assert that an element has a specific value ###### - +![recording a test](../images/getting-started/record-test-csharp.png) ###### When you finish interacting with the page, press the `'record'` button to stop recording and use the `'copy'` button to copy the generated code to your editor. @@ -54,7 +53,7 @@ You can generate [locators](/locators.mdx) with the test generator. * Use the copy button to copy the locator and paste it into your code ###### - +![picking a locator](../images/getting-started/pick-locator-csharp.png) ### Emulation diff --git a/dotnet/versioned_docs/version-stable/codegen.mdx b/dotnet/versioned_docs/version-stable/codegen.mdx index 13b6b7a3a0b..90f4855ac72 100644 --- a/dotnet/versioned_docs/version-stable/codegen.mdx +++ b/dotnet/versioned_docs/version-stable/codegen.mdx @@ -5,7 +5,6 @@ title: "Test generator" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; import LiteYouTube from '@site/src/components/LiteYouTube'; diff --git a/dotnet/versioned_docs/version-stable/debug.mdx b/dotnet/versioned_docs/version-stable/debug.mdx index e04f205f249..83c159b1002 100644 --- a/dotnet/versioned_docs/version-stable/debug.mdx +++ b/dotnet/versioned_docs/version-stable/debug.mdx @@ -5,7 +5,6 @@ title: "Debugging Tests" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Playwright Inspector @@ -110,8 +109,6 @@ When running in Debug Mode with `PWDEBUG=console`, a `playwright` object is avai - **See console logs** during execution (or learn how to [read logs via API](./api/class-page.mdx#page-event-console)) - Check **network activity** and other developer tools features -This will also set the default timeouts of Playwright to 0 (= no timeout). - Browser Developer Tools with Playwright object To debug your tests using the browser developer tools, start by setting a breakpoint in your test to pause the execution using the [Page.PauseAsync()](/api/class-page.mdx#page-pause) method. diff --git a/dotnet/versioned_docs/version-stable/dialogs.mdx b/dotnet/versioned_docs/version-stable/dialogs.mdx index 5bc777df326..4a330b54729 100644 --- a/dotnet/versioned_docs/version-stable/dialogs.mdx +++ b/dotnet/versioned_docs/version-stable/dialogs.mdx @@ -5,7 +5,6 @@ title: "Dialogs" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/docker.mdx b/dotnet/versioned_docs/version-stable/docker.mdx index 9eeed0d723e..23db20cf317 100644 --- a/dotnet/versioned_docs/version-stable/docker.mdx +++ b/dotnet/versioned_docs/version-stable/docker.mdx @@ -5,7 +5,6 @@ title: "Docker" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -23,7 +22,7 @@ This Docker image is intended to be used for testing and development purposes on ### Pull the image ```bash -docker pull mcr.microsoft.com/playwright/dotnet:v1.54.0-noble +docker pull mcr.microsoft.com/playwright/dotnet:v1.55.0-noble ``` ### Run the image @@ -35,7 +34,7 @@ By default, the Docker image will use the `root` user to run the browsers. This On trusted websites, you can avoid creating a separate user and use root for it since you trust the code which will run on the browsers. ```bash -docker run -it --rm --ipc=host mcr.microsoft.com/playwright/dotnet:v1.54.0-noble /bin/bash +docker run -it --rm --ipc=host mcr.microsoft.com/playwright/dotnet:v1.55.0-noble /bin/bash ``` #### Crawling and scraping @@ -43,7 +42,7 @@ docker run -it --rm --ipc=host mcr.microsoft.com/playwright/dotnet:v1.54.0-noble On untrusted websites, it's recommended to use a separate user for launching the browsers in combination with the seccomp profile. Inside the container or if you are using the Docker image as a base image you have to use `adduser` for it. ```bash -docker run -it --rm --ipc=host --user pwuser --security-opt seccomp=seccomp_profile.json mcr.microsoft.com/playwright/dotnet:v1.54.0-noble /bin/bash +docker run -it --rm --ipc=host --user pwuser --security-opt seccomp=seccomp_profile.json mcr.microsoft.com/playwright/dotnet:v1.55.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: @@ -83,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.54.0-noble /bin/sh -c "npx -y playwright@1.54.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.55.0-noble /bin/sh -c "npx -y playwright@1.55.0 run-server --port 3000 --host 0.0.0.0" ``` #### Connecting to the Server @@ -100,7 +99,7 @@ await using var browser = await playwright.Chromium.ConnectAsync("ws://127.0.0.1 If you need to access local servers from within the Docker container: ```bash -docker run --add-host=hostmachine:host-gateway -p 3000:3000 --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.54.0-noble /bin/sh -c "npx -y playwright@1.54.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.55.0-noble /bin/sh -c "npx -y playwright@1.55.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. @@ -115,9 +114,9 @@ When running tests remotely, ensure the Playwright version in your tests matches See [all available image tags]. We currently publish images with the following tags: -- `:v1.54.0` - Playwright v1.54.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat). -- `:v1.54.0-noble` - Playwright v1.54.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat). -- `:v1.54.0-jammy` - Playwright v1.54.0 release docker image based on Ubuntu 22.04 LTS (Jammy Jellyfish). +- `:v1.55.0` - Playwright v1.55.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat). +- `:v1.55.0-noble` - Playwright v1.55.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat). +- `:v1.55.0-jammy` - Playwright v1.55.0 release docker image based on Ubuntu 22.04 LTS (Jammy Jellyfish). :::note diff --git a/dotnet/versioned_docs/version-stable/downloads.mdx b/dotnet/versioned_docs/version-stable/downloads.mdx index 99834b7cbe9..4b2511f751a 100644 --- a/dotnet/versioned_docs/version-stable/downloads.mdx +++ b/dotnet/versioned_docs/version-stable/downloads.mdx @@ -5,7 +5,6 @@ title: "Downloads" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/emulation.mdx b/dotnet/versioned_docs/version-stable/emulation.mdx index 019d3f0315d..c5a4d0e4443 100644 --- a/dotnet/versioned_docs/version-stable/emulation.mdx +++ b/dotnet/versioned_docs/version-stable/emulation.mdx @@ -5,7 +5,6 @@ title: "Emulation" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/evaluating.mdx b/dotnet/versioned_docs/version-stable/evaluating.mdx index 314f1bcd2ff..2b46f35f916 100644 --- a/dotnet/versioned_docs/version-stable/evaluating.mdx +++ b/dotnet/versioned_docs/version-stable/evaluating.mdx @@ -5,7 +5,6 @@ title: "Evaluating JavaScript" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/events.mdx b/dotnet/versioned_docs/version-stable/events.mdx index d4b10cf2d38..fcc18829fd4 100644 --- a/dotnet/versioned_docs/version-stable/events.mdx +++ b/dotnet/versioned_docs/version-stable/events.mdx @@ -5,7 +5,6 @@ title: "Events" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/extensibility.mdx b/dotnet/versioned_docs/version-stable/extensibility.mdx index 3d0c5a1ab4d..1e4f3948000 100644 --- a/dotnet/versioned_docs/version-stable/extensibility.mdx +++ b/dotnet/versioned_docs/version-stable/extensibility.mdx @@ -5,7 +5,6 @@ title: "Extensibility" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Custom selector engines diff --git a/dotnet/versioned_docs/version-stable/frames.mdx b/dotnet/versioned_docs/version-stable/frames.mdx index 9dfc8a4565a..84797a050e9 100644 --- a/dotnet/versioned_docs/version-stable/frames.mdx +++ b/dotnet/versioned_docs/version-stable/frames.mdx @@ -5,7 +5,6 @@ title: "Frames" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/handles.mdx b/dotnet/versioned_docs/version-stable/handles.mdx index 8b295b098a5..6a8be5b34ce 100644 --- a/dotnet/versioned_docs/version-stable/handles.mdx +++ b/dotnet/versioned_docs/version-stable/handles.mdx @@ -5,7 +5,6 @@ title: "Handles" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/input.mdx b/dotnet/versioned_docs/version-stable/input.mdx index d9c42227d97..61f5a13abcf 100644 --- a/dotnet/versioned_docs/version-stable/input.mdx +++ b/dotnet/versioned_docs/version-stable/input.mdx @@ -5,7 +5,6 @@ title: "Actions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/intro.mdx b/dotnet/versioned_docs/version-stable/intro.mdx index 3e4d7eeb875..e3fb73868ff 100644 --- a/dotnet/versioned_docs/version-stable/intro.mdx +++ b/dotnet/versioned_docs/version-stable/intro.mdx @@ -5,7 +5,6 @@ title: "Installation" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -46,7 +45,7 @@ cd PlaywrightTests ```bash -dotnet new xunit -n PlaywrightTests +dotnet new xunit3 -n PlaywrightTests cd PlaywrightTests ``` @@ -275,7 +274,7 @@ See our doc on [Running and Debugging Tests](./running-tests.mdx) to learn more ## System requirements - Playwright is distributed as a .NET Standard 2.0 library. We recommend .NET 8. -- Windows 10+, Windows Server 2016+ or Windows Subsystem for Linux (WSL). +- Windows 11+, Windows Server 2019+ or Windows Subsystem for Linux (WSL). - macOS 14 Ventura, or later. - Debian 12, Debian 13, Ubuntu 22.04, Ubuntu 24.04, on x86-64 and arm64 architecture. diff --git a/dotnet/versioned_docs/version-stable/languages.mdx b/dotnet/versioned_docs/version-stable/languages.mdx index c960f672af7..5221e84969c 100644 --- a/dotnet/versioned_docs/version-stable/languages.mdx +++ b/dotnet/versioned_docs/version-stable/languages.mdx @@ -5,7 +5,6 @@ title: "Supported languages" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/library.mdx b/dotnet/versioned_docs/version-stable/library.mdx index 6fb52d6b810..1738d4ff5e1 100644 --- a/dotnet/versioned_docs/version-stable/library.mdx +++ b/dotnet/versioned_docs/version-stable/library.mdx @@ -5,7 +5,6 @@ title: "Getting started - Library" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/locators.mdx b/dotnet/versioned_docs/version-stable/locators.mdx index 428f37e816c..e961cb4d71a 100644 --- a/dotnet/versioned_docs/version-stable/locators.mdx +++ b/dotnet/versioned_docs/version-stable/locators.mdx @@ -5,7 +5,6 @@ title: "Locators" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/mock.mdx b/dotnet/versioned_docs/version-stable/mock.mdx index fa848fec502..e5eda9b5e8d 100644 --- a/dotnet/versioned_docs/version-stable/mock.mdx +++ b/dotnet/versioned_docs/version-stable/mock.mdx @@ -5,7 +5,6 @@ title: "Mock APIs" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/navigations.mdx b/dotnet/versioned_docs/version-stable/navigations.mdx index a055e83aa0c..d60331e1370 100644 --- a/dotnet/versioned_docs/version-stable/navigations.mdx +++ b/dotnet/versioned_docs/version-stable/navigations.mdx @@ -5,7 +5,6 @@ title: "Navigations" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/network.mdx b/dotnet/versioned_docs/version-stable/network.mdx index 71dc7418188..512847ea620 100644 --- a/dotnet/versioned_docs/version-stable/network.mdx +++ b/dotnet/versioned_docs/version-stable/network.mdx @@ -5,7 +5,6 @@ title: "Network" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/other-locators.mdx b/dotnet/versioned_docs/version-stable/other-locators.mdx index 5063b14858f..db5b844e308 100644 --- a/dotnet/versioned_docs/version-stable/other-locators.mdx +++ b/dotnet/versioned_docs/version-stable/other-locators.mdx @@ -5,7 +5,6 @@ title: "Other locators" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -121,9 +120,11 @@ The `:is()` pseudo-class is an [experimental CSS pseudo-class](https://developer ### CSS: matching elements based on layout -:::note +:::warning + +Layout selectors are deprecated and may be removed in the future. Matching based on layout may produce unexpected results. For example, a different element could be matched when layout changes by one pixel. -Matching based on layout may produce unexpected results. For example, a different element could be matched when layout changes by one pixel. +We recommend prioritizing [user-visible locators](./locators.mdx#quick-guide) instead. ::: Sometimes, it is hard to come up with a good selector to the target element when it lacks distinctive features. In this case, using Playwright layout CSS pseudo-classes could help. These can be combined with regular CSS to pinpoint one of the multiple choices. diff --git a/dotnet/versioned_docs/version-stable/pages.mdx b/dotnet/versioned_docs/version-stable/pages.mdx index 1d0356e9e55..beddf404289 100644 --- a/dotnet/versioned_docs/version-stable/pages.mdx +++ b/dotnet/versioned_docs/version-stable/pages.mdx @@ -5,7 +5,6 @@ title: "Pages" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Pages diff --git a/dotnet/versioned_docs/version-stable/pom.mdx b/dotnet/versioned_docs/version-stable/pom.mdx index 897fce0a5cf..da302a6704a 100644 --- a/dotnet/versioned_docs/version-stable/pom.mdx +++ b/dotnet/versioned_docs/version-stable/pom.mdx @@ -5,7 +5,6 @@ title: "Page object models" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/release-notes.mdx b/dotnet/versioned_docs/version-stable/release-notes.mdx index 5329ac77da2..8035fabe462 100644 --- a/dotnet/versioned_docs/version-stable/release-notes.mdx +++ b/dotnet/versioned_docs/version-stable/release-notes.mdx @@ -6,12 +6,11 @@ toc_max_heading_level: 2 import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Version 1.55 ### Codegen -- Automatic `toBeVisible()` assertions: Codegen can now generate automatic `toBeVisible()` assertions for common UI interactions. This feature can be enabled in the Codegen settings UI. +- Automatic `ToBeVisibleAsync()` assertions: Codegen can now generate automatic `ToBeVisibleAsync()` assertions for common UI interactions. This feature can be enabled in the Codegen settings UI. ### Breaking Changes - ⚠️ Dropped support for Chromium extension manifest v2. diff --git a/dotnet/versioned_docs/version-stable/running-tests.mdx b/dotnet/versioned_docs/version-stable/running-tests.mdx index 4f9b3aa6034..4616c3891cd 100644 --- a/dotnet/versioned_docs/version-stable/running-tests.mdx +++ b/dotnet/versioned_docs/version-stable/running-tests.mdx @@ -5,7 +5,6 @@ title: "Running and debugging tests" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/screenshots.mdx b/dotnet/versioned_docs/version-stable/screenshots.mdx index 42306845089..c72ce7fdfec 100644 --- a/dotnet/versioned_docs/version-stable/screenshots.mdx +++ b/dotnet/versioned_docs/version-stable/screenshots.mdx @@ -5,7 +5,6 @@ title: "Screenshots" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/selenium-grid.mdx b/dotnet/versioned_docs/version-stable/selenium-grid.mdx index 0a65242b49a..36dd5988d41 100644 --- a/dotnet/versioned_docs/version-stable/selenium-grid.mdx +++ b/dotnet/versioned_docs/version-stable/selenium-grid.mdx @@ -5,7 +5,6 @@ title: "Selenium Grid (experimental)" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/test-assertions.mdx b/dotnet/versioned_docs/version-stable/test-assertions.mdx index 9a4ff70c8ef..8ae268c608a 100644 --- a/dotnet/versioned_docs/version-stable/test-assertions.mdx +++ b/dotnet/versioned_docs/version-stable/test-assertions.mdx @@ -5,7 +5,6 @@ title: "Assertions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## List of assertions diff --git a/dotnet/versioned_docs/version-stable/test-runners.mdx b/dotnet/versioned_docs/version-stable/test-runners.mdx index 933482232c6..bc81bdabd28 100644 --- a/dotnet/versioned_docs/version-stable/test-runners.mdx +++ b/dotnet/versioned_docs/version-stable/test-runners.mdx @@ -5,7 +5,6 @@ title: "Test Runners" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -105,7 +104,7 @@ xUnit v3 uses the [`conservative` parallelism algorithm](https://xunit.net/docs/ -To customize context options, you can override the `ContextOptions` method of your test class derived from `Microsoft.Playwright.MSTest.PageTest` or `Microsoft.Playwright.MSTest.ContextTest`. See the following example: +To customize context options, you can override the `ContextOptions` method of your test class derived from `Microsoft.Playwright.NUnit.PageTest` or `Microsoft.Playwright.NUnit.ContextTest`. See the following example: ```csharp using Microsoft.Playwright.NUnit; diff --git a/dotnet/versioned_docs/version-stable/touch-events.mdx b/dotnet/versioned_docs/version-stable/touch-events.mdx index a323c123191..247e46af8f8 100644 --- a/dotnet/versioned_docs/version-stable/touch-events.mdx +++ b/dotnet/versioned_docs/version-stable/touch-events.mdx @@ -5,7 +5,6 @@ title: "Touch events (legacy)" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/trace-viewer-intro.mdx b/dotnet/versioned_docs/version-stable/trace-viewer-intro.mdx index 7e6d37d963f..94b78a860d7 100644 --- a/dotnet/versioned_docs/version-stable/trace-viewer-intro.mdx +++ b/dotnet/versioned_docs/version-stable/trace-viewer-intro.mdx @@ -5,7 +5,6 @@ title: "Trace viewer" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/trace-viewer.mdx b/dotnet/versioned_docs/version-stable/trace-viewer.mdx index 6161c9ecb8b..2f0165d2a0a 100644 --- a/dotnet/versioned_docs/version-stable/trace-viewer.mdx +++ b/dotnet/versioned_docs/version-stable/trace-viewer.mdx @@ -5,7 +5,6 @@ title: "Trace viewer" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; import LiteYouTube from '@site/src/components/LiteYouTube'; diff --git a/dotnet/versioned_docs/version-stable/videos.mdx b/dotnet/versioned_docs/version-stable/videos.mdx index 61ddb9ea35f..4c1e43e1390 100644 --- a/dotnet/versioned_docs/version-stable/videos.mdx +++ b/dotnet/versioned_docs/version-stable/videos.mdx @@ -5,7 +5,6 @@ title: "Videos" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/webview2.mdx b/dotnet/versioned_docs/version-stable/webview2.mdx index 282f01a0820..e2a47effd31 100644 --- a/dotnet/versioned_docs/version-stable/webview2.mdx +++ b/dotnet/versioned_docs/version-stable/webview2.mdx @@ -5,7 +5,6 @@ title: "WebView2" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/dotnet/versioned_docs/version-stable/writing-tests.mdx b/dotnet/versioned_docs/version-stable/writing-tests.mdx index f59a6df14bf..d7cb0b27af1 100644 --- a/dotnet/versioned_docs/version-stable/writing-tests.mdx +++ b/dotnet/versioned_docs/version-stable/writing-tests.mdx @@ -5,7 +5,6 @@ title: "Writing tests" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/images/test-agents/generator-prompt.png b/java/versioned_docs/images/test-agents/generator-prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..56c67cf3ce8b2e027acd979f812980b9629925b0 GIT binary patch literal 34718 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 DEo27{ literal 0 HcmV?d00001 diff --git a/java/versioned_docs/images/test-agents/healer-prompt.png b/java/versioned_docs/images/test-agents/healer-prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..5b6116972cfb69d06226a14385b9c9db685f8110 GIT binary patch literal 28393 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 ZlXEJpo-%tM0#~jnE2znrJ~V#)KLAt<*;oJo literal 0 HcmV?d00001 diff --git a/java/versioned_docs/version-stable/accessibility-testing.mdx b/java/versioned_docs/version-stable/accessibility-testing.mdx index 36c964b1915..e6f0cd9d490 100644 --- a/java/versioned_docs/version-stable/accessibility-testing.mdx +++ b/java/versioned_docs/version-stable/accessibility-testing.mdx @@ -5,7 +5,6 @@ title: "Accessibility testing" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/actionability.mdx b/java/versioned_docs/version-stable/actionability.mdx index 85c3f019e08..b56e8201110 100644 --- a/java/versioned_docs/version-stable/actionability.mdx +++ b/java/versioned_docs/version-stable/actionability.mdx @@ -5,7 +5,6 @@ title: "Auto-waiting" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/api-testing.mdx b/java/versioned_docs/version-stable/api-testing.mdx index fceefe0fb51..9e9e31ddaef 100644 --- a/java/versioned_docs/version-stable/api-testing.mdx +++ b/java/versioned_docs/version-stable/api-testing.mdx @@ -5,7 +5,6 @@ title: "API testing" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/api/class-apirequest.mdx b/java/versioned_docs/version-stable/api/class-apirequest.mdx index cf872cbe1d7..5a02eeabde5 100644 --- a/java/versioned_docs/version-stable/api/class-apirequest.mdx +++ b/java/versioned_docs/version-stable/api/class-apirequest.mdx @@ -5,7 +5,6 @@ title: "APIRequest" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Exposes API that can be used for the Web API testing. This class is used for creating [APIRequestContext] instance which in turn can be used for sending web requests. An instance of this class can be obtained via [Playwright.request()](/api/class-playwright.mdx#playwright-request). For more information see [APIRequestContext]. diff --git a/java/versioned_docs/version-stable/api/class-apirequestcontext.mdx b/java/versioned_docs/version-stable/api/class-apirequestcontext.mdx index ed3f5ddaa06..e794937f0c4 100644 --- a/java/versioned_docs/version-stable/api/class-apirequestcontext.mdx +++ b/java/versioned_docs/version-stable/api/class-apirequestcontext.mdx @@ -5,7 +5,6 @@ title: "APIRequestContext" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; This API is used for the Web API testing. You can use it to trigger API endpoints, configure micro-services, prepare environment or the service to your e2e test. diff --git a/java/versioned_docs/version-stable/api/class-apiresponse.mdx b/java/versioned_docs/version-stable/api/class-apiresponse.mdx index 68c60d291c2..9eab4228ebd 100644 --- a/java/versioned_docs/version-stable/api/class-apiresponse.mdx +++ b/java/versioned_docs/version-stable/api/class-apiresponse.mdx @@ -5,7 +5,6 @@ title: "APIResponse" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [APIResponse] class represents responses returned by [APIRequestContext.get()](/api/class-apirequestcontext.mdx#api-request-context-get) and similar methods. diff --git a/java/versioned_docs/version-stable/api/class-apiresponseassertions.mdx b/java/versioned_docs/version-stable/api/class-apiresponseassertions.mdx index e09e980ebd7..b12c477f99c 100644 --- a/java/versioned_docs/version-stable/api/class-apiresponseassertions.mdx +++ b/java/versioned_docs/version-stable/api/class-apiresponseassertions.mdx @@ -5,7 +5,6 @@ title: "APIResponseAssertions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The [APIResponseAssertions] class provides assertion methods that can be used to make assertions about the [APIResponse] in the tests. diff --git a/java/versioned_docs/version-stable/api/class-browser.mdx b/java/versioned_docs/version-stable/api/class-browser.mdx index 8cecdb8f6c5..36a1463dd9a 100644 --- a/java/versioned_docs/version-stable/api/class-browser.mdx +++ b/java/versioned_docs/version-stable/api/class-browser.mdx @@ -5,7 +5,6 @@ title: "Browser" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; A Browser is created via [BrowserType.launch()](/api/class-browsertype.mdx#browser-type-launch). An example of using a [Browser] to create a [Page]: diff --git a/java/versioned_docs/version-stable/api/class-browsercontext.mdx b/java/versioned_docs/version-stable/api/class-browsercontext.mdx index a6511761c8c..045c98910a7 100644 --- a/java/versioned_docs/version-stable/api/class-browsercontext.mdx +++ b/java/versioned_docs/version-stable/api/class-browsercontext.mdx @@ -5,7 +5,6 @@ title: "BrowserContext" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; BrowserContexts provide a way to operate multiple independent browser sessions. @@ -117,28 +116,6 @@ The order of evaluation of multiple scripts installed via [BrowserContext.addIni --- -### backgroundPages {#browser-context-background-pages} - -Added in: v1.11browserContext.backgroundPages - -:::note - -Background pages are only supported on Chromium-based browsers. -::: - -All existing background pages in the context. - -**Usage** - -```java -BrowserContext.backgroundPages(); -``` - -**Returns** -- [List]<[Page]># - ---- - ### browser {#browser-context-browser} Added before v1.9browserContext.browser @@ -1028,34 +1005,6 @@ BrowserContext.tracing() ## Events -### onBackgroundPage(handler) {#browser-context-event-background-page} - -Added in: v1.11browserContext.onBackgroundPage(handler) - -:::note - -Only works with Chromium browser's persistent context. -::: - -Emitted when new background page is created in the context. - -```java -context.onBackgroundPage(backgroundPage -> { - System.out.println(backgroundPage.url()); -}); -``` - -**Usage** - -```java -BrowserContext.onBackgroundPage(handler) -``` - -**Event data** -- [Page] - ---- - ### onClose(handler) {#browser-context-event-close} Added before v1.9browserContext.onClose(handler) @@ -1242,6 +1191,56 @@ BrowserContext.onWebError(handler) **Event data** - [WebError] +--- + +## Deprecated + +### onBackgroundPage(handler) {#browser-context-event-background-page} + +Added in: v1.11browserContext.onBackgroundPage(handler) + +:::warning Deprecated + +Background pages have been removed from Chromium together with Manifest V2 extensions. + +::: + + +This event is not emitted. + +**Usage** + +```java +BrowserContext.onBackgroundPage(handler) +``` + +**Event data** +- [Page] + +--- + +### backgroundPages {#browser-context-background-pages} + +Added in: v1.11browserContext.backgroundPages + +:::warning Deprecated + +Background pages have been removed from Chromium together with Manifest V2 extensions. + +::: + + +Returns an empty list. + +**Usage** + +```java +BrowserContext.backgroundPages(); +``` + +**Returns** +- [List]<[Page]># + [APIRequest]: /api/class-apirequest.mdx "APIRequest" [APIRequestContext]: /api/class-apirequestcontext.mdx "APIRequestContext" diff --git a/java/versioned_docs/version-stable/api/class-browsertype.mdx b/java/versioned_docs/version-stable/api/class-browsertype.mdx index 7c533617e98..29864e91827 100644 --- a/java/versioned_docs/version-stable/api/class-browsertype.mdx +++ b/java/versioned_docs/version-stable/api/class-browsertype.mdx @@ -5,7 +5,6 @@ title: "BrowserType" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; BrowserType provides methods to launch a specific browser instance or connect to an existing one. The following is a typical example of using Playwright to drive automation: diff --git a/java/versioned_docs/version-stable/api/class-cdpsession.mdx b/java/versioned_docs/version-stable/api/class-cdpsession.mdx index aabf3f76f30..85925a0830f 100644 --- a/java/versioned_docs/version-stable/api/class-cdpsession.mdx +++ b/java/versioned_docs/version-stable/api/class-cdpsession.mdx @@ -5,7 +5,6 @@ title: "CDPSession" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The `CDPSession` instances are used to talk raw Chrome Devtools Protocol: diff --git a/java/versioned_docs/version-stable/api/class-clock.mdx b/java/versioned_docs/version-stable/api/class-clock.mdx index e201c8a5a47..8524d9b7d75 100644 --- a/java/versioned_docs/version-stable/api/class-clock.mdx +++ b/java/versioned_docs/version-stable/api/class-clock.mdx @@ -5,7 +5,6 @@ title: "Clock" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Accurately simulating time-dependent behavior is essential for verifying the correctness of applications. Learn more about [clock emulation](../clock.mdx). diff --git a/java/versioned_docs/version-stable/api/class-consolemessage.mdx b/java/versioned_docs/version-stable/api/class-consolemessage.mdx index 1bcb021928b..a545927a9ef 100644 --- a/java/versioned_docs/version-stable/api/class-consolemessage.mdx +++ b/java/versioned_docs/version-stable/api/class-consolemessage.mdx @@ -5,7 +5,6 @@ title: "ConsoleMessage" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [ConsoleMessage] objects are dispatched by page via the [Page.onConsoleMessage(handler)](/api/class-page.mdx#page-event-console) event. For each console message logged in the page there will be corresponding event in the Playwright context. diff --git a/java/versioned_docs/version-stable/api/class-dialog.mdx b/java/versioned_docs/version-stable/api/class-dialog.mdx index e2cb355274e..a885c843673 100644 --- a/java/versioned_docs/version-stable/api/class-dialog.mdx +++ b/java/versioned_docs/version-stable/api/class-dialog.mdx @@ -5,7 +5,6 @@ title: "Dialog" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [Dialog] objects are dispatched by page via the [Page.onDialog(handler)](/api/class-page.mdx#page-event-dialog) event. diff --git a/java/versioned_docs/version-stable/api/class-download.mdx b/java/versioned_docs/version-stable/api/class-download.mdx index c5362efc07e..073088ca1bf 100644 --- a/java/versioned_docs/version-stable/api/class-download.mdx +++ b/java/versioned_docs/version-stable/api/class-download.mdx @@ -5,7 +5,6 @@ title: "Download" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [Download] objects are dispatched by page via the [Page.onDownload(handler)](/api/class-page.mdx#page-event-download) event. diff --git a/java/versioned_docs/version-stable/api/class-elementhandle.mdx b/java/versioned_docs/version-stable/api/class-elementhandle.mdx index 7d07e1a65e9..257924f1ce6 100644 --- a/java/versioned_docs/version-stable/api/class-elementhandle.mdx +++ b/java/versioned_docs/version-stable/api/class-elementhandle.mdx @@ -5,7 +5,6 @@ title: "ElementHandle" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; * extends: [JSHandle] diff --git a/java/versioned_docs/version-stable/api/class-filechooser.mdx b/java/versioned_docs/version-stable/api/class-filechooser.mdx index 453264f4c6c..e0fea5a321e 100644 --- a/java/versioned_docs/version-stable/api/class-filechooser.mdx +++ b/java/versioned_docs/version-stable/api/class-filechooser.mdx @@ -5,7 +5,6 @@ title: "FileChooser" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [FileChooser] objects are dispatched by the page in the [Page.onFileChooser(handler)](/api/class-page.mdx#page-event-file-chooser) event. diff --git a/java/versioned_docs/version-stable/api/class-formdata.mdx b/java/versioned_docs/version-stable/api/class-formdata.mdx index 805daee883a..c438d104382 100644 --- a/java/versioned_docs/version-stable/api/class-formdata.mdx +++ b/java/versioned_docs/version-stable/api/class-formdata.mdx @@ -5,7 +5,6 @@ title: "FormData" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The [FormData] is used create form data that is sent via [APIRequestContext]. diff --git a/java/versioned_docs/version-stable/api/class-frame.mdx b/java/versioned_docs/version-stable/api/class-frame.mdx index 3f060ee8030..c33a3ae8564 100644 --- a/java/versioned_docs/version-stable/api/class-frame.mdx +++ b/java/versioned_docs/version-stable/api/class-frame.mdx @@ -5,7 +5,6 @@ title: "Frame" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; At every point of time, page exposes its current frame tree via the [Page.mainFrame()](/api/class-page.mdx#page-main-frame) and [Frame.childFrames()](/api/class-frame.mdx#frame-child-frames) methods. diff --git a/java/versioned_docs/version-stable/api/class-framelocator.mdx b/java/versioned_docs/version-stable/api/class-framelocator.mdx index e5e8365f4ab..78eedabc22c 100644 --- a/java/versioned_docs/version-stable/api/class-framelocator.mdx +++ b/java/versioned_docs/version-stable/api/class-framelocator.mdx @@ -5,7 +5,6 @@ title: "FrameLocator" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; FrameLocator represents a view to the `iframe` on the page. It captures the logic sufficient to retrieve the `iframe` and locate elements in that iframe. FrameLocator can be created with either [Locator.contentFrame()](/api/class-locator.mdx#locator-content-frame), [Page.frameLocator()](/api/class-page.mdx#page-frame-locator) or [Locator.frameLocator()](/api/class-locator.mdx#locator-frame-locator) method. diff --git a/java/versioned_docs/version-stable/api/class-jshandle.mdx b/java/versioned_docs/version-stable/api/class-jshandle.mdx index 944c7ca7493..7754fe2685f 100644 --- a/java/versioned_docs/version-stable/api/class-jshandle.mdx +++ b/java/versioned_docs/version-stable/api/class-jshandle.mdx @@ -5,7 +5,6 @@ title: "JSHandle" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; JSHandle represents an in-page JavaScript object. JSHandles can be created with the [Page.evaluateHandle()](/api/class-page.mdx#page-evaluate-handle) method. diff --git a/java/versioned_docs/version-stable/api/class-keyboard.mdx b/java/versioned_docs/version-stable/api/class-keyboard.mdx index db44cc086b9..d4e332a3665 100644 --- a/java/versioned_docs/version-stable/api/class-keyboard.mdx +++ b/java/versioned_docs/version-stable/api/class-keyboard.mdx @@ -5,7 +5,6 @@ title: "Keyboard" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Keyboard provides an api for managing a virtual keyboard. The high level api is [Keyboard.type()](/api/class-keyboard.mdx#keyboard-type), which takes raw characters and generates proper `keydown`, `keypress`/`input`, and `keyup` events on your page. diff --git a/java/versioned_docs/version-stable/api/class-locator.mdx b/java/versioned_docs/version-stable/api/class-locator.mdx index 3a79e400623..2aca2d1d148 100644 --- a/java/versioned_docs/version-stable/api/class-locator.mdx +++ b/java/versioned_docs/version-stable/api/class-locator.mdx @@ -5,7 +5,6 @@ title: "Locator" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Locators are the central piece of Playwright's auto-waiting and retry-ability. In a nutshell, locators represent a way to find element(s) on the page at any moment. A locator can be created with the [Page.locator()](/api/class-page.mdx#page-locator) method. diff --git a/java/versioned_docs/version-stable/api/class-locatorassertions.mdx b/java/versioned_docs/version-stable/api/class-locatorassertions.mdx index a03581311b3..53e31f6e3c4 100644 --- a/java/versioned_docs/version-stable/api/class-locatorassertions.mdx +++ b/java/versioned_docs/version-stable/api/class-locatorassertions.mdx @@ -5,7 +5,6 @@ title: "LocatorAssertions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The [LocatorAssertions] class provides assertion methods that can be used to make assertions about the [Locator] state in the tests. diff --git a/java/versioned_docs/version-stable/api/class-mouse.mdx b/java/versioned_docs/version-stable/api/class-mouse.mdx index 865de2b20c2..2ce1015698f 100644 --- a/java/versioned_docs/version-stable/api/class-mouse.mdx +++ b/java/versioned_docs/version-stable/api/class-mouse.mdx @@ -5,7 +5,6 @@ title: "Mouse" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The Mouse class operates in main-frame CSS pixels relative to the top-left corner of the viewport. diff --git a/java/versioned_docs/version-stable/api/class-page.mdx b/java/versioned_docs/version-stable/api/class-page.mdx index 501c3bd2789..bc730ea383c 100644 --- a/java/versioned_docs/version-stable/api/class-page.mdx +++ b/java/versioned_docs/version-stable/api/class-page.mdx @@ -5,7 +5,6 @@ title: "Page" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Page provides methods to interact with a single tab in a [Browser], or an [extension background page](https://developer.chrome.com/extensions/background_pages) in Chromium. One [Browser] instance might have multiple [Page] instances. @@ -299,6 +298,23 @@ Page.close(options); --- +### consoleMessages {#page-console-messages} + +Added in: v1.56page.consoleMessages + +Returns up to (currently) 200 last console messages from this page. See [Page.onConsoleMessage(handler)](/api/class-page.mdx#page-event-console) for more details. + +**Usage** + +```java +Page.consoleMessages(); +``` + +**Returns** +- [List]<[ConsoleMessage]># + +--- + ### content {#page-content} Added before v1.9page.content @@ -1367,6 +1383,23 @@ Page.opener(); --- +### pageErrors {#page-page-errors} + +Added in: v1.56page.pageErrors + +Returns up to (currently) 200 last page errors from this page. See [Page.onPageError(handler)](/api/class-page.mdx#page-event-page-error) for more details. + +**Usage** + +```java +Page.pageErrors(); +``` + +**Returns** +- [List]<[String]># + +--- + ### pause {#page-pause} Added in: v1.9page.pause @@ -1594,6 +1627,27 @@ Page.requestGC(); --- +### requests {#page-requests} + +Added in: v1.56page.requests + +Returns up to (currently) 100 last network request from this page. See [Page.onRequest(handler)](/api/class-page.mdx#page-event-request) for more details. + +Returned requests should be accessed immediately, otherwise they might be collected to prevent unbounded memory growth as new requests come in. Once collected, retrieving most information about the request is impossible. + +Note that requests reported through the [Page.onRequest(handler)](/api/class-page.mdx#page-event-request) request are not collected, so there is a trade off between efficient memory usage with [Page.requests()](/api/class-page.mdx#page-requests) and the amount of available information reported through [Page.onRequest(handler)](/api/class-page.mdx#page-event-request). + +**Usage** + +```java +Page.requests(); +``` + +**Returns** +- [List]<[Request]># + +--- + ### route {#page-route} Added before v1.9page.route diff --git a/java/versioned_docs/version-stable/api/class-pageassertions.mdx b/java/versioned_docs/version-stable/api/class-pageassertions.mdx index 432b87fd3e2..887e0bd5fe4 100644 --- a/java/versioned_docs/version-stable/api/class-pageassertions.mdx +++ b/java/versioned_docs/version-stable/api/class-pageassertions.mdx @@ -5,7 +5,6 @@ title: "PageAssertions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The [PageAssertions] class provides assertion methods that can be used to make assertions about the [Page] state in the tests. diff --git a/java/versioned_docs/version-stable/api/class-playwright.mdx b/java/versioned_docs/version-stable/api/class-playwright.mdx index 6314262a700..53b175db645 100644 --- a/java/versioned_docs/version-stable/api/class-playwright.mdx +++ b/java/versioned_docs/version-stable/api/class-playwright.mdx @@ -5,7 +5,6 @@ title: "Playwright" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Playwright module provides a method to launch a browser instance. The following is a typical example of using Playwright to drive automation: diff --git a/java/versioned_docs/version-stable/api/class-playwrightassertions.mdx b/java/versioned_docs/version-stable/api/class-playwrightassertions.mdx index f8dff25a211..04d27460b3d 100644 --- a/java/versioned_docs/version-stable/api/class-playwrightassertions.mdx +++ b/java/versioned_docs/version-stable/api/class-playwrightassertions.mdx @@ -5,7 +5,6 @@ title: "PlaywrightAssertions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Playwright gives you Web-First Assertions with convenience methods for creating assertions that will wait and retry until the expected condition is met. diff --git a/java/versioned_docs/version-stable/api/class-playwrightexception.mdx b/java/versioned_docs/version-stable/api/class-playwrightexception.mdx index cfc359e06fe..37c0a20db5b 100644 --- a/java/versioned_docs/version-stable/api/class-playwrightexception.mdx +++ b/java/versioned_docs/version-stable/api/class-playwrightexception.mdx @@ -5,7 +5,6 @@ title: "PlaywrightException" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; * extends: [RuntimeException] diff --git a/java/versioned_docs/version-stable/api/class-request.mdx b/java/versioned_docs/version-stable/api/class-request.mdx index 566962850e1..11d2f87c357 100644 --- a/java/versioned_docs/version-stable/api/class-request.mdx +++ b/java/versioned_docs/version-stable/api/class-request.mdx @@ -5,7 +5,6 @@ title: "Request" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Whenever the page sends a request for a network resource the following sequence of events are emitted by [Page]: diff --git a/java/versioned_docs/version-stable/api/class-requestoptions.mdx b/java/versioned_docs/version-stable/api/class-requestoptions.mdx index c6f217f360f..59d44b4e624 100644 --- a/java/versioned_docs/version-stable/api/class-requestoptions.mdx +++ b/java/versioned_docs/version-stable/api/class-requestoptions.mdx @@ -5,7 +5,6 @@ title: "RequestOptions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The [RequestOptions] allows to create form data to be sent via [APIRequestContext]. Playwright will automatically determine content type of the request. diff --git a/java/versioned_docs/version-stable/api/class-response.mdx b/java/versioned_docs/version-stable/api/class-response.mdx index 641bc47c202..a20dc1b5573 100644 --- a/java/versioned_docs/version-stable/api/class-response.mdx +++ b/java/versioned_docs/version-stable/api/class-response.mdx @@ -5,7 +5,6 @@ title: "Response" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [Response] class represents responses which are received by page. diff --git a/java/versioned_docs/version-stable/api/class-route.mdx b/java/versioned_docs/version-stable/api/class-route.mdx index 5e71c317383..a50646b90a0 100644 --- a/java/versioned_docs/version-stable/api/class-route.mdx +++ b/java/versioned_docs/version-stable/api/class-route.mdx @@ -5,7 +5,6 @@ title: "Route" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Whenever a network route is set up with [Page.route()](/api/class-page.mdx#page-route) or [BrowserContext.route()](/api/class-browsercontext.mdx#browser-context-route), the `Route` object allows to handle the route. diff --git a/java/versioned_docs/version-stable/api/class-selectors.mdx b/java/versioned_docs/version-stable/api/class-selectors.mdx index 388c57b4269..2d4b2c13a3c 100644 --- a/java/versioned_docs/version-stable/api/class-selectors.mdx +++ b/java/versioned_docs/version-stable/api/class-selectors.mdx @@ -5,7 +5,6 @@ title: "Selectors" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Selectors can be used to install custom selector engines. See [extensibility](../extensibility.mdx) for more information. diff --git a/java/versioned_docs/version-stable/api/class-timeouterror.mdx b/java/versioned_docs/version-stable/api/class-timeouterror.mdx index b13455a563f..cb9c7aabc13 100644 --- a/java/versioned_docs/version-stable/api/class-timeouterror.mdx +++ b/java/versioned_docs/version-stable/api/class-timeouterror.mdx @@ -5,7 +5,6 @@ title: "TimeoutError" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; * extends: [PlaywrightException] diff --git a/java/versioned_docs/version-stable/api/class-touchscreen.mdx b/java/versioned_docs/version-stable/api/class-touchscreen.mdx index 540e9ec8032..6159d2422d1 100644 --- a/java/versioned_docs/version-stable/api/class-touchscreen.mdx +++ b/java/versioned_docs/version-stable/api/class-touchscreen.mdx @@ -5,7 +5,6 @@ title: "Touchscreen" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The Touchscreen class operates in main-frame CSS pixels relative to the top-left corner of the viewport. Methods on the touchscreen can only be used in browser contexts that have been initialized with `hasTouch` set to true. diff --git a/java/versioned_docs/version-stable/api/class-tracing.mdx b/java/versioned_docs/version-stable/api/class-tracing.mdx index 94cabc29618..844c09f1ca9 100644 --- a/java/versioned_docs/version-stable/api/class-tracing.mdx +++ b/java/versioned_docs/version-stable/api/class-tracing.mdx @@ -5,7 +5,6 @@ title: "Tracing" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; API for collecting and saving Playwright traces. Playwright traces can be opened in [Trace Viewer](../trace-viewer.mdx) after Playwright script runs. diff --git a/java/versioned_docs/version-stable/api/class-video.mdx b/java/versioned_docs/version-stable/api/class-video.mdx index f0a2698150b..e88f02a5b01 100644 --- a/java/versioned_docs/version-stable/api/class-video.mdx +++ b/java/versioned_docs/version-stable/api/class-video.mdx @@ -5,7 +5,6 @@ title: "Video" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; When browser context is created with the `recordVideo` option, each page has a video object associated with it. diff --git a/java/versioned_docs/version-stable/api/class-weberror.mdx b/java/versioned_docs/version-stable/api/class-weberror.mdx index a557739f19f..90796f6d65b 100644 --- a/java/versioned_docs/version-stable/api/class-weberror.mdx +++ b/java/versioned_docs/version-stable/api/class-weberror.mdx @@ -5,7 +5,6 @@ title: "WebError" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [WebError] class represents an unhandled exception thrown in the page. It is dispatched via the [BrowserContext.onWebError(handler)](/api/class-browsercontext.mdx#browser-context-event-web-error) event. diff --git a/java/versioned_docs/version-stable/api/class-websocket.mdx b/java/versioned_docs/version-stable/api/class-websocket.mdx index d6fca617d1d..d1e0e9e0944 100644 --- a/java/versioned_docs/version-stable/api/class-websocket.mdx +++ b/java/versioned_docs/version-stable/api/class-websocket.mdx @@ -5,7 +5,6 @@ title: "WebSocket" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The [WebSocket] class represents WebSocket connections within a page. It provides the ability to inspect and manipulate the data being transmitted and received. diff --git a/java/versioned_docs/version-stable/api/class-websocketframe.mdx b/java/versioned_docs/version-stable/api/class-websocketframe.mdx index 3809999e590..a9eb945cd98 100644 --- a/java/versioned_docs/version-stable/api/class-websocketframe.mdx +++ b/java/versioned_docs/version-stable/api/class-websocketframe.mdx @@ -5,7 +5,6 @@ title: "WebSocketFrame" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The [WebSocketFrame] class represents frames sent over [WebSocket] connections in the page. Frame payload is returned by either [WebSocketFrame.text()](/api/class-websocketframe.mdx#web-socket-frame-text) or [WebSocketFrame.binary()](/api/class-websocketframe.mdx#web-socket-frame-binary) method depending on the its type. diff --git a/java/versioned_docs/version-stable/api/class-websocketroute.mdx b/java/versioned_docs/version-stable/api/class-websocketroute.mdx index 307dd25ec96..204636c059d 100644 --- a/java/versioned_docs/version-stable/api/class-websocketroute.mdx +++ b/java/versioned_docs/version-stable/api/class-websocketroute.mdx @@ -5,7 +5,6 @@ title: "WebSocketRoute" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Whenever a [`WebSocket`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) route is set up with [Page.routeWebSocket()](/api/class-page.mdx#page-route-web-socket) or [BrowserContext.routeWebSocket()](/api/class-browsercontext.mdx#browser-context-route-web-socket), the `WebSocketRoute` object allows to handle the WebSocket, like an actual server would do. diff --git a/java/versioned_docs/version-stable/api/class-worker.mdx b/java/versioned_docs/version-stable/api/class-worker.mdx index 686fc6343aa..f387780e844 100644 --- a/java/versioned_docs/version-stable/api/class-worker.mdx +++ b/java/versioned_docs/version-stable/api/class-worker.mdx @@ -5,7 +5,6 @@ title: "Worker" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The Worker class represents a [WebWorker](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API). `worker` event is emitted on the page object to signal a worker creation. `close` event is emitted on the worker object when the worker is gone. diff --git a/java/versioned_docs/version-stable/aria-snapshots.mdx b/java/versioned_docs/version-stable/aria-snapshots.mdx index 00210824f22..df92b9876cb 100644 --- a/java/versioned_docs/version-stable/aria-snapshots.mdx +++ b/java/versioned_docs/version-stable/aria-snapshots.mdx @@ -5,7 +5,6 @@ title: "Snapshot testing" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; import LiteYouTube from '@site/src/components/LiteYouTube'; diff --git a/java/versioned_docs/version-stable/auth.mdx b/java/versioned_docs/version-stable/auth.mdx index 9030cc97c3d..2a0d6f5f037 100644 --- a/java/versioned_docs/version-stable/auth.mdx +++ b/java/versioned_docs/version-stable/auth.mdx @@ -5,7 +5,6 @@ title: "Authentication" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/browser-contexts.mdx b/java/versioned_docs/version-stable/browser-contexts.mdx index 530fd6d2bd5..2ad715392d4 100644 --- a/java/versioned_docs/version-stable/browser-contexts.mdx +++ b/java/versioned_docs/version-stable/browser-contexts.mdx @@ -5,7 +5,6 @@ title: "Isolation" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/browsers.mdx b/java/versioned_docs/version-stable/browsers.mdx index 7d53ba5e1d2..972f6e90796 100644 --- a/java/versioned_docs/version-stable/browsers.mdx +++ b/java/versioned_docs/version-stable/browsers.mdx @@ -5,7 +5,6 @@ title: "Browsers" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/ci-intro.mdx b/java/versioned_docs/version-stable/ci-intro.mdx index cfb2a0c6d60..494caa884a3 100644 --- a/java/versioned_docs/version-stable/ci-intro.mdx +++ b/java/versioned_docs/version-stable/ci-intro.mdx @@ -5,11 +5,10 @@ title: "Setting up CI" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction -Playwright tests can be run on any CI provider. In this section we cover running tests on GitHub using GitHub Actions. If you would like to see how to configure other CI providers, check out our detailed doc on Continuous Integration. +Playwright tests can be run on any CI provider. In this section we cover running tests on GitHub using GitHub Actions. If you would like to see how to configure other CI providers, check out our detailed [doc on Continuous Integration](./ci.mdx). #### You will learn - [How to set up GitHub Actions](/ci-intro.mdx#setting-up-github-actions) @@ -32,11 +31,11 @@ jobs: timeout-minutes: 60 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v5 + - uses: actions/setup-java@v5 with: distribution: 'temurin' - java-version: '17' + java-version: '25' - name: Build & Install run: mvn -B install -D skipTests --no-transfer-progress - name: Ensure browsers are installed @@ -79,7 +78,7 @@ Clicking on the workflow run shows you all the actions that GitHub performed and [trace.playwright.dev](https://trace.playwright.dev) is a statically hosted variant of the Trace Viewer. You can upload trace files using drag and drop. - +![playwright trace viewer](../images/getting-started/trace-viewer-failed-test.png) ## Properly handling Secrets diff --git a/java/versioned_docs/version-stable/ci.mdx b/java/versioned_docs/version-stable/ci.mdx index d02c986d4eb..5b5e4f63e4e 100644 --- a/java/versioned_docs/version-stable/ci.mdx +++ b/java/versioned_docs/version-stable/ci.mdx @@ -5,7 +5,6 @@ title: "Continuous Integration" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -47,11 +46,11 @@ jobs: timeout-minutes: 60 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v5 + - uses: actions/setup-java@v5 with: distribution: 'temurin' - java-version: '17' + java-version: '25' - name: Build & Install run: mvn -B install -D skipTests --no-transfer-progress - name: Ensure browsers are installed @@ -76,14 +75,14 @@ jobs: name: 'Playwright Tests' runs-on: ubuntu-latest container: - image: mcr.microsoft.com/playwright/java:v1.54.0-noble + image: mcr.microsoft.com/playwright/java:v1.55.0-noble options: --user 1001 steps: - - uses: actions/checkout@v4 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v5 + - uses: actions/setup-java@v5 with: distribution: 'temurin' - java-version: '17' + java-version: '25' - name: Build & Install run: mvn -B install -D skipTests --no-transfer-progress - name: Run tests @@ -104,11 +103,11 @@ jobs: runs-on: ubuntu-latest if: github.event.deployment_status.state == 'success' steps: - - uses: actions/checkout@v4 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v5 + - uses: actions/setup-java@v5 with: distribution: 'temurin' - java-version: '17' + java-version: '25' - name: Build & Install run: mvn -B install -D skipTests --no-transfer-progress - name: Install Playwright @@ -140,9 +139,9 @@ pool: vmImage: ubuntu-latest steps: -- task: JavaToolInstaller@0 +- task: JavaToolInstaller@1 inputs: - versionSpec: '17' + versionSpec: '25' jdkArchitectureOption: 'x64' jdkSourceOption: AzureStorage - script: mvn -B install -D skipTests --no-transfer-progress @@ -161,12 +160,12 @@ trigger: pool: vmImage: ubuntu-latest -container: mcr.microsoft.com/playwright/java:v1.54.0-noble +container: mcr.microsoft.com/playwright/java:v1.55.0-noble steps: -- task: JavaToolInstaller@0 +- task: JavaToolInstaller@1 inputs: - versionSpec: '17' + versionSpec: '25' jdkArchitectureOption: 'x64' jdkSourceOption: AzureStorage @@ -184,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.54.0-noble + - image: mcr.microsoft.com/playwright/java:v1.55.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. @@ -195,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.54.0-noble' } } + agent { docker { image 'mcr.microsoft.com/playwright/java:v1.55.0-noble' } } stages { stage('e2e-tests') { steps { @@ -212,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.54.0-noble +image: mcr.microsoft.com/playwright/java:v1.55.0-noble ``` ### GitLab CI @@ -225,7 +224,7 @@ stages: tests: stage: test - image: mcr.microsoft.com/playwright/java:v1.54.0-noble + image: mcr.microsoft.com/playwright/java:v1.55.0-noble script: ... ``` diff --git a/java/versioned_docs/version-stable/clock.mdx b/java/versioned_docs/version-stable/clock.mdx index ea395dfa335..64655dd6fb1 100644 --- a/java/versioned_docs/version-stable/clock.mdx +++ b/java/versioned_docs/version-stable/clock.mdx @@ -5,7 +5,6 @@ title: "Clock" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; import LiteYouTube from '@site/src/components/LiteYouTube'; diff --git a/java/versioned_docs/version-stable/codegen-intro.mdx b/java/versioned_docs/version-stable/codegen-intro.mdx index 98ae1195323..a85f6686518 100644 --- a/java/versioned_docs/version-stable/codegen-intro.mdx +++ b/java/versioned_docs/version-stable/codegen-intro.mdx @@ -5,7 +5,6 @@ title: "Generating tests" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -35,7 +34,7 @@ With the test generator you can record: * `'assert value'` to assert that an element has a specific value ###### - +![recording a test](../images/getting-started/record-test-java.png) ###### When you finish interacting with the page, press the `'record'` button to stop recording and use the `'copy'` button to copy the generated code to your editor. @@ -54,7 +53,7 @@ You can generate [locators](/locators.mdx) with the test generator. * Use the copy button to copy the locator and paste it into your code ###### - +![picking a locator](../images/getting-started/pick-locator-java.png) ### Emulation diff --git a/java/versioned_docs/version-stable/codegen.mdx b/java/versioned_docs/version-stable/codegen.mdx index fa31003521d..1d5ec814d2c 100644 --- a/java/versioned_docs/version-stable/codegen.mdx +++ b/java/versioned_docs/version-stable/codegen.mdx @@ -5,7 +5,6 @@ title: "Test generator" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; import LiteYouTube from '@site/src/components/LiteYouTube'; diff --git a/java/versioned_docs/version-stable/debug.mdx b/java/versioned_docs/version-stable/debug.mdx index 10c4464c471..802716ca7cd 100644 --- a/java/versioned_docs/version-stable/debug.mdx +++ b/java/versioned_docs/version-stable/debug.mdx @@ -5,7 +5,6 @@ title: "Debugging Tests" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Playwright Inspector @@ -119,8 +118,6 @@ When running in Debug Mode with `PWDEBUG=console`, a `playwright` object is avai - **See console logs** during execution (or learn how to [read logs via API](./api/class-page.mdx#page-event-console)) - Check **network activity** and other developer tools features -This will also set the default timeouts of Playwright to 0 (= no timeout). - Browser Developer Tools with Playwright object To debug your tests using the browser developer tools, start by setting a breakpoint in your test to pause the execution using the [Page.pause()](/api/class-page.mdx#page-pause) method. diff --git a/java/versioned_docs/version-stable/dialogs.mdx b/java/versioned_docs/version-stable/dialogs.mdx index 04802aaeb66..9f984d4bfd5 100644 --- a/java/versioned_docs/version-stable/dialogs.mdx +++ b/java/versioned_docs/version-stable/dialogs.mdx @@ -5,7 +5,6 @@ title: "Dialogs" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/docker.mdx b/java/versioned_docs/version-stable/docker.mdx index 304fa203b40..4c6f9882394 100644 --- a/java/versioned_docs/version-stable/docker.mdx +++ b/java/versioned_docs/version-stable/docker.mdx @@ -5,7 +5,6 @@ title: "Docker" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -23,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.54.0-noble +docker pull mcr.microsoft.com/playwright/java:v1.55.0-noble ``` ### Run the image @@ -35,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.54.0-noble /bin/bash +docker run -it --rm --ipc=host mcr.microsoft.com/playwright/java:v1.55.0-noble /bin/bash ``` #### Crawling and scraping @@ -43,7 +42,7 @@ docker run -it --rm --ipc=host mcr.microsoft.com/playwright/java:v1.54.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.54.0-noble /bin/bash +docker run -it --rm --ipc=host --user pwuser --security-opt seccomp=seccomp_profile.json mcr.microsoft.com/playwright/java:v1.55.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: @@ -83,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.54.0-noble /bin/sh -c "npx -y playwright@1.54.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.55.0-noble /bin/sh -c "npx -y playwright@1.55.0 run-server --port 3000 --host 0.0.0.0" ``` #### Connecting to the Server @@ -108,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.54.0-noble /bin/sh -c "npx -y playwright@1.54.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.55.0-noble /bin/sh -c "npx -y playwright@1.55.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. @@ -123,9 +122,9 @@ When running tests remotely, ensure the Playwright version in your tests matches See [all available image tags]. We currently publish images with the following tags: -- `:v1.54.0` - Playwright v1.54.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat). -- `:v1.54.0-noble` - Playwright v1.54.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat). -- `:v1.54.0-jammy` - Playwright v1.54.0 release docker image based on Ubuntu 22.04 LTS (Jammy Jellyfish). +- `:v1.55.0` - Playwright v1.55.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat). +- `:v1.55.0-noble` - Playwright v1.55.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat). +- `:v1.55.0-jammy` - Playwright v1.55.0 release docker image based on Ubuntu 22.04 LTS (Jammy Jellyfish). :::note diff --git a/java/versioned_docs/version-stable/downloads.mdx b/java/versioned_docs/version-stable/downloads.mdx index e979439aed6..ef37e8effa6 100644 --- a/java/versioned_docs/version-stable/downloads.mdx +++ b/java/versioned_docs/version-stable/downloads.mdx @@ -5,7 +5,6 @@ title: "Downloads" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/emulation.mdx b/java/versioned_docs/version-stable/emulation.mdx index 051d97c4056..e9ab0fed3f8 100644 --- a/java/versioned_docs/version-stable/emulation.mdx +++ b/java/versioned_docs/version-stable/emulation.mdx @@ -5,7 +5,6 @@ title: "Emulation" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/evaluating.mdx b/java/versioned_docs/version-stable/evaluating.mdx index 80bddf49440..c584364e5df 100644 --- a/java/versioned_docs/version-stable/evaluating.mdx +++ b/java/versioned_docs/version-stable/evaluating.mdx @@ -5,7 +5,6 @@ title: "Evaluating JavaScript" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/events.mdx b/java/versioned_docs/version-stable/events.mdx index 346882f0634..8c3a6624ae8 100644 --- a/java/versioned_docs/version-stable/events.mdx +++ b/java/versioned_docs/version-stable/events.mdx @@ -5,7 +5,6 @@ title: "Events" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/extensibility.mdx b/java/versioned_docs/version-stable/extensibility.mdx index 32027c6ee91..2e2e4efe5f3 100644 --- a/java/versioned_docs/version-stable/extensibility.mdx +++ b/java/versioned_docs/version-stable/extensibility.mdx @@ -5,7 +5,6 @@ title: "Extensibility" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Custom selector engines diff --git a/java/versioned_docs/version-stable/frames.mdx b/java/versioned_docs/version-stable/frames.mdx index 1b149ea7eaa..0e01dba06f1 100644 --- a/java/versioned_docs/version-stable/frames.mdx +++ b/java/versioned_docs/version-stable/frames.mdx @@ -5,7 +5,6 @@ title: "Frames" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/handles.mdx b/java/versioned_docs/version-stable/handles.mdx index 01bc3054d39..d8e8c3824dc 100644 --- a/java/versioned_docs/version-stable/handles.mdx +++ b/java/versioned_docs/version-stable/handles.mdx @@ -5,7 +5,6 @@ title: "Handles" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/input.mdx b/java/versioned_docs/version-stable/input.mdx index 1031a3a0c8b..1527d1df3db 100644 --- a/java/versioned_docs/version-stable/input.mdx +++ b/java/versioned_docs/version-stable/input.mdx @@ -5,7 +5,6 @@ title: "Actions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/intro.mdx b/java/versioned_docs/version-stable/intro.mdx index 906a2bc338c..34fc124f7a3 100644 --- a/java/versioned_docs/version-stable/intro.mdx +++ b/java/versioned_docs/version-stable/intro.mdx @@ -5,7 +5,6 @@ title: "Installation" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -59,7 +58,7 @@ public class App { com.microsoft.playwright playwright - 1.54.0 + 1.55.0 @@ -129,7 +128,7 @@ By default browsers launched with Playwright run headless, meaning no browser UI ## System requirements - Java 8 or higher. -- Windows 10+, Windows Server 2016+ or Windows Subsystem for Linux (WSL). +- Windows 11+, Windows Server 2019+ or Windows Subsystem for Linux (WSL). - macOS 14 Ventura, or later. - Debian 12, Debian 13, Ubuntu 22.04, Ubuntu 24.04, on x86-64 and arm64 architecture. diff --git a/java/versioned_docs/version-stable/junit.mdx b/java/versioned_docs/version-stable/junit.mdx index ce9c2169a2d..8cd9ee7b427 100644 --- a/java/versioned_docs/version-stable/junit.mdx +++ b/java/versioned_docs/version-stable/junit.mdx @@ -5,7 +5,6 @@ title: "JUnit (experimental)" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/languages.mdx b/java/versioned_docs/version-stable/languages.mdx index 5e4c8e296e3..572b9365997 100644 --- a/java/versioned_docs/version-stable/languages.mdx +++ b/java/versioned_docs/version-stable/languages.mdx @@ -5,7 +5,6 @@ title: "Supported languages" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/locators.mdx b/java/versioned_docs/version-stable/locators.mdx index c87e0f34454..cbb508e2a73 100644 --- a/java/versioned_docs/version-stable/locators.mdx +++ b/java/versioned_docs/version-stable/locators.mdx @@ -5,7 +5,6 @@ title: "Locators" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/mock.mdx b/java/versioned_docs/version-stable/mock.mdx index 66a23c670ba..4e102340503 100644 --- a/java/versioned_docs/version-stable/mock.mdx +++ b/java/versioned_docs/version-stable/mock.mdx @@ -5,7 +5,6 @@ title: "Mock APIs" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/navigations.mdx b/java/versioned_docs/version-stable/navigations.mdx index 59e2d1e596b..5d29509f164 100644 --- a/java/versioned_docs/version-stable/navigations.mdx +++ b/java/versioned_docs/version-stable/navigations.mdx @@ -5,7 +5,6 @@ title: "Navigations" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/network.mdx b/java/versioned_docs/version-stable/network.mdx index 04045944563..97c34f97b68 100644 --- a/java/versioned_docs/version-stable/network.mdx +++ b/java/versioned_docs/version-stable/network.mdx @@ -5,7 +5,6 @@ title: "Network" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/other-locators.mdx b/java/versioned_docs/version-stable/other-locators.mdx index ad2a279040f..f00a25a0350 100644 --- a/java/versioned_docs/version-stable/other-locators.mdx +++ b/java/versioned_docs/version-stable/other-locators.mdx @@ -5,7 +5,6 @@ title: "Other locators" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -121,9 +120,11 @@ The `:is()` pseudo-class is an [experimental CSS pseudo-class](https://developer ### CSS: matching elements based on layout -:::note +:::warning + +Layout selectors are deprecated and may be removed in the future. Matching based on layout may produce unexpected results. For example, a different element could be matched when layout changes by one pixel. -Matching based on layout may produce unexpected results. For example, a different element could be matched when layout changes by one pixel. +We recommend prioritizing [user-visible locators](./locators.mdx#quick-guide) instead. ::: Sometimes, it is hard to come up with a good selector to the target element when it lacks distinctive features. In this case, using Playwright layout CSS pseudo-classes could help. These can be combined with regular CSS to pinpoint one of the multiple choices. diff --git a/java/versioned_docs/version-stable/pages.mdx b/java/versioned_docs/version-stable/pages.mdx index 783fba26a51..62e190dc35a 100644 --- a/java/versioned_docs/version-stable/pages.mdx +++ b/java/versioned_docs/version-stable/pages.mdx @@ -5,7 +5,6 @@ title: "Pages" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Pages diff --git a/java/versioned_docs/version-stable/pom.mdx b/java/versioned_docs/version-stable/pom.mdx index cdd27fb94ad..25a69f6b6b8 100644 --- a/java/versioned_docs/version-stable/pom.mdx +++ b/java/versioned_docs/version-stable/pom.mdx @@ -5,7 +5,6 @@ title: "Page object models" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/release-notes.mdx b/java/versioned_docs/version-stable/release-notes.mdx index a43e1395ae6..903230912f0 100644 --- a/java/versioned_docs/version-stable/release-notes.mdx +++ b/java/versioned_docs/version-stable/release-notes.mdx @@ -6,12 +6,11 @@ toc_max_heading_level: 2 import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Version 1.55 ### Codegen -- Automatic `toBeVisible()` assertions: Codegen can now generate automatic `toBeVisible()` assertions for common UI interactions. This feature can be enabled in the Codegen settings UI. +- Automatic `isVisible()` assertions: Codegen can now generate automatic `isVisible()` assertions for common UI interactions. This feature can be enabled in the Codegen settings UI. ### Breaking Changes - ⚠️ Dropped support for Chromium extension manifest v2. diff --git a/java/versioned_docs/version-stable/running-tests.mdx b/java/versioned_docs/version-stable/running-tests.mdx index 37009908dbc..51e9aa9e33a 100644 --- a/java/versioned_docs/version-stable/running-tests.mdx +++ b/java/versioned_docs/version-stable/running-tests.mdx @@ -5,7 +5,6 @@ title: "Running and debugging tests" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/screenshots.mdx b/java/versioned_docs/version-stable/screenshots.mdx index 217bdeac753..90dbb322a90 100644 --- a/java/versioned_docs/version-stable/screenshots.mdx +++ b/java/versioned_docs/version-stable/screenshots.mdx @@ -5,7 +5,6 @@ title: "Screenshots" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/selenium-grid.mdx b/java/versioned_docs/version-stable/selenium-grid.mdx index 3459ddced8d..87a1a1d154e 100644 --- a/java/versioned_docs/version-stable/selenium-grid.mdx +++ b/java/versioned_docs/version-stable/selenium-grid.mdx @@ -5,7 +5,6 @@ title: "Selenium Grid (experimental)" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/test-assertions.mdx b/java/versioned_docs/version-stable/test-assertions.mdx index 1181de61855..88dc40b867c 100644 --- a/java/versioned_docs/version-stable/test-assertions.mdx +++ b/java/versioned_docs/version-stable/test-assertions.mdx @@ -5,7 +5,6 @@ title: "Assertions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## List of assertions diff --git a/java/versioned_docs/version-stable/test-runners.mdx b/java/versioned_docs/version-stable/test-runners.mdx index 22c0962ccb5..d3cb4020276 100644 --- a/java/versioned_docs/version-stable/test-runners.mdx +++ b/java/versioned_docs/version-stable/test-runners.mdx @@ -5,7 +5,6 @@ title: "Test Runners" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -199,7 +198,7 @@ repositories { } dependencies { - implementation 'com.microsoft.playwright:playwright:1.54.0' + implementation 'com.microsoft.playwright:playwright:1.55.0' } application { @@ -232,7 +231,7 @@ repositories { } dependencies { - implementation("com.microsoft.playwright:playwright:1.54.0") + implementation("com.microsoft.playwright:playwright:1.55.0") } application { diff --git a/java/versioned_docs/version-stable/threading.mdx b/java/versioned_docs/version-stable/threading.mdx index a3f1fb66bff..e97e36a486b 100644 --- a/java/versioned_docs/version-stable/threading.mdx +++ b/java/versioned_docs/version-stable/threading.mdx @@ -5,7 +5,6 @@ title: "Multithreading" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/touch-events.mdx b/java/versioned_docs/version-stable/touch-events.mdx index 916a44345ad..1041b23f9af 100644 --- a/java/versioned_docs/version-stable/touch-events.mdx +++ b/java/versioned_docs/version-stable/touch-events.mdx @@ -5,7 +5,6 @@ title: "Touch events (legacy)" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/trace-viewer-intro.mdx b/java/versioned_docs/version-stable/trace-viewer-intro.mdx index 59b4fb4858c..1110c26c0a2 100644 --- a/java/versioned_docs/version-stable/trace-viewer-intro.mdx +++ b/java/versioned_docs/version-stable/trace-viewer-intro.mdx @@ -5,7 +5,6 @@ title: "Trace viewer" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/trace-viewer.mdx b/java/versioned_docs/version-stable/trace-viewer.mdx index 00f1bfd516d..b446e1d01a6 100644 --- a/java/versioned_docs/version-stable/trace-viewer.mdx +++ b/java/versioned_docs/version-stable/trace-viewer.mdx @@ -5,7 +5,6 @@ title: "Trace viewer" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; import LiteYouTube from '@site/src/components/LiteYouTube'; diff --git a/java/versioned_docs/version-stable/videos.mdx b/java/versioned_docs/version-stable/videos.mdx index d0fa0cb5785..53b66491503 100644 --- a/java/versioned_docs/version-stable/videos.mdx +++ b/java/versioned_docs/version-stable/videos.mdx @@ -5,7 +5,6 @@ title: "Videos" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/webview2.mdx b/java/versioned_docs/version-stable/webview2.mdx index cc0e73b3886..394d4f055ff 100644 --- a/java/versioned_docs/version-stable/webview2.mdx +++ b/java/versioned_docs/version-stable/webview2.mdx @@ -5,7 +5,6 @@ title: "WebView2" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/java/versioned_docs/version-stable/writing-tests.mdx b/java/versioned_docs/version-stable/writing-tests.mdx index 2357972c783..95018cbf098 100644 --- a/java/versioned_docs/version-stable/writing-tests.mdx +++ b/java/versioned_docs/version-stable/writing-tests.mdx @@ -5,7 +5,6 @@ title: "Writing tests" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/images/test-agents/generator-prompt.png b/nodejs/versioned_docs/images/test-agents/generator-prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..56c67cf3ce8b2e027acd979f812980b9629925b0 GIT binary patch literal 34718 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 DEo27{ literal 0 HcmV?d00001 diff --git a/nodejs/versioned_docs/images/test-agents/healer-prompt.png b/nodejs/versioned_docs/images/test-agents/healer-prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..5b6116972cfb69d06226a14385b9c9db685f8110 GIT binary patch literal 28393 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 ZlXEJpo-%tM0#~jnE2znrJ~V#)KLAt<*;oJo literal 0 HcmV?d00001 diff --git a/nodejs/versioned_docs/version-stable/accessibility-testing.mdx b/nodejs/versioned_docs/version-stable/accessibility-testing.mdx index 9afe292783f..1001896d000 100644 --- a/nodejs/versioned_docs/version-stable/accessibility-testing.mdx +++ b/nodejs/versioned_docs/version-stable/accessibility-testing.mdx @@ -5,7 +5,6 @@ title: "Accessibility testing" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/actionability.mdx b/nodejs/versioned_docs/version-stable/actionability.mdx index 6e62170e8ba..c1a305d5eb9 100644 --- a/nodejs/versioned_docs/version-stable/actionability.mdx +++ b/nodejs/versioned_docs/version-stable/actionability.mdx @@ -5,7 +5,6 @@ title: "Auto-waiting" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/api-testing.mdx b/nodejs/versioned_docs/version-stable/api-testing.mdx index c078709d65c..45f4e7a5af0 100644 --- a/nodejs/versioned_docs/version-stable/api-testing.mdx +++ b/nodejs/versioned_docs/version-stable/api-testing.mdx @@ -5,7 +5,6 @@ title: "API testing" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/api/class-accessibility.mdx b/nodejs/versioned_docs/version-stable/api/class-accessibility.mdx index 94544635c8d..14ce9846c70 100644 --- a/nodejs/versioned_docs/version-stable/api/class-accessibility.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-accessibility.mdx @@ -5,7 +5,6 @@ title: "Accessibility" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; :::warning[Deprecated] diff --git a/nodejs/versioned_docs/version-stable/api/class-android.mdx b/nodejs/versioned_docs/version-stable/api/class-android.mdx index 5dca12a85c0..180b780be04 100644 --- a/nodejs/versioned_docs/version-stable/api/class-android.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-android.mdx @@ -5,7 +5,6 @@ title: "Android" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Playwright has **experimental** support for Android automation. This includes Chrome for Android and Android WebView. diff --git a/nodejs/versioned_docs/version-stable/api/class-androiddevice.mdx b/nodejs/versioned_docs/version-stable/api/class-androiddevice.mdx index 5d6a367876a..5e628dfc641 100644 --- a/nodejs/versioned_docs/version-stable/api/class-androiddevice.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-androiddevice.mdx @@ -5,7 +5,6 @@ title: "AndroidDevice" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [AndroidDevice] represents a connected device, either real hardware or emulated. Devices can be obtained using [android.devices()](/api/class-android.mdx#android-devices). diff --git a/nodejs/versioned_docs/version-stable/api/class-androidinput.mdx b/nodejs/versioned_docs/version-stable/api/class-androidinput.mdx index 3f1d1e8f41d..30ab549be38 100644 --- a/nodejs/versioned_docs/version-stable/api/class-androidinput.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-androidinput.mdx @@ -5,7 +5,6 @@ title: "AndroidInput" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; diff --git a/nodejs/versioned_docs/version-stable/api/class-androidsocket.mdx b/nodejs/versioned_docs/version-stable/api/class-androidsocket.mdx index 8f3200cbfa4..2aceae3d950 100644 --- a/nodejs/versioned_docs/version-stable/api/class-androidsocket.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-androidsocket.mdx @@ -5,7 +5,6 @@ title: "AndroidSocket" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [AndroidSocket] is a way to communicate with a process launched on the [AndroidDevice]. Use [androidDevice.open()](/api/class-androiddevice.mdx#android-device-open) to open a socket. diff --git a/nodejs/versioned_docs/version-stable/api/class-androidwebview.mdx b/nodejs/versioned_docs/version-stable/api/class-androidwebview.mdx index a788446c9d0..83b8198e26e 100644 --- a/nodejs/versioned_docs/version-stable/api/class-androidwebview.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-androidwebview.mdx @@ -5,7 +5,6 @@ title: "AndroidWebView" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [AndroidWebView] represents a WebView open on the [AndroidDevice]. WebView is usually obtained using [androidDevice.webView()](/api/class-androiddevice.mdx#android-device-web-view). diff --git a/nodejs/versioned_docs/version-stable/api/class-apirequest.mdx b/nodejs/versioned_docs/version-stable/api/class-apirequest.mdx index fe1706bc2f6..d93d91e3b55 100644 --- a/nodejs/versioned_docs/version-stable/api/class-apirequest.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-apirequest.mdx @@ -5,7 +5,6 @@ title: "APIRequest" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Exposes API that can be used for the Web API testing. This class is used for creating [APIRequestContext] instance which in turn can be used for sending web requests. An instance of this class can be obtained via [playwright.request](/api/class-playwright.mdx#playwright-request). For more information see [APIRequestContext]. diff --git a/nodejs/versioned_docs/version-stable/api/class-apirequestcontext.mdx b/nodejs/versioned_docs/version-stable/api/class-apirequestcontext.mdx index 1e81638d528..becb68c8048 100644 --- a/nodejs/versioned_docs/version-stable/api/class-apirequestcontext.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-apirequestcontext.mdx @@ -5,7 +5,6 @@ title: "APIRequestContext" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; This API is used for the Web API testing. You can use it to trigger API endpoints, configure micro-services, prepare environment or the service to your e2e test. diff --git a/nodejs/versioned_docs/version-stable/api/class-apiresponse.mdx b/nodejs/versioned_docs/version-stable/api/class-apiresponse.mdx index 0e792609d0c..c9e92db9165 100644 --- a/nodejs/versioned_docs/version-stable/api/class-apiresponse.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-apiresponse.mdx @@ -5,7 +5,6 @@ title: "APIResponse" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [APIResponse] class represents responses returned by [apiRequestContext.get()](/api/class-apirequestcontext.mdx#api-request-context-get) and similar methods. diff --git a/nodejs/versioned_docs/version-stable/api/class-apiresponseassertions.mdx b/nodejs/versioned_docs/version-stable/api/class-apiresponseassertions.mdx index 10f8db11089..1c91dbdf8ab 100644 --- a/nodejs/versioned_docs/version-stable/api/class-apiresponseassertions.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-apiresponseassertions.mdx @@ -5,7 +5,6 @@ title: "APIResponseAssertions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The [APIResponseAssertions] class provides assertion methods that can be used to make assertions about the [APIResponse] in the tests. diff --git a/nodejs/versioned_docs/version-stable/api/class-browser.mdx b/nodejs/versioned_docs/version-stable/api/class-browser.mdx index b0c1d421b0d..755023ae855 100644 --- a/nodejs/versioned_docs/version-stable/api/class-browser.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-browser.mdx @@ -5,7 +5,6 @@ title: "Browser" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; A Browser is created via [browserType.launch()](/api/class-browsertype.mdx#browser-type-launch). An example of using a [Browser] to create a [Page]: diff --git a/nodejs/versioned_docs/version-stable/api/class-browsercontext.mdx b/nodejs/versioned_docs/version-stable/api/class-browsercontext.mdx index 9e0ef6e2fe9..6648940785c 100644 --- a/nodejs/versioned_docs/version-stable/api/class-browsercontext.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-browsercontext.mdx @@ -5,7 +5,6 @@ title: "BrowserContext" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; BrowserContexts provide a way to operate multiple independent browser sessions. @@ -128,28 +127,6 @@ The order of evaluation of multiple scripts installed via [browserContext.addIni --- -### backgroundPages {#browser-context-background-pages} - -Added in: v1.11browserContext.backgroundPages - -:::note - -Background pages are only supported on Chromium-based browsers. -::: - -All existing background pages in the context. - -**Usage** - -```js -browserContext.backgroundPages(); -``` - -**Returns** -- [Array]<[Page]># - ---- - ### browser {#browser-context-browser} Added before v1.9browserContext.browser @@ -1059,32 +1036,6 @@ browserContext.tracing ## Events -### on('backgroundpage') {#browser-context-event-background-page} - -Added in: v1.11browserContext.on('backgroundpage') - -:::note - -Only works with Chromium browser's persistent context. -::: - -Emitted when new background page is created in the context. - -```js -const backgroundPage = await context.waitForEvent('backgroundpage'); -``` - -**Usage** - -```js -browserContext.on('backgroundpage', data => {}); -``` - -**Event data** -- [Page] - ---- - ### on('close') {#browser-context-event-close} Added before v1.9browserContext.on('close') @@ -1299,6 +1250,54 @@ browserContext.on('weberror', data => {}); ## Deprecated +### on('backgroundpage') {#browser-context-event-background-page} + +Added in: v1.11browserContext.on('backgroundpage') + +:::warning Deprecated + +Background pages have been removed from Chromium together with Manifest V2 extensions. + +::: + + +This event is not emitted. + +**Usage** + +```js +browserContext.on('backgroundpage', data => {}); +``` + +**Event data** +- [Page] + +--- + +### backgroundPages {#browser-context-background-pages} + +Added in: v1.11browserContext.backgroundPages + +:::warning Deprecated + +Background pages have been removed from Chromium together with Manifest V2 extensions. + +::: + + +Returns an empty list. + +**Usage** + +```js +browserContext.backgroundPages(); +``` + +**Returns** +- [Array]<[Page]># + +--- + ### setHTTPCredentials {#browser-context-set-http-credentials} Added before v1.9browserContext.setHTTPCredentials diff --git a/nodejs/versioned_docs/version-stable/api/class-browserserver.mdx b/nodejs/versioned_docs/version-stable/api/class-browserserver.mdx index 0888cce7a07..2dfdc6c3aac 100644 --- a/nodejs/versioned_docs/version-stable/api/class-browserserver.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-browserserver.mdx @@ -5,7 +5,6 @@ title: "BrowserServer" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; diff --git a/nodejs/versioned_docs/version-stable/api/class-browsertype.mdx b/nodejs/versioned_docs/version-stable/api/class-browsertype.mdx index b0fbce2d4df..e226dc74c28 100644 --- a/nodejs/versioned_docs/version-stable/api/class-browsertype.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-browsertype.mdx @@ -5,7 +5,6 @@ title: "BrowserType" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; BrowserType provides methods to launch a specific browser instance or connect to an existing one. The following is a typical example of using Playwright to drive automation: @@ -215,9 +214,7 @@ const browser = await chromium.launch({ // Or 'firefox' or 'webkit'. - `downloadsPath` [string] *(optional)*# If specified, accepted downloads are downloaded into this directory. Otherwise, temporary directory is created and is deleted when browser is closed. In either case, the downloads are deleted when the browser context they were created in is closed. - - `env` [Object]<[string], [string] | [number] | [boolean]> *(optional)*# - - Specify environment variables that will be visible to the browser. Defaults to `process.env`. + - `env` [Object]<[string], [string] | [undefined]> *(optional)*# - `executablePath` [string] *(optional)*# Path to a browser executable to run instead of the bundled one. If [executablePath](/api/class-browsertype.mdx#browser-type-launch-option-executable-path) is a relative path, then it is resolved relative to the current working directory. Note that Playwright only works with the bundled Chromium, Firefox or WebKit, use at your own risk. @@ -398,9 +395,7 @@ await browserType.launchPersistentContext(userDataDir, options); - `downloadsPath` [string] *(optional)*# If specified, accepted downloads are downloaded into this directory. Otherwise, temporary directory is created and is deleted when browser is closed. In either case, the downloads are deleted when the browser context they were created in is closed. - - `env` [Object]<[string], [string] | [number] | [boolean]> *(optional)*# - - Specify environment variables that will be visible to the browser. Defaults to `process.env`. + - `env` [Object]<[string], [string] | [undefined]> *(optional)*# - `executablePath` [string] *(optional)*# Path to a browser executable to run instead of the bundled one. If [executablePath](/api/class-browsertype.mdx#browser-type-launch-persistent-context-option-executable-path) is a relative path, then it is resolved relative to the current working directory. Note that Playwright only works with the bundled Chromium, Firefox or WebKit, use at your own risk. @@ -659,9 +654,7 @@ const { chromium } = require('playwright'); // Or 'webkit' or 'firefox'. - `downloadsPath` [string] *(optional)*# If specified, accepted downloads are downloaded into this directory. Otherwise, temporary directory is created and is deleted when browser is closed. In either case, the downloads are deleted when the browser context they were created in is closed. - - `env` [Object]<[string], [string] | [number] | [boolean]> *(optional)*# - - Specify environment variables that will be visible to the browser. Defaults to `process.env`. + - `env` [Object]<[string], [string] | [undefined]> *(optional)*# - `executablePath` [string] *(optional)*# Path to a browser executable to run instead of the bundled one. If [executablePath](/api/class-browsertype.mdx#browser-type-launch-server-option-executable-path) is a relative path, then it is resolved relative to the current working directory. Note that Playwright only works with the bundled Chromium, Firefox or WebKit, use at your own risk. diff --git a/nodejs/versioned_docs/version-stable/api/class-cdpsession.mdx b/nodejs/versioned_docs/version-stable/api/class-cdpsession.mdx index 78ac899f25f..8d321cacdf0 100644 --- a/nodejs/versioned_docs/version-stable/api/class-cdpsession.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-cdpsession.mdx @@ -5,7 +5,6 @@ title: "CDPSession" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The `CDPSession` instances are used to talk raw Chrome Devtools Protocol: diff --git a/nodejs/versioned_docs/version-stable/api/class-clock.mdx b/nodejs/versioned_docs/version-stable/api/class-clock.mdx index 74ae60ab1c0..20fdb94a376 100644 --- a/nodejs/versioned_docs/version-stable/api/class-clock.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-clock.mdx @@ -5,7 +5,6 @@ title: "Clock" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Accurately simulating time-dependent behavior is essential for verifying the correctness of applications. Learn more about [clock emulation](../clock.mdx). diff --git a/nodejs/versioned_docs/version-stable/api/class-consolemessage.mdx b/nodejs/versioned_docs/version-stable/api/class-consolemessage.mdx index 837d5730c2a..2b92dadfdae 100644 --- a/nodejs/versioned_docs/version-stable/api/class-consolemessage.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-consolemessage.mdx @@ -5,7 +5,6 @@ title: "ConsoleMessage" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [ConsoleMessage] objects are dispatched by page via the [page.on('console')](/api/class-page.mdx#page-event-console) event. For each console message logged in the page there will be corresponding event in the Playwright context. diff --git a/nodejs/versioned_docs/version-stable/api/class-coverage.mdx b/nodejs/versioned_docs/version-stable/api/class-coverage.mdx index 51021f5a5ef..4c64d6cf908 100644 --- a/nodejs/versioned_docs/version-stable/api/class-coverage.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-coverage.mdx @@ -5,7 +5,6 @@ title: "Coverage" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Coverage gathers information about parts of JavaScript and CSS that were used by the page. diff --git a/nodejs/versioned_docs/version-stable/api/class-dialog.mdx b/nodejs/versioned_docs/version-stable/api/class-dialog.mdx index 9a5a703fe38..1f3347fc018 100644 --- a/nodejs/versioned_docs/version-stable/api/class-dialog.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-dialog.mdx @@ -5,7 +5,6 @@ title: "Dialog" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [Dialog] objects are dispatched by page via the [page.on('dialog')](/api/class-page.mdx#page-event-dialog) event. diff --git a/nodejs/versioned_docs/version-stable/api/class-download.mdx b/nodejs/versioned_docs/version-stable/api/class-download.mdx index c20a68cc7a2..1b22f24a763 100644 --- a/nodejs/versioned_docs/version-stable/api/class-download.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-download.mdx @@ -5,7 +5,6 @@ title: "Download" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [Download] objects are dispatched by page via the [page.on('download')](/api/class-page.mdx#page-event-download) event. diff --git a/nodejs/versioned_docs/version-stable/api/class-electron.mdx b/nodejs/versioned_docs/version-stable/api/class-electron.mdx index 7293eb056d2..f73104f385d 100644 --- a/nodejs/versioned_docs/version-stable/api/class-electron.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-electron.mdx @@ -5,7 +5,6 @@ title: "Electron" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Playwright has **experimental** support for Electron automation. You can access electron namespace via: diff --git a/nodejs/versioned_docs/version-stable/api/class-electronapplication.mdx b/nodejs/versioned_docs/version-stable/api/class-electronapplication.mdx index d05afb5fa2d..544f41b9c1e 100644 --- a/nodejs/versioned_docs/version-stable/api/class-electronapplication.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-electronapplication.mdx @@ -5,7 +5,6 @@ title: "ElectronApplication" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Electron application representation. You can use [electron.launch()](/api/class-electron.mdx#electron-launch) to obtain the application instance. This instance you can control main electron process as well as work with Electron windows: diff --git a/nodejs/versioned_docs/version-stable/api/class-elementhandle.mdx b/nodejs/versioned_docs/version-stable/api/class-elementhandle.mdx index f9a64c69699..9f11669d1a8 100644 --- a/nodejs/versioned_docs/version-stable/api/class-elementhandle.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-elementhandle.mdx @@ -5,7 +5,6 @@ title: "ElementHandle" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; * extends: [JSHandle] diff --git a/nodejs/versioned_docs/version-stable/api/class-filechooser.mdx b/nodejs/versioned_docs/version-stable/api/class-filechooser.mdx index fdcb573cdd5..99f5cb32318 100644 --- a/nodejs/versioned_docs/version-stable/api/class-filechooser.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-filechooser.mdx @@ -5,7 +5,6 @@ title: "FileChooser" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [FileChooser] objects are dispatched by the page in the [page.on('filechooser')](/api/class-page.mdx#page-event-file-chooser) event. diff --git a/nodejs/versioned_docs/version-stable/api/class-fixtures.mdx b/nodejs/versioned_docs/version-stable/api/class-fixtures.mdx index ca43aed71f5..7425517af01 100644 --- a/nodejs/versioned_docs/version-stable/api/class-fixtures.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-fixtures.mdx @@ -5,7 +5,6 @@ title: "Fixtures" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Playwright Test is based on the concept of the [test fixtures](../test-fixtures.mdx). Test fixtures are used to establish environment for each test, giving the test everything it needs and nothing else. diff --git a/nodejs/versioned_docs/version-stable/api/class-frame.mdx b/nodejs/versioned_docs/version-stable/api/class-frame.mdx index 28968838682..397db6b0ccb 100644 --- a/nodejs/versioned_docs/version-stable/api/class-frame.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-frame.mdx @@ -5,7 +5,6 @@ title: "Frame" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; At every point of time, page exposes its current frame tree via the [page.mainFrame()](/api/class-page.mdx#page-main-frame) and [frame.childFrames()](/api/class-frame.mdx#frame-child-frames) methods. diff --git a/nodejs/versioned_docs/version-stable/api/class-framelocator.mdx b/nodejs/versioned_docs/version-stable/api/class-framelocator.mdx index 69f8b5794b2..5282e3eab77 100644 --- a/nodejs/versioned_docs/version-stable/api/class-framelocator.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-framelocator.mdx @@ -5,7 +5,6 @@ title: "FrameLocator" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; FrameLocator represents a view to the `iframe` on the page. It captures the logic sufficient to retrieve the `iframe` and locate elements in that iframe. FrameLocator can be created with either [locator.contentFrame()](/api/class-locator.mdx#locator-content-frame), [page.frameLocator()](/api/class-page.mdx#page-frame-locator) or [locator.frameLocator()](/api/class-locator.mdx#locator-frame-locator) method. diff --git a/nodejs/versioned_docs/version-stable/api/class-fullconfig.mdx b/nodejs/versioned_docs/version-stable/api/class-fullconfig.mdx index 49f5513961f..39899fdd35f 100644 --- a/nodejs/versioned_docs/version-stable/api/class-fullconfig.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-fullconfig.mdx @@ -5,7 +5,6 @@ title: "FullConfig" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Resolved configuration which is accessible via [testInfo.config](/api/class-testinfo.mdx#test-info-config) and is passed to the test reporters. To see the format of Playwright configuration file, please see [TestConfig] instead. diff --git a/nodejs/versioned_docs/version-stable/api/class-fullproject.mdx b/nodejs/versioned_docs/version-stable/api/class-fullproject.mdx index f4b8a0115af..edc9d6deb17 100644 --- a/nodejs/versioned_docs/version-stable/api/class-fullproject.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-fullproject.mdx @@ -5,7 +5,6 @@ title: "FullProject" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Runtime representation of the test project configuration. It is accessible in the tests via [testInfo.project](/api/class-testinfo.mdx#test-info-project) and [workerInfo.project](/api/class-workerinfo.mdx#worker-info-project) and is passed to the test reporters. To see the format of the project in the Playwright configuration file please see [TestProject] instead. diff --git a/nodejs/versioned_docs/version-stable/api/class-genericassertions.mdx b/nodejs/versioned_docs/version-stable/api/class-genericassertions.mdx index 9c54b167410..52e3c4d3761 100644 --- a/nodejs/versioned_docs/version-stable/api/class-genericassertions.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-genericassertions.mdx @@ -5,7 +5,6 @@ title: "GenericAssertions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The [GenericAssertions] class provides assertion methods that can be used to make assertions about any values in the tests. A new instance of [GenericAssertions] is created by calling [expect()](/api/class-playwrightassertions.mdx#playwright-assertions-expect-generic): diff --git a/nodejs/versioned_docs/version-stable/api/class-jshandle.mdx b/nodejs/versioned_docs/version-stable/api/class-jshandle.mdx index 787157e3f08..6139cef830c 100644 --- a/nodejs/versioned_docs/version-stable/api/class-jshandle.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-jshandle.mdx @@ -5,7 +5,6 @@ title: "JSHandle" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; JSHandle represents an in-page JavaScript object. JSHandles can be created with the [page.evaluateHandle()](/api/class-page.mdx#page-evaluate-handle) method. diff --git a/nodejs/versioned_docs/version-stable/api/class-keyboard.mdx b/nodejs/versioned_docs/version-stable/api/class-keyboard.mdx index ee604a40370..850dfba6383 100644 --- a/nodejs/versioned_docs/version-stable/api/class-keyboard.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-keyboard.mdx @@ -5,7 +5,6 @@ title: "Keyboard" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Keyboard provides an api for managing a virtual keyboard. The high level api is [keyboard.type()](/api/class-keyboard.mdx#keyboard-type), which takes raw characters and generates proper `keydown`, `keypress`/`input`, and `keyup` events on your page. diff --git a/nodejs/versioned_docs/version-stable/api/class-location.mdx b/nodejs/versioned_docs/version-stable/api/class-location.mdx index 4f6f8fc9d02..c44e9ecbc0f 100644 --- a/nodejs/versioned_docs/version-stable/api/class-location.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-location.mdx @@ -5,7 +5,6 @@ title: "Location" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Represents a location in the source code where [TestCase] or [Suite] is defined. diff --git a/nodejs/versioned_docs/version-stable/api/class-locator.mdx b/nodejs/versioned_docs/version-stable/api/class-locator.mdx index 152987c69e3..19208a39d5b 100644 --- a/nodejs/versioned_docs/version-stable/api/class-locator.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-locator.mdx @@ -5,7 +5,6 @@ title: "Locator" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Locators are the central piece of Playwright's auto-waiting and retry-ability. In a nutshell, locators represent a way to find element(s) on the page at any moment. A locator can be created with the [page.locator()](/api/class-page.mdx#page-locator) method. diff --git a/nodejs/versioned_docs/version-stable/api/class-locatorassertions.mdx b/nodejs/versioned_docs/version-stable/api/class-locatorassertions.mdx index a4b2a0b2fc9..e23f2f82614 100644 --- a/nodejs/versioned_docs/version-stable/api/class-locatorassertions.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-locatorassertions.mdx @@ -5,7 +5,6 @@ title: "LocatorAssertions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The [LocatorAssertions] class provides assertion methods that can be used to make assertions about the [Locator] state in the tests. diff --git a/nodejs/versioned_docs/version-stable/api/class-logger.mdx b/nodejs/versioned_docs/version-stable/api/class-logger.mdx index d2d2284d759..c549adb1ce6 100644 --- a/nodejs/versioned_docs/version-stable/api/class-logger.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-logger.mdx @@ -5,7 +5,6 @@ title: "Logger" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; :::warning[Deprecated] diff --git a/nodejs/versioned_docs/version-stable/api/class-mouse.mdx b/nodejs/versioned_docs/version-stable/api/class-mouse.mdx index fe4183a6f11..46415239c00 100644 --- a/nodejs/versioned_docs/version-stable/api/class-mouse.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-mouse.mdx @@ -5,7 +5,6 @@ title: "Mouse" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The Mouse class operates in main-frame CSS pixels relative to the top-left corner of the viewport. diff --git a/nodejs/versioned_docs/version-stable/api/class-page.mdx b/nodejs/versioned_docs/version-stable/api/class-page.mdx index 2df32dd7f34..0543277a1dc 100644 --- a/nodejs/versioned_docs/version-stable/api/class-page.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-page.mdx @@ -5,7 +5,6 @@ title: "Page" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Page provides methods to interact with a single tab in a [Browser], or an [extension background page](https://developer.chrome.com/extensions/background_pages) in Chromium. One [Browser] instance might have multiple [Page] instances. @@ -309,6 +308,23 @@ await page.close(options); --- +### consoleMessages {#page-console-messages} + +Added in: v1.56page.consoleMessages + +Returns up to (currently) 200 last console messages from this page. See [page.on('console')](/api/class-page.mdx#page-event-console) for more details. + +**Usage** + +```js +await page.consoleMessages(); +``` + +**Returns** +- [Promise]<[Array]<[ConsoleMessage]>># + +--- + ### content {#page-content} Added before v1.9page.content @@ -1303,6 +1319,23 @@ await page.opener(); --- +### pageErrors {#page-page-errors} + +Added in: v1.56page.pageErrors + +Returns up to (currently) 200 last page errors from this page. See [page.on('pageerror')](/api/class-page.mdx#page-event-page-error) for more details. + +**Usage** + +```js +await page.pageErrors(); +``` + +**Returns** +- [Promise]<[Array]<[Error]>># + +--- + ### pause {#page-pause} Added in: v1.9page.pause @@ -1564,6 +1597,27 @@ await page.requestGC(); --- +### requests {#page-requests} + +Added in: v1.56page.requests + +Returns up to (currently) 100 last network request from this page. See [page.on('request')](/api/class-page.mdx#page-event-request) for more details. + +Returned requests should be accessed immediately, otherwise they might be collected to prevent unbounded memory growth as new requests come in. Once collected, retrieving most information about the request is impossible. + +Note that requests reported through the [page.on('request')](/api/class-page.mdx#page-event-request) request are not collected, so there is a trade off between efficient memory usage with [page.requests()](/api/class-page.mdx#page-requests) and the amount of available information reported through [page.on('request')](/api/class-page.mdx#page-event-request). + +**Usage** + +```js +await page.requests(); +``` + +**Returns** +- [Promise]<[Array]<[Request]>># + +--- + ### route {#page-route} Added before v1.9page.route diff --git a/nodejs/versioned_docs/version-stable/api/class-pageassertions.mdx b/nodejs/versioned_docs/version-stable/api/class-pageassertions.mdx index 8021bc38bbd..5c71ee88b6d 100644 --- a/nodejs/versioned_docs/version-stable/api/class-pageassertions.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-pageassertions.mdx @@ -5,7 +5,6 @@ title: "PageAssertions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The [PageAssertions] class provides assertion methods that can be used to make assertions about the [Page] state in the tests. diff --git a/nodejs/versioned_docs/version-stable/api/class-playwright.mdx b/nodejs/versioned_docs/version-stable/api/class-playwright.mdx index 7cdd1af90b8..50abdcfeb58 100644 --- a/nodejs/versioned_docs/version-stable/api/class-playwright.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-playwright.mdx @@ -5,7 +5,6 @@ title: "Playwright Library" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Playwright module provides a method to launch a browser instance. The following is a typical example of using Playwright to drive automation: diff --git a/nodejs/versioned_docs/version-stable/api/class-playwrightassertions.mdx b/nodejs/versioned_docs/version-stable/api/class-playwrightassertions.mdx index 1de27d743f3..975832568a5 100644 --- a/nodejs/versioned_docs/version-stable/api/class-playwrightassertions.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-playwrightassertions.mdx @@ -5,7 +5,6 @@ title: "PlaywrightAssertions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Playwright gives you Web-First Assertions with convenience methods for creating assertions that will wait and retry until the expected condition is met. diff --git a/nodejs/versioned_docs/version-stable/api/class-reporter.mdx b/nodejs/versioned_docs/version-stable/api/class-reporter.mdx index a2010f95dd9..20dea760129 100644 --- a/nodejs/versioned_docs/version-stable/api/class-reporter.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-reporter.mdx @@ -5,7 +5,6 @@ title: "Reporter" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Test runner notifies the reporter about various events during test execution. All methods of the reporter are optional. diff --git a/nodejs/versioned_docs/version-stable/api/class-request.mdx b/nodejs/versioned_docs/version-stable/api/class-request.mdx index df138a0afdf..097954e0605 100644 --- a/nodejs/versioned_docs/version-stable/api/class-request.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-request.mdx @@ -5,7 +5,6 @@ title: "Request" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Whenever the page sends a request for a network resource the following sequence of events are emitted by [Page]: diff --git a/nodejs/versioned_docs/version-stable/api/class-response.mdx b/nodejs/versioned_docs/version-stable/api/class-response.mdx index 73d6ef15581..9708a479779 100644 --- a/nodejs/versioned_docs/version-stable/api/class-response.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-response.mdx @@ -5,7 +5,6 @@ title: "Response" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [Response] class represents responses which are received by page. diff --git a/nodejs/versioned_docs/version-stable/api/class-route.mdx b/nodejs/versioned_docs/version-stable/api/class-route.mdx index 3ea6f06e939..268a3beb783 100644 --- a/nodejs/versioned_docs/version-stable/api/class-route.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-route.mdx @@ -5,7 +5,6 @@ title: "Route" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Whenever a network route is set up with [page.route()](/api/class-page.mdx#page-route) or [browserContext.route()](/api/class-browsercontext.mdx#browser-context-route), the `Route` object allows to handle the route. diff --git a/nodejs/versioned_docs/version-stable/api/class-selectors.mdx b/nodejs/versioned_docs/version-stable/api/class-selectors.mdx index cf296111e6f..5408cb3db3b 100644 --- a/nodejs/versioned_docs/version-stable/api/class-selectors.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-selectors.mdx @@ -5,7 +5,6 @@ title: "Selectors" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Selectors can be used to install custom selector engines. See [extensibility](../extensibility.mdx) for more information. diff --git a/nodejs/versioned_docs/version-stable/api/class-snapshotassertions.mdx b/nodejs/versioned_docs/version-stable/api/class-snapshotassertions.mdx index eb127019ae4..25a2815b07a 100644 --- a/nodejs/versioned_docs/version-stable/api/class-snapshotassertions.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-snapshotassertions.mdx @@ -5,7 +5,6 @@ title: "SnapshotAssertions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Playwright provides methods for comparing page and element screenshots with expected values stored in files. diff --git a/nodejs/versioned_docs/version-stable/api/class-suite.mdx b/nodejs/versioned_docs/version-stable/api/class-suite.mdx index 4d9f0233696..5e78d23b6ae 100644 --- a/nodejs/versioned_docs/version-stable/api/class-suite.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-suite.mdx @@ -5,7 +5,6 @@ title: "Suite" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; `Suite` is a group of tests. All tests in Playwright Test form the following hierarchy: diff --git a/nodejs/versioned_docs/version-stable/api/class-test.mdx b/nodejs/versioned_docs/version-stable/api/class-test.mdx index f5b568d22c4..9f46d902823 100644 --- a/nodejs/versioned_docs/version-stable/api/class-test.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-test.mdx @@ -5,7 +5,6 @@ title: "Playwright Test" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Playwright Test provides a `test` function to declare tests and `expect` function to write assertions. diff --git a/nodejs/versioned_docs/version-stable/api/class-testcase.mdx b/nodejs/versioned_docs/version-stable/api/class-testcase.mdx index e1dae8bdfe9..7b0079fe2ba 100644 --- a/nodejs/versioned_docs/version-stable/api/class-testcase.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-testcase.mdx @@ -5,7 +5,6 @@ title: "TestCase" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; `TestCase` corresponds to every [test()](/api/class-test.mdx#test-call) call in a test file. When a single [test()](/api/class-test.mdx#test-call) is running in multiple projects or repeated multiple times, it will have multiple `TestCase` objects in corresponding projects' suites. diff --git a/nodejs/versioned_docs/version-stable/api/class-testconfig.mdx b/nodejs/versioned_docs/version-stable/api/class-testconfig.mdx index 9962fa43c00..4ef4d7d3711 100644 --- a/nodejs/versioned_docs/version-stable/api/class-testconfig.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-testconfig.mdx @@ -5,7 +5,6 @@ title: "TestConfig" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Playwright Test provides many options to configure how your tests are collected and executed, for example `timeout` or `testDir`. These options are described in the [TestConfig] object in the [configuration file](../test-configuration.mdx). This type describes format of the configuration file, to access resolved configuration parameters at run time use [FullConfig]. @@ -405,7 +404,7 @@ export default defineConfig({ Added in: v1.10testConfig.metadata -Metadata contains key-value pairs to be included in the report. For example, HTML report will display it as key-value pairs, and JSON report will include metadata serialized as json. +Metadata contains key-value pairs to be included in the report. For example, the JSON report will include metadata serialized as JSON. **Usage** @@ -923,7 +922,7 @@ export default defineConfig({ Whether to update expected snapshots with the actual results produced by the test run. Defaults to `'missing'`. * `'all'` - All tests that are executed will update snapshots. -* `'changed'` - All tests that are executed will update snapshots that did not match. Matching snapshots will not be updated. +* `'changed'` - All tests that are executed will update snapshots that did not match. Matching snapshots will not be updated. Also creates missing snapshots. * `'missing'` - Missing snapshots are created, for example when authoring a new test and running it for the first time. This is the default. * `'none'` - No snapshots are updated. diff --git a/nodejs/versioned_docs/version-stable/api/class-testerror.mdx b/nodejs/versioned_docs/version-stable/api/class-testerror.mdx index a5c57df7fe7..cf73cf29366 100644 --- a/nodejs/versioned_docs/version-stable/api/class-testerror.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-testerror.mdx @@ -5,7 +5,6 @@ title: "TestError" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Information about an error thrown during test execution. diff --git a/nodejs/versioned_docs/version-stable/api/class-testinfo.mdx b/nodejs/versioned_docs/version-stable/api/class-testinfo.mdx index dc07deff8e9..54fe20911a8 100644 --- a/nodejs/versioned_docs/version-stable/api/class-testinfo.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-testinfo.mdx @@ -5,7 +5,6 @@ title: "TestInfo" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; `TestInfo` contains information about currently running test. It is available to test functions, [test.beforeEach()](/api/class-test.mdx#test-before-each), [test.afterEach()](/api/class-test.mdx#test-after-each), [test.beforeAll()](/api/class-test.mdx#test-before-all) and [test.afterAll()](/api/class-test.mdx#test-after-all) hooks, and test-scoped fixtures. `TestInfo` provides utilities to control test execution: attach files, update test timeout, determine which test is currently running and whether it was retried, etc. diff --git a/nodejs/versioned_docs/version-stable/api/class-testinfoerror.mdx b/nodejs/versioned_docs/version-stable/api/class-testinfoerror.mdx index 07331bccada..ea196dca906 100644 --- a/nodejs/versioned_docs/version-stable/api/class-testinfoerror.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-testinfoerror.mdx @@ -5,7 +5,6 @@ title: "TestInfoError" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Information about an error thrown during test execution. diff --git a/nodejs/versioned_docs/version-stable/api/class-testoptions.mdx b/nodejs/versioned_docs/version-stable/api/class-testoptions.mdx index 71f6f4e799f..b5065a8c32d 100644 --- a/nodejs/versioned_docs/version-stable/api/class-testoptions.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-testoptions.mdx @@ -5,7 +5,6 @@ title: "TestOptions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Playwright Test provides many options to configure test environment, [Browser], [BrowserContext] and more. diff --git a/nodejs/versioned_docs/version-stable/api/class-testproject.mdx b/nodejs/versioned_docs/version-stable/api/class-testproject.mdx index b4fdda4a79c..94be0e199b1 100644 --- a/nodejs/versioned_docs/version-stable/api/class-testproject.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-testproject.mdx @@ -5,7 +5,6 @@ title: "TestProject" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Playwright Test supports running multiple test projects at the same time. This is useful for running tests in multiple configurations. For example, consider running tests against multiple browsers. This type describes format of a project in the configuration file, to access resolved configuration parameters at run time use [FullProject]. diff --git a/nodejs/versioned_docs/version-stable/api/class-testresult.mdx b/nodejs/versioned_docs/version-stable/api/class-testresult.mdx index 4a25307321c..9361fbeba0d 100644 --- a/nodejs/versioned_docs/version-stable/api/class-testresult.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-testresult.mdx @@ -5,7 +5,6 @@ title: "TestResult" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; A result of a single [TestCase] run. diff --git a/nodejs/versioned_docs/version-stable/api/class-teststep.mdx b/nodejs/versioned_docs/version-stable/api/class-teststep.mdx index 44eace4b806..b3eaa0f4dbf 100644 --- a/nodejs/versioned_docs/version-stable/api/class-teststep.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-teststep.mdx @@ -5,7 +5,6 @@ title: "TestStep" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Represents a step in the [TestRun]. @@ -99,7 +98,7 @@ Step category to differentiate steps with different origin and verbosity. Built- * `hook` for hooks initialization and teardown * `pw:api` for Playwright API calls. * `test.step` for test.step API calls. -* `test.attach` for test attachmen calls. +* `test.attach` for testInfo.attach API calls. **Usage** diff --git a/nodejs/versioned_docs/version-stable/api/class-teststepinfo.mdx b/nodejs/versioned_docs/version-stable/api/class-teststepinfo.mdx index 59c8cf7cd37..b23a4a31eef 100644 --- a/nodejs/versioned_docs/version-stable/api/class-teststepinfo.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-teststepinfo.mdx @@ -5,7 +5,6 @@ title: "TestStepInfo" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; `TestStepInfo` contains information about currently running test step. It is passed as an argument to the step function. `TestStepInfo` provides utilities to control test step execution. diff --git a/nodejs/versioned_docs/version-stable/api/class-timeouterror.mdx b/nodejs/versioned_docs/version-stable/api/class-timeouterror.mdx index 9f4968d8a50..04896071a00 100644 --- a/nodejs/versioned_docs/version-stable/api/class-timeouterror.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-timeouterror.mdx @@ -5,7 +5,6 @@ title: "TimeoutError" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; * extends: [Error] diff --git a/nodejs/versioned_docs/version-stable/api/class-touchscreen.mdx b/nodejs/versioned_docs/version-stable/api/class-touchscreen.mdx index 77bd35fae2d..8edddf5a38b 100644 --- a/nodejs/versioned_docs/version-stable/api/class-touchscreen.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-touchscreen.mdx @@ -5,7 +5,6 @@ title: "Touchscreen" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The Touchscreen class operates in main-frame CSS pixels relative to the top-left corner of the viewport. Methods on the touchscreen can only be used in browser contexts that have been initialized with `hasTouch` set to true. diff --git a/nodejs/versioned_docs/version-stable/api/class-tracing.mdx b/nodejs/versioned_docs/version-stable/api/class-tracing.mdx index 7a44b2d5b9b..45ace077818 100644 --- a/nodejs/versioned_docs/version-stable/api/class-tracing.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-tracing.mdx @@ -5,7 +5,6 @@ title: "Tracing" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; API for collecting and saving Playwright traces. Playwright traces can be opened in [Trace Viewer](../trace-viewer.mdx) after Playwright script runs. diff --git a/nodejs/versioned_docs/version-stable/api/class-video.mdx b/nodejs/versioned_docs/version-stable/api/class-video.mdx index f1edfd33fd6..ca8cfcd9a02 100644 --- a/nodejs/versioned_docs/version-stable/api/class-video.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-video.mdx @@ -5,7 +5,6 @@ title: "Video" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; When browser context is created with the `recordVideo` option, each page has a video object associated with it. diff --git a/nodejs/versioned_docs/version-stable/api/class-weberror.mdx b/nodejs/versioned_docs/version-stable/api/class-weberror.mdx index 0c21d029b91..36ac8ab3872 100644 --- a/nodejs/versioned_docs/version-stable/api/class-weberror.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-weberror.mdx @@ -5,7 +5,6 @@ title: "WebError" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [WebError] class represents an unhandled exception thrown in the page. It is dispatched via the [browserContext.on('weberror')](/api/class-browsercontext.mdx#browser-context-event-web-error) event. diff --git a/nodejs/versioned_docs/version-stable/api/class-websocket.mdx b/nodejs/versioned_docs/version-stable/api/class-websocket.mdx index 5da1802bdf6..a5d457bbdee 100644 --- a/nodejs/versioned_docs/version-stable/api/class-websocket.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-websocket.mdx @@ -5,7 +5,6 @@ title: "WebSocket" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The [WebSocket] class represents WebSocket connections within a page. It provides the ability to inspect and manipulate the data being transmitted and received. diff --git a/nodejs/versioned_docs/version-stable/api/class-websocketroute.mdx b/nodejs/versioned_docs/version-stable/api/class-websocketroute.mdx index 69bba2f7e19..12be0f5e2da 100644 --- a/nodejs/versioned_docs/version-stable/api/class-websocketroute.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-websocketroute.mdx @@ -5,7 +5,6 @@ title: "WebSocketRoute" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Whenever a [`WebSocket`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) route is set up with [page.routeWebSocket()](/api/class-page.mdx#page-route-web-socket) or [browserContext.routeWebSocket()](/api/class-browsercontext.mdx#browser-context-route-web-socket), the `WebSocketRoute` object allows to handle the WebSocket, like an actual server would do. diff --git a/nodejs/versioned_docs/version-stable/api/class-worker.mdx b/nodejs/versioned_docs/version-stable/api/class-worker.mdx index 94f54126179..d540273eec9 100644 --- a/nodejs/versioned_docs/version-stable/api/class-worker.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-worker.mdx @@ -5,7 +5,6 @@ title: "Worker" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The Worker class represents a [WebWorker](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API). `worker` event is emitted on the page object to signal a worker creation. `close` event is emitted on the worker object when the worker is gone. diff --git a/nodejs/versioned_docs/version-stable/api/class-workerinfo.mdx b/nodejs/versioned_docs/version-stable/api/class-workerinfo.mdx index 1217a30fb50..c462f54b206 100644 --- a/nodejs/versioned_docs/version-stable/api/class-workerinfo.mdx +++ b/nodejs/versioned_docs/version-stable/api/class-workerinfo.mdx @@ -5,7 +5,6 @@ title: "WorkerInfo" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; `WorkerInfo` contains information about the worker that is running tests and is available to worker-scoped fixtures. `WorkerInfo` is a subset of [TestInfo] that is available in many other places. diff --git a/nodejs/versioned_docs/version-stable/aria-snapshots.mdx b/nodejs/versioned_docs/version-stable/aria-snapshots.mdx index 3b4f5bdbb80..928ed1d5483 100644 --- a/nodejs/versioned_docs/version-stable/aria-snapshots.mdx +++ b/nodejs/versioned_docs/version-stable/aria-snapshots.mdx @@ -5,7 +5,6 @@ title: "Snapshot testing" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; import LiteYouTube from '@site/src/components/LiteYouTube'; diff --git a/nodejs/versioned_docs/version-stable/auth.mdx b/nodejs/versioned_docs/version-stable/auth.mdx index 5f6c767fe5c..b5810db4e34 100644 --- a/nodejs/versioned_docs/version-stable/auth.mdx +++ b/nodejs/versioned_docs/version-stable/auth.mdx @@ -5,7 +5,6 @@ title: "Authentication" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/best-practices.mdx b/nodejs/versioned_docs/version-stable/best-practices.mdx index 7df9fb05c7f..b014115c576 100644 --- a/nodejs/versioned_docs/version-stable/best-practices.mdx +++ b/nodejs/versioned_docs/version-stable/best-practices.mdx @@ -5,7 +5,6 @@ title: "Best Practices" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/browser-contexts.mdx b/nodejs/versioned_docs/version-stable/browser-contexts.mdx index c9657d019e9..d9e7f0c5fbd 100644 --- a/nodejs/versioned_docs/version-stable/browser-contexts.mdx +++ b/nodejs/versioned_docs/version-stable/browser-contexts.mdx @@ -5,7 +5,6 @@ title: "Isolation" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/browsers.mdx b/nodejs/versioned_docs/version-stable/browsers.mdx index 16ec7a5ee62..0f00b7260b8 100644 --- a/nodejs/versioned_docs/version-stable/browsers.mdx +++ b/nodejs/versioned_docs/version-stable/browsers.mdx @@ -5,7 +5,6 @@ title: "Browsers" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -150,7 +149,7 @@ Running 1 test using 1 worker With the VS Code extension you can run your tests on different browsers by checking the checkbox next to the browser name in the Playwright sidebar. These names are defined in your Playwright config file under the projects section. The default config when installing Playwright gives you 3 projects, Chromium, Firefox and WebKit. The first project is selected by default. - +![Projects section in VS Code extension](../images/vscode-projects-section.png) To run tests on multiple projects(browsers), select each project by checking the checkboxes next to the project name. diff --git a/nodejs/versioned_docs/version-stable/canary-releases.mdx b/nodejs/versioned_docs/version-stable/canary-releases.mdx index 4bc9c475344..9340c37001d 100644 --- a/nodejs/versioned_docs/version-stable/canary-releases.mdx +++ b/nodejs/versioned_docs/version-stable/canary-releases.mdx @@ -5,7 +5,6 @@ title: "Canary releases" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/chrome-extensions.mdx b/nodejs/versioned_docs/version-stable/chrome-extensions.mdx index 74c93f88ceb..01a01616a50 100644 --- a/nodejs/versioned_docs/version-stable/chrome-extensions.mdx +++ b/nodejs/versioned_docs/version-stable/chrome-extensions.mdx @@ -5,7 +5,6 @@ title: "Chrome extensions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/ci-intro.mdx b/nodejs/versioned_docs/version-stable/ci-intro.mdx index 2ddba34a231..1a63ff40c98 100644 --- a/nodejs/versioned_docs/version-stable/ci-intro.mdx +++ b/nodejs/versioned_docs/version-stable/ci-intro.mdx @@ -5,7 +5,6 @@ title: "Setting up CI" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -34,8 +33,8 @@ jobs: timeout-minutes: 60 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v5 + - uses: actions/setup-node@v5 with: node-version: lts/* - name: Install dependencies diff --git a/nodejs/versioned_docs/version-stable/ci.mdx b/nodejs/versioned_docs/version-stable/ci.mdx index 0d8e5185e60..7681bf665e1 100644 --- a/nodejs/versioned_docs/version-stable/ci.mdx +++ b/nodejs/versioned_docs/version-stable/ci.mdx @@ -5,7 +5,6 @@ title: "Continuous Integration" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -64,8 +63,8 @@ jobs: timeout-minutes: 60 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v5 + - uses: actions/setup-node@v5 with: node-version: lts/* - name: Install dependencies @@ -102,11 +101,11 @@ jobs: name: 'Playwright Tests' runs-on: ubuntu-latest container: - image: mcr.microsoft.com/playwright:v1.55.0-noble + image: mcr.microsoft.com/playwright:v1.56.0-noble options: --user 1001 steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v5 + - uses: actions/setup-node@v5 with: node-version: lts/* - name: Install dependencies @@ -129,8 +128,8 @@ jobs: runs-on: ubuntu-latest if: github.event.deployment_status.state == 'success' steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v5 + - uses: actions/setup-node@v5 with: node-version: lts/* - name: Install dependencies @@ -159,12 +158,12 @@ jobs: timeout-minutes: 60 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: # Force a non-shallow checkout, so that we can reference $GITHUB_BASE_REF. # See https://github.com/actions/checkout for more details. fetch-depth: 0 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v5 with: node-version: lts/* - name: Install dependencies @@ -204,9 +203,9 @@ pool: vmImage: ubuntu-latest steps: -- task: NodeTool@0 +- task: UseNode@1 inputs: - versionSpec: '18' + version: '22' displayName: 'Install Node.js' - script: npm ci displayName: 'npm ci' @@ -230,9 +229,9 @@ pool: vmImage: ubuntu-latest steps: -- task: NodeTool@0 +- task: UseNode@1 inputs: - versionSpec: '18' + version: '22' displayName: 'Install Node.js' - script: npm ci @@ -313,9 +312,9 @@ strategy: project: webkit shard: 3/3 steps: -- task: NodeTool@0 +- task: UseNode@1 inputs: - versionSpec: '18' + version: '22' displayName: 'Install Node.js' - script: npm ci @@ -336,12 +335,12 @@ trigger: pool: vmImage: ubuntu-latest -container: mcr.microsoft.com/playwright:v1.55.0-noble +container: mcr.microsoft.com/playwright:v1.56.0-noble steps: -- task: NodeTool@0 +- task: UseNode@1 inputs: - versionSpec: '18' + version: '22' displayName: 'Install Node.js' - script: npm ci @@ -360,7 +359,7 @@ Running Playwright on CircleCI is very similar to running on GitHub Actions. In executors: pw-noble-development: docker: - - image: mcr.microsoft.com/playwright:v1.55.0-noble + - image: mcr.microsoft.com/playwright:v1.56.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. @@ -383,7 +382,7 @@ Jenkins supports Docker agents for pipelines. Use the [Playwright Docker image]( ```groovy pipeline { - agent { docker { image 'mcr.microsoft.com/playwright:v1.55.0-noble' } } + agent { docker { image 'mcr.microsoft.com/playwright:v1.56.0-noble' } } stages { stage('e2e-tests') { steps { @@ -400,7 +399,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:v1.55.0-noble +image: mcr.microsoft.com/playwright:v1.56.0-noble ``` ### GitLab CI @@ -413,7 +412,7 @@ stages: tests: stage: test - image: mcr.microsoft.com/playwright:v1.55.0-noble + image: mcr.microsoft.com/playwright:v1.56.0-noble script: ... ``` @@ -428,7 +427,7 @@ stages: tests: stage: test - image: mcr.microsoft.com/playwright:v1.55.0-noble + image: mcr.microsoft.com/playwright:v1.56.0-noble parallel: 7 script: - npm ci @@ -443,7 +442,7 @@ stages: tests: stage: test - image: mcr.microsoft.com/playwright:v1.55.0-noble + image: mcr.microsoft.com/playwright:v1.56.0-noble parallel: matrix: - PROJECT: ['chromium', 'webkit'] @@ -459,7 +458,7 @@ To run Playwright tests on Google Cloud Build, use our public Docker image ([see ```yml steps: -- name: mcr.microsoft.com/playwright:v1.55.0-noble +- name: mcr.microsoft.com/playwright:v1.56.0-noble script: ... env: @@ -477,7 +476,7 @@ type: docker steps: - name: test - image: mcr.microsoft.com/playwright:v1.55.0-noble + image: mcr.microsoft.com/playwright:v1.56.0-noble commands: - npx playwright test ``` diff --git a/nodejs/versioned_docs/version-stable/clock.mdx b/nodejs/versioned_docs/version-stable/clock.mdx index 38168f57943..beb1a663ae9 100644 --- a/nodejs/versioned_docs/version-stable/clock.mdx +++ b/nodejs/versioned_docs/version-stable/clock.mdx @@ -5,7 +5,6 @@ title: "Clock" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; import LiteYouTube from '@site/src/components/LiteYouTube'; diff --git a/nodejs/versioned_docs/version-stable/codegen-intro.mdx b/nodejs/versioned_docs/version-stable/codegen-intro.mdx index 71e68194d1f..e3c59778963 100644 --- a/nodejs/versioned_docs/version-stable/codegen-intro.mdx +++ b/nodejs/versioned_docs/version-stable/codegen-intro.mdx @@ -5,7 +5,6 @@ title: "Generating tests" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -35,7 +34,7 @@ With the test generator you can record: * `'assert value'` to assert that an element has a specific value ###### - +![Recording a test](../images/getting-started/record-test-js.png) ###### When you finish interacting with the page, press the `'record'` button to stop recording and use the `'copy'` button to copy the generated code to your editor. @@ -54,7 +53,7 @@ You can generate [locators](/locators.mdx) with the test generator. * Use the copy button to copy the locator and paste it into your code ###### - +![picking a locator](../images/getting-started/pick-locator-js.png) ### Emulation diff --git a/nodejs/versioned_docs/version-stable/codegen.mdx b/nodejs/versioned_docs/version-stable/codegen.mdx index 6a556a64feb..f38a1d9f376 100644 --- a/nodejs/versioned_docs/version-stable/codegen.mdx +++ b/nodejs/versioned_docs/version-stable/codegen.mdx @@ -5,7 +5,6 @@ title: "Test generator" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; import LiteYouTube from '@site/src/components/LiteYouTube'; diff --git a/nodejs/versioned_docs/version-stable/debug.mdx b/nodejs/versioned_docs/version-stable/debug.mdx index aaed5a8a36d..6e4cce80b9c 100644 --- a/nodejs/versioned_docs/version-stable/debug.mdx +++ b/nodejs/versioned_docs/version-stable/debug.mdx @@ -5,7 +5,6 @@ title: "Debugging Tests" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## VS Code debugger @@ -166,8 +165,6 @@ When running in Debug Mode with `PWDEBUG=console`, a `playwright` object is avai - **See console logs** during execution (or learn how to [read logs via API](./api/class-page.mdx#page-event-console)) - Check **network activity** and other developer tools features -This will also set the default timeouts of Playwright to 0 (= no timeout). - Browser Developer Tools with Playwright object To debug your tests using the browser developer tools, start by setting a breakpoint in your test to pause the execution using the [page.pause()](/api/class-page.mdx#page-pause) method. diff --git a/nodejs/versioned_docs/version-stable/dialogs.mdx b/nodejs/versioned_docs/version-stable/dialogs.mdx index 941c27338d5..a8584745ad5 100644 --- a/nodejs/versioned_docs/version-stable/dialogs.mdx +++ b/nodejs/versioned_docs/version-stable/dialogs.mdx @@ -5,7 +5,6 @@ title: "Dialogs" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/docker.mdx b/nodejs/versioned_docs/version-stable/docker.mdx index 663ea24f2c4..a14c6470591 100644 --- a/nodejs/versioned_docs/version-stable/docker.mdx +++ b/nodejs/versioned_docs/version-stable/docker.mdx @@ -5,7 +5,6 @@ title: "Docker" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -23,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:v1.55.0-noble +docker pull mcr.microsoft.com/playwright:v1.56.0-noble ``` ### Run the image @@ -35,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:v1.55.0-noble /bin/bash +docker run -it --rm --ipc=host mcr.microsoft.com/playwright:v1.56.0-noble /bin/bash ``` #### Crawling and scraping @@ -43,7 +42,7 @@ docker run -it --rm --ipc=host mcr.microsoft.com/playwright:v1.55.0-noble /bin/b 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:v1.55.0-noble /bin/bash +docker run -it --rm --ipc=host --user pwuser --security-opt seccomp=seccomp_profile.json mcr.microsoft.com/playwright:v1.56.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: @@ -83,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.55.0-noble /bin/sh -c "npx -y playwright@1.55.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.56.0-noble /bin/sh -c "npx -y playwright@1.56.0 run-server --port 3000 --host 0.0.0.0" ``` #### Connecting to the Server @@ -106,7 +105,7 @@ const browser = await playwright['chromium'].connect('ws://127.0.0.1:3000/'); 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.55.0-noble /bin/sh -c "npx -y playwright@1.55.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.56.0-noble /bin/sh -c "npx -y playwright@1.56.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. @@ -121,9 +120,9 @@ When running tests remotely, ensure the Playwright version in your tests matches See [all available image tags]. We currently publish images with the following tags: -- `:v1.55.0` - Playwright v1.55.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat). -- `:v1.55.0-noble` - Playwright v1.55.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat). -- `:v1.55.0-jammy` - Playwright v1.55.0 release docker image based on Ubuntu 22.04 LTS (Jammy Jellyfish). +- `:v1.56.0` - Playwright v1.56.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat). +- `:v1.56.0-noble` - Playwright v1.56.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat). +- `:v1.56.0-jammy` - Playwright v1.56.0 release docker image based on Ubuntu 22.04 LTS (Jammy Jellyfish). :::note @@ -147,7 +146,7 @@ To run Playwright inside Docker, you need to have Node.js, [Playwright browsers] ```Dockerfile FROM node:20-bookworm -RUN npx -y playwright@1.55.0 install --with-deps +RUN npx -y playwright@1.56.0 install --with-deps ``` diff --git a/nodejs/versioned_docs/version-stable/downloads.mdx b/nodejs/versioned_docs/version-stable/downloads.mdx index f7cc084704f..38cdd3e6715 100644 --- a/nodejs/versioned_docs/version-stable/downloads.mdx +++ b/nodejs/versioned_docs/version-stable/downloads.mdx @@ -5,7 +5,6 @@ title: "Downloads" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/emulation.mdx b/nodejs/versioned_docs/version-stable/emulation.mdx index dae8dd522ea..881ac70de5b 100644 --- a/nodejs/versioned_docs/version-stable/emulation.mdx +++ b/nodejs/versioned_docs/version-stable/emulation.mdx @@ -5,7 +5,6 @@ title: "Emulation" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/evaluating.mdx b/nodejs/versioned_docs/version-stable/evaluating.mdx index e63ae514dc8..267da3f6866 100644 --- a/nodejs/versioned_docs/version-stable/evaluating.mdx +++ b/nodejs/versioned_docs/version-stable/evaluating.mdx @@ -5,7 +5,6 @@ title: "Evaluating JavaScript" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/events.mdx b/nodejs/versioned_docs/version-stable/events.mdx index fed61817564..f612750074b 100644 --- a/nodejs/versioned_docs/version-stable/events.mdx +++ b/nodejs/versioned_docs/version-stable/events.mdx @@ -5,7 +5,6 @@ title: "Events" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/extensibility.mdx b/nodejs/versioned_docs/version-stable/extensibility.mdx index 8337fe51a7b..a7623f411e9 100644 --- a/nodejs/versioned_docs/version-stable/extensibility.mdx +++ b/nodejs/versioned_docs/version-stable/extensibility.mdx @@ -5,7 +5,6 @@ title: "Extensibility" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Custom selector engines diff --git a/nodejs/versioned_docs/version-stable/frames.mdx b/nodejs/versioned_docs/version-stable/frames.mdx index f8ed832f565..84e5284a9fc 100644 --- a/nodejs/versioned_docs/version-stable/frames.mdx +++ b/nodejs/versioned_docs/version-stable/frames.mdx @@ -5,7 +5,6 @@ title: "Frames" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/getting-started-vscode.mdx b/nodejs/versioned_docs/version-stable/getting-started-vscode.mdx index 67c114a9bff..dc8842681ce 100644 --- a/nodejs/versioned_docs/version-stable/getting-started-vscode.mdx +++ b/nodejs/versioned_docs/version-stable/getting-started-vscode.mdx @@ -5,7 +5,6 @@ title: "Getting started - VS Code" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; import LiteYouTube from '@site/src/components/LiteYouTube'; @@ -26,20 +25,20 @@ Before you begin, make sure you have the following installed: ### Installation & Setup 1. **Install the Extension**: Open the Extensions view in VS Code (`Ctrl+Shift+X` or `Cmd+Shift+X`) and search for "Playwright". [Install the official extension from Microsoft](https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright). - +![install playwright extension](../images/getting-started/vscode-extension.png) 1. **Install Playwright**: Once the extension is installed, open the Command Palette (`Ctrl+Shift+P` or `Cmd+Shift+P`) and run the **Test: Install Playwright** command. - +![install playwright](../images/getting-started/install-playwright.png) 3. **Select Browsers**: Choose the browsers you want for your tests (e.g., Chromium, Firefox, WebKit). You can also add a GitHub Actions workflow to run tests in CI. These settings can be changed later in your `playwright.config.ts` file. - +![install browsers](../images/getting-started/install-browsers.png) ### Opening the Testing Sidebar Click the **Testing icon** in the VS Code Activity Bar to open the Test Explorer. Here, you'll find your tests, as well as the Playwright sidebar for managing projects, tools, and settings. - +![Testing Sidebar](../images/getting-started/testing-sidebar.png) ## Core Features @@ -48,16 +47,16 @@ Click the **Testing icon** in the VS Code Activity Bar to open the Test Explorer - **Run a Single Test**: Click the green "play" icon next to any test to run it. The play button will change to a green checkmark if the test passes or a red X if the test fails. You'll be able to see how long the test took to run displayed next to the test name. Additionally, the Test Results panel will automatically open at the bottom of VS Code, showing a summary of the test execution including how many tests ran, how many passed, failed, or were skipped, along with the total execution time. - +![run a single test](../images/getting-started/run-single-test.png) - **Run All Tests**: You can run all tests at different levels. Click the play icon next to a specific test file to run all tests within that file, or click the play icon at the very top of the Test Explorer to run all tests across your entire project. - +![run all tests](../images/getting-started/run-all-tests.png) - **Run on Multiple Browsers**: In the Playwright sidebar, check the boxes for the projects (browsers) you want to test against. Projects in Playwright represent different browser configurations - each project typically corresponds to a specific browser (like Chromium, Firefox, or WebKit) with its own settings such as viewport size, device emulation, or other browser-specific options. When you run a test, it will execute across all selected projects, allowing you to verify your application works consistently across different browsers and configurations. - +![Selecting projects to run tests on](../images/getting-started/select-projects.png) - **Show Browser**: To watch your tests execute in a live browser window, enable the **Show Browser** option in the sidebar. Disable it to run in headless mode (where tests run in the background without opening a visible browser window). - +![show browsers while running tests](../images/getting-started/show-browser.png) ### Debugging Your Tests @@ -66,16 +65,16 @@ Click the **Testing icon** in the VS Code Activity Bar to open the Test Explorer The VS Code extension provides powerful debugging tools to help you identify and fix issues in your tests. You can set breakpoints, inspect variables, view detailed error messages, get AI-powered suggestions to resolve test failures, and use the comprehensive trace viewer to analyze test execution step-by-step. - **Using Breakpoints**: Set a breakpoint by clicking in the gutter next to a line number. Right-click the test and select **Debug Test**. The test will pause at your breakpoint, allowing you to inspect variables and step through the code. - + ![setting debug mode](../images/getting-started/debug-mode.png) - **Live Debugging**: With **Show Browsers** enabled, click on a locator in your code. Playwright will highlight the corresponding element in the browser, making it easy to verify locators. - + ![live debugging in vs code](../images/getting-started/live-debugging.png) - **Viewing Error Messages**: If a test fails, the extension displays detailed error messages, including the expected vs. received values and a full call log, directly in the editor. - +![error messaging in vs code](../images/getting-started/error-messaging.png) - **Fix with AI**: When a test fails, click the sparkle icon next to the error to get an AI-powered fix suggestion from Copilot. Copilot analyzes the error and suggests a code change to resolve the issue. - +![fix with ai in vs code](../images/getting-started/fix-with-ai.png) - **Debugging with Trace Viewer**: For comprehensive debugging, enable the **Show Trace Viewer** option in the Playwright sidebar. When your test finishes, a detailed trace will automatically open, providing you with a complete timeline of your test execution. The trace viewer is particularly useful for: - **Step-by-step analysis**: Navigate through each action your test performed with precise timestamps - **DOM inspection**: View DOM snapshots at any point during test execution to see exactly what the page looked like @@ -86,7 +85,7 @@ The VS Code extension provides powerful debugging tools to help you identify and The trace viewer is especially valuable when debugging flaky tests or understanding complex user interactions. - +![trace viewer debugging](../images/getting-started/trace-viewer-debug.png) To learn more, see our [Trace Viewer guide](./trace-viewer.mdx). @@ -97,13 +96,11 @@ CodeGen is Playwright's powerful test generation tool that automatically creates - **Record a New Test**: Click **Record new** in the sidebar. A browser window will open. As you interact with the page, Playwright will automatically generate the test code. You can also generate assertions from the recording toolbar. - -- **Record at Cursor**: Place your cursor inside an existing test and click **Record at cursor** to add new actions at that specific point. - - +![record a new test](../images/getting-started/record-new-test.png) +- **Record at Cursor**: Place your cursor inside an existing test and click **Record at cursor** to add new actions at that specific point. ![record at cursor](../images/getting-started/record-at-cursor.png) - **Pick a Locator**: Use the **Pick locator** tool to click on any element in the opened browser. Playwright will determine the best locator and copy it to your clipboard, ready to be pasted into your code. - +![pick locators](../images/getting-started/pick-locator.png) To learn more, see our [CodeGen guide](./codegen.mdx). @@ -113,7 +110,7 @@ To learn more, see our [CodeGen guide](./codegen.mdx). Use [project dependencies](./test-projects.mdx) to define setup tests that run before other tests. For example, you can create a login test that runs first, then reuse that authenticated state across multiple tests without having to log in again for each test. In VS Code, you can see these setup tests in the Test Explorer and run them independently when needed. - +![setup tests in vscode](../images/getting-started/setup-tests.png) To learn more, see our [Project Dependencies guide](./test-projects.mdx). @@ -121,13 +118,13 @@ To learn more, see our [Project Dependencies guide](./test-projects.mdx). For tasks that need to run only once before all tests (like seeding a database), use **Global Setup**. You can trigger the global setup and teardown manually from the Playwright sidebar. - +![running global setup](../images/getting-started/global-setup.png) ### Multiple Configurations If you have multiple `playwright.config.ts` files, you can switch between them using the gear icon in the Playwright sidebar. This allows you to easily work with different test suites or environments. - +![Selecting a configuration file](../images/getting-started/selecting-configuration.png) ## Quick Reference diff --git a/nodejs/versioned_docs/version-stable/handles.mdx b/nodejs/versioned_docs/version-stable/handles.mdx index 08abb06c6a7..5faafa286bb 100644 --- a/nodejs/versioned_docs/version-stable/handles.mdx +++ b/nodejs/versioned_docs/version-stable/handles.mdx @@ -5,7 +5,6 @@ title: "Handles" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/input.mdx b/nodejs/versioned_docs/version-stable/input.mdx index 0f4bf6ee750..f25c6253472 100644 --- a/nodejs/versioned_docs/version-stable/input.mdx +++ b/nodejs/versioned_docs/version-stable/input.mdx @@ -5,7 +5,6 @@ title: "Actions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/intro.mdx b/nodejs/versioned_docs/version-stable/intro.mdx index 838c79a776a..9277b96ebf8 100644 --- a/nodejs/versioned_docs/version-stable/intro.mdx +++ b/nodejs/versioned_docs/version-stable/intro.mdx @@ -5,7 +5,6 @@ title: "Installation" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -115,7 +114,7 @@ pnpm exec playwright test - +![tests running in command line](../images/getting-started/run-tests-cli.png) Tips: - See the browser window: add `--headed`. @@ -157,7 +156,7 @@ pnpm exec playwright show-report - +![HTML Report](../images/getting-started/html-report-basic.png) ## Running the Example Test in UI Mode @@ -191,7 +190,7 @@ pnpm exec playwright test --ui - +![UI Mode](../images/getting-started/ui-mode.png) See the [detailed guide on UI Mode](./test-ui-mode.mdx) for watch filters, step details and trace integration. @@ -262,7 +261,7 @@ pnpm exec playwright --version ## System requirements - Node.js: latest 20.x, 22.x or 24.x. -- Windows 10+, Windows Server 2016+ or Windows Subsystem for Linux (WSL). +- Windows 11+, Windows Server 2019+ or Windows Subsystem for Linux (WSL). - macOS 14 (Ventura) or later. - Debian 12 / 13, Ubuntu 22.04 / 24.04 (x86-64 or arm64). diff --git a/nodejs/versioned_docs/version-stable/languages.mdx b/nodejs/versioned_docs/version-stable/languages.mdx index 5c4be229624..1ea9ef150ba 100644 --- a/nodejs/versioned_docs/version-stable/languages.mdx +++ b/nodejs/versioned_docs/version-stable/languages.mdx @@ -5,7 +5,6 @@ title: "Supported languages" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/library.mdx b/nodejs/versioned_docs/version-stable/library.mdx index 1a3ed3254a9..4c3256bb83d 100644 --- a/nodejs/versioned_docs/version-stable/library.mdx +++ b/nodejs/versioned_docs/version-stable/library.mdx @@ -5,7 +5,6 @@ title: "Library" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/locators.mdx b/nodejs/versioned_docs/version-stable/locators.mdx index f4cbaa6716f..70fe24fe089 100644 --- a/nodejs/versioned_docs/version-stable/locators.mdx +++ b/nodejs/versioned_docs/version-stable/locators.mdx @@ -5,7 +5,6 @@ title: "Locators" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/mock-browser.mdx b/nodejs/versioned_docs/version-stable/mock-browser.mdx index e35fefa148e..1ada607fd19 100644 --- a/nodejs/versioned_docs/version-stable/mock-browser.mdx +++ b/nodejs/versioned_docs/version-stable/mock-browser.mdx @@ -5,7 +5,6 @@ title: "Mock browser APIs" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/mock.mdx b/nodejs/versioned_docs/version-stable/mock.mdx index bb6b534e71c..13548590c02 100644 --- a/nodejs/versioned_docs/version-stable/mock.mdx +++ b/nodejs/versioned_docs/version-stable/mock.mdx @@ -5,7 +5,6 @@ title: "Mock APIs" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/navigations.mdx b/nodejs/versioned_docs/version-stable/navigations.mdx index 40dadf27e0c..ca32970e2fc 100644 --- a/nodejs/versioned_docs/version-stable/navigations.mdx +++ b/nodejs/versioned_docs/version-stable/navigations.mdx @@ -5,7 +5,6 @@ title: "Navigations" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/network.mdx b/nodejs/versioned_docs/version-stable/network.mdx index 9dea85d7e2c..2e380557bc2 100644 --- a/nodejs/versioned_docs/version-stable/network.mdx +++ b/nodejs/versioned_docs/version-stable/network.mdx @@ -5,7 +5,6 @@ title: "Network" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/other-locators.mdx b/nodejs/versioned_docs/version-stable/other-locators.mdx index ba45ea8b3df..d959442fa13 100644 --- a/nodejs/versioned_docs/version-stable/other-locators.mdx +++ b/nodejs/versioned_docs/version-stable/other-locators.mdx @@ -5,7 +5,6 @@ title: "Other locators" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -121,9 +120,11 @@ The `:is()` pseudo-class is an [experimental CSS pseudo-class](https://developer ### CSS: matching elements based on layout -:::note +:::warning + +Layout selectors are deprecated and may be removed in the future. Matching based on layout may produce unexpected results. For example, a different element could be matched when layout changes by one pixel. -Matching based on layout may produce unexpected results. For example, a different element could be matched when layout changes by one pixel. +We recommend prioritizing [user-visible locators](./locators.mdx#quick-guide) instead. ::: Sometimes, it is hard to come up with a good selector to the target element when it lacks distinctive features. In this case, using Playwright layout CSS pseudo-classes could help. These can be combined with regular CSS to pinpoint one of the multiple choices. diff --git a/nodejs/versioned_docs/version-stable/pages.mdx b/nodejs/versioned_docs/version-stable/pages.mdx index 11e193b4982..05f2cec005c 100644 --- a/nodejs/versioned_docs/version-stable/pages.mdx +++ b/nodejs/versioned_docs/version-stable/pages.mdx @@ -5,7 +5,6 @@ title: "Pages" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Pages diff --git a/nodejs/versioned_docs/version-stable/pom.mdx b/nodejs/versioned_docs/version-stable/pom.mdx index cace62eb028..cc5b08d5d6d 100644 --- a/nodejs/versioned_docs/version-stable/pom.mdx +++ b/nodejs/versioned_docs/version-stable/pom.mdx @@ -5,7 +5,6 @@ title: "Page object models" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/protractor.mdx b/nodejs/versioned_docs/version-stable/protractor.mdx index 69e4e8eeb81..952d4000252 100644 --- a/nodejs/versioned_docs/version-stable/protractor.mdx +++ b/nodejs/versioned_docs/version-stable/protractor.mdx @@ -5,7 +5,6 @@ title: "Migrating from Protractor" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Migration Principles - No need for "webdriver-manager" / Selenium. diff --git a/nodejs/versioned_docs/version-stable/puppeteer.mdx b/nodejs/versioned_docs/version-stable/puppeteer.mdx index 3049d28c196..8cc2fee8418 100644 --- a/nodejs/versioned_docs/version-stable/puppeteer.mdx +++ b/nodejs/versioned_docs/version-stable/puppeteer.mdx @@ -5,7 +5,6 @@ title: "Migrating from Puppeteer" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Migration Principles diff --git a/nodejs/versioned_docs/version-stable/release-notes.mdx b/nodejs/versioned_docs/version-stable/release-notes.mdx index 9d2d8fbee78..eb8caf71752 100644 --- a/nodejs/versioned_docs/version-stable/release-notes.mdx +++ b/nodejs/versioned_docs/version-stable/release-notes.mdx @@ -6,10 +6,57 @@ toc_max_heading_level: 2 import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; import LiteYouTube from '@site/src/components/LiteYouTube'; +## Version 1.56 + + + +### Playwright Agents + +Introducing Playwright Agents, three custom agent definitions designed to guide LLMs through the core process of building a Playwright test: +* **🎭 planner** explores the app and produces a Markdown test plan +* **🎭 generator** transforms the Markdown plan into the Playwright Test files +* **🎭 healer** executes the test suite and automatically repairs failing tests + +Run `npx playwright init-agents` with your client of choice to generate the latest agent definitions: + +```bash +# Generate agent files for each agentic loop +# Visual Studio Code +npx playwright init-agents --loop=vscode +# Claude Code +npx playwright init-agents --loop=claude +# opencode +npx playwright init-agents --loop=opencode +``` + +[Learn more about Playwright Agents](./test-agents.mdx) + +### New APIs +- New methods [page.consoleMessages()](/api/class-page.mdx#page-console-messages) and [page.pageErrors()](/api/class-page.mdx#page-page-errors) for retrieving the most recent console messages from the page +- New method [page.requests()](/api/class-page.mdx#page-requests) for retrieving the most recent network requests from the page +- Added [`--test-list` and `--test-list-invert`](./test-cli.mdx#test-list) to allow manual specification of specific tests from a file + +### UI Mode and HTML Reporter +- Added option to `'html'` reporter to disable the "Copy prompt" button +- Added option to `'html'` reporter and UI Mode to merge files, collapsing test and describe blocks into a single unified list +- Added option to UI Mode mirroring the `--update-snapshots` options +- Added option to UI Mode to run only a single worker at a time + +### Breaking Changes +- Event [browserContext.on('backgroundpage')](/api/class-browsercontext.mdx#browser-context-event-background-page) has been deprecated and will not be emitted. Method [browserContext.backgroundPages()](/api/class-browsercontext.mdx#browser-context-background-pages) will return an empty list + +### Miscellaneous +- Aria snapshots render and compare `input` `placeholder` +- Added environment variable `PLAYWRIGHT_TEST` to Playwright worker processes to allow discriminating on testing status + +### Browser Versions +- Chromium 141.0.7390.37 +- Mozilla Firefox 142.0.1 +- WebKit 26.0 + ## Version 1.55 ### New APIs diff --git a/nodejs/versioned_docs/version-stable/running-tests.mdx b/nodejs/versioned_docs/version-stable/running-tests.mdx index 2d6a434b3d7..639c3eec896 100644 --- a/nodejs/versioned_docs/version-stable/running-tests.mdx +++ b/nodejs/versioned_docs/version-stable/running-tests.mdx @@ -5,7 +5,6 @@ title: "Running and debugging tests" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -26,7 +25,7 @@ You can run your tests with the `playwright test` command. This runs your tests npx playwright test ``` - +![tests running in command line](../images/getting-started/run-tests-cli.png) ### Run tests in UI mode @@ -36,7 +35,7 @@ We highly recommend running your tests with [UI Mode](./test-ui-mode.mdx) for a npx playwright test --ui ``` - +![UI Mode](../images/getting-started/ui-mode.png) Check out our [detailed guide on UI Mode](./test-ui-mode.mdx) to learn more about its features. @@ -100,7 +99,7 @@ npx playwright test --last-failed 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. - +![install playwright extension](../images/getting-started/vscode-extension.png) ## Debugging tests @@ -114,11 +113,11 @@ We highly recommend debugging your tests with [UI Mode](./test-ui-mode.mdx) for npx playwright test --ui ``` - +![showing errors in ui mode](../images/getting-started/ui-mode-error.png) While debugging you can use the Pick Locator button to select an element on the page and see the locator that Playwright would use to find that element. You can also edit the locator in the locator playground and see it highlighting live in the browser window. Use the Copy Locator button to copy the locator to your clipboard and then paste it into your test. - +![pick locator in ui mode](../images/getting-started/ui-mode-pick-locator.png) Check out our [detailed guide on UI Mode](./test-ui-mode.mdx) to learn more about its features. @@ -130,7 +129,7 @@ To debug all tests, run the Playwright test command followed by the `--debug` fl npx playwright test --debug ``` - +![Debugging Tests with the Playwright inspector](../images/getting-started/run-tests-debug.png) This command opens a browser window as well as the Playwright Inspector. You can use the step over button at the top of the inspector to step through your test. Or, press the play button to run your test from start to finish. Once the test finishes, the browser window closes. @@ -148,7 +147,7 @@ npx playwright test example.spec.ts:10 --debug While debugging you can use the Pick Locator button to select an element on the page and see the locator that Playwright would use to find that element. You can also edit the locator and see it highlighting live in the browser window. Use the Copy Locator button to copy the locator to your clipboard and then paste it into your test. - +![Locator picker in the Playwright Inspector](../images/getting-started/run-tests-pick-locator.png) Check out our [debugging guide](./debug.mdx) to learn more about debugging with the [VS Code debugger](./debug.mdx#vs-code-debugger), UI Mode, and the [Playwright Inspector](./debug.mdx#playwright-inspector) as well as debugging with [Browser Developer tools](./debug.mdx#browser-developer-tools). @@ -160,11 +159,11 @@ The [HTML Reporter](./test-reporters.mdx#html-reporter) shows you a full report npx playwright show-report ``` - +![HTML Report](../images/getting-started/html-report.png) You can filter and search for tests as well as click on each test to see the test errors and explore each step of the test. - +![HTML Reporter detail view](../images/getting-started/html-report-detail.png) ## What's next - [Generate tests with Codegen](./codegen-intro.mdx) diff --git a/nodejs/versioned_docs/version-stable/screenshots.mdx b/nodejs/versioned_docs/version-stable/screenshots.mdx index 0b19d461946..716cadefb18 100644 --- a/nodejs/versioned_docs/version-stable/screenshots.mdx +++ b/nodejs/versioned_docs/version-stable/screenshots.mdx @@ -5,7 +5,6 @@ title: "Screenshots" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/selenium-grid.mdx b/nodejs/versioned_docs/version-stable/selenium-grid.mdx index 90fe66f6688..39317c3ab21 100644 --- a/nodejs/versioned_docs/version-stable/selenium-grid.mdx +++ b/nodejs/versioned_docs/version-stable/selenium-grid.mdx @@ -5,7 +5,6 @@ title: "Selenium Grid (experimental)" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/service-workers-experimental-network-events.mdx b/nodejs/versioned_docs/version-stable/service-workers-experimental-network-events.mdx index 314980bda16..ab540ed68a3 100644 --- a/nodejs/versioned_docs/version-stable/service-workers-experimental-network-events.mdx +++ b/nodejs/versioned_docs/version-stable/service-workers-experimental-network-events.mdx @@ -5,7 +5,6 @@ title: "(Experimental) Service Worker Network Events" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/test-agents.mdx b/nodejs/versioned_docs/version-stable/test-agents.mdx new file mode 100644 index 00000000000..41ab3321b18 --- /dev/null +++ b/nodejs/versioned_docs/version-stable/test-agents.mdx @@ -0,0 +1,350 @@ +--- +id: test-agents +title: "Agents" +--- +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import HTMLCard from '@site/src/components/HTMLCard'; + +# Playwright Agents + +Playwright comes with three Playwright Agents out of the box: **🎭 planner**, **🎭 generator** and **🎭 healer**. + +These agents can be used independently, sequentially, or as the chained calls in the agentic loop. Using them sequentially will produce test coverage for your product. +* **🎭 planner** explores the app and produces a Markdown test plan +* **🎭 generator** transforms the Markdown plan into the Playwright Test files +* **🎭 healer** executes the test suite and automatically repairs failing tests + +### Getting Started + +Start with adding Playwright Agent definitions to your project using the `init-agents` command. These definitions should be regenerated whenever Playwright is updated to pick up new tools and instructions. + + + + +```bash +npx playwright init-agents --loop=vscode +``` + + + + +```bash +npx playwright init-agents --loop=claude +``` + + + + +```bash +npx playwright init-agents --loop=opencode +``` + + + + +Once the agents have been generated, you can use your AI tool of choice to command these agents to build Playwright Tests. + +## 🎭 Planner + +Planner agent explores your app and produces a test plan for one or many scenarios and user flows. + +**Input** +* A clear request to the planner (e.g., “Generate a plan for guest checkout.”) +* A `seed test` that sets up the environment necessary to interact with your app +* *(optional)* A Product Requirement Document (PRD) for context + +**Prompt** + +planner prompt + +> - Notice how the `seed.spec.ts` is included in the context of the planner. +> - Planner will run this test to execute all the initialization necessary for your test including the global setup, project dependencies and all the necessary fixtures and hooks. +> - Planner will also use this seed test as an example of all the generated tests. Alternatively, you can mention the file name in the prompt. + +```js title="Example: seed.spec.ts" +import { test, expect } from './fixtures'; + +test('seed', async ({ page }) => { + // this test uses custom fixtures from ./fixtures +}); +``` + +**Output** +* A Markdown test plan saved as `specs/basic-operations.md`. +* The plan is human-readable but precise enough for test generation. + +
+ +Example: specs/basic-operations.md + +```markdown +# TodoMVC Application - Basic Operations Test Plan + +## Application Overview + +The TodoMVC application is a React-based todo list manager that demonstrates standard todo application functionality. The application provides comprehensive task management capabilities with a clean, intuitive interface. Key features include: + +- **Task Management**: Add, edit, complete, and delete individual todos +- **Bulk Operations**: Mark all todos as complete/incomplete and clear all completed todos +- **Filtering System**: View todos by All, Active, or Completed status with URL routing support +- **Real-time Counter**: Display of active (incomplete) todo count +- **Interactive UI**: Hover states, edit-in-place functionality, and responsive design +- **State Persistence**: Maintains state during session navigation + +## Test Scenarios + +### 1. Adding New Todos + +**Seed:** `tests/seed.spec.ts` + +#### 1.1 Add Valid Todo + +**Steps:** +1. Click in the "What needs to be done?" input field +2. Type "Buy groceries" +3. Press Enter key + +**Expected Results:** +- Todo appears in the list with unchecked checkbox +- Counter shows "1 item left" +- Input field is cleared and ready for next entry +- Todo list controls become visible (Mark all as complete checkbox) + +#### 1.2 Add Multiple Todos +... +``` + +
+ +## 🎭 Generator + +Generator agent uses the Markdown plan to produce executable Playwright Tests. It verifies selectors and assertions live as it performs the scenarios. Playwright supports generation hints and provides a catalog of assertions for efficient structural and behavioral validation. + +**Input** +* Markdown plan from `specs/` + +**Prompt** + +generator prompt + +> - Notice how the `basic-operations.md` is included in the context of the generator. +> - This is how generator knows where to get the test plan from. Alternatively, you can mention the file name in the prompt. + +**Output** +* A test suite under `tests/` +* Generated tests may include initial errors that can be healed automatically by the healer agent + +
+ +Example: tests/add-valid-todo.spec.ts + +```ts +// spec: specs/basic-operations.md +// seed: tests/seed.spec.ts + +import { test, expect } from '../fixtures'; + +test.describe('Adding New Todos', () => { + test('Add Valid Todo', async ({ page }) => { + // 1. Click in the "What needs to be done?" input field + const todoInput = page.getByRole('textbox', { name: 'What needs to be done?' }); + await todoInput.click(); + + // 2. Type "Buy groceries" + await todoInput.fill('Buy groceries'); + + // 3. Press Enter key + await todoInput.press('Enter'); + + // Expected Results: + // - Todo appears in the list with unchecked checkbox + await expect(page.getByText('Buy groceries')).toBeVisible(); + const todoCheckbox = page.getByRole('checkbox', { name: 'Toggle Todo' }); + await expect(todoCheckbox).toBeVisible(); + await expect(todoCheckbox).not.toBeChecked(); + + // - Counter shows "1 item left" + await expect(page.getByText('1 item left')).toBeVisible(); + + // - Input field is cleared and ready for next entry + await expect(todoInput).toHaveValue(''); + await expect(todoInput).toBeFocused(); + + // - Todo list controls become visible (Mark all as complete checkbox) + await expect(page.getByRole('checkbox', { name: '❯Mark all as complete' })).toBeVisible(); + }); +}); +``` + +
+ +## 🎭 Healer + +When the test fails, the healer agent: +* Replays the failing steps +* Inspects the current UI to locate equivalent elements or flows +* Suggests a patch (e.g., locator update, wait adjustment, data fix) +* Re-runs the test until it passes or until guardrails stop the loop + +**Input** +* Failing test name + +**Prompt** + +healer prompt + +**Output** +* A passing test, or a skipped test if the healer believes the that functionality is broken. + +## Artifacts and Conventions + +The static agent definitions and generated files follow a simple, auditable structure: + +```bash +repo/ + .github/ # agent definitions + specs/ # human-readable test plans + basic-operations.md + tests/ # generated Playwright tests + seed.spec.ts # seed test for environment + tests/create/add-valid-todo.spec.ts + playwright.config.ts +``` + +### Agent Definitions + +Under the hood, agent definitions are collections of instructions and MCP tools. They are provided by Playwright and should be regenerated whenever Playwright is updated. + +Example for Claude Code subagents: + +```bash +npx playwright init-agents --loop=vscode +``` + +### Specs in `specs/` + +Specs are structured plans describing scenarios in human-readable terms. They include steps, expected outcomes, and data. Specs can start from scratch or extend a seed test. + +### Tests in `tests/` + +Generated Playwright tests, aligned one-to-one with specs wherever feasible. + +### Seed tests `seed.spec.ts` + +Seed tests provide a ready-to-use `page` context to bootstrap execution. + + +[Accessibility]: /api/class-accessibility.mdx "Accessibility" +[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" +[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" +[Dialog]: /api/class-dialog.mdx "Dialog" +[Download]: /api/class-download.mdx "Download" +[Electron]: /api/class-electron.mdx "Electron" +[ElectronApplication]: /api/class-electronapplication.mdx "ElectronApplication" +[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" +[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" +[Worker]: /api/class-worker.mdx "Worker" +[Fixtures]: /api/class-fixtures.mdx "Fixtures" +[FullConfig]: /api/class-fullconfig.mdx "FullConfig" +[FullProject]: /api/class-fullproject.mdx "FullProject" +[Location]: /api/class-location.mdx "Location" +[Test]: /api/class-test.mdx "Test" +[TestConfig]: /api/class-testconfig.mdx "TestConfig" +[TestInfo]: /api/class-testinfo.mdx "TestInfo" +[TestInfoError]: /api/class-testinfoerror.mdx "TestInfoError" +[TestOptions]: /api/class-testoptions.mdx "TestOptions" +[TestProject]: /api/class-testproject.mdx "TestProject" +[TestStepInfo]: /api/class-teststepinfo.mdx "TestStepInfo" +[WorkerInfo]: /api/class-workerinfo.mdx "WorkerInfo" +[Reporter]: /api/class-reporter.mdx "Reporter" +[Suite]: /api/class-suite.mdx "Suite" +[TestCase]: /api/class-testcase.mdx "TestCase" +[TestError]: /api/class-testerror.mdx "TestError" +[TestResult]: /api/class-testresult.mdx "TestResult" +[TestStep]: /api/class-teststep.mdx "TestStep" +[Element]: https://developer.mozilla.org/en-US/docs/Web/API/element "Element" +[EvaluationArgument]: /evaluating.mdx#evaluation-argument "EvaluationArgument" +[Promise]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise "Promise" +[iterator]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols "Iterator" +[origin]: https://developer.mozilla.org/en-US/docs/Glossary/Origin "Origin" +[selector]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors "selector" +[Serializable]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#Description "Serializable" +[UIEvent.detail]: https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail "UIEvent.detail" +[UnixTime]: https://en.wikipedia.org/wiki/Unix_time "Unix Time" +[xpath]: https://developer.mozilla.org/en-US/docs/Web/XPath "xpath" + +[Array]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array "Array" +[boolean]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type "Boolean" +[Buffer]: https://nodejs.org/api/buffer.html#buffer_class_buffer "Buffer" +[ChildProcess]: https://nodejs.org/api/child_process.html "ChildProcess" +[Date]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date "Date" +[Error]: https://nodejs.org/api/errors.html#errors_class_error "Error" +[EventEmitter]: https://nodejs.org/api/events.html#events_class_eventemitter "EventEmitter" +[function]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function "Function" +[FormData]: https://developer.mozilla.org/en-US/docs/Web/API/FormData "FormData" +[Map]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map "Map" +[Metadata]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object "Object<string, any>" +[null]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null "null" +[number]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type "Number" +[Object]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object "Object" +[Promise]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise "Promise" +[Readable]: https://nodejs.org/api/stream.html#stream_class_stream_readable "Readable" +[ReadStream]: https://nodejs.org/api/fs.html#class-fsreadstream "ReadStream" +[RegExp]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp "RegExp" +[string]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type "string" +[void]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined "void" +[URL]: https://nodejs.org/api/url.html "URL" +[URLSearchParams]: https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams "URLSearchParams" + +[all available image tags]: https://mcr.microsoft.com/en-us/product/playwright/about "all available image tags" +[Microsoft Artifact Registry]: https://mcr.microsoft.com/en-us/product/playwright/about "Microsoft Artifact Registry" +[Dockerfile.noble]: https://github.com/microsoft/playwright/blob/main/utils/docker/Dockerfile.noble "Dockerfile.noble" diff --git a/nodejs/versioned_docs/version-stable/test-annotations.mdx b/nodejs/versioned_docs/version-stable/test-annotations.mdx index 0bc81e7a43a..7f5f8ad2e23 100644 --- a/nodejs/versioned_docs/version-stable/test-annotations.mdx +++ b/nodejs/versioned_docs/version-stable/test-annotations.mdx @@ -5,7 +5,6 @@ title: "Annotations" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/test-assertions.mdx b/nodejs/versioned_docs/version-stable/test-assertions.mdx index eae79cfef6e..efd4b1b3150 100644 --- a/nodejs/versioned_docs/version-stable/test-assertions.mdx +++ b/nodejs/versioned_docs/version-stable/test-assertions.mdx @@ -5,7 +5,6 @@ title: "Assertions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/test-cli.mdx b/nodejs/versioned_docs/version-stable/test-cli.mdx index 65a62b630f3..6a516465409 100644 --- a/nodejs/versioned_docs/version-stable/test-cli.mdx +++ b/nodejs/versioned_docs/version-stable/test-cli.mdx @@ -5,7 +5,6 @@ title: "Command line" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Playwright provides a powerful command line interface for running tests, generating code, debugging, and more. The most up to date list of commands and arguments available on the CLI can always be retrieved via `npx playwright --help`. @@ -107,6 +106,8 @@ npx playwright test --ui | `--reporter ` | Reporter to use, comma-separated, can be "dot", "line", "list", or others (default: "list"). You can also pass a path to a custom reporter file. | | `--retries ` | Maximum retry count for flaky tests, zero for no retries (default: no retries). | | `--shard ` | Shard tests and execute only the selected shard, specified in the form "current/all", 1-based, e.g., "3/5". | +| `--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`. | | `--tsconfig ` | Path to a single tsconfig applicable to all imported files (default: look up tsconfig for each imported file separately). | @@ -117,6 +118,30 @@ npx playwright test --ui | `--update-source-method [mode]` | Update snapshots with actual results. Possible values are "patch" (default), "3way" and "overwrite". "Patch" creates a unified diff file that can be used to update the source code later. "3way" generates merge conflict markers in source code. "Overwrite" overwrites the source code with the new snapshot values.| | `-x` | Stop after the first failure. | +#### Test list + +Options `--test-list` and `--test-list-invert` accept a path to a test list file. This file should list tests in the format similar to the output produced in `--list` mode. + +```txt +# This is a test list file. +# It can include comments and empty lines. + +# Fully qualified test with a project: +[chromium] › path/to/example.spec.ts:3:9 › suite › nested suite › example test + +# This test is included for all projects: +path/to/example.spec.ts:3:9 › example test + +# Use "›" or ">" as a separator: +[firefox] > example.spec.ts > suite > nested suite > example test + +# Line/column numbers are completely ignored, you can omit them. +# Three entries below refer to the same test: +example.spec.ts › example test +example.spec.ts:15 › example test +example.spec.ts:42:42 › example test +``` + ### Show Report Display HTML report from previous test run. [Read more about the HTML reporter](./test-reporters#html-reporter). diff --git a/nodejs/versioned_docs/version-stable/test-components.mdx b/nodejs/versioned_docs/version-stable/test-components.mdx index b20992e9fec..da6683274f1 100644 --- a/nodejs/versioned_docs/version-stable/test-components.mdx +++ b/nodejs/versioned_docs/version-stable/test-components.mdx @@ -5,7 +5,6 @@ title: "Components (experimental)" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; import LiteYouTube from '@site/src/components/LiteYouTube'; diff --git a/nodejs/versioned_docs/version-stable/test-configuration.mdx b/nodejs/versioned_docs/version-stable/test-configuration.mdx index 6d7a5abbcf8..f40eb662a7b 100644 --- a/nodejs/versioned_docs/version-stable/test-configuration.mdx +++ b/nodejs/versioned_docs/version-stable/test-configuration.mdx @@ -1,11 +1,10 @@ --- id: test-configuration -title: "Test configuration" +title: "Configuration" --- import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/test-fixtures.mdx b/nodejs/versioned_docs/version-stable/test-fixtures.mdx index 84ed142247b..cf7710347a1 100644 --- a/nodejs/versioned_docs/version-stable/test-fixtures.mdx +++ b/nodejs/versioned_docs/version-stable/test-fixtures.mdx @@ -5,7 +5,6 @@ title: "Fixtures" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -776,6 +775,8 @@ export const test = base.extend({ This is useful for non-interesting helper fixtures. For example, an [automatic](./test-fixtures.mdx#automatic-fixtures) fixture that sets up some common data can be safely hidden from a test report. +You can also mark the fixture as `box: 'self'` to only hide that particular fixture, but include all the steps inside the fixture in the test report. + ## Custom fixture title Instead of the usual fixture name, you can give fixtures a custom title that will be shown in test reports and error messages. diff --git a/nodejs/versioned_docs/version-stable/test-global-setup-teardown.mdx b/nodejs/versioned_docs/version-stable/test-global-setup-teardown.mdx index b4314ef9b7e..693b31933d8 100644 --- a/nodejs/versioned_docs/version-stable/test-global-setup-teardown.mdx +++ b/nodejs/versioned_docs/version-stable/test-global-setup-teardown.mdx @@ -5,7 +5,6 @@ title: "Global setup and teardown" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/test-parallel.mdx b/nodejs/versioned_docs/version-stable/test-parallel.mdx index 602f1630e86..c766c0bb3e3 100644 --- a/nodejs/versioned_docs/version-stable/test-parallel.mdx +++ b/nodejs/versioned_docs/version-stable/test-parallel.mdx @@ -5,7 +5,6 @@ title: "Parallelism" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/test-parameterize.mdx b/nodejs/versioned_docs/version-stable/test-parameterize.mdx index 39f3af53b8c..69eca6dcb0e 100644 --- a/nodejs/versioned_docs/version-stable/test-parameterize.mdx +++ b/nodejs/versioned_docs/version-stable/test-parameterize.mdx @@ -5,7 +5,6 @@ title: "Parameterize tests" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/test-projects.mdx b/nodejs/versioned_docs/version-stable/test-projects.mdx index 0c18a730e13..1f1456ab125 100644 --- a/nodejs/versioned_docs/version-stable/test-projects.mdx +++ b/nodejs/versioned_docs/version-stable/test-projects.mdx @@ -5,7 +5,6 @@ title: "Projects" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/test-reporters.mdx b/nodejs/versioned_docs/version-stable/test-reporters.mdx index 51d5174dfa0..52a074f90b8 100644 --- a/nodejs/versioned_docs/version-stable/test-reporters.mdx +++ b/nodejs/versioned_docs/version-stable/test-reporters.mdx @@ -5,7 +5,6 @@ title: "Reporters" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -253,6 +252,7 @@ HTML report supports the following configuration options and environment variabl | `PLAYWRIGHT_HTML_HOST` | `host` | When report opens in the browser, it will be served bound to this hostname. | `localhost` | `PLAYWRIGHT_HTML_PORT` | `port` | When report opens in the browser, it will be served on this port. | `9323` or any available port when `9323` is not available. | `PLAYWRIGHT_HTML_ATTACHMENTS_BASE_URL` | `attachmentsBaseURL` | A separate location where attachments from the `data` subdirectory are uploaded. Only needed when you upload report and `data` separately to different locations. | `data/` +| `PLAYWRIGHT_HTML_NO_COPY_PROMPT` | `noCopyPrompt` | If true, disable rendering of the Copy prompt for errors. Supports `true`, `1`, `false`, and `0`. | `false` | `PLAYWRIGHT_HTML_NO_SNIPPETS` | `noSnippets` | If true, disable rendering code snippets in the action log. If there is a top level error, that report section with code snippet will still render. Supports `true`, `1`, `false`, and `0`. | `false` ### Blob reporter diff --git a/nodejs/versioned_docs/version-stable/test-retries.mdx b/nodejs/versioned_docs/version-stable/test-retries.mdx index c669ed024b3..72f33d8b90a 100644 --- a/nodejs/versioned_docs/version-stable/test-retries.mdx +++ b/nodejs/versioned_docs/version-stable/test-retries.mdx @@ -5,7 +5,6 @@ title: "Retries" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/test-sharding.mdx b/nodejs/versioned_docs/version-stable/test-sharding.mdx index d20f8c0a79a..259822b1507 100644 --- a/nodejs/versioned_docs/version-stable/test-sharding.mdx +++ b/nodejs/versioned_docs/version-stable/test-sharding.mdx @@ -5,7 +5,6 @@ title: "Sharding" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -98,8 +97,8 @@ jobs: shardIndex: [1, 2, 3, 4] shardTotal: [4] steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v5 + - uses: actions/setup-node@v5 with: node-version: lts/* - name: Install dependencies @@ -131,15 +130,15 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v5 + - uses: actions/setup-node@v5 with: node-version: lts/* - name: Install dependencies run: npm ci - name: Download blob reports from GitHub Actions Artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 with: path: all-blob-reports pattern: blob-report-* diff --git a/nodejs/versioned_docs/version-stable/test-snapshots.mdx b/nodejs/versioned_docs/version-stable/test-snapshots.mdx index e3c1304744e..1fbe962cc2c 100644 --- a/nodejs/versioned_docs/version-stable/test-snapshots.mdx +++ b/nodejs/versioned_docs/version-stable/test-snapshots.mdx @@ -5,7 +5,6 @@ title: "Visual comparisons" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/test-timeouts.mdx b/nodejs/versioned_docs/version-stable/test-timeouts.mdx index 8be9ee55a6c..8489d564ed3 100644 --- a/nodejs/versioned_docs/version-stable/test-timeouts.mdx +++ b/nodejs/versioned_docs/version-stable/test-timeouts.mdx @@ -5,7 +5,6 @@ title: "Timeouts" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Playwright Test has multiple configurable timeouts for various tasks. diff --git a/nodejs/versioned_docs/version-stable/test-typescript.mdx b/nodejs/versioned_docs/version-stable/test-typescript.mdx index 14b3ce1d8bd..16aa54788e9 100644 --- a/nodejs/versioned_docs/version-stable/test-typescript.mdx +++ b/nodejs/versioned_docs/version-stable/test-typescript.mdx @@ -5,7 +5,6 @@ title: "TypeScript" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/test-ui-mode.mdx b/nodejs/versioned_docs/version-stable/test-ui-mode.mdx index 3b9ecf1efc9..1f08808162a 100644 --- a/nodejs/versioned_docs/version-stable/test-ui-mode.mdx +++ b/nodejs/versioned_docs/version-stable/test-ui-mode.mdx @@ -5,7 +5,6 @@ title: "UI Mode" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; import LiteYouTube from '@site/src/components/LiteYouTube'; diff --git a/nodejs/versioned_docs/version-stable/test-use-options.mdx b/nodejs/versioned_docs/version-stable/test-use-options.mdx index 4840d67a296..daef30f9c29 100644 --- a/nodejs/versioned_docs/version-stable/test-use-options.mdx +++ b/nodejs/versioned_docs/version-stable/test-use-options.mdx @@ -1,11 +1,10 @@ --- id: test-use-options -title: "Test use options" +title: "Configuration (use)" --- import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/test-webserver.mdx b/nodejs/versioned_docs/version-stable/test-webserver.mdx index d267f90feae..316db09863b 100644 --- a/nodejs/versioned_docs/version-stable/test-webserver.mdx +++ b/nodejs/versioned_docs/version-stable/test-webserver.mdx @@ -5,7 +5,6 @@ title: "Web server" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -35,7 +34,7 @@ export default defineConfig({ | [testConfig.webServer](/api/class-testconfig.mdx#test-config-web-server) | Launch a development web server (or multiple) during the tests. | | `command`| Shell command to start the local dev server of your app. | | `cwd` | Current working directory of the spawned process, defaults to the directory of the configuration file. | -| `env` | Environment variables to set for the command, `process.env` by default. | +| `env` | Environment variables for the command. Defaults to inheriting `process.env` with `PLAYWRIGHT_TEST=1` added. | | `gracefulShutdown` | 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` | Whether to ignore HTTPS errors when fetching the `url`. Defaults to `false`. | | `name` | Specifies a custom name for the web server. This name will be prefixed to log messages. Defaults to `[WebServer]`. | diff --git a/nodejs/versioned_docs/version-stable/testing-library.mdx b/nodejs/versioned_docs/version-stable/testing-library.mdx index fc64e811ee8..ce3104e4065 100644 --- a/nodejs/versioned_docs/version-stable/testing-library.mdx +++ b/nodejs/versioned_docs/version-stable/testing-library.mdx @@ -5,7 +5,6 @@ title: "Migrating from Testing Library" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Migration principles diff --git a/nodejs/versioned_docs/version-stable/touch-events.mdx b/nodejs/versioned_docs/version-stable/touch-events.mdx index 3f6444539e4..512594c7863 100644 --- a/nodejs/versioned_docs/version-stable/touch-events.mdx +++ b/nodejs/versioned_docs/version-stable/touch-events.mdx @@ -5,7 +5,6 @@ title: "Touch events (legacy)" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/trace-viewer-intro.mdx b/nodejs/versioned_docs/version-stable/trace-viewer-intro.mdx index 49c52a18c91..c95ad86c356 100644 --- a/nodejs/versioned_docs/version-stable/trace-viewer-intro.mdx +++ b/nodejs/versioned_docs/version-stable/trace-viewer-intro.mdx @@ -5,7 +5,6 @@ title: "Trace viewer" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; import LiteYouTube from '@site/src/components/LiteYouTube'; @@ -55,11 +54,11 @@ npx playwright show-report In the HTML report, click on the trace icon next to the test file name to directly open the trace for the required test. - +![playwright html report](../images/getting-started/html-report-failed-tests.png) You can also click to open the detailed view of the test and scroll down to the `'Traces'` tab and open the trace by clicking on the trace screenshot. - +![playwright html report detailed view](../images/getting-started/html-report-trace.png) To learn more about reporters, check out our detailed guide on reporters including the [HTML Reporter](/test-reporters.mdx#html-reporter). @@ -67,7 +66,7 @@ To learn more about reporters, check out our detailed guide on reporters includi View traces of your test by clicking through each action or hovering using the timeline and see the state of the page before and after the action. Inspect the log, source and network, errors, and console during each step of the test. The trace viewer creates a DOM snapshot so you can fully interact with it and open the browser DevTools to inspect the HTML, CSS, etc. - +![playwright trace viewer](../images/getting-started/trace-viewer-failed-test.png) To learn more about traces, check out our detailed guide on [Trace Viewer](/trace-viewer.mdx). diff --git a/nodejs/versioned_docs/version-stable/trace-viewer.mdx b/nodejs/versioned_docs/version-stable/trace-viewer.mdx index a49c77d8f10..ec1c1203ce3 100644 --- a/nodejs/versioned_docs/version-stable/trace-viewer.mdx +++ b/nodejs/versioned_docs/version-stable/trace-viewer.mdx @@ -5,7 +5,6 @@ title: "Trace viewer" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; import LiteYouTube from '@site/src/components/LiteYouTube'; diff --git a/nodejs/versioned_docs/version-stable/videos.mdx b/nodejs/versioned_docs/version-stable/videos.mdx index 97f36629f14..6c9aac0f9eb 100644 --- a/nodejs/versioned_docs/version-stable/videos.mdx +++ b/nodejs/versioned_docs/version-stable/videos.mdx @@ -5,7 +5,6 @@ title: "Videos" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/webview2.mdx b/nodejs/versioned_docs/version-stable/webview2.mdx index 08057683c7a..88f8b4d7f47 100644 --- a/nodejs/versioned_docs/version-stable/webview2.mdx +++ b/nodejs/versioned_docs/version-stable/webview2.mdx @@ -5,7 +5,6 @@ title: "WebView2" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_docs/version-stable/writing-tests.mdx b/nodejs/versioned_docs/version-stable/writing-tests.mdx index 3b960f614e8..a4d17d6a167 100644 --- a/nodejs/versioned_docs/version-stable/writing-tests.mdx +++ b/nodejs/versioned_docs/version-stable/writing-tests.mdx @@ -5,7 +5,6 @@ title: "Writing tests" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/nodejs/versioned_sidebars/version-stable-sidebars.json b/nodejs/versioned_sidebars/version-stable-sidebars.json index 89e5973dc61..6d92a6ad57c 100644 --- a/nodejs/versioned_sidebars/version-stable-sidebars.json +++ b/nodejs/versioned_sidebars/version-stable-sidebars.json @@ -49,19 +49,23 @@ "items": [ { "type": "doc", - "id": "test-configuration" + "id": "test-agents" }, { "type": "doc", - "id": "test-use-options" + "id": "test-annotations" }, { "type": "doc", - "id": "test-annotations" + "id": "test-cli" }, { "type": "doc", - "id": "test-cli" + "id": "test-configuration" + }, + { + "type": "doc", + "id": "test-use-options" }, { "type": "doc", diff --git a/python/versioned_docs/images/test-agents/generator-prompt.png b/python/versioned_docs/images/test-agents/generator-prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..56c67cf3ce8b2e027acd979f812980b9629925b0 GIT binary patch literal 34718 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 DEo27{ literal 0 HcmV?d00001 diff --git a/python/versioned_docs/images/test-agents/healer-prompt.png b/python/versioned_docs/images/test-agents/healer-prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..5b6116972cfb69d06226a14385b9c9db685f8110 GIT binary patch literal 28393 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 ZlXEJpo-%tM0#~jnE2znrJ~V#)KLAt<*;oJo literal 0 HcmV?d00001 diff --git a/python/versioned_docs/version-stable/actionability.mdx b/python/versioned_docs/version-stable/actionability.mdx index 25e11bb11c3..fb99122e471 100644 --- a/python/versioned_docs/version-stable/actionability.mdx +++ b/python/versioned_docs/version-stable/actionability.mdx @@ -5,7 +5,6 @@ title: "Auto-waiting" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/api-testing.mdx b/python/versioned_docs/version-stable/api-testing.mdx index d8d01a10e77..7e85be1d45b 100644 --- a/python/versioned_docs/version-stable/api-testing.mdx +++ b/python/versioned_docs/version-stable/api-testing.mdx @@ -5,7 +5,6 @@ title: "API testing" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/api/class-accessibility.mdx b/python/versioned_docs/version-stable/api/class-accessibility.mdx index 65d0b8bd920..99816e181ec 100644 --- a/python/versioned_docs/version-stable/api/class-accessibility.mdx +++ b/python/versioned_docs/version-stable/api/class-accessibility.mdx @@ -5,7 +5,6 @@ title: "Accessibility" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; :::warning[Deprecated] diff --git a/python/versioned_docs/version-stable/api/class-apirequest.mdx b/python/versioned_docs/version-stable/api/class-apirequest.mdx index 1aca54a8756..bc8ff32e1a1 100644 --- a/python/versioned_docs/version-stable/api/class-apirequest.mdx +++ b/python/versioned_docs/version-stable/api/class-apirequest.mdx @@ -5,7 +5,6 @@ title: "APIRequest" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Exposes API that can be used for the Web API testing. This class is used for creating [APIRequestContext] instance which in turn can be used for sending web requests. An instance of this class can be obtained via [playwright.request](/api/class-playwright.mdx#playwright-request). For more information see [APIRequestContext]. diff --git a/python/versioned_docs/version-stable/api/class-apirequestcontext.mdx b/python/versioned_docs/version-stable/api/class-apirequestcontext.mdx index 7ddd1d11124..ae545e9920b 100644 --- a/python/versioned_docs/version-stable/api/class-apirequestcontext.mdx +++ b/python/versioned_docs/version-stable/api/class-apirequestcontext.mdx @@ -5,7 +5,6 @@ title: "APIRequestContext" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; This API is used for the Web API testing. You can use it to trigger API endpoints, configure micro-services, prepare environment or the service to your e2e test. diff --git a/python/versioned_docs/version-stable/api/class-apiresponse.mdx b/python/versioned_docs/version-stable/api/class-apiresponse.mdx index ed8442f0682..55e1dc1f8e3 100644 --- a/python/versioned_docs/version-stable/api/class-apiresponse.mdx +++ b/python/versioned_docs/version-stable/api/class-apiresponse.mdx @@ -5,7 +5,6 @@ title: "APIResponse" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [APIResponse] class represents responses returned by [api_request_context.get()](/api/class-apirequestcontext.mdx#api-request-context-get) and similar methods. diff --git a/python/versioned_docs/version-stable/api/class-apiresponseassertions.mdx b/python/versioned_docs/version-stable/api/class-apiresponseassertions.mdx index 03d8af7a0aa..ee3282a9682 100644 --- a/python/versioned_docs/version-stable/api/class-apiresponseassertions.mdx +++ b/python/versioned_docs/version-stable/api/class-apiresponseassertions.mdx @@ -5,7 +5,6 @@ title: "APIResponseAssertions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The [APIResponseAssertions] class provides assertion methods that can be used to make assertions about the [APIResponse] in the tests. diff --git a/python/versioned_docs/version-stable/api/class-browser.mdx b/python/versioned_docs/version-stable/api/class-browser.mdx index ec14e0ad221..7eaa1495251 100644 --- a/python/versioned_docs/version-stable/api/class-browser.mdx +++ b/python/versioned_docs/version-stable/api/class-browser.mdx @@ -5,7 +5,6 @@ title: "Browser" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; A Browser is created via [browser_type.launch()](/api/class-browsertype.mdx#browser-type-launch). An example of using a [Browser] to create a [Page]: diff --git a/python/versioned_docs/version-stable/api/class-browsercontext.mdx b/python/versioned_docs/version-stable/api/class-browsercontext.mdx index 177ac6091a2..c7f89830b84 100644 --- a/python/versioned_docs/version-stable/api/class-browsercontext.mdx +++ b/python/versioned_docs/version-stable/api/class-browsercontext.mdx @@ -5,7 +5,6 @@ title: "BrowserContext" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; BrowserContexts provide a way to operate multiple independent browser sessions. @@ -1332,28 +1331,6 @@ browser_context.wait_for_event(event, **kwargs) ## Properties -### background_pages {#browser-context-background-pages} - -Added in: v1.11browserContext.background_pages - -:::note - -Background pages are only supported on Chromium-based browsers. -::: - -All existing background pages in the context. - -**Usage** - -```python -browser_context.background_pages -``` - -**Returns** -- [List]\[[Page]\]# - ---- - ### browser {#browser-context-browser} Added before v1.9browserContext.browser @@ -1461,52 +1438,6 @@ browser_context.tracing ## Events -### on("backgroundpage") {#browser-context-event-background-page} - -Added in: v1.11browserContext.on("backgroundpage") - -:::note - -Only works with Chromium browser's persistent context. -::: - -Emitted when new background page is created in the context. - - - - -```py -background_page = context.wait_for_event("backgroundpage") -``` - - - - -```py -background_page = await context.wait_for_event("backgroundpage") -``` - - - - -**Usage** - -```python -browser_context.on("backgroundpage", handler) -``` - -**Event data** -- [Page] - ---- - ### on("close") {#browser-context-event-close} Added before v1.9browserContext.on("close") @@ -1765,6 +1696,56 @@ browser_context.on("weberror", handler) **Event data** - [WebError] +--- + +## Deprecated + +### on("backgroundpage") {#browser-context-event-background-page} + +Added in: v1.11browserContext.on("backgroundpage") + +:::warning Deprecated + +Background pages have been removed from Chromium together with Manifest V2 extensions. + +::: + + +This event is not emitted. + +**Usage** + +```python +browser_context.on("backgroundpage", handler) +``` + +**Event data** +- [Page] + +--- + +### background_pages {#browser-context-background-pages} + +Added in: v1.11browserContext.background_pages + +:::warning Deprecated + +Background pages have been removed from Chromium together with Manifest V2 extensions. + +::: + + +Returns an empty list. + +**Usage** + +```python +browser_context.background_pages +``` + +**Returns** +- [List]\[[Page]\]# + [Accessibility]: /api/class-accessibility.mdx "Accessibility" [APIRequest]: /api/class-apirequest.mdx "APIRequest" diff --git a/python/versioned_docs/version-stable/api/class-browsertype.mdx b/python/versioned_docs/version-stable/api/class-browsertype.mdx index 9279dae786b..6bfb06f39f8 100644 --- a/python/versioned_docs/version-stable/api/class-browsertype.mdx +++ b/python/versioned_docs/version-stable/api/class-browsertype.mdx @@ -5,7 +5,6 @@ title: "BrowserType" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; BrowserType provides methods to launch a specific browser instance or connect to an existing one. The following is a typical example of using Playwright to drive automation: diff --git a/python/versioned_docs/version-stable/api/class-cdpsession.mdx b/python/versioned_docs/version-stable/api/class-cdpsession.mdx index 03ef6d2532b..c9a4ff6dae0 100644 --- a/python/versioned_docs/version-stable/api/class-cdpsession.mdx +++ b/python/versioned_docs/version-stable/api/class-cdpsession.mdx @@ -5,7 +5,6 @@ title: "CDPSession" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The `CDPSession` instances are used to talk raw Chrome Devtools Protocol: diff --git a/python/versioned_docs/version-stable/api/class-clock.mdx b/python/versioned_docs/version-stable/api/class-clock.mdx index cd5633f1243..fb3dd0ece9a 100644 --- a/python/versioned_docs/version-stable/api/class-clock.mdx +++ b/python/versioned_docs/version-stable/api/class-clock.mdx @@ -5,7 +5,6 @@ title: "Clock" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Accurately simulating time-dependent behavior is essential for verifying the correctness of applications. Learn more about [clock emulation](../clock.mdx). diff --git a/python/versioned_docs/version-stable/api/class-consolemessage.mdx b/python/versioned_docs/version-stable/api/class-consolemessage.mdx index 7582d15d1f4..c59988a3847 100644 --- a/python/versioned_docs/version-stable/api/class-consolemessage.mdx +++ b/python/versioned_docs/version-stable/api/class-consolemessage.mdx @@ -5,7 +5,6 @@ title: "ConsoleMessage" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [ConsoleMessage] objects are dispatched by page via the [page.on("console")](/api/class-page.mdx#page-event-console) event. For each console message logged in the page there will be corresponding event in the Playwright context. diff --git a/python/versioned_docs/version-stable/api/class-dialog.mdx b/python/versioned_docs/version-stable/api/class-dialog.mdx index e90458e3167..42f2736e568 100644 --- a/python/versioned_docs/version-stable/api/class-dialog.mdx +++ b/python/versioned_docs/version-stable/api/class-dialog.mdx @@ -5,7 +5,6 @@ title: "Dialog" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [Dialog] objects are dispatched by page via the [page.on("dialog")](/api/class-page.mdx#page-event-dialog) event. diff --git a/python/versioned_docs/version-stable/api/class-download.mdx b/python/versioned_docs/version-stable/api/class-download.mdx index 5d954176d1a..8c5089e052c 100644 --- a/python/versioned_docs/version-stable/api/class-download.mdx +++ b/python/versioned_docs/version-stable/api/class-download.mdx @@ -5,7 +5,6 @@ title: "Download" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [Download] objects are dispatched by page via the [page.on("download")](/api/class-page.mdx#page-event-download) event. diff --git a/python/versioned_docs/version-stable/api/class-elementhandle.mdx b/python/versioned_docs/version-stable/api/class-elementhandle.mdx index b268ba1da91..140ffd377a2 100644 --- a/python/versioned_docs/version-stable/api/class-elementhandle.mdx +++ b/python/versioned_docs/version-stable/api/class-elementhandle.mdx @@ -5,7 +5,6 @@ title: "ElementHandle" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; * extends: [JSHandle] diff --git a/python/versioned_docs/version-stable/api/class-error.mdx b/python/versioned_docs/version-stable/api/class-error.mdx index fe5887318ab..7afaa2c2102 100644 --- a/python/versioned_docs/version-stable/api/class-error.mdx +++ b/python/versioned_docs/version-stable/api/class-error.mdx @@ -5,7 +5,6 @@ title: "Error" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; * extends: [Exception] diff --git a/python/versioned_docs/version-stable/api/class-filechooser.mdx b/python/versioned_docs/version-stable/api/class-filechooser.mdx index 0f802243a24..686484d1323 100644 --- a/python/versioned_docs/version-stable/api/class-filechooser.mdx +++ b/python/versioned_docs/version-stable/api/class-filechooser.mdx @@ -5,7 +5,6 @@ title: "FileChooser" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [FileChooser] objects are dispatched by the page in the [page.on("filechooser")](/api/class-page.mdx#page-event-file-chooser) event. diff --git a/python/versioned_docs/version-stable/api/class-frame.mdx b/python/versioned_docs/version-stable/api/class-frame.mdx index b2553eddbff..efffa94f093 100644 --- a/python/versioned_docs/version-stable/api/class-frame.mdx +++ b/python/versioned_docs/version-stable/api/class-frame.mdx @@ -5,7 +5,6 @@ title: "Frame" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; At every point of time, page exposes its current frame tree via the [page.main_frame](/api/class-page.mdx#page-main-frame) and [frame.child_frames](/api/class-frame.mdx#frame-child-frames) methods. diff --git a/python/versioned_docs/version-stable/api/class-framelocator.mdx b/python/versioned_docs/version-stable/api/class-framelocator.mdx index 0f8466fe30d..6c8a9e9b184 100644 --- a/python/versioned_docs/version-stable/api/class-framelocator.mdx +++ b/python/versioned_docs/version-stable/api/class-framelocator.mdx @@ -5,7 +5,6 @@ title: "FrameLocator" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; FrameLocator represents a view to the `iframe` on the page. It captures the logic sufficient to retrieve the `iframe` and locate elements in that iframe. FrameLocator can be created with either [locator.content_frame](/api/class-locator.mdx#locator-content-frame), [page.frame_locator()](/api/class-page.mdx#page-frame-locator) or [locator.frame_locator()](/api/class-locator.mdx#locator-frame-locator) method. diff --git a/python/versioned_docs/version-stable/api/class-jshandle.mdx b/python/versioned_docs/version-stable/api/class-jshandle.mdx index 16d2048fe4b..fb7c05dd4b0 100644 --- a/python/versioned_docs/version-stable/api/class-jshandle.mdx +++ b/python/versioned_docs/version-stable/api/class-jshandle.mdx @@ -5,7 +5,6 @@ title: "JSHandle" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; JSHandle represents an in-page JavaScript object. JSHandles can be created with the [page.evaluate_handle()](/api/class-page.mdx#page-evaluate-handle) method. diff --git a/python/versioned_docs/version-stable/api/class-keyboard.mdx b/python/versioned_docs/version-stable/api/class-keyboard.mdx index 75a3f8d9166..081287e132d 100644 --- a/python/versioned_docs/version-stable/api/class-keyboard.mdx +++ b/python/versioned_docs/version-stable/api/class-keyboard.mdx @@ -5,7 +5,6 @@ title: "Keyboard" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Keyboard provides an api for managing a virtual keyboard. The high level api is [keyboard.type()](/api/class-keyboard.mdx#keyboard-type), which takes raw characters and generates proper `keydown`, `keypress`/`input`, and `keyup` events on your page. diff --git a/python/versioned_docs/version-stable/api/class-locator.mdx b/python/versioned_docs/version-stable/api/class-locator.mdx index bb2976d3c48..c8b70edb155 100644 --- a/python/versioned_docs/version-stable/api/class-locator.mdx +++ b/python/versioned_docs/version-stable/api/class-locator.mdx @@ -5,7 +5,6 @@ title: "Locator" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Locators are the central piece of Playwright's auto-waiting and retry-ability. In a nutshell, locators represent a way to find element(s) on the page at any moment. A locator can be created with the [page.locator()](/api/class-page.mdx#page-locator) method. @@ -170,14 +169,14 @@ The following example finds a button with a specific title. ```py -button = page.get_by_role("button").and_(page.getByTitle("Subscribe")) +button = page.get_by_role("button").and_(page.get_by_title("Subscribe")) ``` ```py -button = page.get_by_role("button").and_(page.getByTitle("Subscribe")) +button = page.get_by_role("button").and_(page.get_by_title("Subscribe")) ``` diff --git a/python/versioned_docs/version-stable/api/class-locatorassertions.mdx b/python/versioned_docs/version-stable/api/class-locatorassertions.mdx index f918e2147c0..038085b15ca 100644 --- a/python/versioned_docs/version-stable/api/class-locatorassertions.mdx +++ b/python/versioned_docs/version-stable/api/class-locatorassertions.mdx @@ -5,7 +5,6 @@ title: "LocatorAssertions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The [LocatorAssertions] class provides assertion methods that can be used to make assertions about the [Locator] state in the tests. diff --git a/python/versioned_docs/version-stable/api/class-mouse.mdx b/python/versioned_docs/version-stable/api/class-mouse.mdx index 56fe66fd9ff..48a001261bd 100644 --- a/python/versioned_docs/version-stable/api/class-mouse.mdx +++ b/python/versioned_docs/version-stable/api/class-mouse.mdx @@ -5,7 +5,6 @@ title: "Mouse" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The Mouse class operates in main-frame CSS pixels relative to the top-left corner of the viewport. diff --git a/python/versioned_docs/version-stable/api/class-page.mdx b/python/versioned_docs/version-stable/api/class-page.mdx index 9cbc99f7407..c70783d6fe7 100644 --- a/python/versioned_docs/version-stable/api/class-page.mdx +++ b/python/versioned_docs/version-stable/api/class-page.mdx @@ -5,7 +5,6 @@ title: "Page" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Page provides methods to interact with a single tab in a [Browser], or an [extension background page](https://developer.chrome.com/extensions/background_pages) in Chromium. One [Browser] instance might have multiple [Page] instances. @@ -455,6 +454,23 @@ page.close(**kwargs) --- +### console_messages {#page-console-messages} + +Added in: v1.56page.console_messages + +Returns up to (currently) 200 last console messages from this page. See [page.on("console")](/api/class-page.mdx#page-event-console) for more details. + +**Usage** + +```python +page.console_messages() +``` + +**Returns** +- [List]\[[ConsoleMessage]\]# + +--- + ### content {#page-content} Added before v1.9page.content @@ -2198,6 +2214,23 @@ page.opener() --- +### page_errors {#page-page-errors} + +Added in: v1.56page.page_errors + +Returns up to (currently) 200 last page errors from this page. See [page.on("pageerror")](/api/class-page.mdx#page-event-page-error) for more details. + +**Usage** + +```python +page.page_errors() +``` + +**Returns** +- [List]\[[Error]\]# + +--- + ### pause {#page-pause} Added in: v1.9page.pause @@ -2470,6 +2503,27 @@ page.request_gc() --- +### requests {#page-requests} + +Added in: v1.56page.requests + +Returns up to (currently) 100 last network request from this page. See [page.on("request")](/api/class-page.mdx#page-event-request) for more details. + +Returned requests should be accessed immediately, otherwise they might be collected to prevent unbounded memory growth as new requests come in. Once collected, retrieving most information about the request is impossible. + +Note that requests reported through the [page.on("request")](/api/class-page.mdx#page-event-request) request are not collected, so there is a trade off between efficient memory usage with [page.requests()](/api/class-page.mdx#page-requests) and the amount of available information reported through [page.on("request")](/api/class-page.mdx#page-event-request). + +**Usage** + +```python +page.requests() +``` + +**Returns** +- [List]\[[Request]\]# + +--- + ### route {#page-route} Added before v1.9page.route diff --git a/python/versioned_docs/version-stable/api/class-pageassertions.mdx b/python/versioned_docs/version-stable/api/class-pageassertions.mdx index 94f14471ed4..c4ccdb63773 100644 --- a/python/versioned_docs/version-stable/api/class-pageassertions.mdx +++ b/python/versioned_docs/version-stable/api/class-pageassertions.mdx @@ -5,7 +5,6 @@ title: "PageAssertions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The [PageAssertions] class provides assertion methods that can be used to make assertions about the [Page] state in the tests. diff --git a/python/versioned_docs/version-stable/api/class-playwright.mdx b/python/versioned_docs/version-stable/api/class-playwright.mdx index de7f24ef3f4..34e089eedde 100644 --- a/python/versioned_docs/version-stable/api/class-playwright.mdx +++ b/python/versioned_docs/version-stable/api/class-playwright.mdx @@ -5,7 +5,6 @@ title: "Playwright" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Playwright module provides a method to launch a browser instance. The following is a typical example of using Playwright to drive automation: diff --git a/python/versioned_docs/version-stable/api/class-request.mdx b/python/versioned_docs/version-stable/api/class-request.mdx index 1c85734a622..98610ce4a86 100644 --- a/python/versioned_docs/version-stable/api/class-request.mdx +++ b/python/versioned_docs/version-stable/api/class-request.mdx @@ -5,7 +5,6 @@ title: "Request" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Whenever the page sends a request for a network resource the following sequence of events are emitted by [Page]: diff --git a/python/versioned_docs/version-stable/api/class-response.mdx b/python/versioned_docs/version-stable/api/class-response.mdx index 2aaa41f43e2..415c87769a6 100644 --- a/python/versioned_docs/version-stable/api/class-response.mdx +++ b/python/versioned_docs/version-stable/api/class-response.mdx @@ -5,7 +5,6 @@ title: "Response" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [Response] class represents responses which are received by page. diff --git a/python/versioned_docs/version-stable/api/class-route.mdx b/python/versioned_docs/version-stable/api/class-route.mdx index 9de5bcee50b..eb4f23c7b3d 100644 --- a/python/versioned_docs/version-stable/api/class-route.mdx +++ b/python/versioned_docs/version-stable/api/class-route.mdx @@ -5,7 +5,6 @@ title: "Route" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Whenever a network route is set up with [page.route()](/api/class-page.mdx#page-route) or [browser_context.route()](/api/class-browsercontext.mdx#browser-context-route), the `Route` object allows to handle the route. diff --git a/python/versioned_docs/version-stable/api/class-selectors.mdx b/python/versioned_docs/version-stable/api/class-selectors.mdx index 18af6b334de..fd640114f3c 100644 --- a/python/versioned_docs/version-stable/api/class-selectors.mdx +++ b/python/versioned_docs/version-stable/api/class-selectors.mdx @@ -5,7 +5,6 @@ title: "Selectors" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Selectors can be used to install custom selector engines. See [extensibility](../extensibility.mdx) for more information. diff --git a/python/versioned_docs/version-stable/api/class-timeouterror.mdx b/python/versioned_docs/version-stable/api/class-timeouterror.mdx index 857c1fdf088..813d2b1fb7f 100644 --- a/python/versioned_docs/version-stable/api/class-timeouterror.mdx +++ b/python/versioned_docs/version-stable/api/class-timeouterror.mdx @@ -5,7 +5,6 @@ title: "TimeoutError" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; * extends: [Error] diff --git a/python/versioned_docs/version-stable/api/class-touchscreen.mdx b/python/versioned_docs/version-stable/api/class-touchscreen.mdx index 1c413ca227d..91aa8b53b0e 100644 --- a/python/versioned_docs/version-stable/api/class-touchscreen.mdx +++ b/python/versioned_docs/version-stable/api/class-touchscreen.mdx @@ -5,7 +5,6 @@ title: "Touchscreen" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The Touchscreen class operates in main-frame CSS pixels relative to the top-left corner of the viewport. Methods on the touchscreen can only be used in browser contexts that have been initialized with `hasTouch` set to true. diff --git a/python/versioned_docs/version-stable/api/class-tracing.mdx b/python/versioned_docs/version-stable/api/class-tracing.mdx index a07e89c645a..e81235ccc09 100644 --- a/python/versioned_docs/version-stable/api/class-tracing.mdx +++ b/python/versioned_docs/version-stable/api/class-tracing.mdx @@ -5,7 +5,6 @@ title: "Tracing" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; API for collecting and saving Playwright traces. Playwright traces can be opened in [Trace Viewer](../trace-viewer.mdx) after Playwright script runs. diff --git a/python/versioned_docs/version-stable/api/class-video.mdx b/python/versioned_docs/version-stable/api/class-video.mdx index 29e36dbcf35..616fbab6943 100644 --- a/python/versioned_docs/version-stable/api/class-video.mdx +++ b/python/versioned_docs/version-stable/api/class-video.mdx @@ -5,7 +5,6 @@ title: "Video" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; When browser context is created with the `recordVideo` option, each page has a video object associated with it. diff --git a/python/versioned_docs/version-stable/api/class-weberror.mdx b/python/versioned_docs/version-stable/api/class-weberror.mdx index 12df8589282..d5e3a5ba047 100644 --- a/python/versioned_docs/version-stable/api/class-weberror.mdx +++ b/python/versioned_docs/version-stable/api/class-weberror.mdx @@ -5,7 +5,6 @@ title: "WebError" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; [WebError] class represents an unhandled exception thrown in the page. It is dispatched via the [browser_context.on("weberror")](/api/class-browsercontext.mdx#browser-context-event-web-error) event. diff --git a/python/versioned_docs/version-stable/api/class-websocket.mdx b/python/versioned_docs/version-stable/api/class-websocket.mdx index 8af12b5b3a9..7a7feca871e 100644 --- a/python/versioned_docs/version-stable/api/class-websocket.mdx +++ b/python/versioned_docs/version-stable/api/class-websocket.mdx @@ -5,7 +5,6 @@ title: "WebSocket" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The [WebSocket] class represents WebSocket connections within a page. It provides the ability to inspect and manipulate the data being transmitted and received. diff --git a/python/versioned_docs/version-stable/api/class-websocketroute.mdx b/python/versioned_docs/version-stable/api/class-websocketroute.mdx index a19c343ff50..4bbf1e75a35 100644 --- a/python/versioned_docs/version-stable/api/class-websocketroute.mdx +++ b/python/versioned_docs/version-stable/api/class-websocketroute.mdx @@ -5,7 +5,6 @@ title: "WebSocketRoute" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; Whenever a [`WebSocket`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) route is set up with [page.route_web_socket()](/api/class-page.mdx#page-route-web-socket) or [browser_context.route_web_socket()](/api/class-browsercontext.mdx#browser-context-route-web-socket), the `WebSocketRoute` object allows to handle the WebSocket, like an actual server would do. diff --git a/python/versioned_docs/version-stable/api/class-worker.mdx b/python/versioned_docs/version-stable/api/class-worker.mdx index e8669406024..e628e7adecb 100644 --- a/python/versioned_docs/version-stable/api/class-worker.mdx +++ b/python/versioned_docs/version-stable/api/class-worker.mdx @@ -5,7 +5,6 @@ title: "Worker" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; The Worker class represents a [WebWorker](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API). `worker` event is emitted on the page object to signal a worker creation. `close` event is emitted on the worker object when the worker is gone. diff --git a/python/versioned_docs/version-stable/aria-snapshots.mdx b/python/versioned_docs/version-stable/aria-snapshots.mdx index 8878f8a0163..a4243ddf0dd 100644 --- a/python/versioned_docs/version-stable/aria-snapshots.mdx +++ b/python/versioned_docs/version-stable/aria-snapshots.mdx @@ -5,7 +5,6 @@ title: "Snapshot testing" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; import LiteYouTube from '@site/src/components/LiteYouTube'; diff --git a/python/versioned_docs/version-stable/auth.mdx b/python/versioned_docs/version-stable/auth.mdx index 25ef3b6938c..8e07a25a9ba 100644 --- a/python/versioned_docs/version-stable/auth.mdx +++ b/python/versioned_docs/version-stable/auth.mdx @@ -5,7 +5,6 @@ title: "Authentication" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/browser-contexts.mdx b/python/versioned_docs/version-stable/browser-contexts.mdx index 5089593fc15..acca34dd20b 100644 --- a/python/versioned_docs/version-stable/browser-contexts.mdx +++ b/python/versioned_docs/version-stable/browser-contexts.mdx @@ -5,7 +5,6 @@ title: "Isolation" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/browsers.mdx b/python/versioned_docs/version-stable/browsers.mdx index 3c9256471e4..114c202d486 100644 --- a/python/versioned_docs/version-stable/browsers.mdx +++ b/python/versioned_docs/version-stable/browsers.mdx @@ -5,7 +5,6 @@ title: "Browsers" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/chrome-extensions.mdx b/python/versioned_docs/version-stable/chrome-extensions.mdx index c38650b3e11..4599cfabf30 100644 --- a/python/versioned_docs/version-stable/chrome-extensions.mdx +++ b/python/versioned_docs/version-stable/chrome-extensions.mdx @@ -5,7 +5,6 @@ title: "Chrome extensions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/ci-intro.mdx b/python/versioned_docs/version-stable/ci-intro.mdx index 5c2d47ea008..d267e50327b 100644 --- a/python/versioned_docs/version-stable/ci-intro.mdx +++ b/python/versioned_docs/version-stable/ci-intro.mdx @@ -5,11 +5,10 @@ title: "Setting up CI" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction -Playwright tests can be run on any CI provider. In this section we cover running tests on GitHub using GitHub Actions. If you would like to see how to configure other CI providers, check out our detailed doc on Continuous Integration. +Playwright tests can be run on any CI provider. In this section we cover running tests on GitHub using GitHub Actions. If you would like to see how to configure other CI providers, check out our detailed [doc on Continuous Integration](./ci.mdx). #### You will learn - [How to set up GitHub Actions](/ci-intro.mdx#setting-up-github-actions) @@ -32,11 +31,11 @@ jobs: timeout-minutes: 60 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v6 with: - python-version: '3.11' + python-version: '3.13' - name: Install dependencies run: | python -m pip install --upgrade pip @@ -86,7 +85,7 @@ Clicking on the workflow run shows you all the actions that GitHub performed and [trace.playwright.dev](https://trace.playwright.dev) is a statically hosted variant of the Trace Viewer. You can upload trace files using drag and drop. - +![playwright trace viewer](../images/getting-started/trace-viewer-failed-test.png) ## Properly handling Secrets diff --git a/python/versioned_docs/version-stable/ci.mdx b/python/versioned_docs/version-stable/ci.mdx index 33ff25c48fb..b725495c588 100644 --- a/python/versioned_docs/version-stable/ci.mdx +++ b/python/versioned_docs/version-stable/ci.mdx @@ -5,7 +5,6 @@ title: "Continuous Integration" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -48,11 +47,11 @@ jobs: timeout-minutes: 60 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v6 with: - python-version: '3.11' + python-version: '3.13' - name: Install dependencies run: | python -m pip install --upgrade pip @@ -84,14 +83,14 @@ jobs: name: 'Playwright Tests' runs-on: ubuntu-latest container: - image: mcr.microsoft.com/playwright/python:v1.54.0-noble + image: mcr.microsoft.com/playwright/python:v1.55.0-noble options: --user 1001 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v6 with: - python-version: '3.11' + python-version: '3.13' - name: Install dependencies run: | python -m pip install --upgrade pip @@ -115,10 +114,10 @@ jobs: runs-on: ubuntu-latest if: github.event.deployment_status.state == 'success' steps: - - uses: actions/checkout@v4 - uses: actions/setup-python@v4 + - uses: actions/checkout@v5 + uses: actions/setup-python@v6 with: - python-version: '3.11' + python-version: '3.13' - name: Install dependencies run: | python -m pip install --upgrade pip @@ -154,7 +153,7 @@ pool: steps: - task: UsePythonVersion@0 inputs: - versionSpec: '3.11' + versionSpec: '3.13' displayName: 'Use Python' - script: | python -m pip install --upgrade pip @@ -174,12 +173,12 @@ trigger: pool: vmImage: ubuntu-latest -container: mcr.microsoft.com/playwright/python:v1.54.0-noble +container: mcr.microsoft.com/playwright/python:v1.55.0-noble steps: - task: UsePythonVersion@0 inputs: - versionSpec: '3.11' + versionSpec: '3.13' displayName: 'Use Python' - script: | @@ -198,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.54.0-noble + - image: mcr.microsoft.com/playwright/python:v1.55.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. @@ -209,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.54.0-noble' } } + agent { docker { image 'mcr.microsoft.com/playwright/python:v1.55.0-noble' } } stages { stage('e2e-tests') { steps { @@ -226,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.54.0-noble +image: mcr.microsoft.com/playwright/python:v1.55.0-noble ``` ### GitLab CI @@ -239,7 +238,7 @@ stages: tests: stage: test - image: mcr.microsoft.com/playwright/python:v1.54.0-noble + image: mcr.microsoft.com/playwright/python:v1.55.0-noble script: ... ``` diff --git a/python/versioned_docs/version-stable/clock.mdx b/python/versioned_docs/version-stable/clock.mdx index 66d99e87181..987d7f07e59 100644 --- a/python/versioned_docs/version-stable/clock.mdx +++ b/python/versioned_docs/version-stable/clock.mdx @@ -5,7 +5,6 @@ title: "Clock" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; import LiteYouTube from '@site/src/components/LiteYouTube'; diff --git a/python/versioned_docs/version-stable/codegen-intro.mdx b/python/versioned_docs/version-stable/codegen-intro.mdx index b06b8f81a30..a3331b35d9f 100644 --- a/python/versioned_docs/version-stable/codegen-intro.mdx +++ b/python/versioned_docs/version-stable/codegen-intro.mdx @@ -5,7 +5,6 @@ title: "Generating tests" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -35,7 +34,7 @@ With the test generator you can record: * `'assert value'` to assert that an element has a specific value ###### - +![recording a test](../images/getting-started/record-test-python.png) ###### When you finish interacting with the page, press the `'record'` button to stop recording and use the `'copy'` button to copy the generated code to your editor. @@ -54,7 +53,7 @@ You can generate [locators](/locators.mdx) with the test generator. * Use the copy button to copy the locator and paste it into your code ###### - +![picking a locator](../images/getting-started/pick-locator-python.png) ### Emulation diff --git a/python/versioned_docs/version-stable/codegen.mdx b/python/versioned_docs/version-stable/codegen.mdx index 3f037f761c2..991da16486e 100644 --- a/python/versioned_docs/version-stable/codegen.mdx +++ b/python/versioned_docs/version-stable/codegen.mdx @@ -5,7 +5,6 @@ title: "Test generator" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; import LiteYouTube from '@site/src/components/LiteYouTube'; diff --git a/python/versioned_docs/version-stable/debug.mdx b/python/versioned_docs/version-stable/debug.mdx index bc9bbbd987e..7278a6019e4 100644 --- a/python/versioned_docs/version-stable/debug.mdx +++ b/python/versioned_docs/version-stable/debug.mdx @@ -5,7 +5,6 @@ title: "Debugging Tests" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Playwright Inspector @@ -130,8 +129,6 @@ When running in Debug Mode with `PWDEBUG=console`, a `playwright` object is avai - **See console logs** during execution (or learn how to [read logs via API](./api/class-page.mdx#page-event-console)) - Check **network activity** and other developer tools features -This will also set the default timeouts of Playwright to 0 (= no timeout). - Browser Developer Tools with Playwright object To debug your tests using the browser developer tools, start by setting a breakpoint in your test to pause the execution using the [page.pause()](/api/class-page.mdx#page-pause) method. diff --git a/python/versioned_docs/version-stable/dialogs.mdx b/python/versioned_docs/version-stable/dialogs.mdx index 50ea679eaa2..32baf022d05 100644 --- a/python/versioned_docs/version-stable/dialogs.mdx +++ b/python/versioned_docs/version-stable/dialogs.mdx @@ -5,7 +5,6 @@ title: "Dialogs" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/docker.mdx b/python/versioned_docs/version-stable/docker.mdx index b2b430b4a04..3bec0151689 100644 --- a/python/versioned_docs/version-stable/docker.mdx +++ b/python/versioned_docs/version-stable/docker.mdx @@ -5,7 +5,6 @@ title: "Docker" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -23,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.54.0-noble +docker pull mcr.microsoft.com/playwright/python:v1.55.0-noble ``` ### Run the image @@ -35,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.54.0-noble /bin/bash +docker run -it --rm --ipc=host mcr.microsoft.com/playwright/python:v1.55.0-noble /bin/bash ``` #### Crawling and scraping @@ -43,7 +42,7 @@ docker run -it --rm --ipc=host mcr.microsoft.com/playwright/python:v1.54.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.54.0-noble /bin/bash +docker run -it --rm --ipc=host --user pwuser --security-opt seccomp=seccomp_profile.json mcr.microsoft.com/playwright/python:v1.55.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: @@ -83,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.54.0-noble /bin/sh -c "npx -y playwright@1.54.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.55.0-noble /bin/sh -c "npx -y playwright@1.55.0 run-server --port 3000 --host 0.0.0.0" ``` #### Connecting to the Server @@ -123,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.54.0-noble /bin/sh -c "npx -y playwright@1.54.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.55.0-noble /bin/sh -c "npx -y playwright@1.55.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. @@ -138,9 +137,9 @@ When running tests remotely, ensure the Playwright version in your tests matches See [all available image tags]. We currently publish images with the following tags: -- `:v1.54.0` - Playwright v1.54.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat). -- `:v1.54.0-noble` - Playwright v1.54.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat). -- `:v1.54.0-jammy` - Playwright v1.54.0 release docker image based on Ubuntu 22.04 LTS (Jammy Jellyfish). +- `:v1.55.0` - Playwright v1.55.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat). +- `:v1.55.0-noble` - Playwright v1.55.0 release docker image based on Ubuntu 24.04 LTS (Noble Numbat). +- `:v1.55.0-jammy` - Playwright v1.55.0 release docker image based on Ubuntu 22.04 LTS (Jammy Jellyfish). :::note @@ -164,7 +163,7 @@ To run Playwright inside Docker, you need to have Python, [Playwright browsers]( ```Dockerfile FROM python:3.12-bookworm -RUN pip install playwright==@1.54.0 && \ +RUN pip install playwright==@1.55.0 && \ playwright install --with-deps ``` diff --git a/python/versioned_docs/version-stable/downloads.mdx b/python/versioned_docs/version-stable/downloads.mdx index e88652a7151..6c37ed79047 100644 --- a/python/versioned_docs/version-stable/downloads.mdx +++ b/python/versioned_docs/version-stable/downloads.mdx @@ -5,7 +5,6 @@ title: "Downloads" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/emulation.mdx b/python/versioned_docs/version-stable/emulation.mdx index 0ae2b0bb9a3..fa01256ba56 100644 --- a/python/versioned_docs/version-stable/emulation.mdx +++ b/python/versioned_docs/version-stable/emulation.mdx @@ -5,7 +5,6 @@ title: "Emulation" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/evaluating.mdx b/python/versioned_docs/version-stable/evaluating.mdx index 6adeeca259e..15db7a8fc3b 100644 --- a/python/versioned_docs/version-stable/evaluating.mdx +++ b/python/versioned_docs/version-stable/evaluating.mdx @@ -5,7 +5,6 @@ title: "Evaluating JavaScript" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/events.mdx b/python/versioned_docs/version-stable/events.mdx index c311ff40c9a..4b28448bdc9 100644 --- a/python/versioned_docs/version-stable/events.mdx +++ b/python/versioned_docs/version-stable/events.mdx @@ -5,7 +5,6 @@ title: "Events" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/extensibility.mdx b/python/versioned_docs/version-stable/extensibility.mdx index 6ccaa5ec357..5cf8ddd901f 100644 --- a/python/versioned_docs/version-stable/extensibility.mdx +++ b/python/versioned_docs/version-stable/extensibility.mdx @@ -5,7 +5,6 @@ title: "Extensibility" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Custom selector engines diff --git a/python/versioned_docs/version-stable/frames.mdx b/python/versioned_docs/version-stable/frames.mdx index 5b69af2fbf9..7b8edd275e8 100644 --- a/python/versioned_docs/version-stable/frames.mdx +++ b/python/versioned_docs/version-stable/frames.mdx @@ -5,7 +5,6 @@ title: "Frames" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/handles.mdx b/python/versioned_docs/version-stable/handles.mdx index f7d456f46de..225213bfe06 100644 --- a/python/versioned_docs/version-stable/handles.mdx +++ b/python/versioned_docs/version-stable/handles.mdx @@ -5,7 +5,6 @@ title: "Handles" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/input.mdx b/python/versioned_docs/version-stable/input.mdx index bc89cfbd838..c057eddb31d 100644 --- a/python/versioned_docs/version-stable/input.mdx +++ b/python/versioned_docs/version-stable/input.mdx @@ -5,7 +5,6 @@ title: "Actions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/intro.mdx b/python/versioned_docs/version-stable/intro.mdx index a988ee2c5f3..238d0384d73 100644 --- a/python/versioned_docs/version-stable/intro.mdx +++ b/python/versioned_docs/version-stable/intro.mdx @@ -5,7 +5,6 @@ title: "Installation" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -99,7 +98,7 @@ pip install pytest-playwright playwright -U ## System requirements - Python 3.8 or higher. -- Windows 10+, Windows Server 2016+ or Windows Subsystem for Linux (WSL). +- Windows 11+, Windows Server 2019+ or Windows Subsystem for Linux (WSL). - macOS 14 Ventura, or later. - Debian 12, Debian 13, Ubuntu 22.04, Ubuntu 24.04, on x86-64 and arm64 architecture. diff --git a/python/versioned_docs/version-stable/languages.mdx b/python/versioned_docs/version-stable/languages.mdx index 921a8a0ed48..01505aa4434 100644 --- a/python/versioned_docs/version-stable/languages.mdx +++ b/python/versioned_docs/version-stable/languages.mdx @@ -5,7 +5,6 @@ title: "Supported languages" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/library.mdx b/python/versioned_docs/version-stable/library.mdx index c6af81b8610..6cd17df8fd7 100644 --- a/python/versioned_docs/version-stable/library.mdx +++ b/python/versioned_docs/version-stable/library.mdx @@ -5,7 +5,6 @@ title: "Getting started - Library" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Installation diff --git a/python/versioned_docs/version-stable/locators.mdx b/python/versioned_docs/version-stable/locators.mdx index 0326b44caaf..c4d8263f35e 100644 --- a/python/versioned_docs/version-stable/locators.mdx +++ b/python/versioned_docs/version-stable/locators.mdx @@ -5,7 +5,6 @@ title: "Locators" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/mock.mdx b/python/versioned_docs/version-stable/mock.mdx index 8a08803b7cb..8b5dec87626 100644 --- a/python/versioned_docs/version-stable/mock.mdx +++ b/python/versioned_docs/version-stable/mock.mdx @@ -5,7 +5,6 @@ title: "Mock APIs" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/navigations.mdx b/python/versioned_docs/version-stable/navigations.mdx index 3638c259b94..8a63f3d4ef5 100644 --- a/python/versioned_docs/version-stable/navigations.mdx +++ b/python/versioned_docs/version-stable/navigations.mdx @@ -5,7 +5,6 @@ title: "Navigations" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/network.mdx b/python/versioned_docs/version-stable/network.mdx index 0d9fd64c55f..0171c3e2dce 100644 --- a/python/versioned_docs/version-stable/network.mdx +++ b/python/versioned_docs/version-stable/network.mdx @@ -5,7 +5,6 @@ title: "Network" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/other-locators.mdx b/python/versioned_docs/version-stable/other-locators.mdx index a7d4f5bd78b..681d1acc4fb 100644 --- a/python/versioned_docs/version-stable/other-locators.mdx +++ b/python/versioned_docs/version-stable/other-locators.mdx @@ -5,7 +5,6 @@ title: "Other locators" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -261,9 +260,11 @@ The `:is()` pseudo-class is an [experimental CSS pseudo-class](https://developer ### CSS: matching elements based on layout -:::note +:::warning + +Layout selectors are deprecated and may be removed in the future. Matching based on layout may produce unexpected results. For example, a different element could be matched when layout changes by one pixel. -Matching based on layout may produce unexpected results. For example, a different element could be matched when layout changes by one pixel. +We recommend prioritizing [user-visible locators](./locators.mdx#quick-guide) instead. ::: Sometimes, it is hard to come up with a good selector to the target element when it lacks distinctive features. In this case, using Playwright layout CSS pseudo-classes could help. These can be combined with regular CSS to pinpoint one of the multiple choices. diff --git a/python/versioned_docs/version-stable/pages.mdx b/python/versioned_docs/version-stable/pages.mdx index f4f020b337a..67697213609 100644 --- a/python/versioned_docs/version-stable/pages.mdx +++ b/python/versioned_docs/version-stable/pages.mdx @@ -5,7 +5,6 @@ title: "Pages" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Pages diff --git a/python/versioned_docs/version-stable/pom.mdx b/python/versioned_docs/version-stable/pom.mdx index 2784b23fbe8..7ac51b989a4 100644 --- a/python/versioned_docs/version-stable/pom.mdx +++ b/python/versioned_docs/version-stable/pom.mdx @@ -5,7 +5,6 @@ title: "Page object models" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/release-notes.mdx b/python/versioned_docs/version-stable/release-notes.mdx index e5e5d735fcf..a9674befe09 100644 --- a/python/versioned_docs/version-stable/release-notes.mdx +++ b/python/versioned_docs/version-stable/release-notes.mdx @@ -6,12 +6,11 @@ toc_max_heading_level: 2 import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Version 1.55 ### Codegen -- Automatic `toBeVisible()` assertions: Codegen can now generate automatic `toBeVisible()` assertions for common UI interactions. This feature can be enabled in the Codegen settings UI. +- Automatic `to_be_visible()` assertions: Codegen can now generate automatic `to_be_visible()` assertions for common UI interactions. This feature can be enabled in the Codegen settings UI. ### Breaking Changes - ⚠️ Dropped support for Chromium extension manifest v2. diff --git a/python/versioned_docs/version-stable/running-tests.mdx b/python/versioned_docs/version-stable/running-tests.mdx index 12785f08e3f..19d9e44c500 100644 --- a/python/versioned_docs/version-stable/running-tests.mdx +++ b/python/versioned_docs/version-stable/running-tests.mdx @@ -5,7 +5,6 @@ title: "Running and debugging tests" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/screenshots.mdx b/python/versioned_docs/version-stable/screenshots.mdx index cdc96b1cfee..7d53b59454e 100644 --- a/python/versioned_docs/version-stable/screenshots.mdx +++ b/python/versioned_docs/version-stable/screenshots.mdx @@ -5,7 +5,6 @@ title: "Screenshots" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/selenium-grid.mdx b/python/versioned_docs/version-stable/selenium-grid.mdx index 51953bee4f4..f0b3ed5947c 100644 --- a/python/versioned_docs/version-stable/selenium-grid.mdx +++ b/python/versioned_docs/version-stable/selenium-grid.mdx @@ -5,7 +5,6 @@ title: "Selenium Grid (experimental)" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/test-assertions.mdx b/python/versioned_docs/version-stable/test-assertions.mdx index 7d7c5369fac..d83220d49ae 100644 --- a/python/versioned_docs/version-stable/test-assertions.mdx +++ b/python/versioned_docs/version-stable/test-assertions.mdx @@ -5,7 +5,6 @@ title: "Assertions" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## List of assertions diff --git a/python/versioned_docs/version-stable/test-runners.mdx b/python/versioned_docs/version-stable/test-runners.mdx index 878eb506cf6..2a19e191cf5 100644 --- a/python/versioned_docs/version-stable/test-runners.mdx +++ b/python/versioned_docs/version-stable/test-runners.mdx @@ -5,7 +5,6 @@ title: "Pytest Plugin Reference" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction @@ -69,6 +68,7 @@ def test_my_app_is_working(fixture_name): **Customizing fixture options**: For `browser` and `context` fixtures, use the following fixtures to define custom launch options. - `browser_type_launch_args`: Override launch arguments for [browser_type.launch()](/api/class-browsertype.mdx#browser-type-launch). It should return a Dict. - `browser_context_args`: Override the options for [browser.new_context()](/api/class-browser.mdx#browser-new-context). It should return a Dict. +- `connect_options`: Connect to an existing browser via WebSocket endpoint. It should return a Dict with [browser_type.connect()](/api/class-browsertype.mdx#browser-type-connect) options. Its also possible to override the context options ([browser.new_context()](/api/class-browser.mdx#browser-new-context)) for a single test by using the `browser_context_args` marker: @@ -217,6 +217,18 @@ def browser_context_args(browser_context_args, playwright): Or via the CLI `--device="iPhone 11 Pro"` +### Connect to remote browsers + +```py title="conftest.py" +import pytest + +@pytest.fixture(scope="session") +def connect_options(): + return { + "wsEndpoint": "ws://localhost:8080/ws" + } +``` + ### Using with `unittest.TestCase` See the following example for using it with `unittest.TestCase`. This has a limitation, that only a single browser can be specified and no matrix of multiple browsers gets generated when specifying multiple. diff --git a/python/versioned_docs/version-stable/touch-events.mdx b/python/versioned_docs/version-stable/touch-events.mdx index f6bd40ea3ef..a024dee6caf 100644 --- a/python/versioned_docs/version-stable/touch-events.mdx +++ b/python/versioned_docs/version-stable/touch-events.mdx @@ -5,7 +5,6 @@ title: "Touch events (legacy)" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/trace-viewer-intro.mdx b/python/versioned_docs/version-stable/trace-viewer-intro.mdx index e4cc5056fd9..84c6920f141 100644 --- a/python/versioned_docs/version-stable/trace-viewer-intro.mdx +++ b/python/versioned_docs/version-stable/trace-viewer-intro.mdx @@ -5,7 +5,6 @@ title: "Trace viewer" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/trace-viewer.mdx b/python/versioned_docs/version-stable/trace-viewer.mdx index 37823d0bbf5..01b762bad76 100644 --- a/python/versioned_docs/version-stable/trace-viewer.mdx +++ b/python/versioned_docs/version-stable/trace-viewer.mdx @@ -5,7 +5,6 @@ title: "Trace viewer" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; import LiteYouTube from '@site/src/components/LiteYouTube'; diff --git a/python/versioned_docs/version-stable/videos.mdx b/python/versioned_docs/version-stable/videos.mdx index b9ac7c9c403..9c671d9501b 100644 --- a/python/versioned_docs/version-stable/videos.mdx +++ b/python/versioned_docs/version-stable/videos.mdx @@ -5,7 +5,6 @@ title: "Videos" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/webview2.mdx b/python/versioned_docs/version-stable/webview2.mdx index 4d78a9e7bba..ded4e5dcca1 100644 --- a/python/versioned_docs/version-stable/webview2.mdx +++ b/python/versioned_docs/version-stable/webview2.mdx @@ -5,7 +5,6 @@ title: "WebView2" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction diff --git a/python/versioned_docs/version-stable/writing-tests.mdx b/python/versioned_docs/version-stable/writing-tests.mdx index fff7b161a88..9aff4344ac0 100644 --- a/python/versioned_docs/version-stable/writing-tests.mdx +++ b/python/versioned_docs/version-stable/writing-tests.mdx @@ -5,7 +5,6 @@ title: "Writing tests" import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import HTMLCard from '@site/src/components/HTMLCard'; -import ProgressiveImage from '@theme/ProgressiveImage'; ## Introduction