From f255a3133059711321216f5a4fd599d9e12a826f Mon Sep 17 00:00:00 2001 From: Ankit Kumar <71343747+ankitkumar734ac@users.noreply.github.com> Date: Fri, 10 Mar 2023 12:22:16 +0530 Subject: [PATCH 01/11] Task Keep browser open example added (#1327)[deploy site] * Task Keep browser open example added * Update examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java Co-authored-by: Titus Fortner * rename the test method name and add the example to the docs themselves in the 4 different translation files --------- Co-authored-by: Ankit Kumar Co-authored-by: Sri Harsha <12621691+harsha509@users.noreply.github.com> Co-authored-by: Titus Fortner --- .../src/test/java/dev/selenium/browsers/ChromeTest.java | 7 +++++++ .../content/documentation/webdriver/browsers/chrome.en.md | 2 +- .../content/documentation/webdriver/browsers/chrome.ja.md | 2 +- .../documentation/webdriver/browsers/chrome.pt-br.md | 2 +- .../documentation/webdriver/browsers/chrome.zh-cn.md | 2 +- 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java b/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java index 69526d65e144..19b27b744fe9 100644 --- a/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java +++ b/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java @@ -26,4 +26,11 @@ public void headlessOptions() { driver = new ChromeDriver(options); } + @Test + public void keepBrowserOpen() { + ChromeOptions options = new ChromeOptions(); + options.setExperimentalOption("detach", true); + driver = new ChromeDriver(options); + } + } diff --git a/website_and_docs/content/documentation/webdriver/browsers/chrome.en.md b/website_and_docs/content/documentation/webdriver/browsers/chrome.en.md index 96ed4a62b5cc..aec124dfdd5d 100644 --- a/website_and_docs/content/documentation/webdriver/browsers/chrome.en.md +++ b/website_and_docs/content/documentation/webdriver/browsers/chrome.en.md @@ -118,7 +118,7 @@ Add a binary to options: {{< tabpane text=true langEqualsHeader=true >}} {{< tab header="Java" >}} -{{< badge-code >}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L31-L33" >}} {{< /tab >}} {{% tab header="Python" %}} {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L12-L13">}} diff --git a/website_and_docs/content/documentation/webdriver/browsers/chrome.ja.md b/website_and_docs/content/documentation/webdriver/browsers/chrome.ja.md index 7365388872e5..7b6a168ae5f2 100644 --- a/website_and_docs/content/documentation/webdriver/browsers/chrome.ja.md +++ b/website_and_docs/content/documentation/webdriver/browsers/chrome.ja.md @@ -119,7 +119,7 @@ please use the `load-extension` argument instead, as mentioned in {{< tabpane text=true langEqualsHeader=true >}} {{< tab header="Java" >}} -{{< badge-code >}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L31-L33" >}} {{< /tab >}} {{% tab header="Python" %}} {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L12-L13">}} diff --git a/website_and_docs/content/documentation/webdriver/browsers/chrome.pt-br.md b/website_and_docs/content/documentation/webdriver/browsers/chrome.pt-br.md index f6c0a9a33945..c87b00af22a7 100644 --- a/website_and_docs/content/documentation/webdriver/browsers/chrome.pt-br.md +++ b/website_and_docs/content/documentation/webdriver/browsers/chrome.pt-br.md @@ -115,7 +115,7 @@ Adicionar detach: {{< tabpane text=true langEqualsHeader=true >}} {{< tab header="Java" >}} -{{< badge-code >}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L31-L33" >}} {{< /tab >}} {{% tab header="Python" %}} {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L12-L13">}} diff --git a/website_and_docs/content/documentation/webdriver/browsers/chrome.zh-cn.md b/website_and_docs/content/documentation/webdriver/browsers/chrome.zh-cn.md index a39d84553763..389140b559cf 100644 --- a/website_and_docs/content/documentation/webdriver/browsers/chrome.zh-cn.md +++ b/website_and_docs/content/documentation/webdriver/browsers/chrome.zh-cn.md @@ -115,7 +115,7 @@ please use the `load-extension` argument instead, as mentioned in {{< tabpane text=true langEqualsHeader=true >}} {{< tab header="Java" >}} -{{< badge-code >}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L31-L33" >}} {{< /tab >}} {{% tab header="Python" %}} {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L12-L13">}} From ad789da1d900bc952d7b63b6dbeee83a1bea3536 Mon Sep 17 00:00:00 2001 From: Diego Molina Date: Fri, 10 Mar 2023 14:17:07 +0000 Subject: [PATCH 02/11] Updating Java 11 HTTP client post [deploy site] --- .../blog/2022/using-java11-httpclient.md | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/website_and_docs/content/blog/2022/using-java11-httpclient.md b/website_and_docs/content/blog/2022/using-java11-httpclient.md index bd34e14be4fc..13edf91e21d7 100644 --- a/website_and_docs/content/blog/2022/using-java11-httpclient.md +++ b/website_and_docs/content/blog/2022/using-java11-httpclient.md @@ -6,7 +6,7 @@ tags: ["selenium"] categories: ["releases"] author: Puja Jagani ([@pujagani](https://twitter.com/pujagani)) description: > - We’re happy to share that Selenium 4.5.0 supports Java 11+ HttpClient + We’re happy to share that starting from Selenium 4.5.0, a Java 11+ HttpClient is supported --- ### Current HTTP client used in Selenium @@ -34,13 +34,13 @@ The Selenium server runs great on Java 11+ already, so while we plan to make tha version in a future release, for now we plan to introduce optional components that can take advantage of modern Java releases. -So as a first step towards this move, Selenium 4.5.0 client supports the Java 11+ HTTP client. +So as a first step towards this move, the Java 11+ HTTP client from Selenium 4.5.0 and above. -### Using Java 11+ HTTP Client in Selenium 4.5.0 +### Using Java 11+ HTTP Client in Selenium #### Prerequisites: * Project configured to use Java 11+ -* Using Selenium 4.5.0 +* Using Selenium 4.5.0 as a minumum version, find the latest in the [downloads](/downloads) page. #### Integrating the Java 11+ client Java 11+ HTTP client sits in its own artifact. It can be imported into projects that use Java 11+. @@ -62,6 +62,10 @@ Add the follow dependencies to your pom.xml ``` +**NOTE**: In the dependencies above version `4.5.0` is shown, however we recommend you to check the +[downloads](/downloads) page to use the latest version released. Make sure the versions used are +matching. + ##### Set the system property Set the system property to indicate that Java 11+ Http client needs to be used. @@ -94,6 +98,11 @@ java -Dwebdriver.http.factory=jdk-http-client -jar selenium-server-4.5.0.jar — If you are using the Hub/Node(s) mode or the Distributed mode, setting the `-Dwebdriver.http.factory=jdk-http-client` and `—-ext` flags needs to be done for each one of the components. +**NOTE**: In the dependencies above version `4.5.0` is shown, however we recommend you to check the +[downloads](/downloads) page to use the latest version released. Make sure the versions used are +matching. + + Huge thanks to Simon Stewart ([@shs96c](https://twitter.com/shs96c)) for making this possible with his contribution! From 1ee38d9fb9d10bb458ac284060041b2c14dbd704 Mon Sep 17 00:00:00 2001 From: Sri Harsha Date: Sat, 11 Mar 2023 21:53:09 +0530 Subject: [PATCH 03/11] fix: fixes code render issue [deploy site] --- .../documentation/webdriver/elements/interactions.en.md | 4 ++-- .../documentation/webdriver/elements/interactions.ja.md | 4 ++-- .../documentation/webdriver/elements/interactions.pt-br.md | 4 ++-- .../documentation/webdriver/elements/interactions.zh-cn.md | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/website_and_docs/content/documentation/webdriver/elements/interactions.en.md b/website_and_docs/content/documentation/webdriver/elements/interactions.en.md index 14ff2f51d80d..5600b7fbf695 100644 --- a/website_and_docs/content/documentation/webdriver/elements/interactions.en.md +++ b/website_and_docs/content/documentation/webdriver/elements/interactions.en.md @@ -240,8 +240,8 @@ ensure driver.quit end {{< /tab >}} -{{< tab header="JavaScript" >}} -{{< gh-codeblock path="examples/javascript/test/elements/interactions.spec.js#L19-L20" >}} +{{< tab header="JavaScript" text=true >}} +{{< gh-codeblock path="examples/javascript/test/elements/interactions.spec.js#L18-L20" >}} {{< /tab >}} {{< tab header="Kotlin" >}} import org.openqa.selenium.By diff --git a/website_and_docs/content/documentation/webdriver/elements/interactions.ja.md b/website_and_docs/content/documentation/webdriver/elements/interactions.ja.md index 175e05937c47..f5c88276fc0a 100644 --- a/website_and_docs/content/documentation/webdriver/elements/interactions.ja.md +++ b/website_and_docs/content/documentation/webdriver/elements/interactions.ja.md @@ -238,8 +238,8 @@ ensure driver.quit end {{< /tab >}} -{{< tab header="JavaScript" >}} -{{< gh-codeblock path="examples/javascript/test/elements/interactions.spec.js#L19-L20" >}} +{{< tab header="JavaScript" text=true >}} +{{< gh-codeblock path="examples/javascript/test/elements/interactions.spec.js#L18-L20" >}} {{< /tab >}} {{< tab header="Kotlin" >}} import org.openqa.selenium.By diff --git a/website_and_docs/content/documentation/webdriver/elements/interactions.pt-br.md b/website_and_docs/content/documentation/webdriver/elements/interactions.pt-br.md index 175e05937c47..f5c88276fc0a 100644 --- a/website_and_docs/content/documentation/webdriver/elements/interactions.pt-br.md +++ b/website_and_docs/content/documentation/webdriver/elements/interactions.pt-br.md @@ -238,8 +238,8 @@ ensure driver.quit end {{< /tab >}} -{{< tab header="JavaScript" >}} -{{< gh-codeblock path="examples/javascript/test/elements/interactions.spec.js#L19-L20" >}} +{{< tab header="JavaScript" text=true >}} +{{< gh-codeblock path="examples/javascript/test/elements/interactions.spec.js#L18-L20" >}} {{< /tab >}} {{< tab header="Kotlin" >}} import org.openqa.selenium.By diff --git a/website_and_docs/content/documentation/webdriver/elements/interactions.zh-cn.md b/website_and_docs/content/documentation/webdriver/elements/interactions.zh-cn.md index 7a8274c8a909..819003fa285b 100644 --- a/website_and_docs/content/documentation/webdriver/elements/interactions.zh-cn.md +++ b/website_and_docs/content/documentation/webdriver/elements/interactions.zh-cn.md @@ -242,8 +242,8 @@ ensure driver.quit end {{< /tab >}} -{{< tab header="JavaScript" >}} -{{< gh-codeblock path="examples/javascript/test/elements/interactions.spec.js#L19-L20" >}} +{{< tab header="JavaScript" text=true >}} +{{< gh-codeblock path="examples/javascript/test/elements/interactions.spec.js#L18-L20" >}} {{< /tab >}} {{< tab header="Kotlin" >}} import org.openqa.selenium.By From 5024e53bfee9a396ec6e412a77524fa268b06cff Mon Sep 17 00:00:00 2001 From: Sri Harsha Date: Sat, 11 Mar 2023 22:04:44 +0530 Subject: [PATCH 04/11] fixes slack link in footer #1334 [deploy site] --- website_and_docs/hugo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website_and_docs/hugo.toml b/website_and_docs/hugo.toml index 49f7cbb1384b..ac8c4c7dd2df 100644 --- a/website_and_docs/hugo.toml +++ b/website_and_docs/hugo.toml @@ -228,7 +228,7 @@ enable = false desc = "Development takes place here!" [[params.links.developer]] name = "Slack" - url = "https://join.slack.com/t/seleniumhq/shared_invite/zt-vv33sc0w-VKKQop3WDV_lfrLXGGHvDw" + url = "https://join.slack.com/t/seleniumhq/shared_invite/zt-1neaoa52v-FTzht5cd2eYKwSobbhQkEw" icon = "fab fa-slack" desc = "Chat with other project developers and users in Slack" [[params.links.developer]] From 6e3100589419e279347fd7b50dbdf08aff922a78 Mon Sep 17 00:00:00 2001 From: Diego Molina Date: Mon, 13 Mar 2023 13:44:03 +0000 Subject: [PATCH 05/11] Using stable version of Chromium browsers Fixes #1332 --- .github/workflows/dotnet-examples.yml | 4 ++++ .github/workflows/java-examples.yml | 4 ++++ .github/workflows/js-examples.yml | 4 ++++ .github/workflows/kotlin-examples.yml | 4 ++++ .github/workflows/python-examples.yml | 4 ++++ .github/workflows/ruby-examples.yml | 4 ++++ 6 files changed, 24 insertions(+) diff --git a/.github/workflows/dotnet-examples.yml b/.github/workflows/dotnet-examples.yml index 6c3a6bbf66b8..ad88097727e2 100644 --- a/.github/workflows/dotnet-examples.yml +++ b/.github/workflows/dotnet-examples.yml @@ -39,8 +39,12 @@ jobs: dotnet-version: 5.0.x - name: Install Chrome uses: browser-actions/setup-chrome@latest + with: + chrome-version: stable - name: Install Edge uses: browser-actions/setup-edge@latest + with: + edge-version: stable - name: Install Firefox uses: abhi1693/setup-browser@v0.3.5 with: diff --git a/.github/workflows/java-examples.yml b/.github/workflows/java-examples.yml index a5e07356f86f..b8d8515dd837 100644 --- a/.github/workflows/java-examples.yml +++ b/.github/workflows/java-examples.yml @@ -40,8 +40,12 @@ jobs: java-version: 8 - name: Install Chrome uses: browser-actions/setup-chrome@latest + with: + chrome-version: stable - name: Install Edge uses: browser-actions/setup-edge@latest + with: + edge-version: stable - name: Install Firefox uses: abhi1693/setup-browser@v0.3.5 with: diff --git a/.github/workflows/js-examples.yml b/.github/workflows/js-examples.yml index 406a28d7a01e..fe2150cd1d6c 100644 --- a/.github/workflows/js-examples.yml +++ b/.github/workflows/js-examples.yml @@ -35,8 +35,12 @@ jobs: run: Xvfb :99 & - name: Install Chrome uses: browser-actions/setup-chrome@latest + with: + chrome-version: stable - name: Install Edge uses: browser-actions/setup-edge@latest + with: + edge-version: stable - name: Install Firefox uses: abhi1693/setup-browser@v0.3.5 with: diff --git a/.github/workflows/kotlin-examples.yml b/.github/workflows/kotlin-examples.yml index 8ba233156e66..8dc62f4b9ceb 100644 --- a/.github/workflows/kotlin-examples.yml +++ b/.github/workflows/kotlin-examples.yml @@ -40,8 +40,12 @@ jobs: java-version: 8 - name: Install Chrome uses: browser-actions/setup-chrome@latest + with: + chrome-version: stable - name: Install Edge uses: browser-actions/setup-edge@latest + with: + edge-version: stable - name: Install Firefox uses: abhi1693/setup-browser@v0.3.5 with: diff --git a/.github/workflows/python-examples.yml b/.github/workflows/python-examples.yml index e114d0ac11f0..dd47ca06aa5d 100644 --- a/.github/workflows/python-examples.yml +++ b/.github/workflows/python-examples.yml @@ -35,8 +35,12 @@ jobs: run: Xvfb :99 & - name: Install Chrome uses: browser-actions/setup-chrome@latest + with: + chrome-version: stable - name: Install Edge uses: browser-actions/setup-edge@latest + with: + edge-version: stable - name: Install Firefox uses: abhi1693/setup-browser@v0.3.5 with: diff --git a/.github/workflows/ruby-examples.yml b/.github/workflows/ruby-examples.yml index a0e6f74c9c78..97f6ba4db120 100644 --- a/.github/workflows/ruby-examples.yml +++ b/.github/workflows/ruby-examples.yml @@ -40,8 +40,12 @@ jobs: bundler-cache: true - name: Install Chrome uses: browser-actions/setup-chrome@latest + with: + chrome-version: stable - name: Install Edge uses: browser-actions/setup-edge@latest + with: + edge-version: stable - name: Install Firefox uses: abhi1693/setup-browser@v0.3.5 with: From e6c389d4abd1f22e2cf292ce6dd4ea8023757f61 Mon Sep 17 00:00:00 2001 From: Sriharsha Date: Mon, 13 Mar 2023 20:58:42 +0530 Subject: [PATCH 06/11] [JS] Link bidi code samples to document [deploy site] --- .../webdriver/bidirectional/bidirectional_w3c/log.en.md | 2 ++ .../webdriver/bidirectional/bidirectional_w3c/log.ja.md | 2 ++ .../webdriver/bidirectional/bidirectional_w3c/log.pt-br.md | 2 ++ .../webdriver/bidirectional/bidirectional_w3c/log.zh-cn.md | 2 ++ 4 files changed, 8 insertions(+) diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/bidirectional_w3c/log.en.md b/website_and_docs/content/documentation/webdriver/bidirectional/bidirectional_w3c/log.en.md index c914672a148d..97682801f658 100644 --- a/website_and_docs/content/documentation/webdriver/bidirectional/bidirectional_w3c/log.en.md +++ b/website_and_docs/content/documentation/webdriver/bidirectional/bidirectional_w3c/log.en.md @@ -17,6 +17,7 @@ Listen to the `console.log` events and register callbacks to process the event. {{< tab header="Ruby" >}} {{< /tab >}} {{< tab header="JavaScript" >}} +{{< gh-codeblock path="examples/javascript/test/bidirectional/logInspector.spec.js#L23-37" >}} {{< /tab >}} {{< tab header="Kotlin" >}} {{< /tab >}} @@ -34,6 +35,7 @@ and register callbacks to process the exception details. {{< tab header="Ruby" >}} {{< /tab >}} {{< tab header="JavaScript" >}} +{{< gh-codeblock path="examples/javascript/test/bidirectional/logInspector.spec.js#L44-54" >}} {{< /tab >}} {{< tab header="Kotlin" >}} {{< /tab >}} diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/bidirectional_w3c/log.ja.md b/website_and_docs/content/documentation/webdriver/bidirectional/bidirectional_w3c/log.ja.md index c5f943c24424..2bb9bce02c79 100644 --- a/website_and_docs/content/documentation/webdriver/bidirectional/bidirectional_w3c/log.ja.md +++ b/website_and_docs/content/documentation/webdriver/bidirectional/bidirectional_w3c/log.ja.md @@ -26,6 +26,7 @@ Listen to the `console.log` events and register callbacks to process the event. {{< tab header="Ruby" >}} {{< /tab >}} {{< tab header="JavaScript" >}} +{{< gh-codeblock path="examples/javascript/test/bidirectional/logInspector.spec.js#L23-37" >}} {{< /tab >}} {{< tab header="Kotlin" >}} {{< /tab >}} @@ -43,6 +44,7 @@ and register callbacks to process the exception details. {{< tab header="Ruby" >}} {{< /tab >}} {{< tab header="JavaScript" >}} +{{< gh-codeblock path="examples/javascript/test/bidirectional/logInspector.spec.js#L44-54" >}} {{< /tab >}} {{< tab header="Kotlin" >}} {{< /tab >}} diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/bidirectional_w3c/log.pt-br.md b/website_and_docs/content/documentation/webdriver/bidirectional/bidirectional_w3c/log.pt-br.md index 443f34d9cfc9..c4980cae574f 100644 --- a/website_and_docs/content/documentation/webdriver/bidirectional/bidirectional_w3c/log.pt-br.md +++ b/website_and_docs/content/documentation/webdriver/bidirectional/bidirectional_w3c/log.pt-br.md @@ -26,6 +26,7 @@ Listen to the `console.log` events and register callbacks to process the event. {{< tab header="Ruby" >}} {{< /tab >}} {{< tab header="JavaScript" >}} +{{< gh-codeblock path="examples/javascript/test/bidirectional/logInspector.spec.js#L23-37" >}} {{< /tab >}} {{< tab header="Kotlin" >}} {{< /tab >}} @@ -43,6 +44,7 @@ and register callbacks to process the exception details. {{< tab header="Ruby" >}} {{< /tab >}} {{< tab header="JavaScript" >}} +{{< gh-codeblock path="examples/javascript/test/bidirectional/logInspector.spec.js#L44-54" >}} {{< /tab >}} {{< tab header="Kotlin" >}} {{< /tab >}} diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/bidirectional_w3c/log.zh-cn.md b/website_and_docs/content/documentation/webdriver/bidirectional/bidirectional_w3c/log.zh-cn.md index 5426c09c90b8..8cd354d42c64 100644 --- a/website_and_docs/content/documentation/webdriver/bidirectional/bidirectional_w3c/log.zh-cn.md +++ b/website_and_docs/content/documentation/webdriver/bidirectional/bidirectional_w3c/log.zh-cn.md @@ -27,6 +27,7 @@ Listen to the `console.log` events and register callbacks to process the event. {{< tab header="Ruby" >}} {{< /tab >}} {{< tab header="JavaScript" >}} +{{< gh-codeblock path="examples/javascript/test/bidirectional/logInspector.spec.js#L23-37" >}} {{< /tab >}} {{< tab header="Kotlin" >}} {{< /tab >}} @@ -44,6 +45,7 @@ and register callbacks to process the exception details. {{< tab header="Ruby" >}} {{< /tab >}} {{< tab header="JavaScript" >}} +{{< gh-codeblock path="examples/javascript/test/bidirectional/logInspector.spec.js#L44-54" >}} {{< /tab >}} {{< tab header="Kotlin" >}} {{< /tab >}} From 0d3fc89f5bc3e1300e5534f28e7b1877d0391aa8 Mon Sep 17 00:00:00 2001 From: Diego Molina Date: Mon, 13 Mar 2023 15:32:16 +0000 Subject: [PATCH 07/11] Using browsers set by GitHub relates to #1332 --- .github/workflows/dotnet-examples.yml | 13 ------------- .github/workflows/java-examples.yml | 13 ------------- .github/workflows/js-examples.yml | 13 ------------- .github/workflows/kotlin-examples.yml | 13 ------------- .github/workflows/python-examples.yml | 13 ------------- .github/workflows/ruby-examples.yml | 13 ------------- 6 files changed, 78 deletions(-) diff --git a/.github/workflows/dotnet-examples.yml b/.github/workflows/dotnet-examples.yml index ad88097727e2..11560bb41fcc 100644 --- a/.github/workflows/dotnet-examples.yml +++ b/.github/workflows/dotnet-examples.yml @@ -37,19 +37,6 @@ jobs: uses: actions/setup-dotnet@v3 with: dotnet-version: 5.0.x - - name: Install Chrome - uses: browser-actions/setup-chrome@latest - with: - chrome-version: stable - - name: Install Edge - uses: browser-actions/setup-edge@latest - with: - edge-version: stable - - name: Install Firefox - uses: abhi1693/setup-browser@v0.3.5 - with: - browser: firefox - version: latest - name: Run tests uses: nick-invision/retry@v2.8.3 with: diff --git a/.github/workflows/java-examples.yml b/.github/workflows/java-examples.yml index b8d8515dd837..5bf988117b46 100644 --- a/.github/workflows/java-examples.yml +++ b/.github/workflows/java-examples.yml @@ -38,19 +38,6 @@ jobs: with: distribution: 'temurin' java-version: 8 - - name: Install Chrome - uses: browser-actions/setup-chrome@latest - with: - chrome-version: stable - - name: Install Edge - uses: browser-actions/setup-edge@latest - with: - edge-version: stable - - name: Install Firefox - uses: abhi1693/setup-browser@v0.3.5 - with: - browser: firefox - version: latest - name: Run Tests uses: nick-invision/retry@v2.8.3 with: diff --git a/.github/workflows/js-examples.yml b/.github/workflows/js-examples.yml index fe2150cd1d6c..21e0c154136b 100644 --- a/.github/workflows/js-examples.yml +++ b/.github/workflows/js-examples.yml @@ -33,19 +33,6 @@ jobs: - name: Start Xvfb if: matrix.os == 'ubuntu-latest' run: Xvfb :99 & - - name: Install Chrome - uses: browser-actions/setup-chrome@latest - with: - chrome-version: stable - - name: Install Edge - uses: browser-actions/setup-edge@latest - with: - edge-version: stable - - name: Install Firefox - uses: abhi1693/setup-browser@v0.3.5 - with: - browser: firefox - version: latest - name: Install Requirements working-directory: ./examples/javascript run: npm install diff --git a/.github/workflows/kotlin-examples.yml b/.github/workflows/kotlin-examples.yml index 8dc62f4b9ceb..21ed1f27ad8f 100644 --- a/.github/workflows/kotlin-examples.yml +++ b/.github/workflows/kotlin-examples.yml @@ -38,19 +38,6 @@ jobs: with: distribution: 'temurin' java-version: 8 - - name: Install Chrome - uses: browser-actions/setup-chrome@latest - with: - chrome-version: stable - - name: Install Edge - uses: browser-actions/setup-edge@latest - with: - edge-version: stable - - name: Install Firefox - uses: abhi1693/setup-browser@v0.3.5 - with: - browser: firefox - version: latest - name: Run tests uses: nick-invision/retry@v2.8.3 with: diff --git a/.github/workflows/python-examples.yml b/.github/workflows/python-examples.yml index dd47ca06aa5d..a74dde6be9b6 100644 --- a/.github/workflows/python-examples.yml +++ b/.github/workflows/python-examples.yml @@ -33,19 +33,6 @@ jobs: - name: Start Xvfb if: matrix.os == 'ubuntu-latest' run: Xvfb :99 & - - name: Install Chrome - uses: browser-actions/setup-chrome@latest - with: - chrome-version: stable - - name: Install Edge - uses: browser-actions/setup-edge@latest - with: - edge-version: stable - - name: Install Firefox - uses: abhi1693/setup-browser@v0.3.5 - with: - browser: firefox - version: latest - name: Set up Python uses: actions/setup-python@v4 with: diff --git a/.github/workflows/ruby-examples.yml b/.github/workflows/ruby-examples.yml index 97f6ba4db120..94cd67f6e005 100644 --- a/.github/workflows/ruby-examples.yml +++ b/.github/workflows/ruby-examples.yml @@ -38,19 +38,6 @@ jobs: with: ruby-version: 2.7 bundler-cache: true - - name: Install Chrome - uses: browser-actions/setup-chrome@latest - with: - chrome-version: stable - - name: Install Edge - uses: browser-actions/setup-edge@latest - with: - edge-version: stable - - name: Install Firefox - uses: abhi1693/setup-browser@v0.3.5 - with: - browser: firefox - version: latest - name: Install Gems working-directory: ./examples/ruby run: bundle install From f79eff20e372c13c2857f9e6f20654a434a3cb3d Mon Sep 17 00:00:00 2001 From: Shahar Moshe Refaeli <44533369+ShaharM7@users.noreply.github.com> Date: Wed, 15 Mar 2023 12:42:06 +0200 Subject: [PATCH 08/11] [testcontainers] Testcontainers languages reference (#1328) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add sectino of testcotnaienrs dotnet * Add Tools section with Testcontainers * Update website_and_docs/content/ecosystem/_index.html Testcotnainers Community Co-authored-by: Kevin Wittek * Rename to .Net * Update website_and_docs/content/ecosystem/_index.html Co-authored-by: Eddú Meléndez Gonzales --------- Co-authored-by: Kevin Wittek Co-authored-by: Eddú Meléndez Gonzales [deploy site] --- .../content/ecosystem/_index.html | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/website_and_docs/content/ecosystem/_index.html b/website_and_docs/content/ecosystem/_index.html index 0bab0e1ed143..92a293ac1f02 100644 --- a/website_and_docs/content/ecosystem/_index.html +++ b/website_and_docs/content/ecosystem/_index.html @@ -458,3 +458,32 @@

Frameworks

+ +
+

Tools

+
+
+
+ + + + + + + + + + + + + + +
NameLanguageAuthor
+

+ + Testcontainers + +

+
.NET, Java, Python
+
+
From 0b8f171f58caf8c38b47532eb349f09c608080b4 Mon Sep 17 00:00:00 2001 From: xiaojianzheng <1272209235@qq.com> Date: Thu, 16 Mar 2023 23:38:31 +0800 Subject: [PATCH 09/11] Update getting_started.zh-cn.md (#1335)[deploy site] * Update getting_started.zh-cn.md * Update getting_started.zh-cn.md Modify some language expressions * Update getting_started.zh-cn.md Modify some language expressions * Modify some language expressions * Update applicability.zh-cn.md * Update components.zh-cn.md * Update errors.zh-cn.md make sentences more fluent * Update components.zh-cn.md add some notes * Update windows.zh-cn.md format java code * Update errors.zh-cn.md wrap some lines --------- Co-authored-by: ian zhang --- .../documentation/grid/applicability.zh-cn.md | 35 +-- .../documentation/grid/components.zh-cn.md | 103 +++---- .../grid/getting_started.zh-cn.md | 254 ++++++++---------- .../webdriver/interactions/windows.zh-cn.md | 75 +++--- .../webdriver/troubleshooting/errors.zh-cn.md | 94 +++---- 5 files changed, 238 insertions(+), 323 deletions(-) diff --git a/website_and_docs/content/documentation/grid/applicability.zh-cn.md b/website_and_docs/content/documentation/grid/applicability.zh-cn.md index 337f0da1e320..a17171754333 100644 --- a/website_and_docs/content/documentation/grid/applicability.zh-cn.md +++ b/website_and_docs/content/documentation/grid/applicability.zh-cn.md @@ -19,37 +19,30 @@ aliases: [

{{% /pageinfo %}} -When would you use a Selenium Grid? +什么情况下可以使用 `Selenium Grid` ? -* To run your tests in parallel, against different browser types, browser versions, operating systems -* To reduce the time needed to execute a test suite +* 想要在不同的浏览器类型、浏览器版本和操作系统上并行运行测试时 +* 想要缩短执行测试案例所需的时间 -Selenium Grid runs test suites in parallel against multiple machines (called Nodes). -For large and long-running test suites, this can save minutes, hours, or perhaps days. -This shortens the turnaround time for test results as your application under test (AUT) -changes. +`Selenium Grid` 可以并行地在多台计算机(称为节点)上运行测试案例。对于大型和长时间运行的测试案例,这可以节省几分钟、几小时甚至几天的时间。 -Grid can run tests (in parallel) against multiple different browsers, and it can -run against multiple instances of the same browser. As an example, let's imagine -a Grid with six Nodes. The first machine has Firefox's latest version, -the second has Firefox "latest minus one", the third gets the latest Chrome, and -the remaining three machines are Mac Minis, which allows for three tests to run in -parallel on the latest version of Safari. +这有效的缩短了测试结果的反馈时间,使得在测试的应用程序发生变化时能够更快地得到测试结果。 -Execution time can be expressed as a simple formula: +`Grid` 可以并行地运行测试,支持多种不同的浏览器类型,并且可以同时运行多个相同浏览器的实例。 -```Number of Tests * Average Test Time / Number of Nodes = Total Execution Time``` +举个例子,假设一个拥有六个节点的Grid。第一台计算机拥有Firefox的最新版本,第二台拥有Firefox的上一个版本,第三台运行最新版Chrome,而其余三台机器是Mac Mini,允许在最新版本的Safari上并行运行三个测试。 + +执行时间可以用一个简单的公式来表示: + +```测试次数 × 平均测试时间 / 节点数 = 总执行时间``` 15 * 45s / 1 = 11m 15s // Without Grid 15 * 45s / 5 = 2m 15s // Grid with 5 Nodes 15 * 45s / 15 = 45s // Grid with 15 Nodes 100 * 120s / 15 = 13m 20s // Would take over 3 hours without Grid -As the test suite is executing, the Grid allocates the tests to run against these -browsers as configured in the tests. +在测试案例执行时,`Grid` 会按照测试配置将测试分配到相应的浏览器上运行。 -A configuration such as this can greatly speed up the execution time of even the largest Selenium test suites. +即使对于比较复杂的 `Selenium` 测试案例,这样的配置也可以极大地加快执行时间。 -Selenium Grid is a completely native part of the Selenium project, and is maintained in parallel by the same team -of committers who work in the core Selenium development. Recognizing the importance of test execution speed, Grid -has been a critical part of the Selenium project since the earliest days. +`Selenium Grid` 是 `Selenium` 项目中的重要组成部分,由同一团队的核心Selenium开发人员并行维护。由于意识到测试执行速度的重要性,`Grid` 自设计之初就成为 `Selenium` 项目的关键部分。 diff --git a/website_and_docs/content/documentation/grid/components.zh-cn.md b/website_and_docs/content/documentation/grid/components.zh-cn.md index d64bfecf76f6..580cf5e22de0 100644 --- a/website_and_docs/content/documentation/grid/components.zh-cn.md +++ b/website_and_docs/content/documentation/grid/components.zh-cn.md @@ -19,105 +19,64 @@ aliases: [

{{% /pageinfo %}} +Selenium Grid 4 是对以前版本的彻底重写。除了对性能和标准合规性进行全面改进外,还分解了 `Grid` 的不同功能以反映更现代的计算和软件开发时代。 Selenium Grid 4 专为容器化和云分布式可扩展性而构建,是现代时代的全新解决方案。 -Selenium Grid 4 is a ground-up rewrite from previous versions. In addition to a comprehensive -set of improvements to performance and standards compliance, the different functions of the grid were -broken out to reflect a more modern age of computing and software development. Purpose-build for containerization -and cloud-distributed scalability, Selenium Grid 4 is a wholly new solution for the modern era. - -{{< card header="**Grid Components**" footer="Grid components shown in the fully distributed mode" >}} -![Selenium Grid 4 Components](/images/documentation/grid/components.png "Selenium Grid 4 Components") +{{< card header="**Grid Components**" footer="全分布式展示的Grid组件" >}} +![Selenium Grid 4 组件](/images/documentation/grid/components.png "Selenium Grid 4 Components") {{< /card >}} -## Router - -The **Router** is the entry point of the Grid, receiving all external requests, and forwards them to -the correct component. +## 路由器(Router) -If the **Router** receives a new session request, it will be forwarded to the **New Session Queue**. +**路由器** 是 Grid 的入口点,接收所有外部请求,并将它们转发给正确的组件。 -If the request belongs to an existing session, the **Router** will query the **Session Map** to get -the **Node** ID where the session is running, and then the request will be forwarded directly to the -**Node**. +如果**路由器**收到新的会话请求,它将被转发到**新会话队列**。 -The **Router** balances the load in the Grid by sending the requests to the component that is able -to handle them better, without overloading any component that is not needed in the process. +如果请求属于一个已经存在的session,**路由器**会查询**Session Map**得到session运行所在的**Node** ID,然后将请求直接转发给**Node**。 -## Distributor +**路由器**通过将请求发送到能够更好地处理它们的组件来平衡网格中的负载,而不会使过程中不需要的任何组件过载。 -The **Distributor** has two main responsibilities: +## 分发器(Distributor) -#### Register and keep track of all Nodes and their capabilities +**分发器**有两个主要职责: -A **Node** registers to the **Distributor** by sending a **Node** registration event through -the **Event Bus**. The **Distributor** reads it, and then tries to reach the **Node** via HTTP -to confirm its existance. If the request is successfull, the **Distributor** registers the Node -and keeps track of all **Nodes** capabilities through the **GridModel**. +#### 注册并跟踪所有Node及其功能 -#### Query the New Session Queue and process any pending new session requests +**Node**通过**事件总线**发送**Node**注册事件来注册到**分发器**。**分发器**读取它,然后尝试通过 HTTP 到达**Node**以确认它的存在。如果请求成功,**Distributor**注册节点并通过 **GridModel** 跟踪所有**Node**功能。 -When a new session request is sent to the **Router**, it gets forwarded to the **New Session Queue**, -where it will wait in the queue. The **Distributor** will poll the **New Session Queue** for pending -new session requests, and then finds a suitable **Node** where the session can be created. After the -session has been created, the **Distributor** stores in the **Session Map** the relation between the -session id and **Node** where the session is being executed. +#### 查询新会话队列并处理任何未决的新会话请求 -## Session Map +当一个新的会话请求被发送到**路由器**时,它被转发到**新会话队列**,它将在队列中等待。 **Distributor** 将轮询**新会话队列**以查找未决的新会话请求,然后找到可以创建会话的合适**Node**。会话创建后,**分发器**将会话 ID 与正在执行会话的**Node**之间的关系存储在**会话映射**中。 -The **Session Map** is a data store that keeps the relationship between the session id and the **Node** -where the session is running. It supports the **Router** in the process of forwarding a request to the -**Node**. The **Router** will ask the **Session Map** for the **Node** associated to a session id. +## 会话映射(Session Map) -## New Session Queue +**会话映射** 是一个数据存储,用于保存会话 ID 和运行会话的**Node**之间的关系。它支持**路由器**在将请求转发到**Node**的过程中进行查询。**路由器**将向**会话映射**询问与会话 ID 关联的**Node**。 -The **New Session Queue** holds all the new session requests in a FIFO order. It has configurable -parameters for setting the request timeout and request retry interval (how often the timeout will -be checked). +## 新会话队列(New Session Queue) -The **Router** adds the new session request to the **New Session Queue** and waits for the response. -The **New Session Queue** regularly checks if any request in the queue has timed out, if so the request -is rejected and removed immediately. +**新会话队列**按先进先出的顺序保存所有新会话请求。它具有可配置的参数,用于设置请求超时和请求重试间隔(检查超时的频率)。 -The **Distributor** regularly checks if a slot is available. If so, the **Distributor** polls the -**New Session Queue** for the first matching request. The **Distributor** then attempts to create -a new session. +**路由器**将**新会话请求**添加到**新会话队列**中并等待响应。**新会话队列**定期检查队列中是否有任何请求超时,如果是,则立即拒绝并将其删除。 -Once the requested capabilities match the capabilities of any of the free **Node** slots, the **Distributor** -attempts to get the available slot. If all the slots are busy, the **Distributor** will send the request back -to the queue. If request times out while retrying or adding to the front of the queue, it will be rejected. +**分发器**定期检查是否有可用的插槽。如果有可用的插槽,则**分发器**会轮询**新会话队列**以查找第一个匹配的请求。然后,**分发器**尝试创建**新会话**。 -After a session is created successfully, the **Distributor** sends the session information to the **New Session Queue**, -which then gets sent back to the **Router**, and finally to the client. +一旦请求的功能与任何空闲**Node**插槽的功能匹配,**分发器**将尝试获取可用插槽。如果所有插槽都已忙碌,则**分发器**将将请求发送回队列。如果请求在重试或添加到队列的前面时超时,则会被拒绝。 -## Node +成功创建会话后,**分发器**将会话信息发送到**新会话队列**,该信息然后被发送回**路由器**,最终发送给客户端。 -A Grid can contain multiple **Nodes**. Each **Node** manages the slots for the available browsers of the machine -where it is running. +## 节点(Node) -The **Node** registers itself to the **Distributor** through the **Event Bus**, and its configuration is sent as -part of the registration message. +一个`Grid`可以包含多个**Node**。每个**Node**管理它所在机器上可用浏览器的插槽。 -By default, the **Node** auto-registers all browser drivers available on the path of the machine where it runs. -It also creates one slot per available CPU for Chromium based browsers and Firefox. For Safari, only one slot is -created. Through a specific [configuration]({{< ref "/configuration" >}}), it can run sessions in Docker -containers or relay commands. +**Node**通过**事件总线**向**分发器**注册自己,并将其配置作为注册消息发送。 -A **Node** only executes the received commands, it does not evaluate, make judgments, or control anything other -than the flow of commands and responses. The machines where the **Node** is running does not need to have the -same operating system as the other components. For example, A Windows **Node** might have the capability of -offering IE Mode on Edge as a browser option, whereas this would not be possible on Linux or Mac, and a Grid can -have multiple **Nodes** configured with Windows, Mac, or Linux. +默认情况下,**Node**会自动注册其所在机器上路径中可用的所有浏览器驱动程序。它还为基于Chromium的浏览器和Firefox创建每个可用CPU一个插槽。对于Safari,只创建一个插槽。通过特定的[配置]({{< ref "/configuration" >}}),它可以在Docker容器中运行会话或转发命令。 -## Event Bus +**Node**仅执行接收到的命令,不评估、不做出判断或控制任何除命令和响应流之外的东西。**Node**所在的机器不需要与其他组件具有相同的操作系统。例如,Windows节点可能具有在Edge上提供IE模式作为浏览器选项的能力,而在Linux或Mac上则不可能,网格可以配置多个具有Windows、Mac或Linux的**Node**。 -The **Event Bus** serves as a communication path between the **Nodes**, **Distributor**, **New Session Queue**, -and **Session Map**. The Grid does most of its internal communication through messages, avoiding expensive HTTP -calls. When starting the Grid in its fully distributed mode, the **Event Bus** is the first component that -should be started. +## 事件总线(Event Bus) +**事件总线**作为**节点**、**分发器**、**新会话队列**和**会话映射**之间的通信路径。`Grid` 的大部分内部通信都通过消息进行,避免了频繁的HTTP调用。在完全分布式模式下启动`Grid` 时,**事件总线**应该是第一个组件。 -{{% alert title="Running your own Grid" color="primary" %}} -Looking forward to using all these components and run your own Grid? -Head to the ["Getting Started"]({{< ref "getting_started.md" >}}) -section to understand how to put all these pieces together. +{{% alert title="运行自己的Grid" color="primary" %}} +想要使用所有这些组件并运行自己的网格?请前往["入门"]({{< ref "getting_started.md" >}})部分了解如何将所有这些部分组合在一起。 {{% /alert %}} diff --git a/website_and_docs/content/documentation/grid/getting_started.zh-cn.md b/website_and_docs/content/documentation/grid/getting_started.zh-cn.md index 73c0bab29121..b297dac50cf8 100644 --- a/website_and_docs/content/documentation/grid/getting_started.zh-cn.md +++ b/website_and_docs/content/documentation/grid/getting_started.zh-cn.md @@ -20,88 +20,78 @@ aliases: [

{{% /pageinfo %}} -## Quick start - -1. Prerequisites - * Java 11 or higher installed - * Browser(s) installed - * Browser driver(s) - * If using Selenium 4.6, Selenium Manager will configure the drivers for Chrome, Firefox, and Edge [if they are not found on the `PATH`]({{< ref "../webdriver/getting_started/install_drivers.md#1-selenium-manager-smallbetasmall" >}}). - * [Installed and on the `PATH`]({{< ref "../webdriver/getting_started/install_drivers.md#3-path-环境变量" >}}) - * Download the Selenium Server jar file from the [latest release](https://github.com/SeleniumHQ/selenium/releases/latest) -1. Start the Grid +## 快速开始 + +1. 先决条件 + * 需要安装 Java 11 或更高版本 + * 需要安装浏览器 + * 需要安装浏览器驱动程序 + * 如果使用 Selenium 4.6,Selenium Manager 将为 Chrome、Firefox 和 Edge 配置驱动程序[(如果它们在 PATH 上找不到)]({{< ref "../webdriver/getting_started/install_drivers.md#1-selenium-manager-smallbetasmall" >}}). + * [需要已经安装并配置了 PATH 环境变量]({{< ref "../webdriver/getting_started/install_drivers.md#3-path-环境变量" >}}) + * 从[最新的发布版本](https://github.com/SeleniumHQ/selenium/releases/latest)下载 Selenium Server jar 文件 +1. 启动 Grid * `java -jar selenium-server-.jar standalone` -1. Point* your WebDriver tests to [http://localhost:4444](http://localhost:4444) -1. (Optional) Check running tests and available capabilities by opening your browser at [http://localhost:4444](http://localhost:4444) +1. 将您的 WebDriver 测试指向 [http://localhost:4444](http://localhost:4444) +1. (可选) 通过在浏览器中打开 [http://localhost:4444](http://localhost:4444) 检查正在运行的测试和可用的功能 -*Wondering how to point your tests to [http://localhost:4444](http://localhost:4444)? -Check the [`RemoteWebDriver` section]({{< ref "../webdriver/drivers/#远程驱动" >}}). +*想知道如何将您的测试指向 [http://localhost:4444](http://localhost:4444)吗? +请查看 [`RemoteWebDriver` section]({{< ref "../webdriver/drivers/#远程驱动" >}})。 -To learn more about the different configuration options, go through the sections below. +要了解更多不同的配置选项,请查看以下各小节。 -## Grid roles +## Grid 角色 -Grid is composed by six different [components]({{< ref "components.md" >}}), which gives -you the option to deploy it in different ways. +Grid由六个不同的[组件]({{< ref "components.md" >}})组成,这使您可以以不同的方式部署它。 -Depending on your needs, you can start each one of them on its own (Distributed), group -them in Hub & Node, or all in one on a single machine (Standalone). +根据您的需求,您可以单独启动每个组件(分布式),将它们分组为Hub和Node,或者全部在单个机器上运行(独立)。 -### Standalone +### 单机部署(Standalone) -**Standalone** combines all Grid [components]({{< ref "components.md" >}}) seamlessly -into one. Running a Grid in **Standalone** mode gives you a fully functional Grid -with a single command, within a single process. **Standalone** can only run on a -single machine. +**Standalone** 可以将所有 Grid [组件]({{< ref "components.md" >}}) 无缝地整合成一个单独的实体。在 **Standalone** 模式下运行 Grid,只需一个命令即可获得一个完整的 Grid,并在一个进程中运行。**Standalone** 只能在一台机器上运行。 -**Standalone** is also the easiest mode to spin up a Selenium Grid. By default, the server -will listen for `RemoteWebDriver` requests on [http://localhost:4444](http://localhost:4444). -By default, the server will detect the available drivers that it can use from the System -[`PATH`]({{< ref "../webdriver/getting_started/install_drivers.md#3-path-环境变量" >}}). +**Standalone** 模式也是最容易启动 Selenium Grid 的模式。默认情况下,服务器将在 [http://localhost:4444](http://localhost:4444) 上监听 `RemoteWebDriver` 请求,并且服务器将从系统 [PATH]({{< ref "../webdriver/getting_started/install_drivers.md#3-path-环境变量" >}}) 中检测可以使用的驱动程序。 ```shell java -jar selenium-server-.jar standalone ``` -After starting successfully the Grid in Standalone mode, point your WebDriver tests -to [http://localhost:4444](http://localhost:4444). - -Common use cases for **Standalone** are: -* Develop or debug tests using `RemoteWebDriver` locally -* Running quick test suites before pushing code -* Have a easy to setup Grid in a CI/CD tool (GitHub Actions, Jenkins, etc...) +成功启动 Standalone 模式的 Grid 后,将你的 WebDriver 测试指向 [http://localhost:4444](http://localhost:4444)。 +**Standalone** 的常见用途包括: +* 本地使用 `RemoteWebDriver` 开发或调试测试 +* 推送代码之前运行快速测试套件 +* 在 CI/CD 工具(GitHub Actions、Jenkins 等)中设置简单的 Grid ### Hub and Node -**Hub and Node** is the most used role because it allows to: -* Combine different machines in a single Grid - * Machines with different operating systems and/or browser versions, for example -* Have a single entry point to run WebDriver tests in different environments -* Scaling capacity up or down without tearing down the Grid +**Hub和Node**是最常用的角色,因为它允许: +* 将不同的机器组合成一个单一的Grid + * 例如拥有不同操作系统和/或浏览器版本的机器 +* 在不同的环境中运行WebDriver测试有一个单一的入口点 +* 在不破坏Grid的情况下增加或减少容量。 #### Hub -A Hub is composed by the following [components]({{< ref "components.md" >}}): -Router, Distributor, Session Map, New Session Queue, and Event Bus. +一个Hub由以下[组件]({{< ref "components.md" >}})组成: +路由器(Router)、分发器(Distributor)、会话映射(Session Map)、新会话队列(New Session Queue)和事件总线(Event Bus)。 ```shell java -jar selenium-server-.jar hub ``` -By default, the server will listen for `RemoteWebDriver` requests on [http://localhost:4444](http://localhost:4444). +默认情况下,服务器将在 [http://localhost:4444](http://localhost:4444) 上监听`RemoteWebDriver`请求。 #### Node -During startup time, the **Node** will detect the available drivers that it can use from the System -[`PATH`]({{< ref "../webdriver/getting_started/install_drivers.md#3-path-环境变量" >}}). +在启动时,**Node**将从系统的[`PATH`]({{< ref "../webdriver/getting_started/install_drivers.md#3-path-环境变量" >}})中检测可用的驱动程序。 + +以下命令假设**Node**正在运行的机器与**Hub**在同一台机器上。 -The command below assumes the **Node** is running on the same machine where the **Hub** is running. ```shell java -jar selenium-server-.jar node ``` -##### More than one Node on the same machine +##### 同一台机器上的多个Node **Node** 1 ```shell @@ -113,90 +103,88 @@ java -jar selenium-server-.jar node --port 5555 java -jar selenium-server-.jar node --port 6666 ``` -##### Node and Hub on different machines +##### 不同机器上的Node和Hub + +**Hub**和**Nodes**通过HTTP和[**事件总线**]({{< ref "components.md#event-bus" >}})(**事件总线**位于**Hub**内部)进行通信。 -**Hub** and **Nodes** talk to each other via HTTP and the [**Event Bus**]({{< ref "components.md#event-bus" >}}) -(the **Event Bus** lives inside the **Hub**). A **Node** sends a message to the **Hub** via the **Event Bus** to -start the registration process. When the **Hub** receives the message, reaches out to the **Node** via HTTP to -confirm its existence. +**Node**通过事件总线向**Hub**发送消息以开始注册过程。当**Hub**收到消息时,通过HTTP与**Node**联系以确认其存在。 -To successfully register a **Node** to a **Hub**, it is important to expose the **Event Bus** ports (4442 and 4443 by -default) on the **Hub** machine. This also applies for the **Node** port. With that, both **Hub** and **Node** will -be able to communicate. +要成功将**Node**注册到**Hub**,重要的是要在**Hub**机器上公开**事件总线**端口(默认为4442和4443)。这也适用于**Node**端口。有了这个,**Hub**和**Node**都能够通信。 -If the **Hub** is using the default ports, the `--hub` flag can be used to register the **Node** +如果**Hub**使用默认端口,则可以使用 `--hub` 注册**Node**。 ```shell java -jar selenium-server-.jar node --hub http://:4444 ``` -When the **Hub** is not using the default ports, the `--publish-events` and `--subscribe-events` flags are needed. +当**Hub**未使用默认端口时,需要使用`--publish-events`和`--subscribe-events`。 -For example, if the **Hub** uses ports `8886`, `8887`, and `8888` +例如,如果**Hub**使用端口8886、8887和8888。 ```shell java -jar selenium-server-.jar hub --publish-events tcp://:8886 --subscribe-events tcp://:8887 --port 8888 ``` -The **Node** needs to use those ports to register successfully +**Node**需要使用这些端口才能成功注册。 ```shell java -jar selenium-server-.jar node --publish-events tcp://:8886 --subscribe-events tcp://:8887 ``` -### Distributed +### 分部署部署(Distributed) -When using a Distributed Grid, each component is started separately, and ideally on different machines. +在使用分布式Grid时,每个组件都需要单独启动,并且理想情况下应该在不同的机器上。 {{% alert color="primary" %}} -It is important to expose all ports properly in order to allow fluent communication between all components. +重要的是要正确暴露所有端口,以允许所有组件之间的流畅通信。 {{% /alert %}} -1. **Event Bus**: enables internal communication between different Grid components. +1. **事件总线(Event Bus)**: 使不同网格组件之间的内部通信成为可能。 -Default ports are: `4442`, `4443`, and `5557`. +默认端口为:`4442`、`4443`和`5557`。 ```shell java -jar selenium-server-.jar event-bus --publish-events tcp://:4442 --subscribe-events tcp://:4443 --port 5557 ``` -2. **New Session Queue**: adds new session requests to a queue, which will be queried by the Distributor +2. **新会话队列(New Session Queue)**: 将新的会话请求添加到一个队列中,Distributor将查询该队列。 -Default port is `5559`. +默认端口为`5559`。 ```shell java -jar selenium-server-.jar sessionqueue --port 5559 ``` -3. **Session Map**: maps session IDs to the **Node** where the session is running +3. **会话映射(Session Map)**: 将会话ID映射到运行该会话的节点。 + +默认**会话映射**端口为`5556`。**会话映射**与**事件总线**进行交互。 -Default **Session Map** port is `5556`. **Session Map** interacts with the **Event Bus**. ```shell java -jar selenium-server-.jar sessions --publish-events tcp://:4442 --subscribe-events tcp://:4443 --port 5556 ``` -4. **Distributor**: queries the **New Session Queue** for new session requests, and assigns them to a **Node** when the capabilities match. **Nodes** register to the **Distributor** the way they register to the **Hub** in a **Hub/Node** Grid. +4. **分配器(Distributor)**: 查询新 **会话队列(New Session Queue)** 以获取新会话请求,并在能力匹配时将其分配给 **Node**。 **Nodes** 注册到 **Distributor** 的方式与在 **Hub/Node** 网格中注册到 **Hub** 相同。 -Default **Distributor** port is `5553`. **Distributor** interacts with **New Session Queue**, **Session Map**, **Event Bus**, and the **Node(s)**. +默认**分配器**端口为`5553`。**分配器** 与 **新会话队列**、**会话映射**、**事件总线** 和 **Node(s)** 进行交互。 ```shell java -jar selenium-server-.jar distributor --publish-events tcp://:4442 --subscribe-events tcp://:4443 --sessions http://:5556 --sessionqueue http://:5559 --port 5553 --bind-bus false ``` -5. **Router**: redirects new session requests to the queue, and redirects running sessions requests to the **Node** running that session. +5. **路由器(Router)**: 将新会话请求重定向到队列,并将正在运行的会话请求重定向到运行该会话的**Node**。 + +默认**路由器**端口为`4444`。**路由器** 与 **新会话队列**、**会话映射**和**分配器** 进行交互。 -Default **Router** port is `4444`. **Router** interacts with **New Session Queue**, **Session Map**, and **Distributor**. ```shell java -jar selenium-server-.jar router --sessions http://:5556 --distributor http://:5553 --sessionqueue http://:5559 --port 4444 ``` 6. **Node(s)** -Default **Node** port is `5555`. +默认 **Node** 端口是 `5555`. ```shell java -jar selenium-server-.jar node --publish-events tcp://:4442 --subscribe-events tcp://:4443 ``` -## Metadata in tests +## 测试中的 Metadata -Add metadata to your tests and consume it via [GraphQL]({{< ref "advanced_features/graphql_support.md" >}}) -or visualize parts of it (like `se:name`) through the Selenium Grid UI. +向测试中添加 `Metadata` 并通过[GraphQL]({{< ref "advanced_features/graphql_support.md" >}})进行消费,或通过 `Selenium Grid UI` 可视化其部分内容(例如`se:name`)。 -Metadata can be added by prefixing a capability with `se:`. Here is a quick example in Java showing that. +可以通过在 `capability` 前加上 `se:` 来添加元数据。以下是一个Java的快速示例。 ```java ChromeOptions chromeOptions = new ChromeOptions(); @@ -212,115 +200,83 @@ driver.get("http://www.google.com"); driver.quit(); ``` -## Querying Selenium Grid +## 查询 Selenium Grid 相关状态 -After starting a Grid, there are mainly two ways of querying its status, through the Grid -UI or via an API call. +启动 `Grid` 后,主要有两种方式查询其状态,通过 `Grid UI` 或通过 `API` 调用。 -The Grid UI can be reached by opening your preferred browser and heading to -[http://localhost:4444](http://localhost:4444). +可以通过打开您喜欢的浏览器并前往[http://localhost:4444](http://localhost:4444)。 -API calls can be done through the [http://localhost:4444/status](http://localhost:4444/status) -endpoint or using [GraphQL]({{< ref "advanced_features/graphql_support.md" >}}) +`API` 调用可以通过 [http://localhost:4444/status](http://localhost:4444/status) 端点或使用 [GraphQL]({{< ref "advanced_features/graphql_support.md" >}}) {{% pageinfo color="primary" %}} -For simplicity, all command examples shown in this page assume that components are running -locally. More detailed examples and usages can be found in the -[Configuring Components]({{< ref "/configuration" >}}) section. +为简单起见,本页中显示的所有命令示例均假定组件正在运行在本地。更详细的示例和用法可以在[配置组件]({{< ref "/configuration" >}}) 部分。 {{% /pageinfo %}} -## Using the Java 11 HTTP Client {{% badge-version version="4.5" %}} +## 使用 Java 11 中的 HTTP Client {{% badge-version version="4.5" %}} + +默认情况下,Grid 将使用 [AsyncHttpClient](https://github.com/AsyncHttpClient/async-http-client)。 AsyncHttpClient 是一个建立在 Netty 之上的开源库。 它允许异步执行 HTTP 请求和响应。 此外,它还提供 WebSocket 支持。 因此它很合适。 -By default, Grid will use [AsyncHttpClient](https://github.com/AsyncHttpClient/async-http-client). -AsyncHttpClient is an open-source library built on top of Netty. It allows the execution of HTTP -requests and responses asynchronously. Additionally it also provides WebSocket support. Hence it -is a good fit. +然而,AsyncHttpClient 从 2021 年 6 月开始就没有主动维护了。恰逢 Java 11+ 提供了内置的 HTTP 和 WebSocket 客户端。 -However, AsyncHttpClient is not been actively maintained since June 2021. It coincides with the -fact that Java 11+ provides a built-in HTTP and WebSocket client. Currently, Selenium -has plans to upgrade the minimum version supported to Java 11. However, it is a sizeable effort. -Aligning it with major releases and accompanied announcements is crucial to ensure the user -experience is intact. +目前,Selenium 计划将支持的最低版本升级到 Java 11。然而,这需要大量的工作。为了确保用户体验不受影响,将其与主要发布版本和相应的公告对齐是至关重要的。 -To do use the Java 11 client, you will need to download the `selenium-http-jdk-client` jar file -and use the `--ext` flag to make it available in the Grid jar's classpath. +要使用 Java 11 客户端,您需要下载 `selenium-http-jdk-client` jar文件并使用 `--ext` 参数使其在 Grid jar 的类路径中可用。 -The jar file can be downloaded directly from [repo1.maven.org](https://repo1.maven.org/maven2/org/seleniumhq/selenium/selenium-http-jdk-client/) -and then start the Grid in the following way: +jar文件可以直接从 [repo1.maven.org](https://repo1.maven.org/maven2/org/seleniumhq/selenium/selenium-http-jdk-client/) 下载,然后使用以下方式启动Grid: ```bash java -Dwebdriver.http.factory=jdk-http-client -jar selenium-server-.jar --ext selenium-http-jdk-client-.jar standalone ``` -An alternative to downloading the `selenium-http-jdk-client` jar file is to use [Coursier](https://get-coursier.io/docs/cli-installation). +下载 `selenium-http-jdk-client` jar 文件的替代方法是使用 [Coursier](https://get-coursier.io/docs/cli-installation)。 ```bash java -Dwebdriver.http.factory=jdk-http-client -jar selenium-server-.jar --ext $(coursier fetch -p org.seleniumhq.selenium:selenium-http-jdk-client:) standalone ``` -If you are using the Hub/Node(s) mode or the Distributed mode, setting the `-Dwebdriver.http.factory=jdk-http-client` -and `--ext` flags needs to be done for each one of the components. +如果您使用的是集线器/节点模式或分布式模式,则需要为每个组件设置 `-Dwebdriver.http.factory=jdk-http-client` 和 `--ext` 参数。 -## Grid sizes +## Grid 的规模 -Choosing a Grid role depends on what operating systems and browsers need to be supported, -how many parallel sessions need to be executed, the amount of available machines, and how -powerful (CPU, RAM) those machines are. +选择 `Grid` 角色取决于需要支持什么操作系统和浏览器、需要执行多少个并行会话、可用机器的数量以及这些机器的配置(CPU、RAM)。 -Creating sessions concurrently relies on the available processors to the **Distributor**. -For example, if a machine has 4 CPUs, the **Distributor** will only be able to create up -to 4 sessions concurrently. +并发创建会话依赖于 **分配器** 的可用处理器。 例如,如果一台机器有 4 个 CPU,则 **分配器** 最多只能同时创建 4 个会话。 -By default, the maximum amount of concurrent sessions a **Node** supports is limited by -the number of CPUs available. For example, if the **Node** machine has 8CPUs, it can run -up to 8 concurrent browser sessions (with the exception of Safari, which is always one). -Additionally, it is expected that each browser session should use around 1GB RAM. +默认情况下,**Node** 支持的最大并发会话数受可用 CPU 数量的限制。 例如,如果 **Node** 机器有 8 个 CPU,它最多可以运行 8 个并发浏览器会话(Safari 除外,它始终是一个)。 此外,预计每个浏览器会话应使用大约 1GB 的 RAM。 -In general, it is a recommended to have **Nodes** as small as possible. Instead of having -a machine with 32CPUs and 32GB RAM to run 32 concurrent browser sessions, it is better to -have 32 small **Nodes** in order to better isolate processes. With this, if a **Node** -fails, it will do it in an isolated way. Docker is a good tool to achieve this approach. +通常,建议 **Nodes** 尽可能小。 与其让机器有 32 个 CPU 和 32GB RAM 来运行 32 个并发浏览器会话,不如有 32 个小的 **Node**,以便更好地隔离进程。 有了这个,如果一个 **Node** 发生故障,它将以孤立的方式进行。 Docker 是实现这种方法的好工具。 -Note that the default values (1CPU/1GB RAM per browser) are a recommendation and they could -not apply to your context. It is recommended to use them as a reference, but measuring -performance continuously will help to determine the ideal values for your environment. +请注意,默认值(每个浏览器 1 个 CPU/1GB RAM)是建议值,它们不适用于您的上下文。 建议将它们用作参考,但持续测量性能将有助于确定您的环境的理想值。 -Grid sizes are relative to the amount of supported concurrent sessions and amount of -**Nodes**, and there is no "one size fits all". Sizes mentioned below are rough estimations -thay can vary between different environments. For example a **Hub/Node** with 120 **Nodes** -might work well when the **Hub** has enough resources. Values below are not set on stone, -and feedback is welcomed! +`Grid` 大小与支持的并发会话数量和 **Node** 数量有关,没有“一刀切”的说法。 下面提到的尺寸是粗略的估计,不同环境之间可能会有所不同。 例如,当 **Hub** 具有足够的资源时,具有 120 个 **Nodes** 的 **Hub/Node** 可能运行良好。 以下值并非一成不变,欢迎提供反馈! -### Small +### 小规模 -**Standalone** or **Hub/Node** with 5 or less **Nodes**. +**Standalone** 或 **Hub/Node** 不超过5个 **Nodes**. -### Middle +### 中等规模 -**Hub/Node** between 6 and 60 **Nodes**. +**Hub/Node** 介于6到60个 **Nodes** 之间。 -### Large +### 大规模 -**Hub/Node** between 60 and 100 **Nodes**. **Distributed** with over 100 **Nodes**. +**Hub/Node** 介于60到100个 **Nodes** 之间, **Distributed** 超过100个 **Nodes**。 -## Warning +## 请注意 -Selenium Grid must be protected from external access using appropriate -firewall permissions. +必须使用适当的防火墙权限保护Selenium Grid免受外部访问。 -Failure to protect your Grid could result in one or more of the following occurring: +以下一种或多种情况可能会导致你的 `Grid` 处于一个不安全的状态: -* You provide open access to your Grid infrastructure -* You allow third parties to access internal web applications and files -* You allow third parties to run custom binaries +* 您提供对您的 `Grid` 基础设施的开放访问 +* 您允许第三方访问内部网络应用程序和文件 +* 您允许第三方运行自定义二进制文件 -See this blog post on [Detectify](//labs.detectify.com), which gives a good -overview of how a publicly exposed Grid could be misused: -[Don't Leave your Grid Wide Open](//labs.detectify.com/2017/10/06/guest-blog-dont-leave-your-grid-wide-open/) +请参阅 [Detectify](//labs.detectify.com) 上的这篇博文,它提供了一个很好的公开暴露的 `Grid` 如何被滥用的概述:[不要让你的 `Grid` 暴露在外](//labs.detectify.com/2017/10/06/guest-blog-dont-leave-your-grid-wide-open/) -## Further reading +## 延伸阅读 -* [Components]({{< ref "components.md" >}}): learn how Grid's internal components relate to each other. -* [Configuration]({{< ref "/configuration" >}}): customize your Grid setup. -* [Architecture]({{< ref "architecture.md" >}}): understand key concepts in Grid. -* [Advanced Features]({{< ref "/advanced_features" >}}): explore more possibilities through Grid's features. +* [Components]({{< ref "components.md" >}}):了解 `Grid` 的内部组件如何相互关联。 +* [Configuration]({{< ref "/configuration" >}}): 自定义您的 `Grid` 设置。 +* [Architecture]({{< ref "architecture.md" >}}): 理解 `Grid` 中的关键概念。 +* [Advanced Features]({{< ref "/advanced_features" >}}): 通过Grid的特性探索更多的可能性。 diff --git a/website_and_docs/content/documentation/webdriver/interactions/windows.zh-cn.md b/website_and_docs/content/documentation/webdriver/interactions/windows.zh-cn.md index e35b58ed4d66..fa5c5c85054c 100644 --- a/website_and_docs/content/documentation/webdriver/interactions/windows.zh-cn.md +++ b/website_and_docs/content/documentation/webdriver/interactions/windows.zh-cn.md @@ -47,9 +47,11 @@ driver.findElement(By.linkText("new window")).click(); wait.until(numberOfWindowsToBe(2)); // 循环执行,直到找到一个新的窗口句柄 -for (String windowHandle : driver.getWindowHandles()) {if(!originalWindow.contentEquals(windowHandle)) {driver.switchTo().window(windowHandle); -break; -} +for (String windowHandle : driver.getWindowHandles()) { + if(!originalWindow.contentEquals(windowHandle)) { + driver.switchTo().window(windowHandle); + break; + } } // 等待新标签完成加载内容 @@ -324,11 +326,12 @@ driver.switchTo().window(originalWindow) /** * 使用 JUnit 的例子 * https://junit.org/junit5/docs/current/api/org/junit/jupiter/api/AfterAll.html - */ - @AfterAll - public static void tearDown() {driver.quit(); - } - {{< /tab >}} +*/ +@AfterAll +public static void tearDown() { + driver.quit(); +} +{{< /tab >}} {{< tab header="Python" >}} # unittest teardown # https://docs.python.org/3/library/unittest.html?highlight=teardown#unittest.TestCase.tearDown @@ -365,11 +368,12 @@ end /** * 使用 JUnit 的例子 * https://junit.org/junit5/docs/current/api/org/junit/jupiter/api/AfterAll.html - */ - @AfterAll - fun tearDown() {driver.quit() - } - {{< /tab >}} +*/ +@AfterAll +fun tearDown() { + driver.quit() +} +{{< /tab >}} {{< /tabpane >}} 如果不在测试上下文中运行 WebDriver,您可以考虑使用 `try / finally`,这是大多数语言都提供的, @@ -377,7 +381,10 @@ end {{< tabpane langEqualsHeader=true >}} {{< tab header="Java" >}} -try {//WebDriver 代码…} finally {driver.quit(); +try { + //WebDriver 代码… +} finally { + driver.quit(); } {{< /tab >}} {{< tab header="Python" >}} @@ -652,13 +659,13 @@ import java.io.*; import org.openqa.selenium.*; public class SeleniumTakeScreenshot { -public static void main(String args[]) throws IOException { -WebDriver driver = new ChromeDriver(); -driver.get("http://www.example.com"); -File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); -FileUtils.copyFile(scrFile, new File("./image.png")); -driver.quit(); -} + public static void main(String args[]) throws IOException { + WebDriver driver = new ChromeDriver(); + driver.get("http://www.example.com"); + File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); + FileUtils.copyFile(scrFile, new File("./image.png")); + driver.quit(); + } } {{< /tab >}} {{< tab header="Python" >}} @@ -745,13 +752,13 @@ import java.io.IOException; public class SeleniumelementTakeScreenshot { public static void main(String args[]) throws IOException { -WebDriver driver = new ChromeDriver(); -driver.get("https://www.example.com"); -WebElement element = driver.findElement(By.cssSelector("h1")); -File scrFile = element.getScreenshotAs(OutputType.FILE); -FileUtils.copyFile(scrFile, new File("./image.png")); -driver.quit(); -} + WebDriver driver = new ChromeDriver(); + driver.get("https://www.example.com"); + WebElement element = driver.findElement(By.cssSelector("h1")); + File scrFile = element.getScreenshotAs(OutputType.FILE); + FileUtils.copyFile(scrFile, new File("./image.png")); + driver.quit(); + } } {{< /tab >}} {{< tab header="Python" >}} @@ -911,14 +918,14 @@ _注意: 此功能需要无头模式下的Chromium浏览器_ {{< tab header="Java" >}} import org.openqa.selenium.print.PrintOptions; - driver.get("https://www.selenium.dev"); - printer = (PrintsPage) driver; +driver.get("https://www.selenium.dev"); +printer = (PrintsPage) driver; - PrintOptions printOptions = new PrintOptions(); - printOptions.setPageRanges("1-2"); +PrintOptions printOptions = new PrintOptions(); +printOptions.setPageRanges("1-2"); - Pdf pdf = printer.print(printOptions); - String content = pdf.getContent(); +Pdf pdf = printer.print(printOptions); +String content = pdf.getContent(); {{< /tab >}} {{< tab header="Python" >}} from selenium.webdriver.common.print_page_options import PrintOptions diff --git a/website_and_docs/content/documentation/webdriver/troubleshooting/errors.zh-cn.md b/website_and_docs/content/documentation/webdriver/troubleshooting/errors.zh-cn.md index 050b541ec3f6..cafe1ec99efb 100644 --- a/website_and_docs/content/documentation/webdriver/troubleshooting/errors.zh-cn.md +++ b/website_and_docs/content/documentation/webdriver/troubleshooting/errors.zh-cn.md @@ -8,93 +8,93 @@ description: > ## 无效选择器的异常 (Invalid Selector Exception) -某些时候难以获得正确的CSS以及XPath选择器. +某些时候难以获得正确的CSS以及XPath选择器。 ### 潜在原因 -您尝试使用的CSS或XPath选择器包含无效字符或无效查询. +您尝试使用的CSS或XPath选择器包含无效字符或无效查询。 ### 可行方案 -通过验证器服务运行选择器: +通过验证器服务运行选择器: * [CSS 验证器](http://csslint.net/) * [xPath 验证器](http://www.freeformatter.com/xpath-tester.html) -或者使用浏览器扩展程序来获取已知的良好值: +或者使用浏览器扩展程序来获取已知的良好值: * [SelectorsHub](https://selectorshub.com/selectorshub/) ## 没有这样元素的异常 (No Such Element Exception) -在您尝试找到该元素的当前时刻无法定位元素. +在您尝试找到该元素的当前时刻无法定位元素。 ### 潜在原因 -* 您在错误的位置寻找元素 (也许以前的操作不成功). +* 您在错误的位置寻找元素 (也许以前的操作不成功) * 您在错误的时间寻找元素 (该元素尚未显示在 DOM 中) * 自您编写代码以来定位器已变更 ### 可行方案 -* 确保您位于期望的页面上, 并且代码中的前置操作已正确完成 +* 确保您位于期望的页面上,并且代码中的前置操作已正确完成 * 确保您使用的是正确的 [等待策略]({{< ref "/documentation/webdriver/waits" >}}) * 使用浏览器的devtools控制台更新定位器或使用浏览器扩展程序,例如: * [SelectorsHub](https://selectorshub.com/selectorshub/) ## 过时元素引用的异常 (Stale Element Reference Exception) -元素先前的定位会过时, -导致当前无法访问. -元素不会自动重新定位; -驱动程序为元素创建引用ID, -并且有一个特定的位置,以期在 DOM 中找到. -如果在当前 DOM 中找不到元素, -任何使用该元素的操作都将导致此异常. +当成功定位到元素时, +WebDriver会为其设置一个引用ID作为标记, +如果由于上下文环境发生变化, +导致之前元素的位置发生了变化或者无法找到了, +WebDriver并不会自动重新定位, +任何使用之前元素所做的操作将报错该异常。 ### 常见因素 以下情况可能发生此异常: -* 您已刷新页面,或者页面的 DOM 已动态更改. -* 您已导航到其他页面. -* 您已切换到另一个窗口,或者进入/移出某个frame/iframe. +* 您已刷新页面,或者页面的 DOM 已动态更改。 +* 您已导航到其他页面。 +* 您已切换到另一个窗口,或者进入/移出某个 `frame` / `iframe`。 ### 常见方案 **DOM已变更** -当页面刷新或页面上的项目各处移动时, -页面上仍然有一个具有所需定位器的元素, -它只是不再被正在使用的元素对象访问, -并且必须重新定位该元素才能再次使用. -这往往通过以下两种方式之一完成: - -* 每次使用时, 始终重新定位元素. -虽然可能, 但元素在定位和使用元素之间的微秒内过时的可能性很小. -缺点是这并非最有效的方法, -特别是在远程网格上运行时. - -* 将 Web 元素与存储定位器的另一个对象包装在一起, -并缓存位于Selenium元素. -对此包装的对象执行操作时, -您可以尝试使用缓存的对象(若之前找到), -如果其已过时, 则异常可以捕获元素, -使用存储的定位器重新定位元素, 并重试该方法. -这更有效, 但如果您使用的定位器可能会导致问题, -在页面更改后引用不同的元素(而不是您想要的元素). +当页面刷新或页面上的项目各处移动时, +页面上仍然有一个具有所需定位器的元素, +它只是不再被正在使用的元素对象访问, +并且必须重新定位该元素才能再次使用。 + +这往往通过以下两种方式之一完成: + +* 每次使用时都要重新定位元素。 +尽管有可能元素在定位和使用元素之间的微秒内, +发生变化的可能性很小。 +缺点是这不是最有效的方法, +尤其是在 `Remote Grid`上运行时。 + +* 用另一个存储定位器的对象包装 Web 元素,并缓存定位的 Selenium 元素。 +对该包装对象执行操作时,您可以尝试使用之前找到的缓存对象, +如果它是发生了变化,则可以捕获异常, +使用存储的定位器重新定位元素,并重试该方法。 +这样效率更高,但如果您使用的定位器在页面更改后引用了不同的元素(而不是您想要的元素),则可能会导致问题。 **上下文已变更** -元素对象是为给定上下文存储的, -因此, 如果您移动到其他上下文 — -就像不同的窗口或不同的frame或iframe一样 — 元素引用将仍然有效, -但暂时无法访问. 在这种情况下, -它不会帮助重新定位元素, 因为它在当前上下文中不存在. -要解决此问题, 您需要确保在使用元素之前切换回正确的上下文. +元素对象是针对特定的上下文存储的, +因此如果您切换到不同的上下文, +比如不同的 `Window` 或不同的 `frame` 或 `iframe` 元素引用仍然有效, +但暂时无法访问。在这种情况下, +重新定位元素无济于事,因为它在当前上下文中不存在。 + +要解决此问题,您需要确保在使用该元素之前切换回正确的上下文。 **页面已变更** -这种情况是指您不仅更改了上下文, 还导航到了另一个页面, -并破坏了元素所在的上下文. -您不能只是将其从当前上下文中重新定位, -并且您无法切换回有效的活动上下文. -如果这是原因, 则对于您的错误, 您必须导航回正确的位置并重新定位它. +这种情况发生在您不仅更改了上下文, +而且导航到另一个页面并破坏了元素所在的上下文。 +您无法仅从当前上下文重新定位它, +也无法切换回元素有效的活动上下文。 +如果这是您的错误原因, +您必须回到正确的位置并重新定位元素。 From 1f279f115efd238659b38c0b364fadd85b135ef4 Mon Sep 17 00:00:00 2001 From: Diego Molina Date: Mon, 20 Mar 2023 15:52:31 +0100 Subject: [PATCH 10/11] Adding Kiwiqa to Bronze section (#1340) * Add files via upload * Update sponsors.yml [deploy site] --- website_and_docs/data/sponsors.yml | 4 ++++ .../static/images/sponsors/kiwiqa-logo.png | Bin 0 -> 26447 bytes 2 files changed, 4 insertions(+) create mode 100644 website_and_docs/static/images/sponsors/kiwiqa-logo.png diff --git a/website_and_docs/data/sponsors.yml b/website_and_docs/data/sponsors.yml index a801b30c7f63..eb802865c8b2 100644 --- a/website_and_docs/data/sponsors.yml +++ b/website_and_docs/data/sponsors.yml @@ -86,6 +86,10 @@ bronze: # Set to false if no items are present enable: true item: + # Sponsorship start date: Mar 20, 2023 + - logo: "/images/sponsors/kiwiqa-logo.png" + url: "https://www.kiwiqa.com/" + name: "KiwiQA" # Sponsorship start date: Sep 3, 2022 - logo: "/images/sponsors/SelectorsHub_logo.png" url: "https://selectorshub.com/" diff --git a/website_and_docs/static/images/sponsors/kiwiqa-logo.png b/website_and_docs/static/images/sponsors/kiwiqa-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..308a5a52d89d380c24873f74b1606af86d9f4f87 GIT binary patch literal 26447 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

G!>5 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 O!$p%T#^r{t3I7L9>f6fz literal 0 HcmV?d00001 From 35be07deb4eab923feaade2b5a3032f8cb39daa0 Mon Sep 17 00:00:00 2001 From: Sriharsha Date: Mon, 20 Mar 2023 22:51:07 +0530 Subject: [PATCH 11/11] [js] update chromedriver to latest --- examples/javascript/package-lock.json | 884 ++++---------------------- examples/javascript/package.json | 4 +- 2 files changed, 141 insertions(+), 747 deletions(-) diff --git a/examples/javascript/package-lock.json b/examples/javascript/package-lock.json index 0b6f54c99b2e..48d240167041 100644 --- a/examples/javascript/package-lock.json +++ b/examples/javascript/package-lock.json @@ -9,9 +9,9 @@ "version": "1.0.0", "license": "Apache-2.0", "dependencies": { - "@sitespeed.io/edgedriver": "^109.0.1518-70", + "@sitespeed.io/edgedriver": "^111.0.1661-41", "assert": "^2.0.0", - "chromedriver": "^109.0.0", + "chromedriver": "^111.0.0", "geckodriver": "^3.2.0", "selenium-webdriver": "^4.8.1" }, @@ -31,9 +31,9 @@ } }, "node_modules/@sitespeed.io/edgedriver": { - "version": "109.0.1518-70", - "resolved": "https://registry.npmjs.org/@sitespeed.io/edgedriver/-/edgedriver-109.0.1518-70.tgz", - "integrity": "sha512-ZLSZ54UrWRPODKooNMM3X36GTyQ8Rrwopr9adVsRvoTuBjWWf0+Od/f5OoraYBJJA2OsR4yV92sC/S1lSK+rbw==", + "version": "111.0.1661-41", + "resolved": "https://registry.npmjs.org/@sitespeed.io/edgedriver/-/edgedriver-111.0.1661-41.tgz", + "integrity": "sha512-+VoHUTF/DbgK9tmPehNMzXntlEWHzdJ069xUI8M+adWkCDvziTdfh3GCu2lFPGTWisNNUwTwX7e6ETZEDtDi4w==", "hasInstallScript": true, "dependencies": { "node-downloader-helper": "2.1.6", @@ -57,14 +57,14 @@ "integrity": "sha512-g697J3WxV/Zytemz8aTuKjTGYtta9+02kva3C1xc7KXB8GdbfE1akGJIsZLyY/FSh2QrnE+fiB7vmWU3XNcb6A==" }, "node_modules/@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "dependencies": { "@types/http-cache-semantics": "*", - "@types/keyv": "*", + "@types/keyv": "^3.1.4", "@types/node": "*", - "@types/responselike": "*" + "@types/responselike": "^1.0.0" } }, "node_modules/@types/http-cache-semantics": { @@ -72,11 +72,6 @@ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" }, - "node_modules/@types/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==" - }, "node_modules/@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", @@ -86,9 +81,9 @@ } }, "node_modules/@types/node": { - "version": "18.6.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz", - "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==" + "version": "18.15.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.3.tgz", + "integrity": "sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw==" }, "node_modules/@types/responselike": { "version": "1.0.0", @@ -160,9 +155,9 @@ } }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", @@ -206,9 +201,9 @@ } }, "node_modules/axios": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.2.tgz", - "integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", + "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -382,9 +377,9 @@ } }, "node_modules/chromedriver": { - "version": "109.0.0", - "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-109.0.0.tgz", - "integrity": "sha512-jdmBq11IUwfThLFiygGTZ89qbROSQI4bICQjvOVQy2Bqr1LwC+MFkhwyZp3YG99eehQbZuTlQmmfCZBfpewTNA==", + "version": "111.0.0", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-111.0.0.tgz", + "integrity": "sha512-XavNYNBBfKIrT8Oi/ywJ0DoOOU+jHF5bQWTkqStFsAXvfCV9VzYN3J+TGAvZdrpXeoixqPRGUxQ2yZhD2iowdQ==", "hasInstallScript": true, "dependencies": { "@testim/chrome-version": "^1.1.3", @@ -454,21 +449,9 @@ } }, "node_modules/compare-versions": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.1.tgz", - "integrity": "sha512-v8Au3l0b+Nwkp4G142JcgJFh1/TUhdxut7wzD1Nq1dyp5oa3tXaqb03EXOAB6jS4gMlalkjAUPZBMiAfKUixHQ==" - }, - "node_modules/compress-brotli": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz", - "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==", - "dependencies": { - "@types/json-buffer": "~3.0.0", - "json-buffer": "~3.0.1" - }, - "engines": { - "node": ">= 12" - } + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.3.tgz", + "integrity": "sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A==" }, "node_modules/concat-map": { "version": "0.0.1", @@ -547,9 +530,9 @@ } }, "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -592,58 +575,6 @@ "once": "^1.4.0" } }, - "node_modules/es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/es6-object-assign": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", @@ -809,31 +740,6 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/geckodriver": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-3.2.0.tgz", @@ -863,9 +769,9 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -889,21 +795,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -955,6 +846,17 @@ "node": "*" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/got": { "version": "11.8.5", "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", @@ -990,14 +892,6 @@ "node": ">= 0.4.0" } }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -1100,19 +994,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/ip-regex": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", @@ -1136,17 +1017,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -1159,39 +1029,10 @@ "node": ">=8" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "engines": { "node": ">= 0.4" }, @@ -1258,17 +1099,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -1278,20 +1108,6 @@ "node": ">=0.12.0" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", @@ -1301,69 +1117,15 @@ "node": ">=8" } }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", "for-each": "^0.3.3", + "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" }, "engines": { @@ -1390,21 +1152,10 @@ "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is2": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.7.tgz", - "integrity": "sha512-4vBQoURAXC6hnLFxD4VW7uc04XiwTTl/8ydYJxKvPwkWQrSjInkuM5VZVg6BGr1/natq69zDuvO9lGpLClJqvA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz", + "integrity": "sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==", "dependencies": { "deep-is": "^0.1.3", "ip-regex": "^4.1.0", @@ -1448,11 +1199,10 @@ } }, "node_modules/keyv": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.3.tgz", - "integrity": "sha512-AcysI17RvakTh8ir03+a3zJr5r0ovnAH/XTXei/4HIv3bL2K/jzvgivLK9UuI/JbU1aJjM3NSAnVvVVd3n+4DQ==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", "dependencies": { - "compress-brotli": "^1.3.8", "json-buffer": "3.0.1" } }, @@ -1543,9 +1293,9 @@ } }, "node_modules/minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dependencies": { "yallist": "^4.0.0" }, @@ -1682,14 +1432,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object-is": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", @@ -1713,23 +1455,6 @@ "node": ">= 0.4" } }, - "node_modules/object.assign": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.3.tgz", - "integrity": "sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1855,9 +1580,9 @@ } }, "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -1880,22 +1605,6 @@ "node": ">=8.10.0" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -1967,19 +1676,6 @@ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -2002,32 +1698,6 @@ "node": ">=8" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -2131,30 +1801,15 @@ "node": ">=8.0" } }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", "which-typed-array": "^1.1.2" } }, @@ -2163,32 +1818,17 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", "for-each": "^0.3.3", + "gopd": "^1.0.1", "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" + "is-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -2226,9 +1866,9 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz", - "integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "engines": { "node": ">=10.0.0" }, @@ -2330,9 +1970,9 @@ "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==" }, "@sitespeed.io/edgedriver": { - "version": "109.0.1518-70", - "resolved": "https://registry.npmjs.org/@sitespeed.io/edgedriver/-/edgedriver-109.0.1518-70.tgz", - "integrity": "sha512-ZLSZ54UrWRPODKooNMM3X36GTyQ8Rrwopr9adVsRvoTuBjWWf0+Od/f5OoraYBJJA2OsR4yV92sC/S1lSK+rbw==", + "version": "111.0.1661-41", + "resolved": "https://registry.npmjs.org/@sitespeed.io/edgedriver/-/edgedriver-111.0.1661-41.tgz", + "integrity": "sha512-+VoHUTF/DbgK9tmPehNMzXntlEWHzdJ069xUI8M+adWkCDvziTdfh3GCu2lFPGTWisNNUwTwX7e6ETZEDtDi4w==", "requires": { "node-downloader-helper": "2.1.6", "node-stream-zip": "1.15.0" @@ -2352,14 +1992,14 @@ "integrity": "sha512-g697J3WxV/Zytemz8aTuKjTGYtta9+02kva3C1xc7KXB8GdbfE1akGJIsZLyY/FSh2QrnE+fiB7vmWU3XNcb6A==" }, "@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "requires": { "@types/http-cache-semantics": "*", - "@types/keyv": "*", + "@types/keyv": "^3.1.4", "@types/node": "*", - "@types/responselike": "*" + "@types/responselike": "^1.0.0" } }, "@types/http-cache-semantics": { @@ -2367,11 +2007,6 @@ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" }, - "@types/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==" - }, "@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", @@ -2381,9 +2016,9 @@ } }, "@types/node": { - "version": "18.6.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz", - "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==" + "version": "18.15.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.3.tgz", + "integrity": "sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw==" }, "@types/responselike": { "version": "1.0.0", @@ -2437,9 +2072,9 @@ } }, "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -2474,9 +2109,9 @@ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" }, "axios": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.2.tgz", - "integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", + "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", "requires": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -2605,9 +2240,9 @@ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, "chromedriver": { - "version": "109.0.0", - "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-109.0.0.tgz", - "integrity": "sha512-jdmBq11IUwfThLFiygGTZ89qbROSQI4bICQjvOVQy2Bqr1LwC+MFkhwyZp3YG99eehQbZuTlQmmfCZBfpewTNA==", + "version": "111.0.0", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-111.0.0.tgz", + "integrity": "sha512-XavNYNBBfKIrT8Oi/ywJ0DoOOU+jHF5bQWTkqStFsAXvfCV9VzYN3J+TGAvZdrpXeoixqPRGUxQ2yZhD2iowdQ==", "requires": { "@testim/chrome-version": "^1.1.3", "axios": "^1.2.1", @@ -2661,18 +2296,9 @@ } }, "compare-versions": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.1.tgz", - "integrity": "sha512-v8Au3l0b+Nwkp4G142JcgJFh1/TUhdxut7wzD1Nq1dyp5oa3tXaqb03EXOAB6jS4gMlalkjAUPZBMiAfKUixHQ==" - }, - "compress-brotli": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz", - "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==", - "requires": { - "@types/json-buffer": "~3.0.0", - "json-buffer": "~3.0.1" - } + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.3.tgz", + "integrity": "sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A==" }, "concat-map": { "version": "0.0.1", @@ -2724,9 +2350,9 @@ "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" }, "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "requires": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -2757,46 +2383,6 @@ "once": "^1.4.0" } }, - "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, "es6-object-assign": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", @@ -2906,22 +2492,6 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, "geckodriver": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-3.2.0.tgz", @@ -2941,9 +2511,9 @@ "dev": true }, "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -2958,15 +2528,6 @@ "pump": "^3.0.0" } }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -3008,6 +2569,14 @@ "is-glob": "^4.0.1" } }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "got": { "version": "11.8.5", "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", @@ -3034,11 +2603,6 @@ "function-bind": "^1.1.1" } }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3114,16 +2678,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, "ip-regex": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", @@ -3138,14 +2692,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { - "has-bigints": "^1.0.1" - } - }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -3155,27 +2701,10 @@ "binary-extensions": "^2.0.0" } }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" }, "is-extglob": { "version": "2.1.1", @@ -3215,73 +2744,27 @@ "define-properties": "^1.1.3" } }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, "is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, "is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", "for-each": "^0.3.3", + "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" } }, @@ -3296,18 +2779,10 @@ "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { - "call-bind": "^1.0.2" - } - }, "is2": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.7.tgz", - "integrity": "sha512-4vBQoURAXC6hnLFxD4VW7uc04XiwTTl/8ydYJxKvPwkWQrSjInkuM5VZVg6BGr1/natq69zDuvO9lGpLClJqvA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz", + "integrity": "sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==", "requires": { "deep-is": "^0.1.3", "ip-regex": "^4.1.0", @@ -3345,11 +2820,10 @@ } }, "keyv": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.3.tgz", - "integrity": "sha512-AcysI17RvakTh8ir03+a3zJr5r0ovnAH/XTXei/4HIv3bL2K/jzvgivLK9UuI/JbU1aJjM3NSAnVvVVd3n+4DQ==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", "requires": { - "compress-brotli": "^1.3.8", "json-buffer": "3.0.1" } }, @@ -3413,9 +2887,9 @@ } }, "minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "requires": { "yallist": "^4.0.0" } @@ -3503,11 +2977,6 @@ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, "object-is": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", @@ -3522,17 +2991,6 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, - "object.assign": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.3.tgz", - "integrity": "sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -3625,9 +3083,9 @@ } }, "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -3647,16 +3105,6 @@ "picomatch": "^2.2.1" } }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -3713,16 +3161,6 @@ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -3742,26 +3180,6 @@ "strip-ansi": "^6.0.1" } }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -3835,27 +3253,15 @@ "is-number": "^7.0.0" } }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, "util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "requires": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", "which-typed-array": "^1.1.2" } }, @@ -3864,29 +3270,17 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, "which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", "for-each": "^0.3.3", + "gopd": "^1.0.1", "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" + "is-typed-array": "^1.1.10" } }, "workerpool": { @@ -3912,9 +3306,9 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "ws": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz", - "integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "requires": {} }, "y18n": { diff --git a/examples/javascript/package.json b/examples/javascript/package.json index e1584a69aaec..dea863775005 100644 --- a/examples/javascript/package.json +++ b/examples/javascript/package.json @@ -7,9 +7,9 @@ "author": "The Selenium project", "license": "Apache-2.0", "dependencies": { - "@sitespeed.io/edgedriver": "^109.0.1518-70", + "@sitespeed.io/edgedriver": "^111.0.1661-41", "assert": "^2.0.0", - "chromedriver": "^109.0.0", + "chromedriver": "^111.0.0", "geckodriver": "^3.2.0", "selenium-webdriver": "^4.8.1" },