diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 000000000000..d6f49421364e
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,8 @@
+version: 2
+updates:
+
+  # Maintain dependencies for GitHub Actions
+  - package-ecosystem: "github-actions"
+    directory: "/"
+    schedule:
+      interval: "daily"
diff --git a/.github/workflows/calibreapp-image-actions.yml b/.github/workflows/calibreapp-image-actions.yml
index 4a5864a18a4e..f3308f3b2044 100644
--- a/.github/workflows/calibreapp-image-actions.yml
+++ b/.github/workflows/calibreapp-image-actions.yml
@@ -36,7 +36,7 @@ jobs:
        github.event.pull_request.head.repo.full_name == github.repository)
     steps:
       - name: Checkout Branch
-        uses: actions/checkout@v3
+        uses: actions/checkout@v5
       - name: Compress Images
         id: calibre
         uses: calibreapp/image-actions@main
@@ -49,7 +49,7 @@ jobs:
         if: |
           github.event_name != 'pull_request' &&
           steps.calibre.outputs.markdown != ''
-        uses: peter-evans/create-pull-request@v3
+        uses: peter-evans/create-pull-request@v7
         with:
           title: Auto Compress Images
           branch-suffix: timestamp
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index 379be069d393..e3fc6ff9ae56 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -4,27 +4,28 @@ on:
   push:
     branches:
       - trunk
+  workflow_dispatch:
 
 jobs:
   deploy:
-    if: contains(toJson(github.event.commits), '[deploy site]') == true
-    runs-on: ubuntu-20.04
+    if: contains(toJson(github.event.commits), '[deploy site]') == true || github.event_name == 'workflow_dispatch'
+    runs-on: ubuntu-24.04
     steps:
       - name: Checkout repo
-        uses: actions/checkout@v3
+        uses: actions/checkout@v5
         with:
           fetch-depth: 0
       - name: Setup Hugo
-        uses: peaceiris/actions-hugo@v2
+        uses: peaceiris/actions-hugo@v3
         with:
-          hugo-version: '0.110.0'
+          hugo-version: ' 0.125.4'
           extended: true
       - name: Build
         run: chmod +x build-site.sh && ./build-site.sh
         env:
           SELENIUM_CI_TOKEN: ${{secrets.SELENIUM_CI_TOKEN}}
       - name: Deploy
-        uses: peaceiris/actions-gh-pages@v3
+        uses: peaceiris/actions-gh-pages@v4
         with:
           personal_token: ${{ secrets.SELENIUM_CI_TOKEN }}
           publish_dir: ./website_and_docs/public
diff --git a/.github/workflows/dotnet-examples.yml b/.github/workflows/dotnet-examples.yml
index f9970b3d2ebe..277214ed2138 100644
--- a/.github/workflows/dotnet-examples.yml
+++ b/.github/workflows/dotnet-examples.yml
@@ -21,42 +21,74 @@ env:
   GH_TOKEN: ${{ secrets.SELENIUM_CI_TOKEN }}
 
 jobs:
-  test_examples:
+  tests:
     strategy:
       fail-fast: false
       matrix:
-        os: [ ubuntu-latest, windows-latest, macos-latest ]
-    runs-on: ${{ matrix.os }}
+        os: [ ubuntu, windows, macos ]
+        release: [ stable, nightly ]
+    runs-on: ${{ format('{0}-latest', matrix.os) }}
     steps:
     - name: Checkout GitHub repo
-      uses: actions/checkout@v3
+      uses: actions/checkout@v5
     - name: Remove driver directories Windows
-      if: matrix.os == 'windows-latest'
+      if: matrix.os == 'windows'
       run: |
         rm "$env:ChromeWebDriver" -r -v
         rm "$env:EdgeWebDriver" -r -v
         rm "$env:GeckoWebDriver" -r -v
     - name: Remove driver directories Non-Windows
-      if: matrix.os != 'windows-latest'
+      if: matrix.os != 'windows'
       run: |
         sudo rm -rf $CHROMEWEBDRIVER $EDGEWEBDRIVER $GECKOWEBDRIVER
     - name: Start Xvfb
-      if: matrix.os == 'ubuntu-latest'
+      if: matrix.os == 'ubuntu'
       run: Xvfb :99 &
-    - name: Set up .Net
-      uses: actions/setup-dotnet@v3
+    - name: Set up .Net Stable
+      if: matrix.release == 'stable'
+      uses: actions/setup-dotnet@v4
       with:
-        dotnet-version: 6.0.x
+        dotnet-version: 8.x
+    - name: Set up .Net Nightly
+      if: matrix.release == 'nightly'
+      uses: actions/setup-dotnet@v4
+      with:
+        dotnet-version: 8.x
+        source-url: https://nuget.pkg.github.com/seleniumhq/index.json
+      env:
+        NUGET_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
+    - name: Update Nightly version non-Windows
+      if: matrix.release == 'nightly' && matrix.os != 'windows'
+      run:
+        |
+        pip install -r ./scripts/requirements.txt
+        latest_nightly=$(python ./scripts/latest-nightly-version.py nuget Selenium.WebDriver)
+        echo $latest_nightly
+        dotnet add examples/dotnet/SeleniumDocs/SeleniumDocs.csproj package Selenium.WebDriver --version $latest_nightly
+        dotnet add examples/dotnet/SeleniumDocs/SeleniumDocs.csproj package Selenium.Support --version $latest_nightly
+      env:
+        GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+    - name: Update Nightly version Windows
+      if: matrix.release == 'nightly' && matrix.os == 'windows'
+      shell: pwsh
+      run:
+        |
+        pip install -r ./scripts/requirements.txt
+        $latest_nightly = python ./scripts/latest-nightly-version.py nuget Selenium.WebDriver
+        dotnet add examples/dotnet/SeleniumDocs/SeleniumDocs.csproj package Selenium.WebDriver --version $latest_nightly
+        dotnet add examples/dotnet/SeleniumDocs/SeleniumDocs.csproj package Selenium.Support --version $latest_nightly
+      env:
+        GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
     - name: Set up Java
-      uses: actions/setup-java@v3
+      uses: actions/setup-java@v4
       with:
         distribution: 'temurin'
         java-version: 11
     - name: Run tests
-      uses: nick-invision/retry@v2.8.3
+      uses: nick-fields/retry@v3.0.2
       with:
-        timeout_minutes: 20
-        max_attempts: 3
+        timeout_minutes: 40
+        max_attempts: 2
         command: |
           cd examples/dotnet/SeleniumDocs
           dotnet test
diff --git a/.github/workflows/java-examples.yml b/.github/workflows/java-examples.yml
index 0c68bb1a7371..3dd7c67fa986 100644
--- a/.github/workflows/java-examples.yml
+++ b/.github/workflows/java-examples.yml
@@ -21,38 +21,87 @@ env:
   GH_TOKEN: ${{ secrets.SELENIUM_CI_TOKEN }}
 
 jobs:
-  test_examples:
+  tests:
     strategy:
       fail-fast: false
       matrix:
-        os: [ ubuntu-latest, windows-latest, macos-latest ]
-    runs-on: ${{ matrix.os }}
+        os: [ ubuntu, windows, macos ]
+        release: [ stable, nightly ]
+    runs-on: ${{ format('{0}-latest', matrix.os) }}
     steps:
     - name: Checkout GitHub repo
-      uses: actions/checkout@v3
+      uses: actions/checkout@v5
     - name: Remove driver directories Windows
-      if: matrix.os == 'windows-latest'
+      if: matrix.os == 'windows'
       run: |
         rm "$env:ChromeWebDriver" -r -v
         rm "$env:EdgeWebDriver" -r -v
         rm "$env:GeckoWebDriver" -r -v
     - name: Remove driver directories Non-Windows
-      if: matrix.os != 'windows-latest'
+      if: matrix.os != 'windows'
       run: |
         sudo rm -rf $CHROMEWEBDRIVER $EDGEWEBDRIVER $GECKOWEBDRIVER
     - name: Start Xvfb
-      if: matrix.os == 'ubuntu-latest'
+      if: matrix.os == 'ubuntu'
       run: Xvfb :99 &
     - name: Set up Java
-      uses: actions/setup-java@v3
+      id: java
+      uses: actions/setup-java@v4
       with:
         distribution: 'temurin'
-        java-version: 11
-    - name: Run Tests
-      uses: nick-invision/retry@v2.8.3
+        java-version: 17
+    - name: Import test cert non-Windows
+      if: matrix.os != 'windows'
+      run: sudo keytool -import -noprompt -trustcacerts -alias SeleniumHQ -file examples/java/src/test/resources/tls.crt -keystore ${{ steps.java.outputs.path }}/lib/security/cacerts -storepass changeit
+    - name: Import test cert Windows
+      if: matrix.os == 'windows'
+      run: keytool -import -noprompt -trustcacerts -alias SeleniumHQ -file examples/java/src/test/resources/tls.crt -keystore ${{ steps.java.outputs.path }}/lib/security/cacerts -storepass changeit
+    - name: Run Tests Stable
+      if: matrix.release == 'stable'
+      uses: nick-invision/retry@v3.0.2
       with:
-        timeout_minutes: 20
+        timeout_minutes: 40
         max_attempts: 3
         command: |
           cd examples/java
-          mvn -B test
+          mvn -B test -D"jdk.internal.httpclient.disableHostnameVerification=true"
+    - name: Run Tests Nightly Linux/macOS
+      if: matrix.release == 'nightly' && matrix.os != 'windows'
+      uses: nick-invision/retry@v3.0.2
+      with:
+        timeout_minutes: 40
+        max_attempts: 3
+        command: |
+          # Get current selenium.version from Maven
+          current_version=$(mvn -f examples/java/pom.xml help:evaluate -Dexpression=selenium.version -q -DforceStdout)
+          echo "Current selenium.version: $current_version"
+          # If version is in the form X.Y.Z, bump minor and set to SNAPSHOT
+          if [[ $current_version =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
+            major="${BASH_REMATCH[1]}"
+            minor="${BASH_REMATCH[2]}"
+            next_minor=$((minor + 1))
+            new_version="$major.$next_minor.0-SNAPSHOT"
+            echo "Using selenium.version $new_version for tests"
+            cd examples/java
+            mvn -B -U test -D"jdk.internal.httpclient.disableHostnameVerification=true" -Dselenium.version=$new_version
+          fi
+    - name: Run Tests Nightly Windows
+      if: matrix.release == 'nightly' && matrix.os == 'windows'
+      uses: nick-invision/retry@v3.0.2
+      with:
+        timeout_minutes: 40
+        max_attempts: 3
+        command: |
+          # Get current selenium.version from Maven
+          $current_version = & mvn -f examples/java/pom.xml help:evaluate -Dexpression=selenium.version -q -DforceStdout
+          Write-Output "Current selenium.version: $current_version"
+          # If version is in the form X.Y.Z, bump minor and set to SNAPSHOT
+          if ($current_version -match '^([0-9]+)\.([0-9]+)\.([0-9]+)$') {
+            $major = $matches[1]
+            $minor = $matches[2]
+            $next_minor = [int]$minor + 1
+            $new_version = "$major.$next_minor.0-SNAPSHOT"
+            Write-Output "Using selenium.version $new_version for tests"
+            cd examples/java
+            mvn -B -U test "-Djdk.internal.httpclient.disableHostnameVerification=true" "-Dselenium.version=$new_version"
+          }
diff --git a/.github/workflows/js-examples.yml b/.github/workflows/js-examples.yml
index 6f655ce8620d..f04e9422b9d8 100644
--- a/.github/workflows/js-examples.yml
+++ b/.github/workflows/js-examples.yml
@@ -21,70 +21,71 @@ env:
   GH_TOKEN: ${{ secrets.SELENIUM_CI_TOKEN }}
 
 jobs:
-  test_examples:
+  tests:
     strategy:
       fail-fast: false
       matrix:
-        os: [ ubuntu-latest, windows-latest, macos-latest ]
-    runs-on: ${{ matrix.os }}
+        os: [ ubuntu, windows, macos ]
+        release: [ stable, nightly ]
+    runs-on: ${{ format('{0}-latest', matrix.os) }}
     steps:
     - name: Checkout GitHub repo
-      uses: actions/checkout@v3
-    - name: Install Chrome for set binary test
-      uses: browser-actions/setup-chrome@v1
-      with:
-        chrome-version: stable
-      id: setup-chrome
-    - name: Install Edge for set binary test
-      uses: browser-actions/setup-edge@v1
-      with:
-        edge-version: stable
-      id: setup-edge
-    - name: Install Firefox for set binary test
-      if: matrix.os != 'windows-latest'
-      uses: browser-actions/setup-firefox@v1
-      with:
-        firefox-version: latest
-      id: setup-firefox
-    - name: Set ENV Windows
-      if: matrix.os == 'windows-latest'
-      run: |
-        echo "CHROME_BIN=${{ steps.setup-chrome.outputs.chrome-path }}" >> $env:GITHUB_ENV
-        echo "EDGE_BIN=C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" >> $env:GITHUB_ENV
-        echo "FF_BIN=C:\Program Files (x86)\Mozilla Firefox\firefox-browser.exe" >> $env:GITHUB_ENV
-    - name: Set ENV Mac
-      if: matrix.os == 'macos-latest'
-      run: |
-        echo "CHROME_BIN=${{ steps.setup-chrome.outputs.chrome-path }}" >> "$GITHUB_ENV"
-        echo "EDGE_BIN=/Users/runner/hostedtoolcache/msedge/stable/x64/Contents/MacOS/Microsoft Edge" >> "$GITHUB_ENV"
-        echo "FF_BIN=/Users/runner/hostedtoolcache/firefox/latest/x64/Contents/MacOS/firefox" >> "$GITHUB_ENV"
-    - name: Set ENV Linux
-      if: matrix.os == 'ubuntu-latest'
-      run: |
-        echo "CHROME_BIN=${{ steps.setup-chrome.outputs.chrome-path }}" >> "$GITHUB_ENV"
-        echo "EDGE_BIN=/opt/hostedtoolcache/msedge/stable/x64/msedge" >> "$GITHUB_ENV"
-        echo "FF_BIN=/opt/hostedtoolcache/firefox/latest/x64/firefox" >> "$GITHUB_ENV"
+      uses: actions/checkout@v5
     - name: Remove driver directories Windows
-      if: matrix.os == 'windows-latest'
+      if: matrix.os == 'windows'
       run: |
         rm "$env:ChromeWebDriver" -r -v
         rm "$env:EdgeWebDriver" -r -v
         rm "$env:GeckoWebDriver" -r -v
     - name: Remove driver directories Non-Windows
-      if: matrix.os != 'windows-latest'
+      if: matrix.os != 'windows'
       run: |
             sudo rm -rf $CHROMEWEBDRIVER $EDGEWEBDRIVER $GECKOWEBDRIVER
     - name: Start Xvfb
-      if: matrix.os == 'ubuntu-latest'
+      if: matrix.os == 'ubuntu'
       run: Xvfb :99 &
+    - name: Setup Node Stable
+      if: matrix.release == 'stable'
+      uses: actions/setup-node@v4
+      with:
+        node-version: '22.x'
+    - name: Setup Node Nightly
+      if: matrix.release == 'nightly'
+      uses: actions/setup-node@v4
+      with:
+        node-version: '22.x'
+        registry-url: 'https://npm.pkg.github.com'
+    - name: Use Nightly package.json in Ubuntu/macOS
+      if: matrix.release == 'nightly' && matrix.os != 'windows'
+      run:
+        |
+        pip install -r ./scripts/requirements.txt
+        latest_nightly=$(python ./scripts/latest-nightly-version.py npm selenium-webdriver)
+        echo $latest_nightly
+        npm install --prefix ./examples/javascript --save selenium-webdriver@npm:@seleniumhq/selenium-webdriver@$latest_nightly
+      env:
+        GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+    - name: Use Nightly package.json in Windows
+      if: matrix.release == 'nightly' && matrix.os == 'windows'
+      run:
+        |
+        pip install -r ./scripts/requirements.txt
+        $latest_nightly = python ./scripts/latest-nightly-version.py npm selenium-webdriver
+        npm install --prefix ./examples/javascript --save selenium-webdriver@npm:@seleniumhq/selenium-webdriver@$latest_nightly
+      env:
+        GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
     - name: Install Requirements
       working-directory: ./examples/javascript
       run: npm install
+      env:
+        NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
     - name: Run tests
-      uses: nick-invision/retry@v2.8.3
+      uses: nick-invision/retry@v3.0.2
       with:
-        timeout_minutes: 20
-        max_attempts: 3
+        timeout_minutes: 40
+        max_attempts: 2
         command: |
           cd examples/javascript
           npm test
diff --git a/.github/workflows/kotlin-examples.yml b/.github/workflows/kotlin-examples.yml
index fb595ee6ceca..bd54b9a410db 100644
--- a/.github/workflows/kotlin-examples.yml
+++ b/.github/workflows/kotlin-examples.yml
@@ -21,72 +21,38 @@ env:
   GH_TOKEN: ${{ secrets.SELENIUM_CI_TOKEN }}
 
 jobs:
-  test_examples:
+  tests:
     strategy:
       fail-fast: false
       matrix:
-        os: [ ubuntu-latest, windows-latest, macos-latest ]
-    runs-on: ${{ matrix.os }}
+        os: [ ubuntu, windows, macos ]
+    runs-on: ${{ format('{0}-latest', matrix.os) }}
     steps:
     - name: Checkout GitHub repo
-      uses: actions/checkout@v3
-    - name: Install Chrome for set binary test
-      uses: browser-actions/setup-chrome@v1
-      with:
-        chrome-version: stable
-      id: setup-chrome
-    - name: Install Edge for set binary test
-      uses: browser-actions/setup-edge@v1
-      with:
-        edge-version: stable
-      id: setup-edge
-    - name: Install Firefox for set binary test
-      if: matrix.os != 'windows-latest'
-      uses: browser-actions/setup-firefox@v1
-      with:
-        firefox-version: latest
-      id: setup-firefox
-    - name: Set ENV Windows
-      if: matrix.os == 'windows-latest'
-      run: |
-        echo "CHROME_BIN=${{ steps.setup-chrome.outputs.chrome-path }}" >> $env:GITHUB_ENV
-        echo "EDGE_BIN=C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" >> $env:GITHUB_ENV
-        echo "FF_BIN=C:\Program Files (x86)\Mozilla Firefox\firefox-browser.exe" >> $env:GITHUB_ENV
-    - name: Set ENV Mac
-      if: matrix.os == 'macos-latest'
-      run: |
-        echo "CHROME_BIN=${{ steps.setup-chrome.outputs.chrome-path }}" >> "$GITHUB_ENV"
-        echo "EDGE_BIN=/Users/runner/hostedtoolcache/msedge/stable/x64/Contents/MacOS/Microsoft Edge" >> "$GITHUB_ENV"
-        echo "FF_BIN=/Users/runner/hostedtoolcache/firefox/latest/x64/Contents/MacOS/firefox" >> "$GITHUB_ENV"
-    - name: Set ENV Linux
-      if: matrix.os == 'ubuntu-latest'
-      run: |
-        echo "CHROME_BIN=${{ steps.setup-chrome.outputs.chrome-path }}" >> "$GITHUB_ENV"
-        echo "EDGE_BIN=/opt/hostedtoolcache/msedge/stable/x64/msedge" >> "$GITHUB_ENV"
-        echo "FF_BIN=/opt/hostedtoolcache/firefox/latest/x64/firefox" >> "$GITHUB_ENV"
+      uses: actions/checkout@v5
     - name: Remove driver directories Windows
-      if: matrix.os == 'windows-latest'
+      if: matrix.os == 'windows'
       run: |
         rm "$env:ChromeWebDriver" -r -v
         rm "$env:EdgeWebDriver" -r -v
         rm "$env:GeckoWebDriver" -r -v
     - name: Remove driver directories Non-Windows
-      if: matrix.os != 'windows-latest'
+      if: matrix.os != 'windows'
       run: |
         sudo rm -rf $CHROMEWEBDRIVER $EDGEWEBDRIVER $GECKOWEBDRIVER
     - name: Start Xvfb
-      if: matrix.os == 'ubuntu-latest'
+      if: matrix.os == 'ubuntu'
       run: Xvfb :99 &
     - name: Set up Java
-      uses: actions/setup-java@v2
+      uses: actions/setup-java@v4
       with:
         distribution: 'temurin'
-        java-version: 8
+        java-version: 11
     - name: Run tests
-      uses: nick-invision/retry@v2.8.3
+      uses: nick-invision/retry@v3.0.2
       with:
-        timeout_minutes: 20
-        max_attempts: 3
+        timeout_minutes: 40
+        max_attempts: 2
         command: |
           cd examples/kotlin
           mvn -B test
diff --git a/.github/workflows/label-commenter.yml b/.github/workflows/label-commenter.yml
index 576e6f9e5889..ed6b65a9d633 100644
--- a/.github/workflows/label-commenter.yml
+++ b/.github/workflows/label-commenter.yml
@@ -11,8 +11,8 @@ permissions:
 
 jobs:
   comment:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-24.04
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v5
       - name: Label Commenter
         uses: peaceiris/actions-label-commenter@v1
diff --git a/.github/workflows/link-check.yml b/.github/workflows/link-check.yml
index b40bf0d3c807..ca77cca61edf 100644
--- a/.github/workflows/link-check.yml
+++ b/.github/workflows/link-check.yml
@@ -7,7 +7,11 @@ on:
   push:
     branches:
     - trunk
+    paths:
+      - 'website_and_docs/**'
   pull_request:
+    paths:
+      - 'website_and_docs/**'
 
 jobs:
   htmltest:
@@ -16,18 +20,18 @@ jobs:
       group: ${{ github.workflow }}-${{ github.ref }}
     steps:
       - name: Check out repository
-        uses: actions/checkout@v3
+        uses: actions/checkout@v5
 
       - name: Set up Hugo
-        uses: peaceiris/actions-hugo@v2
+        uses: peaceiris/actions-hugo@v3
         with:
-          hugo-version: "0.110.0"
+          hugo-version: ' 0.125.4'
           extended: true
 
       - name: Setup Node
-        uses: actions/setup-node@v3
+        uses: actions/setup-node@v4
         with:
-          node-version: '18.14.2'
+          node-version: '22.18.0'
           cache: 'npm'
           # The action defaults to search for the dependency file (package-lock.json,
           # npm-shrinkwrap.json or yarn.lock) in the repository root, and uses its
@@ -42,13 +46,13 @@ jobs:
 
       - name: Link check
         continue-on-error: true # <- If set to false, run fails with broken links
-        uses: untitaker/hyperlink@0.1.27
+        uses: untitaker/hyperlink@0.1.44
         with:
           args: website_and_docs/public/ --check-anchors
 
       - name: Archive hyperlink results
-        uses: actions/upload-artifact@v3
+        uses: actions/upload-artifact@v4
         with:
           name: hyperlink-report
           path: website_and_docs/tmp/.hyperlink/hyperlink.log
-          retention-days: 7 # default is 90 days
\ No newline at end of file
+          retention-days: 7 # default is 90 days
diff --git a/.github/workflows/lock.yml b/.github/workflows/lock.yml
index 8d7bd8cb2d4b..c5180609e8ed 100644
--- a/.github/workflows/lock.yml
+++ b/.github/workflows/lock.yml
@@ -14,7 +14,7 @@ jobs:
   action:
     runs-on: ubuntu-latest
     steps:
-      - uses: dessant/lock-threads@v4
+      - uses: dessant/lock-threads@v5
         with:
           process-only: 'issues'
           issue-lock-inactive-days: '30'
diff --git a/.github/workflows/python-examples.yml b/.github/workflows/python-examples.yml
index 6ee0f573ca8b..7820c02cbb13 100644
--- a/.github/workflows/python-examples.yml
+++ b/.github/workflows/python-examples.yml
@@ -21,47 +21,84 @@ env:
   GH_TOKEN: ${{ secrets.SELENIUM_CI_TOKEN }}
 
 jobs:
-  test_examples:
+  tests:
     strategy:
       fail-fast: false
       matrix:
-        os: [ ubuntu-latest, windows-latest, macos-latest ]
-    runs-on: ${{ matrix.os }}
+        include:
+        - os: ubuntu
+          release: stable
+          python: '3.9'
+        - os: ubuntu
+          release: nightly
+          python: '3.11'
+        - os: windows
+          release: stable
+          python: '3.9'
+        - os: windows
+          release: nightly
+          python: '3.12'
+        - os: macos
+          release: stable
+          python: '3.10'
+        - os: macos
+          release: nightly
+          python: '3.13'
+    runs-on: ${{ format('{0}-latest', matrix.os) }}
     steps:
     - name: Checkout GitHub repo
-      uses: actions/checkout@v3
+      uses: actions/checkout@v5
     - name: Remove driver directories Windows
-      if: matrix.os == 'windows-latest'
+      if: matrix.os == 'windows'
       run: |
         rm "$env:ChromeWebDriver" -r -v
         rm "$env:EdgeWebDriver" -r -v
         rm "$env:GeckoWebDriver" -r -v
     - name: Remove driver directories Non-Windows
-      if: matrix.os != 'windows-latest'
+      if: matrix.os != 'windows'
       run: |
         sudo rm -rf $CHROMEWEBDRIVER $EDGEWEBDRIVER $GECKOWEBDRIVER
     - name: Start Xvfb
-      if: matrix.os == 'ubuntu-latest'
+      if: matrix.os == 'ubuntu'
       run: Xvfb :99 &
     - name: Set up Python
-      uses: actions/setup-python@v4
+      uses: actions/setup-python@v5
       with:
-        python-version: 3.8
-    - name: Install dependencies
+        python-version: ${{ matrix.python }}
+    - name: Install dependencies nightly non-Windows
+      if: matrix.release == 'nightly' && matrix.os != 'windows'
+      run: |
+        pip install -r ./scripts/requirements.txt
+        latest_nightly_python=$(python ./scripts/latest-python-nightly-version.py)
+        cd examples/python
+        python -m pip install --upgrade pip
+        pip install -r requirements.txt
+        pip install --index-url https://test.pypi.org/simple/ selenium==$latest_nightly_python --extra-index-url https://pypi.org/simple/ --upgrade --force-reinstall --break-system-packages
+    - name: Install dependencies nightly Windows
+      if: matrix.release == 'nightly' && matrix.os == 'windows'
+      run: |
+        pip install -r ./scripts/requirements.txt
+        $latest_nightly_python = python ./scripts/latest-python-nightly-version.py
+        cd examples/python
+        python -m pip install --upgrade pip
+        pip install -r requirements.txt
+        pip install --index-url https://test.pypi.org/simple/ selenium==$latest_nightly_python --extra-index-url https://pypi.org/simple/ --upgrade --force-reinstall --break-system-packages
+    - name: Install dependencies stable
+      if: matrix.release == 'stable'
       working-directory: ./examples/python
       run: |
         python -m pip install --upgrade pip
         pip install -r requirements.txt
     - name: Set up Java
-      uses: actions/setup-java@v3
+      uses: actions/setup-java@v4
       with:
         distribution: 'temurin'
         java-version: 11
     - name: Run tests
-      uses: nick-invision/retry@v2.8.3
+      uses: nick-invision/retry@v3.0.2
       with:
-        timeout_minutes: 20
+        timeout_minutes: 60
         max_attempts: 3
         command: |
           cd examples/python
-          pytest
+          pytest --reruns 3 -n auto
diff --git a/.github/workflows/ruby-examples.yml b/.github/workflows/ruby-examples.yml
index a4de4331c645..a003b3e860d3 100644
--- a/.github/workflows/ruby-examples.yml
+++ b/.github/workflows/ruby-examples.yml
@@ -21,46 +21,109 @@ env:
   GH_TOKEN: ${{ secrets.SELENIUM_CI_TOKEN }}
 
 jobs:
-  test_examples:
+  tests:
     strategy:
       fail-fast: false
       matrix:
-        os: [ ubuntu-latest, windows-latest, macos-latest ]
-    runs-on: ${{ matrix.os }}
+        os: [ ubuntu, windows, macos ]
+        release: [ stable, nightly ]
+    runs-on: ${{ format('{0}-latest', matrix.os) }}
     steps:
       - name: Checkout GitHub repo
-        uses: actions/checkout@v3
+        uses: actions/checkout@v5
       - name: Remove driver directories Windows
-        if: matrix.os == 'windows-latest'
+        if: matrix.os == 'windows'
         run: |
           rm "$env:ChromeWebDriver" -r -v
           rm "$env:EdgeWebDriver" -r -v
           rm "$env:GeckoWebDriver" -r -v
       - name: Remove driver directories Non-Windows
-        if: matrix.os != 'windows-latest'
+        if: matrix.os != 'windows'
         run: |
           sudo rm -rf $CHROMEWEBDRIVER $EDGEWEBDRIVER $GECKOWEBDRIVER
-      - name: Start Xvfb
-        if: matrix.os == 'ubuntu-latest'
-        run: Xvfb :99 &
+      - name: Setup Fluxbox and Xvfb
+        if: matrix.os == 'ubuntu'
+        run: |
+          sudo apt-get -y install fluxbox libxss1 libappindicator3-1 libindicator7
+          Xvfb :99 &
+          fluxbox -display :99 &
+          echo "DISPLAY=:99" >> "$GITHUB_ENV"
       - name: Set up Ruby
         uses: ruby/setup-ruby@v1
         with:
-          ruby-version: 3.0
+          ruby-version: 3.2
           bundler-cache: true
-      - name: Install Gems
+      - name: Install Gems Nightly non-Windows
+        if: matrix.release == 'nightly' && matrix.os != 'windows'
+        run:
+          |
+          pip install -r ./scripts/requirements.txt
+          latest_nightly_webdriver=$(python ./scripts/latest-nightly-version.py rubygems selenium-webdriver)
+          echo $latest_nightly_webdriver
+          cd examples/ruby
+          bundle install
+          bundle remove selenium-webdriver
+          bundle add selenium-webdriver --version $latest_nightly_webdriver --source "https://token:${{secrets.GITHUB_TOKEN}}@rubygems.pkg.github.com/seleniumhq"
+        env:
+          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+      - name: Install Gems Nightly Windows
+        if: matrix.release == 'nightly' && matrix.os == 'windows'
+        run:
+          |
+          pip install -r ./scripts/requirements.txt
+          $latest_nightly_webdriver = python ./scripts/latest-nightly-version.py rubygems selenium-webdriver
+          cd examples/ruby
+          bundle install
+          bundle remove selenium-webdriver
+          bundle add selenium-webdriver --version $latest_nightly_webdriver --source "https://token:${{secrets.GITHUB_TOKEN}}@rubygems.pkg.github.com/seleniumhq"
+        env:
+          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+      - name: Install Gems Stable
+        if: matrix.release == 'stable'
         working-directory: ./examples/ruby
         run: bundle install
       - name: Set up Java
-        uses: actions/setup-java@v3
+        uses: actions/setup-java@v4
         with:
           distribution: 'temurin'
           java-version: 11
-      - name: Run tests
-        uses: nick-invision/retry@v2.8.3
+      - name: Run tests on Windows
+        if: matrix.os == 'windows'
+        uses: nick-invision/retry@v3.0.2
+        with:
+          timeout_minutes: 40
+          max_attempts: 2
+          command: |
+            cd examples/ruby
+            bundle exec rspec
+          new_command_on_retry: |
+            cd examples/ruby; $env:DEBUG="true"; bundle exec rspec --only-failures --backtrace
+      - name: Run tests on ${{ matrix.os }}
+        if: matrix.os != 'windows'
+        uses: nick-invision/retry@v3.0.2
         with:
-          timeout_minutes: 20
-          max_attempts: 3
+          timeout_minutes: 40
+          max_attempts: 2
           command: |
             cd examples/ruby
             bundle exec rspec
+          new_command_on_retry: |
+            cd examples/ruby
+            DEBUG=true bundle exec rspec --only-failures --backtrace
+
+  lint:
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout GitHub repo
+        uses: actions/checkout@v5
+      - name: Set up Ruby
+        uses: ruby/setup-ruby@v1
+        with:
+          ruby-version: 3.2
+          bundler-cache: true
+      - name: Install dependencies
+        working-directory: ./examples/ruby
+        run: bundle install
+      - name: Run RuboCop
+        working-directory: ./examples/ruby
+        run: bundle exec rubocop
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 18f98f7c3a2b..2f5f09037a3d 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -4,20 +4,24 @@ on:
   pull_request:
     branches:
       - trunk
+    paths:
+      - 'website_and_docs/**'
   push:
     branches:
       - trunk
+    paths:
+      - 'website_and_docs/**'
 
 jobs:
   test_build:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-24.04
     steps:
       - name: Checkout repo
-        uses: actions/checkout@v3
+        uses: actions/checkout@v5
       - name: Setup Hugo
-        uses: peaceiris/actions-hugo@v2
+        uses: peaceiris/actions-hugo@v3
         with:
-          hugo-version: '0.110.0'
+          hugo-version: '0.125.4'
           extended: true
       - name: Build
         run: chmod +x build-site.sh && ./build-site.sh
diff --git a/.gitignore b/.gitignore
index 43ede48a62fd..c828c5469d5d 100755
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,5 @@ website_and_docs/resources
 .settings
 .gitignore
 .pydevproject
+**/*.iml
+**/.gradle
diff --git a/.gitpod.yml b/.gitpod.yml
index 0938b32433b6..c5bf57fb4d95 100644
--- a/.gitpod.yml
+++ b/.gitpod.yml
@@ -1,12 +1,12 @@
 tasks:
   - name: Install Hugo, init submodules and start website
     init: |
-      curl -LO https://github.com/gohugoio/hugo/releases/download/v0.110.0/hugo_extended_0.110.0_linux-amd64.deb && \
-      sudo dpkg -i hugo_extended_0.110.0_linux-amd64.deb && \
-      sudo rm hugo_extended_0.110.0_linux-amd64.deb
+      curl -LO https://github.com/gohugoio/hugo/releases/download/v0.125.4/hugo_extended_0.125.4_linux-amd64.deb && \
+      sudo dpkg -i hugo_extended_0.125.4_linux-amd64.deb && \
+      sudo rm hugo_extended_0.125.4_linux-amd64.deb
     command: |
       cd website_and_docs
-      hugo server --baseUrl $(gp url 1313) --appendPort=false
+      hugo server --baseURL $(gp url 1313) --appendPort=false
 
 # List the ports you want to expose and what to do when they are served. See https://www.gitpod.io/docs/config-ports/
 ports:
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 37b19be3a79b..f9fd866c46e6 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,4 +1,3 @@
 # Contributing to the Selenium site and docs
 
-Please follow this [link](https://selenium.dev/documentation/about/contributing/) 
-for all the contribution details. 
+Please follow this [link](https://selenium.dev/documentation/about/contributing/) for all the contribution details.
diff --git a/GOVERNANCE.md b/GOVERNANCE.md
index f93f63a77a3b..da798cca98c0 100644
--- a/GOVERNANCE.md
+++ b/GOVERNANCE.md
@@ -1,3 +1,3 @@
 # Governance
 
-Content moved to https://www.selenium.dev/governance/
+Content moved to <https://www.selenium.dev/governance/>
diff --git a/LICENSE b/LICENSE
index 6ff5cc6fe3f8..75b9810f863a 100644
--- a/LICENSE
+++ b/LICENSE
@@ -187,7 +187,7 @@
       same "printed page" as the copyright notice for easier
       identification within third-party archives.
 
-   Copyright 2023 Software Freedom Conservancy (SFC)
+   Copyright 2025 Software Freedom Conservancy (SFC)
 
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
diff --git a/README.md b/README.md
index 9cf6125e7dac..b58633891dfa 100755
--- a/README.md
+++ b/README.md
@@ -1,4 +1,10 @@
 [![GitHub Actions](https://github.com/seleniumhq/seleniumhq.github.io/workflows/Publish%20Selenium%20Site/badge.svg)](https://github.com/SeleniumHQ/seleniumhq.github.io/actions?query=workflow%3A%22Publish+Selenium+Site%22)
+[![Run Java examples](https://github.com/SeleniumHQ/seleniumhq.github.io/actions/workflows/java-examples.yml/badge.svg)](https://github.com/SeleniumHQ/seleniumhq.github.io/actions/workflows/java-examples.yml)
+[![Run Kotlin examples](https://github.com/SeleniumHQ/seleniumhq.github.io/actions/workflows/kotlin-examples.yml/badge.svg)](https://github.com/SeleniumHQ/seleniumhq.github.io/actions/workflows/kotlin-examples.yml)
+[![Run Python examples](https://github.com/SeleniumHQ/seleniumhq.github.io/actions/workflows/python-examples.yml/badge.svg)](https://github.com/SeleniumHQ/seleniumhq.github.io/actions/workflows/python-examples.yml)
+[![Run JavaScript examples](https://github.com/SeleniumHQ/seleniumhq.github.io/actions/workflows/js-examples.yml/badge.svg)](https://github.com/SeleniumHQ/seleniumhq.github.io/actions/workflows/js-examples.yml)
+[![Run Ruby examples](https://github.com/SeleniumHQ/seleniumhq.github.io/actions/workflows/ruby-examples.yml/badge.svg)](https://github.com/SeleniumHQ/seleniumhq.github.io/actions/workflows/ruby-examples.yml)
+[![Run DotNet examples](https://github.com/SeleniumHQ/seleniumhq.github.io/actions/workflows/dotnet-examples.yml/badge.svg)](https://github.com/SeleniumHQ/seleniumhq.github.io/actions/workflows/dotnet-examples.yml)
 
 <a href="https://selenium.dev"><img src="https://selenium.dev/images/selenium_logo_square_green.png" width="200" alt="Selenium"/></a>
 
@@ -11,11 +17,11 @@ This is the repository used to build and publish the official Selenium [website]
 We use [Hugo](https://gohugo.io/) and the [Docsy theme](https://www.docsy.dev/)
 to build and render the site. You will need the **extended**
 Sass/SCSS version of the Hugo binary to work on this site. We recommend
-to use Hugo 0.110.0.
+to use **[Hugo 0.125.4](https://github.com/gohugoio/hugo/releases/tag/v0.125.4)**
 
 Steps needed to have this working locally and work on it:
 
-- Follow the [Install Hugo](https://www.docsy.dev/docs/get-started/other-options/#install-hugo) instructions from Docsy
+- [Install Hugo](https://gohugo.io/installation/) and follow the [Get Started](https://www.docsy.dev/docs/get-started/) instructions from Docsy
 - [Install go](https://go.dev/doc/install)
 - Clone this repository
 - Run `cd website_and_docs`
@@ -25,31 +31,26 @@ A full contribution guideline can be seen at [contributing](https://selenium.dev
 
 ## How to get involved?
 
-Please check all the information available at https://selenium.dev/getinvolved/
+Please check all the information available at <https://selenium.dev/getinvolved/>
 
-### Do not want to clone the repository to contribute? Use GitPod.
+### Do not want to clone the repository to contribute? Use GitPod
 
 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/SeleniumHQ/seleniumhq.github.io)
 
-
 ## For Selenium Site and Documentation maintainers
 
 ### How does the site and docs get build?
 
 GitHub actions runs for every commit on each PR and protected branch. The regular CI execution will
 build the site with Hugo to verify that the commit works. The description of these steps can be seen
-at the actions configuration file, [one for testing a PR](./.github/workflows/test.yml), and 
-[one for deploying the site](./.github/workflows/deploy.yml)
+at the actions configuration file, [one for testing a PR](./.github/workflows/test.yml), and [one for deploying the site](./.github/workflows/deploy.yml)
 
 ### How are the site and docs deployed?
 
-After each CI execution that happens in the `trunk` branch, the script [build-site.sh](./build-site.sh) 
-is executed for deployment. This script checks for the string `[deploy site]` in the commit message.
+After each CI execution that happens in the `trunk` branch, the script [build-site.sh](./build-site.sh) is executed for deployment. This script checks for the string `[deploy site]` in the commit message.
 
-If the commit message contains that string, and the commit is in `trunk`, a 
-[GitHub action](./.github/workflows/deploy.yml) is triggered to build and deploy the site. 
-The site and docs will be built, and the changes will be committed to the branch `publish` 
-by the user [Selenium-CI](https://github.com/selenium-ci/).
+If the commit message contains that string, and the commit is in `trunk`, a [GitHub action](./.github/workflows/deploy.yml) is triggered to build and deploy the site.
+The site and docs will be built, and the changes will be committed to the branch `publish` by the user [Selenium-CI](https://github.com/selenium-ci/).
 
 *What is important to take into account is that the source files for the site are in the `trunk`
 branch, and the files that get deployed are pushed to the `publish` branch.*
@@ -59,11 +60,9 @@ repo [settings](https://github.com/SeleniumHQ/seleniumhq.github.io/settings) (if
 you should be able to access the link).
 
 The selenium.
-domain is managed at https://www.gandi.net/en, if you need access to it, reach out to
-any of the [PLC](https://www.selenium.dev/project/structure/#plc) or [TLC](https://www.selenium.dev/project/structure/#tlc)
+domain is managed at <https://www.gandi.net/en>, if you need access to it, reach out to any of the [PLC](https://www.selenium.dev/project/structure/#plc) or [TLC](https://www.selenium.dev/project/structure/#tlc)
 members, who can help you with that.
 
 If for any reason, you need to setup the domain redirection again,
 we followed this [guide](http://spector.io/how-to-set-up-github-pages-with-a-custom-domain-on-gandi/),
-but any tutorial/guide showing how to redirect a domain to GitHub pages should do.   
-
+but any tutorial/guide showing how to redirect a domain to GitHub pages should do.
diff --git a/examples/dotnet/SeleniumDocs/BaseChromeTest.cs b/examples/dotnet/SeleniumDocs/BaseChromeTest.cs
index 6b5695d8c47f..415525c07158 100644
--- a/examples/dotnet/SeleniumDocs/BaseChromeTest.cs
+++ b/examples/dotnet/SeleniumDocs/BaseChromeTest.cs
@@ -6,9 +6,9 @@ namespace SeleniumDocs
     public class BaseChromeTest : BaseTest
     {
         [TestInitialize]
-        public void CreateDriver()
+        public void AutoStartDriver()
         {
-            driver = new ChromeDriver();
+            StartDriver();
         }
     }
 }
\ No newline at end of file
diff --git a/examples/dotnet/SeleniumDocs/BaseTest.cs b/examples/dotnet/SeleniumDocs/BaseTest.cs
index be17872f1e65..b6cc74c62e33 100644
--- a/examples/dotnet/SeleniumDocs/BaseTest.cs
+++ b/examples/dotnet/SeleniumDocs/BaseTest.cs
@@ -17,7 +17,7 @@ public class BaseTest
         protected IWebDriver driver;
         protected Uri GridUrl;
         private Process _webserverProcess;
-        private const string ServerJarName = "selenium-server-4.15.0.jar";
+        private const string ServerJarName = "selenium-server-4.35.0.jar";
         private static readonly string BaseDirectory = AppContext.BaseDirectory;
         private const string RelativePathToGrid = "../../../../../";
         private readonly string _examplesDirectory = Path.GetFullPath(Path.Combine(BaseDirectory, RelativePathToGrid));
@@ -33,17 +33,18 @@ public void Cleanup()
             }
         }
 
-        protected void StartDriver()
+        protected void StartDriver(string browserVersion = null)
         {
-            driver = new ChromeDriver();
-        }
-
-        protected void StartDriver(string browserVersion)
-        {
-            ChromeOptions options = new ChromeOptions
+            ChromeOptions options = new ChromeOptions();
+            if (browserVersion != null)
             {
-                BrowserVersion = browserVersion
-            };
+                options.BrowserVersion = browserVersion;
+                string userDataDir = System.IO.Path.Combine(System.IO.Path.GetTempPath(), System.IO.Path.GetRandomFileName());
+                System.IO.Directory.CreateDirectory(userDataDir);
+                options.AddArgument($"--user-data-dir={userDataDir}");
+                options.AddArgument("--no-sandbox");
+                options.AddArgument("--disable-dev-shm-usage");
+            }
             driver = new ChromeDriver(options);
         }
 
@@ -86,7 +87,7 @@ private static int GetFreeTcpPort()
 
         private async Task EnsureGridIsRunningAsync()
         {
-            DateTime timeout = DateTime.Now.Add(TimeSpan.FromSeconds(30));
+            DateTime timeout = DateTime.Now.Add(TimeSpan.FromSeconds(240));
             bool isRunning = false;
             HttpClient client = new HttpClient();
 
@@ -101,12 +102,12 @@ private async Task EnsureGridIsRunningAsync()
                     }
                     else
                     {
-                        await Task.Delay(500);
+                        await Task.Delay(1000);
                     }
                 }
                 catch (HttpRequestException)
                 {
-                    await Task.Delay(500);
+                    await Task.Delay(1000);
                 }
             }
 
@@ -116,4 +117,4 @@ private async Task EnsureGridIsRunningAsync()
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/examples/dotnet/SeleniumDocs/BiDi/CDP/CDPTest.cs b/examples/dotnet/SeleniumDocs/BiDi/CDP/CDPTest.cs
new file mode 100644
index 000000000000..3188d183d748
--- /dev/null
+++ b/examples/dotnet/SeleniumDocs/BiDi/CDP/CDPTest.cs
@@ -0,0 +1,29 @@
+using System.Collections.Generic;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using OpenQA.Selenium;
+using OpenQA.Selenium.Chrome;
+
+namespace SeleniumDocs.BiDi.CDP
+{
+    [TestClass]
+    public class CDPTest : BaseChromeTest
+    {
+        [TestMethod]
+        public void SetCookie()
+        {
+            var cookie = new Dictionary<string, object>
+            {
+                { "name", "cheese" },
+                { "value", "gouda" },
+                { "domain", "www.selenium.dev" },
+                { "secure", true }
+            };
+            ((ChromeDriver)driver).ExecuteCdpCommand("Network.setCookie", cookie);
+            
+            driver.Url = "https://www.selenium.dev";
+            Cookie cheese = driver.Manage().Cookies.GetCookieNamed("cheese");
+            Assert.AreEqual("gouda", cheese.Value);
+
+        }
+    }
+}
\ No newline at end of file
diff --git a/examples/dotnet/SeleniumDocs/BiDi/CDP/LoggingTest.cs b/examples/dotnet/SeleniumDocs/BiDi/CDP/LoggingTest.cs
new file mode 100644
index 000000000000..c7f912be43da
--- /dev/null
+++ b/examples/dotnet/SeleniumDocs/BiDi/CDP/LoggingTest.cs
@@ -0,0 +1,56 @@
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Microsoft.IdentityModel.Tokens;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using OpenQA.Selenium;
+using OpenQA.Selenium.Support.UI;
+
+namespace SeleniumDocs.BiDi.CDP
+{
+    [TestClass]
+    public class LoggingTest : BaseChromeTest
+    {
+        [TestMethod]
+        public async Task ConsoleLogs()
+        {
+            driver.Url = "https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html";
+
+            using IJavaScriptEngine monitor = new JavaScriptEngine(driver);
+            var messages = new List<string>();
+            monitor.JavaScriptConsoleApiCalled += (_, e) =>
+            {
+                messages.Add(e.MessageContent);
+            };
+            await monitor.StartEventMonitoring();
+
+            driver.FindElement(By.Id("consoleLog")).Click();
+            driver.FindElement(By.Id("consoleError")).Click();
+            new WebDriverWait(driver, TimeSpan.FromSeconds(5)).Until(_ => messages.Count > 1);
+            monitor.StopEventMonitoring();
+
+            Assert.IsTrue(messages.Contains("Hello, world!"));
+            Assert.IsTrue(messages.Contains("I am console error"));
+        }
+        
+        [TestMethod]
+        public async Task JsErrors()
+        {
+            driver.Url = "https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html";
+
+            using IJavaScriptEngine monitor = new JavaScriptEngine(driver);
+            var messages = new List<string>();
+            monitor.JavaScriptExceptionThrown += (_, e) =>
+            {
+                messages.Add(e.Message);
+            };
+            await monitor.StartEventMonitoring();
+
+            driver.FindElement(By.Id("jsException")).Click();
+            new WebDriverWait(driver, TimeSpan.FromSeconds(5)).Until(_ => !messages.IsNullOrEmpty());
+            monitor.StopEventMonitoring();
+
+            Assert.IsTrue(messages.Contains("Uncaught"));
+        }
+    }
+}
\ No newline at end of file
diff --git a/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs b/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs
similarity index 52%
rename from examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs
rename to examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs
index f088fb915cab..325092813e06 100644
--- a/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs
+++ b/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs
@@ -1,17 +1,24 @@
-using System;
-using System.Collections;
 using System.Collections.Generic;
 using System.Threading.Tasks;
-using Microsoft.IdentityModel.Tokens;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
 using OpenQA.Selenium;
-using OpenQA.Selenium.Support.UI;
+using OpenQA.Selenium.DevTools;
+using System.Linq;
+using OpenQA.Selenium.DevTools.V137.Network;
+using OpenQA.Selenium.DevTools.V137.Performance;
 
-namespace SeleniumDocs.Bidirectional.ChromeDevTools
+
+namespace SeleniumDocs.BiDi.CDP
 {
     [TestClass]
-    public class BidiApiTest : BaseChromeTest
+    public class NetworkTest : BaseTest
     {
+        [TestInitialize]
+        public void Startup()
+        {
+            StartDriver("137");
+        }
+
         [TestMethod]
         public async Task BasicAuthentication()
         {
@@ -20,11 +27,10 @@ public async Task BasicAuthentication()
                 UriMatcher = uri => uri.AbsoluteUri.Contains("herokuapp"),
                 Credentials = new PasswordCredentials("admin", "admin")
             };
-
             var networkInterceptor = driver.Manage().Network;
             networkInterceptor.AddAuthenticationHandler(handler);
-
             await networkInterceptor.StartMonitoring();
+
             driver.Navigate().GoToUrl("https://the-internet.herokuapp.com/basic_auth");
             await networkInterceptor.StopMonitoring();
 
@@ -32,93 +38,6 @@ public async Task BasicAuthentication()
                 driver.FindElement(By.TagName("p")).Text);
         }
 
-        [TestMethod]
-        public async Task PinScript()
-        {
-            driver.Url = "https://www.selenium.dev/selenium/web/xhtmlTest.html";
-            var element = driver.FindElement(By.Id("id1"));
-
-            var key = await new JavaScriptEngine(driver).PinScript("return arguments;");
-
-            var arguments = ((WebDriver)driver).ExecuteScript(key, 1, true, element);
-
-            var expected = new List<object>
-            {
-                1L,
-                true,
-                element
-            };
-            CollectionAssert.AreEqual(expected, (ICollection)arguments);
-        }
-
-        [TestMethod]
-        public async Task MutatedElements()
-        {
-            driver.Url = "https://www.selenium.dev/selenium/web/dynamic.html";
-
-            var mutations = new List<IWebElement>();
-            using IJavaScriptEngine monitor = new JavaScriptEngine(driver);
-            monitor.DomMutated += (_, e) =>
-            {
-                var locator = By.CssSelector($"*[data-__webdriver_id='{e.AttributeData.TargetId}']");
-                mutations.Add(driver.FindElement(locator));
-            };
-
-            await monitor.StartEventMonitoring();
-            await monitor.EnableDomMutationMonitoring();
-
-            driver.FindElement(By.Id("reveal")).Click();
-            
-            new WebDriverWait(driver, TimeSpan.FromSeconds(5)).Until(_ => !mutations.IsNullOrEmpty());
-            await monitor.DisableDomMutationMonitoring();
-            monitor.StopEventMonitoring();
-
-            var revealed = driver.FindElement(By.Id("revealed")); 
-            Assert.AreEqual(revealed, mutations[0]);
-        }
-
-        [TestMethod]
-        public async Task ConsoleLogs()
-        {
-            driver.Url = "https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html";
-
-            using IJavaScriptEngine monitor = new JavaScriptEngine(driver);
-            var messages = new List<string>();
-            monitor.JavaScriptConsoleApiCalled += (_, e) =>
-            {
-                messages.Add(e.MessageContent);
-            };
-
-            await monitor.StartEventMonitoring();
-            driver.FindElement(By.Id("consoleLog")).Click();
-            driver.FindElement(By.Id("consoleError")).Click();
-            new WebDriverWait(driver, TimeSpan.FromSeconds(5)).Until(_ => messages.Count > 1);
-            monitor.StopEventMonitoring();
-
-            Assert.IsTrue(messages.Contains("Hello, world!"));
-            Assert.IsTrue(messages.Contains("I am console error"));
-        }
-        
-        [TestMethod]
-        public async Task JsErrors()
-        {
-            driver.Url = "https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html";
-
-            using IJavaScriptEngine monitor = new JavaScriptEngine(driver);
-            var messages = new List<string>();
-            monitor.JavaScriptExceptionThrown += (_, e) =>
-            {
-                messages.Add(e.Message);
-            };
-
-            await monitor.StartEventMonitoring();
-            driver.FindElement(By.Id("jsException")).Click();
-            new WebDriverWait(driver, TimeSpan.FromSeconds(5)).Until(_ => !messages.IsNullOrEmpty());
-            monitor.StopEventMonitoring();
-
-            Assert.IsTrue(messages.Contains("Uncaught"));
-        }
-        
         [TestMethod]
         public async Task RecordNetworkResponse()
         {
@@ -129,8 +48,8 @@ public async Task RecordNetworkResponse()
             {
                 contentType.Add(e.ResponseHeaders["content-type"]);
             };
-
             await networkInterceptor.StartMonitoring();
+
             driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/blank.html");
             await networkInterceptor.StopMonitoring();
 
@@ -149,11 +68,10 @@ public async Task TransformNetworkResponse()
                     Body = "Creamy, delicious cheese!"
                 }
             };
-
             INetwork networkInterceptor = driver.Manage().Network;
             networkInterceptor.AddResponseHandler(handler);
-
             await networkInterceptor.StartMonitoring();
+
             driver.Navigate().GoToUrl("https://www.selenium.dev");
             await networkInterceptor.StopMonitoring();
 
@@ -174,16 +92,60 @@ public async Task TransformNetworkRequest()
                     return request;
                 }
             };
-
             INetwork networkInterceptor = driver.Manage().Network;
             networkInterceptor.AddRequestHandler(handler);
-
             await networkInterceptor.StartMonitoring();
+
             driver.Url = "https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html";
             driver.FindElement(By.TagName("button")).Click();
             await networkInterceptor.StopMonitoring();
 
             Assert.AreEqual("two", driver.FindElement(By.Id("result")).Text);
         }
+
+        [TestMethod]
+        public async Task PerformanceMetrics()
+        {
+            driver.Url = "https://www.selenium.dev/selenium/web/frameset.html";
+
+            var session = ((IDevTools)driver).GetDevToolsSession();
+            var domains = session.GetVersionSpecificDomains<OpenQA.Selenium.DevTools.V137.DevToolsSessionDomains>();
+
+            await domains.Performance.Enable(new OpenQA.Selenium.DevTools.V137.Performance.EnableCommandSettings());
+            var metricsResponse =
+                await session.SendCommand<GetMetricsCommandSettings, GetMetricsCommandResponse>(
+                    new GetMetricsCommandSettings()
+                );
+
+            var metrics = metricsResponse.Metrics.ToDictionary(
+                dict => dict.Name,
+                dict => dict.Value
+            );
+
+            Assert.IsTrue(metrics["DevToolsCommandDuration"] > 0);
+            Assert.AreEqual(12, metrics["Frames"]);
+        }
+
+        [TestMethod]
+        public async Task SetCookie()
+        {
+            var session = ((IDevTools)driver).GetDevToolsSession();
+            var domains = session.GetVersionSpecificDomains<OpenQA.Selenium.DevTools.V137.DevToolsSessionDomains>();
+            await domains.Network.Enable(new OpenQA.Selenium.DevTools.V137.Network.EnableCommandSettings());
+
+            var cookieCommandSettings = new SetCookieCommandSettings
+            {
+                Name = "cheese",
+                Value = "gouda",
+                Domain = "www.selenium.dev",
+                Secure = true
+            };
+            await domains.Network.SetCookie(cookieCommandSettings);
+
+            driver.Url = "https://www.selenium.dev";
+            OpenQA.Selenium.Cookie cheese = driver.Manage().Cookies.GetCookieNamed("cheese");
+            Assert.AreEqual("gouda", cheese.Value);
+        }
+
     }
-}
\ No newline at end of file
+}
diff --git a/examples/dotnet/SeleniumDocs/BiDi/CDP/ScriptTest.cs b/examples/dotnet/SeleniumDocs/BiDi/CDP/ScriptTest.cs
new file mode 100644
index 000000000000..b3b92ee2cd35
--- /dev/null
+++ b/examples/dotnet/SeleniumDocs/BiDi/CDP/ScriptTest.cs
@@ -0,0 +1,58 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Microsoft.IdentityModel.Tokens;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using OpenQA.Selenium;
+using OpenQA.Selenium.Support.UI;
+
+namespace SeleniumDocs.BiDi.CDP
+{
+    [TestClass]
+    public class ScriptTest : BaseChromeTest
+    {
+        [TestMethod]
+        public async Task PinScript()
+        {
+            driver.Url = "https://www.selenium.dev/selenium/web/xhtmlTest.html";
+            var element = driver.FindElement(By.Id("id1"));
+
+            var key = await new JavaScriptEngine(driver).PinScript("return arguments;");
+            var arguments = ((WebDriver)driver).ExecuteScript(key, 1, true, element);
+
+            var expected = new List<object>
+            {
+                1L,
+                true,
+                element
+            };
+            CollectionAssert.AreEqual(expected, (ICollection)arguments);
+        }
+
+        [TestMethod]
+        public async Task MutatedElements()
+        {
+            driver.Url = "https://www.selenium.dev/selenium/web/dynamic.html";
+            var mutations = new List<IWebElement>();
+
+            using IJavaScriptEngine monitor = new JavaScriptEngine(driver);
+            monitor.DomMutated += (_, e) =>
+            {
+                var locator = By.CssSelector($"*[data-__webdriver_id='{e.AttributeData.TargetId}']");
+                mutations.Add(driver.FindElement(locator));
+            };
+            await monitor.StartEventMonitoring();
+            await monitor.EnableDomMutationMonitoring();
+
+            driver.FindElement(By.Id("reveal")).Click();
+            
+            new WebDriverWait(driver, TimeSpan.FromSeconds(5)).Until(_ => !mutations.IsNullOrEmpty());
+            await monitor.DisableDomMutationMonitoring();
+            monitor.StopEventMonitoring();
+
+            var revealed = driver.FindElement(By.Id("revealed")); 
+            Assert.AreEqual(revealed, mutations[0]);
+        }
+    }
+}
\ No newline at end of file
diff --git a/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpApiTest.cs b/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpApiTest.cs
deleted file mode 100644
index f02a25c4ad19..000000000000
--- a/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpApiTest.cs
+++ /dev/null
@@ -1,91 +0,0 @@
-using System;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-using OpenQA.Selenium;
-using OpenQA.Selenium.DevTools;
-using OpenQA.Selenium.DevTools.V118.Network;
-using OpenQA.Selenium.DevTools.V118.Performance;
-
-namespace SeleniumDocs.Bidirectional.ChromeDevtools
-{
-    [TestClass]
-    public class CdpApiTest : BaseTest
-    {
-        [TestInitialize]
-        public void Startup()
-        {
-            StartDriver("118");
-        }
-
-        [TestMethod]
-        public async Task SetCookie()
-        {
-            var session = ((IDevTools)driver).GetDevToolsSession();
-            var domains = session.GetVersionSpecificDomains<OpenQA.Selenium.DevTools.V118.DevToolsSessionDomains>();
-            await domains.Network.Enable(new OpenQA.Selenium.DevTools.V118.Network.EnableCommandSettings());
-
-            var cookieCommandSettings = new SetCookieCommandSettings
-            {
-                Name = "cheese",
-                Value = "gouda",
-                Domain = "www.selenium.dev",
-                Secure = true
-            };
-
-            await domains.Network.SetCookie(cookieCommandSettings);
-
-            driver.Url = "https://www.selenium.dev";
-            OpenQA.Selenium.Cookie cheese = driver.Manage().Cookies.GetCookieNamed("cheese");
-            Assert.AreEqual("gouda", cheese.Value);
-        }
-
-        [TestMethod]
-        public async Task PerformanceMetrics()
-        {
-            driver.Url = "https://www.selenium.dev/selenium/web/frameset.html";
-
-            var session = ((IDevTools)driver).GetDevToolsSession();
-            var domains = session.GetVersionSpecificDomains<OpenQA.Selenium.DevTools.V118.DevToolsSessionDomains>();
-            await domains.Performance.Enable(new OpenQA.Selenium.DevTools.V118.Performance.EnableCommandSettings());
-
-            var metricsResponse =
-                await session.SendCommand<GetMetricsCommandSettings, GetMetricsCommandResponse>(
-                    new GetMetricsCommandSettings()
-                );
-
-            var metrics = metricsResponse.Metrics.ToDictionary(
-                dict => dict.Name,
-                dict => dict.Value
-            );
-
-            Assert.IsTrue(metrics["DevToolsCommandDuration"] > 0);
-            Assert.AreEqual(12, metrics["Frames"]);
-        }
-
-        [TestMethod]
-        public async Task BasicAuth()
-        {
-            var session = ((IDevTools)driver).GetDevToolsSession();
-            var domains = session.GetVersionSpecificDomains<OpenQA.Selenium.DevTools.V118.DevToolsSessionDomains>();
-            await domains.Network.Enable(new OpenQA.Selenium.DevTools.V118.Network.EnableCommandSettings());
-
-            var encodedAuth = Convert.ToBase64String(Encoding.Default.GetBytes("admin:admin"));
-            var headerSettings = new SetExtraHTTPHeadersCommandSettings
-            {
-                Headers = new Headers()
-                {
-                    { "authorization", "Basic " + encodedAuth }
-                }
-            };
-
-            await domains.Network.SetExtraHTTPHeaders(headerSettings);
-
-            driver.Url = "https://the-internet.herokuapp.com/basic_auth";
-
-            var element = driver.FindElement(By.TagName("p"));
-            Assert.AreEqual("Congratulations! You must have the proper credentials.", element.Text);
-        }
-    }
-}
\ No newline at end of file
diff --git a/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpEndpointTest.cs b/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpEndpointTest.cs
deleted file mode 100644
index ff4c4d089c3c..000000000000
--- a/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpEndpointTest.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace SeleniumDocs.Bidirectional.ChromeDevtools
-{
-    [TestClass]
-    public class CdpEndpointTest : BaseTest
-    {
-        private readonly Dictionary<string, object> emptyDictionary = new(); 
-
-        [TestInitialize]
-        public void Startup()
-        {
-            StartDriver();
-        }        
-
-        [TestMethod]
-        public void SetCookie()
-        {
-            var cookie = new Dictionary<string, object>
-            {
-                { "name", "cheese" },
-                { "value", "gouda" },
-                { "domain", "www.selenium.dev" },
-                { "secure", true }
-            };
-
-            ((ChromeDriver)driver).ExecuteCdpCommand("Network.setCookie", cookie);
-            
-            driver.Url = "https://www.selenium.dev";
-            Cookie cheese = driver.Manage().Cookies.GetCookieNamed("cheese");
-            Assert.AreEqual("gouda", cheese.Value);
-
-        }
-        
-        [TestMethod]
-        public void PerformanceMetrics()
-        {
-            driver.Url = "https://www.selenium.dev/selenium/web/frameset.html";
-
-            ((ChromeDriver)driver).ExecuteCdpCommand("Performance.enable", emptyDictionary);
-
-            Dictionary<string, object> response = (Dictionary<string, object>)((ChromeDriver)driver)
-                .ExecuteCdpCommand("Performance.getMetrics", emptyDictionary);
-
-            Object[] metricList = (object[])response["metrics"];
-            var metrics = metricList.OfType<Dictionary<string, object>>()
-                .ToDictionary(
-                    dict => (string)dict["name"], 
-                    dict => dict["value"]
-                );
-
-            Assert.IsTrue((double)metrics["DevToolsCommandDuration"] > 0);
-            Assert.AreEqual((long)12, metrics["Frames"]);
-        }
-
-        [TestMethod]
-        public void BasicAuth()
-        {
-            ((ChromeDriver)driver).ExecuteCdpCommand("Network.enable", emptyDictionary);
-            
-            string encodedAuth = Convert.ToBase64String(Encoding.Default.GetBytes("admin:admin"));
-            var headers = new Dictionary<string, object>
-            {
-                { "headers", new Dictionary<string, string> { { "authorization", "Basic " + encodedAuth } } }
-            };
-
-            ((ChromeDriver)driver).ExecuteCdpCommand("Network.setExtraHTTPHeaders", headers);
-
-            driver.Url = "https://the-internet.herokuapp.com/basic_auth";
-
-            var element = driver.FindElement(By.TagName("p"));
-            Assert.AreEqual("Congratulations! You must have the proper credentials.", element.Text);
-        }
-    }
-}
\ No newline at end of file
diff --git a/examples/dotnet/SeleniumDocs/Bidirectional/WebDriverBiDi/BrowsingContextTest.cs b/examples/dotnet/SeleniumDocs/Bidirectional/WebDriverBiDi/BrowsingContextTest.cs
deleted file mode 100644
index 7de31af093f6..000000000000
--- a/examples/dotnet/SeleniumDocs/Bidirectional/WebDriverBiDi/BrowsingContextTest.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-
-namespace SeleniumDocs.Bidirectional.WebDriverBiDi
-{
-    [TestClass]
-    public class BrowsingContextTest : BaseTest
-    {
-
-    }
-}
\ No newline at end of file
diff --git a/examples/dotnet/SeleniumDocs/Bidirectional/WebDriverBiDi/LogTest.cs b/examples/dotnet/SeleniumDocs/Bidirectional/WebDriverBiDi/LogTest.cs
deleted file mode 100644
index 54e3f92884b2..000000000000
--- a/examples/dotnet/SeleniumDocs/Bidirectional/WebDriverBiDi/LogTest.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-
-namespace SeleniumDocs.Bidirectional.WebDriverBiDi
-{
-    [TestClass]
-    public class LogTest : BaseTest
-    {
-
-    }
-}
\ No newline at end of file
diff --git a/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs b/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs
index d25b7eb43533..3bd8cc32935d 100644
--- a/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs
+++ b/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs
@@ -5,6 +5,7 @@
 using Microsoft.VisualStudio.TestTools.UnitTesting;
 using OpenQA.Selenium;
 using OpenQA.Selenium.Chrome;
+using OpenQA.Selenium.Chromium;
 
 namespace SeleniumDocs.Browsers
 {
@@ -44,7 +45,12 @@ public void Arguments()
         [TestMethod]
         public void SetBrowserLocation()
         {
+            string userDataDir = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
+            Directory.CreateDirectory(userDataDir);
             var options = new ChromeOptions();
+            options.AddArgument($"--user-data-dir={userDataDir}");
+            options.AddArgument("--no-sandbox");
+            options.AddArgument("--disable-dev-shm-usage");
 
             options.BinaryLocation = GetChromeLocation();
 
@@ -59,6 +65,7 @@ public void InstallExtension()
             var extensionFilePath = Path.Combine(baseDir, "../../../Extensions/webextensions-selenium-example.crx");
 
             options.AddExtension(extensionFilePath);
+            options.AddArgument("--disable-features=DisableLoadExtensionCommandLineSwitch");
 
             driver = new ChromeDriver(options);
 
@@ -92,32 +99,12 @@ public void LogsToFile()
         }
 
         [TestMethod]
-        [Ignore("Not implemented")]
-        public void LogsToConsole()
-        {
-            var stringWriter = new StringWriter();
-            var originalOutput = Console.Out;
-            Console.SetOut(stringWriter);
-
-            var service = ChromeDriverService.CreateDefaultService();
-
-            //service.LogToConsole = true;
-
-            driver = new ChromeDriver(service);
-
-            Assert.IsTrue(stringWriter.ToString().Contains("Starting ChromeDriver"));
-            Console.SetOut(originalOutput);
-            stringWriter.Dispose();
-        }
-
-        [TestMethod]
-        [Ignore("Not implemented")]
         public void LogsLevel()
         {
             var service = ChromeDriverService.CreateDefaultService();
             service.LogPath = GetLogLocation();
 
-            // service.LogLevel = ChromiumDriverLogLevel.Debug 
+            service.LogLevel = ChromiumDriverLogLevel.Debug;
 
             driver = new ChromeDriver(service);
 
@@ -127,7 +114,6 @@ public void LogsLevel()
         }
 
         [TestMethod]
-        [Ignore("Not implemented")]
         public void ConfigureDriverLogs()
         {
             var service = ChromeDriverService.CreateDefaultService();
@@ -135,14 +121,14 @@ public void ConfigureDriverLogs()
             service.EnableVerboseLogging = true;
 
             service.EnableAppendLog = true;
-            // service.readableTimeStamp = true;
+            service.ReadableTimestamp = true;
 
             driver = new ChromeDriver(service);
 
             driver.Quit(); // Close the Service log file before reading
             var lines = File.ReadLines(GetLogLocation());
-            var regex = new Regex(@"\[\d\d-\d\d-\d\d\d\d");
-            Assert.IsNotNull(lines.FirstOrDefault(line => regex.Matches("").Count > 0));
+            var regex = new Regex(@"\[\d\d-\d\d-\d\d\d\d \d\d:\d\d:\d\d\.\d+\]");
+            Assert.IsNotNull(lines.FirstOrDefault(line => regex.Matches(line).Count > 0));
         }
 
         [TestMethod]
@@ -163,7 +149,7 @@ public void DisableBuildCheck()
 
         private string GetLogLocation()
         {
-            if (_logLocation == null || !File.Exists(_logLocation))
+            if (string.IsNullOrEmpty(_logLocation) && !File.Exists(_logLocation))
             {
                 _logLocation = Path.GetTempFileName();
             }
@@ -177,8 +163,7 @@ private static string GetChromeLocation()
             {
                 BrowserVersion = "stable"
             };
-            DriverFinder.FullPath(options);
-            return options.BinaryLocation;
+            return new DriverFinder(options).GetBrowserPath();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs b/examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs
index 7e1c1a1bd223..7eb9a7145b3c 100644
--- a/examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs
+++ b/examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs
@@ -4,6 +4,7 @@
 using System.Text.RegularExpressions;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
 using OpenQA.Selenium;
+using OpenQA.Selenium.Chromium;
 using OpenQA.Selenium.Edge;
 
 namespace SeleniumDocs.Browsers
@@ -92,32 +93,12 @@ public void LogsToFile()
         }
 
         [TestMethod]
-        [Ignore("Not implemented")]
-        public void LogsToConsole()
-        {
-            var stringWriter = new StringWriter();
-            var originalOutput = Console.Out;
-            Console.SetOut(stringWriter);
-
-            var service = EdgeDriverService.CreateDefaultService();
-
-            //service.LogToConsole = true;
-
-            driver = new EdgeDriver(service);
-
-            Assert.IsTrue(stringWriter.ToString().Contains("Starting Microsoft Edge WebDriver"));
-            Console.SetOut(originalOutput);
-            stringWriter.Dispose();
-        }
-
-        [TestMethod]
-        [Ignore("Not implemented")]
         public void LogsLevel()
         {
             var service = EdgeDriverService.CreateDefaultService();
             service.LogPath = GetLogLocation();
 
-            // service.LogLevel = ChromiumDriverLogLevel.Debug 
+            service.LogLevel = ChromiumDriverLogLevel.Debug; 
 
             driver = new EdgeDriver(service);
 
@@ -127,7 +108,6 @@ public void LogsLevel()
         }
 
         [TestMethod]
-        [Ignore("Not implemented")]
         public void ConfigureDriverLogs()
         {
             var service = EdgeDriverService.CreateDefaultService();
@@ -135,14 +115,14 @@ public void ConfigureDriverLogs()
             service.EnableVerboseLogging = true;
 
             service.EnableAppendLog = true;
-            // service.readableTimeStamp = true;
+            service.ReadableTimestamp = true;
 
             driver = new EdgeDriver(service);
 
             driver.Quit(); // Close the Service log file before reading
             var lines = File.ReadLines(GetLogLocation());
-            var regex = new Regex(@"\[\d\d-\d\d-\d\d\d\d");
-            Assert.IsNotNull(lines.FirstOrDefault(line => regex.Matches("").Count > 0));
+            var regex = new Regex(@"\[\d\d-\d\d-\d\d\d\d \d\d:\d\d:\d\d\.\d+\]");
+            Assert.IsNotNull(lines.FirstOrDefault(line => regex.Matches(line).Count > 0));
         }
 
         [TestMethod]
@@ -163,7 +143,7 @@ public void DisableBuildCheck()
         
         private string GetLogLocation()
         {
-            if (_logLocation == null || !File.Exists(_logLocation))
+            if (string.IsNullOrEmpty(_logLocation) && !File.Exists(_logLocation))
             {
                 _logLocation = Path.GetTempFileName();
             }
@@ -177,8 +157,7 @@ private static string GetEdgeLocation()
             {
                 BrowserVersion = "stable"
             };
-            DriverFinder.FullPath(options);
-            return options.BinaryLocation;
+            return new DriverFinder(options).GetBrowserPath();
         }
     }
 }
\ No newline at end of file
diff --git a/examples/dotnet/SeleniumDocs/Browsers/FirefoxTest.cs b/examples/dotnet/SeleniumDocs/Browsers/FirefoxTest.cs
index bb23656a3fb7..cc017217f410 100644
--- a/examples/dotnet/SeleniumDocs/Browsers/FirefoxTest.cs
+++ b/examples/dotnet/SeleniumDocs/Browsers/FirefoxTest.cs
@@ -1,9 +1,11 @@
 using System;
+using System.Collections.Generic;
 using System.IO;
 using System.Linq;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
 using OpenQA.Selenium;
 using OpenQA.Selenium.Firefox;
+using OpenQA.Selenium.Internal.Logging;
 
 namespace SeleniumDocs.Browsers
 {
@@ -17,7 +19,7 @@ public class FirefoxTest
         [TestCleanup]
         public void Cleanup()
         {
-            if (_logLocation != null && File.Exists(_logLocation))
+            if (!String.IsNullOrEmpty(_logLocation) && File.Exists(_logLocation))
             {
                 File.Delete(_logLocation);
             }
@@ -56,75 +58,75 @@ public void SetBinary()
         }
 
         [TestMethod]
-        [Ignore("Not implemented")]
         public void LogsToFile()
         {
             var service = FirefoxDriverService.CreateDefaultService();
-            //service.LogFile = _logLocation
+            service.LogPath = GetLogLocation();
 
             driver = new FirefoxDriver(service);
+            driver.Quit(); // Close the Service log file before reading
             var lines = File.ReadLines(GetLogLocation());
             Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains("geckodriver	INFO	Listening on")));
         }
 
         [TestMethod]
-        [Ignore("Not implemented")]
         public void LogsToConsole()
         {
-            var stringWriter = new StringWriter();
-            var originalOutput = Console.Out;
-            Console.SetOut(stringWriter);
-
-            var service = FirefoxDriverService.CreateDefaultService();
-            //service.LogToConsole = true;
-
-            driver = new FirefoxDriver(service);
-            Assert.IsTrue(stringWriter.ToString().Contains("geckodriver	INFO	Listening on"));
-            Console.SetOut(originalOutput);
-            stringWriter.Dispose();
+            TestLogHandler testLogHandler = new TestLogHandler();
+            ResetGlobalLog();
+            try
+            {
+                Log.SetLevel(LogEventLevel.Trace).Handlers.Add(testLogHandler);
+                var service = FirefoxDriverService.CreateDefaultService();
+                driver = new FirefoxDriver(service);
+                Assert.IsTrue(testLogHandler.Events.Count >= 1);
+                Assert.IsTrue(testLogHandler.Events.Any(e => e.Message.Contains("geckodriver")));
+            }
+            finally
+            {
+                ResetGlobalLog();
+            }
         }
 
         [TestMethod]
-        [Ignore("You can set it, just can't see it")]
         public void LogsLevel()
         {
             var service = FirefoxDriverService.CreateDefaultService();
-            //service.LogFile = _logLocation
-
+            service.LogPath = GetLogLocation();
             service.LogLevel = FirefoxDriverLogLevel.Debug;
 
             driver = new FirefoxDriver(service);
+            driver.Quit(); // Close the Service log file before reading
             var lines = File.ReadLines(GetLogLocation());
             Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains("Marionette\tDEBUG")));
         }
 
         [TestMethod]
-        [Ignore("Not implemented")]
         public void StopsTruncatingLogs()
         {
             var service = FirefoxDriverService.CreateDefaultService();
-            //service.TruncateLogs = false;
+            service.LogTruncate = false;
 
             service.LogLevel = FirefoxDriverLogLevel.Debug;
 
             driver = new FirefoxDriver(service);
+            driver.Quit(); // Close the Service log file before reading
             var lines = File.ReadLines(GetLogLocation());
             Assert.IsNull(lines.FirstOrDefault(line => line.Contains(" ... ")));
         }
 
         [TestMethod]
-        [Ignore("Not implemented")]
         public void SetProfileLocation()
         {
             var service = FirefoxDriverService.CreateDefaultService();
-            // service.ProfileRoot = GetTempDirectory();
+            service.ProfileRoot = GetTempDirectory();
 
             driver = new FirefoxDriver(service);
 
             string profile = (string)driver.Capabilities.GetCapability("moz:profile");
             string[] directories = profile.Split("/");
             var dirName = directories.Last();
-            Assert.AreEqual(GetTempDirectory() + "/" + dirName, profile);
+            Assert.AreEqual(GetTempDirectory() + dirName, profile);
         }
 
         [TestMethod]
@@ -171,7 +173,7 @@ public void InstallUnsignedAddon()
         
         private string GetLogLocation()
         {
-            if (_logLocation != null && !File.Exists(_logLocation))
+            if (string.IsNullOrEmpty(_logLocation) && !File.Exists(_logLocation))
             {
                 _logLocation = Path.GetTempFileName();
             }
@@ -181,7 +183,7 @@ private string GetLogLocation()
 
         private string GetTempDirectory()
         {
-            if (_tempPath != null && !File.Exists(_tempPath))
+            if (string.IsNullOrEmpty(_tempPath) && !File.Exists(_tempPath))
             {
                 _tempPath = Path.GetTempPath();
             }
@@ -201,8 +203,28 @@ private static string GetFirefoxLocation()
             {
                 BrowserVersion = "stable"
             };
-            DriverFinder.FullPath(options);
-            return options.BinaryLocation;
+            return new DriverFinder(options).GetBrowserPath();
+        }
+
+        private void ResetGlobalLog()
+        {
+            Log.SetLevel(LogEventLevel.Info);
+            Log.Handlers.Clear().Handlers.Add(new TextWriterHandler(Console.Error));
         }
     }
+}
+
+class TestLogHandler : ILogHandler
+{
+    public ILogHandler Clone()
+    {
+        return this;
+    }
+
+    public void Handle(LogEvent logEvent)
+    {
+        Events.Add(logEvent);
+    }
+
+    public IList<LogEvent> Events { get; internal set; } = new List<LogEvent>();
 }
\ No newline at end of file
diff --git a/examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs b/examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs
index 7a336f07fb48..6702a3932c0e 100644
--- a/examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs
+++ b/examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs
@@ -11,7 +11,7 @@ namespace SeleniumDocs.Browsers
     [EnabledOnOs("WINDOWS")]
     public class InternetExplorerTest
     {
-        private InternetExplorerDriver driver;
+        private InternetExplorerDriver _driver;
         private string _logLocation;
         private string _tempPath;
 
@@ -26,7 +26,7 @@ public void Cleanup()
             {
                 File.Delete(_tempPath);
             }
-            driver.Quit();
+            _driver.Quit();
         }
 
         [TestMethod]
@@ -35,45 +35,14 @@ public void BasicOptionsWin10()
             var options = new InternetExplorerOptions();
             options.AttachToEdgeChrome = true;
             options.EdgeExecutablePath = GetEdgeLocation();
-            driver = new InternetExplorerDriver(options);
+            _driver = new InternetExplorerDriver(options);
         }
 
         [TestMethod]
         public void BasicOptionsWin11()
         {
             var options = new InternetExplorerOptions();
-            driver = new InternetExplorerDriver(options);
-        }
-
-        [TestMethod]
-        [Ignore("Not implemented")]
-        public void LogsToFile()
-        {
-            var service = InternetExplorerDriverService.CreateDefaultService();
-            service.LogFile = GetLogLocation();
-
-            driver = new InternetExplorerDriver(service);
-            driver.Quit(); // Close the Service log file before reading
-            var lines = File.ReadLines(GetLogLocation());
-            Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains("geckodriver	INFO	Listening on")));
-        }
-
-        [TestMethod]
-        [Ignore("Not implemented")]
-        public void LogsToConsole()
-        {
-            var stringWriter = new StringWriter();
-            var originalOutput = Console.Out;
-            Console.SetOut(stringWriter);
-
-            var service = InternetExplorerDriverService.CreateDefaultService();
-
-            //service.LogToConsole = true;
-
-            driver = new InternetExplorerDriver(service);
-            Assert.IsTrue(stringWriter.ToString().Contains("geckodriver	INFO	Listening on"));
-            Console.SetOut(originalOutput);
-            stringWriter.Dispose();
+            _driver = new InternetExplorerDriver(options);
         }
 
         [TestMethod]
@@ -84,8 +53,8 @@ public void LogsLevel()
 
             service.LoggingLevel = InternetExplorerDriverLogLevel.Warn;
 
-            driver = new InternetExplorerDriver(service);
-            driver.Quit(); // Close the Service log file before reading
+            _driver = new InternetExplorerDriver(service);
+            _driver.Quit(); // Close the Service log file before reading
             var lines = File.ReadLines(GetLogLocation());
             Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains("Invalid capability setting: timeouts is type null")));
         }
@@ -97,7 +66,7 @@ public void SupportingFilesLocation()
 
             service.LibraryExtractionPath = GetTempDirectory();
 
-            driver = new InternetExplorerDriver(service);
+            _driver = new InternetExplorerDriver(service);
             Assert.IsTrue(File.Exists(GetTempDirectory() + "/IEDriver.tmp"));
         }
 
diff --git a/examples/dotnet/SeleniumDocs/Browsers/SafariTest.cs b/examples/dotnet/SeleniumDocs/Browsers/SafariTest.cs
index d7b462192e3a..0d6dede2c848 100644
--- a/examples/dotnet/SeleniumDocs/Browsers/SafariTest.cs
+++ b/examples/dotnet/SeleniumDocs/Browsers/SafariTest.cs
@@ -22,16 +22,5 @@ public void BasicOptions()
             var options = new SafariOptions();
             driver = new SafariDriver(options);
         }
-
-        [TestMethod]
-        [Ignore("Not implemented")]
-        public void EnableLogs()
-        {
-            var service = SafariDriverService.CreateDefaultService();
-
-            //service.EnableLogging = true;
-
-            driver = new SafariDriver(service);
-        }
     }
 }
\ No newline at end of file
diff --git a/examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs b/examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs
index 1a387cb13ba6..618e5361ecce 100644
--- a/examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs
+++ b/examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs
@@ -1,9 +1,57 @@
 using Microsoft.VisualStudio.TestTools.UnitTesting;
+using OpenQA.Selenium;
+using OpenQA.Selenium.Chrome;
 
 namespace SeleniumDocs.Drivers
 {
     [TestClass]
     public class OptionsTest : BaseTest
     {
+        [TestMethod]
+        public void SetPageLoadStrategyNormal()
+        {
+            ChromeOptions chromeOptions = new ChromeOptions();
+            chromeOptions.PageLoadStrategy = PageLoadStrategy.Normal;
+            IWebDriver driver = new ChromeDriver(chromeOptions);
+            try
+            {
+                // Navigate to Url
+                driver.Navigate().GoToUrl("https://selenium.dev");
+            }
+            finally
+            {
+                driver.Quit();
+            }
+        }
+        [TestMethod]
+        public void SetPageLoadStrategyEager()
+        {
+            var chromeOptions = new ChromeOptions();
+            chromeOptions.PageLoadStrategy = PageLoadStrategy.Eager;
+            IWebDriver driver = new ChromeDriver(chromeOptions);
+            try
+            {
+                driver.Navigate().GoToUrl("https://selenium.dev");
+            }
+            finally
+            {
+                driver.Quit();
+            }
+        }
+        [TestMethod]
+        public void SetPageLoadStrategyNone()
+        {
+            var chromeOptions = new ChromeOptions();
+            chromeOptions.PageLoadStrategy = PageLoadStrategy.None;
+            IWebDriver driver = new ChromeDriver(chromeOptions);
+            try
+            {
+                driver.Navigate().GoToUrl("https://selenium.dev");
+            }
+            finally
+            {
+                driver.Quit();
+            }
+        }
     }
 }
\ No newline at end of file
diff --git a/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs b/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs
index 8f1464e1bd6a..0b2675c03e2f 100644
--- a/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs
+++ b/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs
@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using System.IO;
+using System.Linq;
 using System.Threading.Tasks;
 using Microsoft.IdentityModel.Tokens;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
@@ -59,19 +60,20 @@ public void Downloads()
             {
                 EnableDownloads = true
             };
+
             driver = new RemoteWebDriver(GridUrl, options);
 
             driver.Url = "https://selenium.dev/selenium/web/downloads/download.html";
             driver.FindElement(By.Id("file-1")).Click();
             driver.FindElement(By.Id("file-2")).Click();
-            WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(3));
+            WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
             wait.Until(d => ((RemoteWebDriver)d).GetDownloadableFiles().Contains("file_2.jpg"));
 
-            List<string> names = ((RemoteWebDriver)driver).GetDownloadableFiles();
+            IReadOnlyList<string> names = ((RemoteWebDriver)driver).GetDownloadableFiles();
 
             Assert.IsTrue(names.Contains("file_1.txt"));
             Assert.IsTrue(names.Contains("file_2.jpg"));
-            string downloadableFile = names[0];
+            string downloadableFile = names.First(f => f == "file_1.txt");
             string targetDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
 
             ((RemoteWebDriver)driver).DownloadFile(downloadableFile, targetDirectory);
diff --git a/examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs b/examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs
index f62a8b595737..4aad3970c97b 100644
--- a/examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs
+++ b/examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs
@@ -1,10 +1,7 @@
-using System;
-using System.IO;
-using System.Linq;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
 using OpenQA.Selenium;
 using OpenQA.Selenium.Chrome;
-using OpenQA.Selenium.Firefox;
+using SeleniumDocs.TestSupport;
 
 namespace SeleniumDocs.Drivers
 {
@@ -18,7 +15,8 @@ public void BasicService()
             driver = new ChromeDriver(service);
         }
 
-        [TestMethod]
+        [TestMethodCustom]
+        [EnabledOnOs("OSX")]
         public void DriverLocation()
         {
             var options = GetLatestChromeOptions();
@@ -38,7 +36,7 @@ public void DriverPort()
         
         private static string GetDriverLocation(ChromeOptions options)
         {
-            return DriverFinder.FullPath(options);
+            return new DriverFinder(options).GetDriverPath();
         }
 
         private static ChromeOptions GetLatestChromeOptions()
diff --git a/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs b/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs
index f113bce99fee..07cc1149d2c8 100644
--- a/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs
+++ b/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs
@@ -1,9 +1,69 @@
+using System;
+using System.Drawing;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
+using OpenQA.Selenium;
+using OpenQA.Selenium.Chrome;
+
 
 namespace SeleniumDocs.Elements
 {
     [TestClass]
-    public class InformationTest : BaseTest
+    public class InformationTest 
     {
+        [TestMethod]
+        public void TestInformationCommands(){
+            WebDriver driver = new ChromeDriver();
+            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
+
+            // Navigate to Url
+            driver.Url= "https://www.selenium.dev/selenium/web/inputs.html";
+            // isDisplayed        
+            // Get boolean value for is element display
+            bool isEmailVisible = driver.FindElement(By.Name("email_input")).Displayed;
+            Assert.AreEqual(isEmailVisible, true);
+
+            // isEnabled
+            // returns true if element is enabled else returns false
+            bool isEnabledButton = driver.FindElement(By.Name("button_input")).Enabled;
+            Assert.AreEqual(isEnabledButton, true);
+
+            // isSelected
+            // returns true if element is checked else returns false
+            bool isSelectedCheck = driver.FindElement(By.Name("checkbox_input")).Selected;
+            Assert.AreEqual(isSelectedCheck, true);
+
+            // TagName
+            // returns TagName of the element
+            string tagNameInp = driver.FindElement(By.Name("email_input")).TagName;
+            Assert.AreEqual(tagNameInp, "input");
+
+            // Get Location and Size
+            // Get Location
+            IWebElement rangeElement = driver.FindElement(By.Name("range_input"));
+            Point point = rangeElement.Location;
+            Assert.IsNotNull(point.X);
+            // Get Size
+            int height=rangeElement.Size.Height;
+            Assert.IsNotNull(height);
+
+            // Retrieves the computed style property 'font-size' of field
+            string cssValue = driver.FindElement(By.Name("color_input")).GetCssValue("font-size");
+            Assert.AreEqual(cssValue, "13.3333px");
+
+            // GetText
+            // Retrieves the text of the element
+            string text = driver.FindElement(By.TagName("h1")).Text;
+            Assert.AreEqual(text, "Testing Inputs");
+
+            // FetchAttributes
+            // identify the email text box
+            IWebElement emailTxt = driver.FindElement(By.Name("email_input"));
+            // fetch the value property associated with the textbox
+            string valueInfo = emailTxt.GetAttribute("value");
+            Assert.AreEqual(valueInfo, "admin@localhost");
+            
+            //Quit the driver
+            driver.Quit();
+        }
     }
 }
\ No newline at end of file
diff --git a/examples/dotnet/SeleniumDocs/Elements/InteractionTest.cs b/examples/dotnet/SeleniumDocs/Elements/InteractionTest.cs
index 16ba341a1b90..e20b94b46929 100644
--- a/examples/dotnet/SeleniumDocs/Elements/InteractionTest.cs
+++ b/examples/dotnet/SeleniumDocs/Elements/InteractionTest.cs
@@ -1,9 +1,52 @@
+using System;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
+using OpenQA.Selenium;
+using OpenQA.Selenium.Chrome;
 
 namespace SeleniumDocs.Elements
 {
     [TestClass]
-    public class InteractionTest : BaseTest
+    public class InteractionTest
     {
+        [TestMethod]
+        public void TestInteractionCommands()
+        {
+            IWebDriver driver = new ChromeDriver();
+            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
+
+            // Navigate to Url
+            driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
+            // Click on the element 
+            IWebElement checkInput = driver.FindElement(By.Name("checkbox_input"));
+            checkInput.Click();
+
+            //Verify
+            Boolean isChecked = checkInput.Selected;
+            Assert.AreEqual(isChecked, false);
+
+            //SendKeys
+            // Clear field to empty it from any previous data
+            IWebElement emailInput = driver.FindElement(By.Name("email_input"));
+            emailInput.Clear();
+            //Enter Text
+            String email = "admin@localhost.dev";
+            emailInput.SendKeys(email);
+
+            //Verify
+            String data = emailInput.GetAttribute("value");
+            Assert.AreEqual(data, email);
+
+
+            //Clear Element
+            // Clear field to empty it from any previous data
+            emailInput.Clear();
+            data = emailInput.GetAttribute("value");
+            
+            //Verify
+            Assert.AreEqual(data, "");
+
+            //Quit the browser
+            driver.Quit();
+        }
     }
 }
\ No newline at end of file
diff --git a/examples/dotnet/SeleniumDocs/Extensions/webextensions-selenium-example.crx b/examples/dotnet/SeleniumDocs/Extensions/webextensions-selenium-example.crx
index 38b38003b7ec..941114eb446e 100644
Binary files a/examples/dotnet/SeleniumDocs/Extensions/webextensions-selenium-example.crx and b/examples/dotnet/SeleniumDocs/Extensions/webextensions-selenium-example.crx differ
diff --git a/examples/dotnet/SeleniumDocs/Extensions/webextensions-selenium-example.xpi b/examples/dotnet/SeleniumDocs/Extensions/webextensions-selenium-example.xpi
index 34b0ae3913f7..dca8e2e12312 100644
Binary files a/examples/dotnet/SeleniumDocs/Extensions/webextensions-selenium-example.xpi and b/examples/dotnet/SeleniumDocs/Extensions/webextensions-selenium-example.xpi differ
diff --git a/examples/dotnet/SeleniumDocs/Extensions/webextensions-selenium-example/manifest.json b/examples/dotnet/SeleniumDocs/Extensions/webextensions-selenium-example/manifest.json
index e938974a20b1..a8b4fec6e60f 100644
--- a/examples/dotnet/SeleniumDocs/Extensions/webextensions-selenium-example/manifest.json
+++ b/examples/dotnet/SeleniumDocs/Extensions/webextensions-selenium-example/manifest.json
@@ -1,17 +1,22 @@
 {
-  "manifest_version": 2,
+  "manifest_version": 3,
   "name": "webextensions-selenium-example",
-  "description": "Inject a div with id webextensions-selenium-example to verify that WebExtensions work in Firefox/Selenium" ,
+  "description": "Inject a div with id webextensions-selenium-example to verify that WebExtensions work in Firefox/Selenium",
   "version": "0.1",
   "content_scripts": [
     {
-      "matches": ["https://*/*","http://*/*"],
-      "js": ["inject.js"]
+      "matches": [
+        "https://*/*",
+        "http://*/*"
+      ],
+      "js": [
+        "inject.js"
+      ]
     }
   ],
-  "applications": {
-   "gecko": {
-     "id": "webextensions-selenium-example@example.com"
-   }
- }
-}
+  "browser_specific_settings": {
+    "gecko": {
+      "id": "webextensions-selenium-example-v3@example.com"
+    }
+  }
+}
\ No newline at end of file
diff --git a/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs b/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs
index b5247b3a90c1..4e6975c5a04b 100644
--- a/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs
+++ b/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs
@@ -1,9 +1,101 @@
+// Licensed to the Software Freedom Conservancy (SFC) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The SFC licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using System;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
+using OpenQA.Selenium;
+using OpenQA.Selenium.Chrome;
+
+namespace SeleniumDocs.Interactions{
+
+[TestClass]
+public class CookiesTest{
+     
+    WebDriver driver = new ChromeDriver();
+
+     [TestMethod]
+      public void addCookie(){
+         driver.Url="https://www.selenium.dev/selenium/web/blank.html";
+         // Add cookie into current browser context
+         driver.Manage().Cookies.AddCookie(new Cookie("key", "value"));
+         driver.Quit();
+     }
+     
+     [TestMethod]
+     public void getNamedCookie(){  
+         driver.Url = "https://www.selenium.dev/selenium/web/blank.html";
+         // Add cookie into current browser context
+         driver.Manage().Cookies.AddCookie(new Cookie("foo", "bar"));
+         // Get cookie details with named cookie 'foo'
+         Cookie cookie = driver.Manage().Cookies.GetCookieNamed("foo");
+         Assert.AreEqual(cookie.Value, "bar");
+         driver.Quit();
+     }
+
+     [TestMethod]
+     public void getAllCookies(){
+         driver.Url = "https://www.selenium.dev/selenium/web/blank.html";
+         // Add cookies into current browser context
+         driver.Manage().Cookies.AddCookie(new Cookie("test1", "cookie1"));
+         driver.Manage().Cookies.AddCookie(new Cookie("test2", "cookie2"));
+         // Get cookies
+         var cookies = driver.Manage().Cookies.AllCookies;
+         foreach (var cookie in cookies){
+             if (cookie.Name.Equals("test1")){
+                 Assert.AreEqual("cookie1", cookie.Value);
+             }
+             if (cookie.Name.Equals("test2")){
+                 Assert.AreEqual("cookie2", cookie.Value);
+             }
+         }
+         driver.Quit();
+     }
+     
+     [TestMethod]
+     public void deleteCookieNamed(){
+         driver.Url = "https://www.selenium.dev/selenium/web/blank.html";
+         driver.Manage().Cookies.AddCookie(new Cookie("test1", "cookie1"));
+         // delete cookie named
+         driver.Manage().Cookies.DeleteCookieNamed("test1");
+         driver.Quit();
+     }
 
-namespace SeleniumDocs.Interactions
-{
-    [TestClass]
-    public class CookiesTest : BaseTest
-    {
+     [TestMethod]
+     public void deleteCookieObject(){
+         driver.Url = "https://www.selenium.dev/selenium/web/blank.html";
+         Cookie cookie = new Cookie("test2", "cookie2");
+         driver.Manage().Cookies.AddCookie(cookie);
+         /*
+      Selenium CSharp bindings also provides a way to delete
+      cookie by passing cookie object of current browsing context
+      */
+         driver.Manage().Cookies.DeleteCookie(cookie);
+         driver.Quit();
+     }
+     
+     [TestMethod]
+     public void deleteAllCookies(){
+         driver.Url = "https://www.selenium.dev/selenium/web/blank.html";
+         // Add cookies into current browser context
+         driver.Manage().Cookies.AddCookie(new Cookie("test1", "cookie1"));
+         driver.Manage().Cookies.AddCookie(new Cookie("test2", "cookie2"));
+         // Delete All cookies
+         driver.Manage().Cookies.DeleteAllCookies();
+         driver.Quit();
+     }
     }
 }
\ No newline at end of file
diff --git a/examples/dotnet/SeleniumDocs/Interactions/FramesTest.cs b/examples/dotnet/SeleniumDocs/Interactions/FramesTest.cs
index f2ab19af117d..4a0daa471c5a 100644
--- a/examples/dotnet/SeleniumDocs/Interactions/FramesTest.cs
+++ b/examples/dotnet/SeleniumDocs/Interactions/FramesTest.cs
@@ -1,9 +1,74 @@
+// Licensed to the Software Freedom Conservancy (SFC) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The SFC licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+
+using System;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
+using OpenQA.Selenium;
+using OpenQA.Selenium.Chrome;
+using System.Collections.Generic;
 
 namespace SeleniumDocs.Interactions
 {
-    [TestClass]
-    public class FramesTest : BaseTest
+  [TestClass]
+    public class FramesTest
     {
+        [TestMethod]
+        public void TestFrames()
+        {
+            WebDriver driver = new ChromeDriver();
+            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
+
+            // Navigate to Url
+            driver.Url= "https://www.selenium.dev/selenium/web/iframes.html";
+            //switch To IFrame using Web Element
+            IWebElement iframe = driver.FindElement(By.Id("iframe1"));
+            //Switch to the frame
+            driver.SwitchTo().Frame(iframe);
+            Assert.AreEqual(true, driver.PageSource.Contains("We Leave From Here"));
+            //Now we can type text into email field
+            IWebElement emailE = driver.FindElement(By.Id("email"));
+            emailE.SendKeys("admin@selenium.dev");
+            emailE.Clear();
+            driver.SwitchTo().DefaultContent();
+
+
+            //switch To IFrame using name or id
+            IWebElement iframe1=driver.FindElement(By.Name("iframe1-name"));
+            //Switch to the frame
+            driver.SwitchTo().Frame(iframe1);
+            Assert.AreEqual(true, driver.PageSource.Contains("We Leave From Here"));
+            IWebElement email = driver.FindElement(By.Id("email"));
+            //Now we can type text into email field
+            email.SendKeys("admin@selenium.dev");
+            email.Clear();
+            driver.SwitchTo().DefaultContent();
+
+
+            //switch To IFrame using index
+            driver.SwitchTo().Frame(0);
+            Assert.AreEqual(true, driver.PageSource.Contains("We Leave From Here"));
+
+            //leave frame
+            driver.SwitchTo().DefaultContent();
+            Assert.AreEqual(true, driver.PageSource.Contains("This page has iframes"));
+
+            //quit the browser
+            driver.Quit();
+        }
     }
 }
\ No newline at end of file
diff --git a/examples/dotnet/SeleniumDocs/Interactions/InteractionsTest.cs b/examples/dotnet/SeleniumDocs/Interactions/InteractionsTest.cs
new file mode 100644
index 000000000000..bc20acb09f08
--- /dev/null
+++ b/examples/dotnet/SeleniumDocs/Interactions/InteractionsTest.cs
@@ -0,0 +1,48 @@
+// Licensed to the Software Freedom Conservancy (SFC) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The SFC licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+
+using System;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using OpenQA.Selenium;
+using OpenQA.Selenium.Chrome;
+namespace SeleniumDocumentation.SeleniumInteractions
+{
+    [TestClass]
+    public class InteractionsTest
+    {
+        [TestMethod]
+        public void TestInteractions()
+        {
+            WebDriver driver = new ChromeDriver();
+            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
+
+            // Navigate to Url
+            driver.Url="https://www.selenium.dev/";
+            //GetTitle
+            String title = driver.Title;
+            Assert.AreEqual(title, "Selenium");
+
+            //GetCurrentURL
+            String url = driver.Url;
+            Assert.AreEqual(url, "https://www.selenium.dev/");
+
+            //quitting driver
+            driver.Quit(); //close all windows
+        }
+    }
+}
\ No newline at end of file
diff --git a/examples/dotnet/SeleniumDocs/Interactions/NavigationTest.cs b/examples/dotnet/SeleniumDocs/Interactions/NavigationTest.cs
index e3e190452d61..9b2ce323eba6 100644
--- a/examples/dotnet/SeleniumDocs/Interactions/NavigationTest.cs
+++ b/examples/dotnet/SeleniumDocs/Interactions/NavigationTest.cs
@@ -1,9 +1,43 @@
+using System;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
+using OpenQA.Selenium;
+using OpenQA.Selenium.Chrome;
 
-namespace SeleniumDocs.Interactions
+namespace SeleniumDocumentation.SeleniumInteractions
 {
     [TestClass]
-    public class NavigationTest : BaseTest
+    public class NavigationTest
     {
+        [TestMethod]
+        public void TestNavigationCommands()
+        {
+            IWebDriver driver = new ChromeDriver();
+            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
+
+            //Convenient
+            driver.Url = "https://selenium.dev";
+            //Longer
+            driver.Navigate().GoToUrl("https://selenium.dev");
+            var title = driver.Title;
+            Assert.AreEqual("Selenium", title);
+
+            //Back
+            driver.Navigate().Back();
+            title = driver.Title;
+            Assert.AreEqual("Selenium", title);
+
+            //Forward
+            driver.Navigate().Forward();
+            title = driver.Title;
+            Assert.AreEqual("Selenium", title);
+
+            //Refresh
+            driver.Navigate().Refresh();
+            title = driver.Title;
+            Assert.AreEqual("Selenium", title);
+
+            //Quit the browser
+            driver.Quit();
+        }
     }
-}
\ No newline at end of file
+}
diff --git a/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs b/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs
new file mode 100644
index 000000000000..2229d2378f71
--- /dev/null
+++ b/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs
@@ -0,0 +1,98 @@
+using System;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using OpenQA.Selenium;
+using OpenQA.Selenium.Chrome;
+
+namespace SeleniumDocumentation.SeleniumInteractions
+{
+    [TestClass]
+    public class PrintOptionsTest
+    {
+        [TestMethod]
+        public void TestOrientation()
+        {
+            IWebDriver driver = new ChromeDriver();
+            driver.Navigate().GoToUrl("https://selenium.dev");
+            PrintOptions printOptions  = new PrintOptions();
+            printOptions.Orientation = PrintOrientation.Landscape;
+            PrintOrientation currentOrientation = printOptions.Orientation;
+            driver.Quit();
+        }
+
+        [TestMethod]
+        public void TestRange()
+        {
+            IWebDriver driver = new ChromeDriver();
+            driver.Navigate().GoToUrl("https://selenium.dev");
+            PrintOptions printOptions  = new PrintOptions();
+            printOptions.AddPageRangeToPrint("1-3"); // add range of pages
+            printOptions.AddPageToPrint(5); // add individual page
+            driver.Quit();
+        }
+
+        [TestMethod]
+        public void TestSize()
+        {
+            IWebDriver driver = new ChromeDriver();
+            driver.Navigate().GoToUrl("https://www.selenium.dev/");
+            PrintOptions printOptions = new PrintOptions();
+            PrintOptions.PageSize currentDimensions = printOptions.PageDimensions;
+            driver.Quit();
+        }
+
+        [TestMethod]
+        public void TestBackgrounds()
+        {
+            IWebDriver driver = new ChromeDriver();
+            driver.Navigate().GoToUrl("https://www.selenium.dev/");
+            PrintOptions printOptions = new PrintOptions();
+            printOptions.OutputBackgroundImages = true;
+            bool currentBackgrounds = printOptions.OutputBackgroundImages;
+            driver.Quit();
+        }
+
+        [TestMethod]
+        public void TestMargins()
+        {
+            IWebDriver driver = new ChromeDriver();
+            driver.Navigate().GoToUrl("https://www.selenium.dev/");
+            PrintOptions printOptions = new PrintOptions();
+            PrintOptions.Margins currentMargins = printOptions.PageMargins;
+            driver.Quit();
+        }
+
+
+        [TestMethod]
+        public void TestScale()
+        {
+            IWebDriver driver = new ChromeDriver();
+            driver.Navigate().GoToUrl("https://www.selenium.dev/");
+            PrintOptions printOptions = new PrintOptions();
+            printOptions.ScaleFactor = 0.5;
+            double currentScale = printOptions.ScaleFactor;
+            driver.Quit();
+        }
+
+        [TestMethod]
+        public void TestShrinkToFit()
+        {
+            IWebDriver driver = new ChromeDriver();
+            driver.Navigate().GoToUrl("https://www.selenium.dev/");
+            PrintOptions printOptions = new PrintOptions();
+            printOptions.ShrinkToFit = true;
+            bool currentShrinkToFit = printOptions.ShrinkToFit;
+            driver.Quit();
+        }
+
+        [TestMethod]
+        public void PrintWithPrintsPageTest()
+        {
+            WebDriver driver = new ChromeDriver();
+            driver.Navigate().GoToUrl("https://www.selenium.dev/");
+            PrintOptions printOptions = new PrintOptions();
+            PrintDocument printedPage = driver.Print(printOptions);
+            Assert.IsTrue(printedPage.AsBase64EncodedString.StartsWith("JVBER"));
+            driver.Quit();
+        }
+    }
+}
diff --git a/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs b/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs
index a774f471e282..51fa05b402a5 100644
--- a/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs
+++ b/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs
@@ -86,7 +86,7 @@ public void ShouldBeAbleToRemoveAuthenticator()
             ((WebDriver)driver).RemoveVirtualAuthenticator(virtualAuthenticatorId);
 
             // Since the authenticator was removed, any operation using it will throw an error
-            Assert.ThrowsException<WebDriverArgumentException>(() => ((WebDriver)driver).GetCredentials());
+            Assert.ThrowsException<InvalidOperationException>(() => ((WebDriver)driver).GetCredentials());
         }
 
         [TestMethod]
diff --git a/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs b/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs
index eadb93b523ac..f362ad3ba154 100644
--- a/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs
+++ b/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs
@@ -1,9 +1,49 @@
+using System;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
-
+using OpenQA.Selenium;
+using OpenQA.Selenium.Chrome;
+using System.Collections.Generic;
 namespace SeleniumDocs.Interactions
 {
     [TestClass]
-    public class WindowsTest : BaseTest
+    public class WindowsTest
     {
+        [TestMethod]
+        public void TestWindowCommands()
+        {
+            WebDriver driver = new ChromeDriver();
+            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);
+
+            // Navigate to Url
+            driver.Url="https://www.selenium.dev/selenium/web/window_switching_tests/page_with_frame.html";
+            //fetch handle of this
+            String currHandle = driver.CurrentWindowHandle;
+            Assert.IsNotNull(currHandle);
+
+            //click on link to open a new window
+            driver.FindElement(By.LinkText("Open new window")).Click();
+            //fetch handles of all windows, there will be two, [0]- default, [1] - new window
+            IList<string> windowHandles = new List<string>(driver.WindowHandles);
+            driver.SwitchTo().Window(windowHandles[1]);
+            //assert on title of new window
+            String title = driver.Title;
+            Assert.AreEqual("Simple Page", title);
+
+            //closing current window
+            driver.Close();
+            //Switch back to the old tab or window
+            driver.SwitchTo().Window(windowHandles[0]);
+
+            //Opens a new tab and switches to new tab
+            driver.SwitchTo().NewWindow(WindowType.Tab);
+            Assert.AreEqual("", driver.Title);
+
+            //Opens a new window and switches to new window
+            driver.SwitchTo().NewWindow(WindowType.Window);
+            Assert.AreEqual("", driver.Title);
+
+            //quitting driver
+            driver.Quit(); //close all windows
+        }
     }
-}
\ No newline at end of file
+}
diff --git a/examples/dotnet/SeleniumDocs/SeleniumDocs.csproj b/examples/dotnet/SeleniumDocs/SeleniumDocs.csproj
index 3ef438532dd7..688c6fe598b6 100644
--- a/examples/dotnet/SeleniumDocs/SeleniumDocs.csproj
+++ b/examples/dotnet/SeleniumDocs/SeleniumDocs.csproj
@@ -1,17 +1,17 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
     <PropertyGroup>
-        <TargetFramework>net6.0</TargetFramework>
+        <TargetFramework>net8.0</TargetFramework>
         <GenerateProgramFile>false</GenerateProgramFile>
     </PropertyGroup>
 
     <ItemGroup>
-      <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
-      <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.23.1" />
-      <PackageReference Include="MSTest.TestAdapter" Version="2.2.10" />
-      <PackageReference Include="MSTest.TestFramework" Version="2.2.10" />
-      <PackageReference Include="Selenium.Support" Version="4.15.0" />
-      <PackageReference Include="Selenium.WebDriver" Version="4.15.0" />
+      <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
+      <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="7.7.1" />
+      <PackageReference Include="MSTest.TestAdapter" Version="3.6.0" />
+      <PackageReference Include="MSTest.TestFramework" Version="3.6.0" />
+      <PackageReference Include="Selenium.Support" Version="4.35.0" />
+      <PackageReference Include="Selenium.WebDriver" Version="4.35.0" />
     </ItemGroup>
 
     <ItemGroup>
diff --git a/examples/dotnet/SeleniumDocs/SeleniumManager/UsageTest.cs b/examples/dotnet/SeleniumDocs/SeleniumManager/UsageTest.cs
new file mode 100644
index 000000000000..b2a04500df76
--- /dev/null
+++ b/examples/dotnet/SeleniumDocs/SeleniumManager/UsageTest.cs
@@ -0,0 +1,20 @@
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using OpenQA.Selenium.Chrome;
+
+namespace SeleniumDocs.SeleniumManagerTest
+{
+    [TestClass]
+    public class UsageTest
+    {
+        [TestMethod]
+        public void TestWithSeleniumManager()
+        {
+            // Before
+            // using var driver = new ChromeDriver("path/to/chromedriver");
+
+            // Now
+            using var driver = new ChromeDriver();
+            driver.Navigate().GoToUrl("https://www.selenium.dev/documentation/selenium_manager/");
+        }
+    }
+}
diff --git a/examples/dotnet/SeleniumDocs/Troubleshooting/LoggingTest.cs b/examples/dotnet/SeleniumDocs/Troubleshooting/LoggingTest.cs
new file mode 100644
index 000000000000..b4b4247eb4b1
--- /dev/null
+++ b/examples/dotnet/SeleniumDocs/Troubleshooting/LoggingTest.cs
@@ -0,0 +1,80 @@
+﻿using Microsoft.VisualStudio.TestTools.UnitTesting;
+using OpenQA.Selenium;
+using OpenQA.Selenium.Internal.Logging;
+using OpenQA.Selenium.Remote;
+using System;
+using System.IO;
+
+namespace SeleniumDocs.Troubleshooting
+{
+    [TestClass]
+    public class LoggingTest
+    {
+        private const string filePath = "Selenium.log";
+
+        [TestMethod]
+        public void Logging()
+        {
+            Log.SetLevel(LogEventLevel.Trace);
+
+            Log.Handlers.Add(new FileLogHandler(filePath));
+
+            Log.SetLevel(typeof(RemoteWebDriver), LogEventLevel.Debug);
+            Log.SetLevel(typeof(SeleniumManager), LogEventLevel.Info);
+
+            Warn("this is a warning");
+            Info("this is useful information");
+            Debug("this is detailed debug information");
+
+            using (var fileStream = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
+            {
+                using (var streamReader = new StreamReader(fileStream))
+                {
+                    var fileLogContent = streamReader.ReadToEnd();
+
+                    StringAssert.Contains(fileLogContent, "this is a warning");
+                    StringAssert.Contains(fileLogContent, "this is useful information");
+                    StringAssert.Contains(fileLogContent, "this is detailed debug information");
+                }
+            }
+        }
+
+        [TestCleanup]
+        public void TestCleanup()
+        {
+            // reset log to default
+            Log.SetLevel(LogEventLevel.Info)
+                .Handlers.Clear()
+                .Handlers.Add(new TextWriterHandler(Console.Error));
+        }
+
+        // logging is only for internal usage
+        // hacking it via reflection
+
+        private void Debug(string message)
+        {
+            LogMessage("Debug", message);
+        }
+
+        private void Warn(string message)
+        {
+            LogMessage("Warn", message);
+        }
+
+        private void Info(string message)
+        {
+            LogMessage("Info", message);
+        }
+
+        private void LogMessage(string methodName, string message)
+        {
+            var getLoggerMethod = typeof(Log).GetMethod("GetLogger", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic, new Type[] { typeof(Type) });
+
+            var logger = getLoggerMethod.Invoke(null, new object[] { typeof(LoggingTest) });
+
+            var emitMethod = logger.GetType().GetMethod(methodName);
+
+            emitMethod.Invoke(logger, new object[] { message });
+        }
+    }
+}
diff --git a/examples/java/README.md b/examples/java/README.md
new file mode 100644
index 000000000000..ebe2468de5af
--- /dev/null
+++ b/examples/java/README.md
@@ -0,0 +1,63 @@
+# Running Selenium Java Tests
+The following steps will guide you on how to 
+run Selenium Java tests using a repository 
+of `SeleniumHQ/seleniumhq.github.io` examples.
+
+## Initial Setup
+
+### Prerequisites
+
+Ensure that Java Development Kit (JDK) and Maven 
+are installed on your system. If they are not installed, 
+you will need to download and install them. You can 
+find detailed installation guides for both on their 
+respective official sites.
+
+### Clone the repository
+First, we need to get the Selenium Java examples 
+on your local machine. This can be done by 
+cloning the `SeleniumHQ/seleniumhq.github.io` Git repository. 
+Run the following command in your terminal:
+
+```bash
+git clone https://github.com/SeleniumHQ/seleniumhq.github.io.git
+```
+## Navigate to the java directory
+After cloning the repository, navigate into the 
+directory where the Selenium Java examples are 
+located. Run the following command:
+
+```bash
+cd seleniumhq.github.io/examples/java
+```
+
+## Running the Tests
+### Install dependencies
+Before running the tests, we need to install all 
+necessary dependencies. Maven, a software 
+project management tool, can do this for us. 
+Run the following command:
+
+```bash
+mvn test-compile
+```
+
+### Run all tests
+To verify if everything is installed correctly and 
+functioning properly, we should run all 
+available tests. This can be done with the following command:
+
+```bash
+mvn test
+```
+
+Please be patient! If this is your first time running these tests, 
+it might take a while to download and verify all necessary browser drivers.
+
+## Execute a specific example
+To run a specific Selenium Java example, use the following command:
+```bash
+mvn exec:java -D"exec.mainClass"="dev.selenium.getting_started.FirstScript" -D"exec.classpathScope"=test
+```
+
+Make sure to replace `dev.selenium.getting_started.FirstScript` with the path and name of the example you want to run.
\ No newline at end of file
diff --git a/examples/java/build.gradle b/examples/java/build.gradle
index 2a0f71427240..ba3a2a0af90b 100644
--- a/examples/java/build.gradle
+++ b/examples/java/build.gradle
@@ -10,8 +10,8 @@ repositories {
 }
 
 dependencies {
-    testImplementation 'org.seleniumhq.selenium:selenium-java:4.15.0'
-    testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.10.0'
+    testImplementation 'org.seleniumhq.selenium:selenium-java:4.35.0'
+    testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.13.4'
 }
 
 test {
diff --git a/examples/java/gradle/wrapper/gradle-wrapper.jar b/examples/java/gradle/wrapper/gradle-wrapper.jar
index 41d9927a4d4f..8bdaf60c75ab 100644
Binary files a/examples/java/gradle/wrapper/gradle-wrapper.jar and b/examples/java/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/examples/java/gradle/wrapper/gradle-wrapper.properties b/examples/java/gradle/wrapper/gradle-wrapper.properties
index 41dfb87909a8..2a84e188b85a 100644
--- a/examples/java/gradle/wrapper/gradle-wrapper.properties
+++ b/examples/java/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,7 @@
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip
+networkTimeout=10000
+validateDistributionUrl=true
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
diff --git a/examples/java/gradlew b/examples/java/gradlew
index 1b6c787337ff..ef07e0162b18 100755
--- a/examples/java/gradlew
+++ b/examples/java/gradlew
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 #
-# Copyright © 2015-2021 the original authors.
+# Copyright © 2015 the original authors.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -15,6 +15,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
+# SPDX-License-Identifier: Apache-2.0
+#
 
 ##############################################################################
 #
@@ -55,7 +57,7 @@
 #       Darwin, MinGW, and NonStop.
 #
 #   (3) This script is generated from the Groovy template
-#       https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+#       https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
 #       within the Gradle project.
 #
 #       You can find Gradle at https://github.com/gradle/gradle/.
@@ -80,13 +82,11 @@ do
     esac
 done
 
-APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
-
-APP_NAME="Gradle"
+# This is normally unused
+# shellcheck disable=SC2034
 APP_BASE_NAME=${0##*/}
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
 
 # Use the maximum available, or set MAX_FD != -1 to use that value.
 MAX_FD=maximum
@@ -114,7 +114,7 @@ case "$( uname )" in                #(
   NONSTOP* )        nonstop=true ;;
 esac
 
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+CLASSPATH="\\\"\\\""
 
 
 # Determine the Java command to use to start the JVM.
@@ -133,22 +133,29 @@ location of your Java installation."
     fi
 else
     JAVACMD=java
-    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+    if ! command -v java >/dev/null 2>&1
+    then
+        die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
 
 Please set the JAVA_HOME variable in your environment to match the
 location of your Java installation."
+    fi
 fi
 
 # Increase the maximum file descriptors if we can.
 if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
     case $MAX_FD in #(
       max*)
+        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+        # shellcheck disable=SC2039,SC3045
         MAX_FD=$( ulimit -H -n ) ||
             warn "Could not query maximum file descriptor limit"
     esac
     case $MAX_FD in  #(
       '' | soft) :;; #(
       *)
+        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+        # shellcheck disable=SC2039,SC3045
         ulimit -n "$MAX_FD" ||
             warn "Could not set maximum file descriptor limit to $MAX_FD"
     esac
@@ -193,18 +200,28 @@ if "$cygwin" || "$msys" ; then
     done
 fi
 
-# Collect all arguments for the java command;
-#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
-#     shell script including quotes and variable substitutions, so put them in
-#     double quotes to make sure that they get re-expanded; and
-#   * put everything else in single quotes, so that it's not re-expanded.
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command:
+#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+#     and any embedded shellness will be escaped.
+#   * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+#     treated as '${Hostname}' itself on the command line.
 
 set -- \
         "-Dorg.gradle.appname=$APP_BASE_NAME" \
         -classpath "$CLASSPATH" \
-        org.gradle.wrapper.GradleWrapperMain \
+        -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
         "$@"
 
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+    die "xargs is not available"
+fi
+
 # Use "xargs" to parse quoted args.
 #
 # With -n1 it outputs one arg per line, with the quotes and backslashes removed.
diff --git a/examples/java/gradlew.bat b/examples/java/gradlew.bat
index 107acd32c4e6..5eed7ee84528 100644
--- a/examples/java/gradlew.bat
+++ b/examples/java/gradlew.bat
@@ -1,89 +1,94 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem      https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem  Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Resolve any "." and ".." in APP_HOME to make it shorter.
-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem      https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+@rem SPDX-License-Identifier: Apache-2.0
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/examples/java/pom.xml b/examples/java/pom.xml
index 9b7a474bc0de..5b1123efa1cd 100644
--- a/examples/java/pom.xml
+++ b/examples/java/pom.xml
@@ -10,18 +10,23 @@
 
     <properties>
         <surefire.parallel>1</surefire.parallel>
-        <maven.compiler.source>11</maven.compiler.source>
-        <maven.compiler.target>11</maven.compiler.target>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <selenium.version>4.35.0</selenium.version>
     </properties>
 
     <repositories>
         <repository>
-        <id>sonatype-nexus-snapshots</id>
-        <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
-        <snapshots>
-            <enabled>true</enabled>
-        </snapshots>
+            <name>Central Portal Snapshots</name>
+            <id>central-portal-snapshots</id>
+            <url>https://central.sonatype.com/repository/maven-snapshots/</url>
+            <releases>
+                <enabled>false</enabled>
+            </releases>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
         </repository>
     </repositories>
 
@@ -29,17 +34,17 @@
         <dependency>
             <groupId>org.seleniumhq.selenium</groupId>
             <artifactId>selenium-java</artifactId>
-            <version>4.15.0</version>
+            <version>${selenium.version}</version>
         </dependency>
         <dependency>
             <groupId>org.seleniumhq.selenium</groupId>
             <artifactId>selenium-grid</artifactId>
-            <version>4.15.0</version>
+            <version>${selenium.version}</version>
         </dependency>
         <dependency>
             <groupId>org.junit.jupiter</groupId>
             <artifactId>junit-jupiter-engine</artifactId>
-            <version>5.10.0</version>
+            <version>5.13.4</version>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -54,7 +59,7 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
-                <version>3.1.2</version>
+                <version>3.5.3</version>
                 <configuration>
                     <properties>
                         <configurationParameters>
@@ -65,6 +70,7 @@
                             junit.jupiter.execution.parallel.config.fixed.max-pool-size = ${surefire.parallel}
                         </configurationParameters>
                     </properties>
+                    <rerunFailingTestsCount>3</rerunFailingTestsCount>
                 </configuration>
             </plugin>
         </plugins>
diff --git a/examples/java/src/test/java/dev/selenium/BaseTest.java b/examples/java/src/test/java/dev/selenium/BaseTest.java
index 3ff60ac40a50..70ac73b5a63f 100644
--- a/examples/java/src/test/java/dev/selenium/BaseTest.java
+++ b/examples/java/src/test/java/dev/selenium/BaseTest.java
@@ -4,13 +4,19 @@
 import java.io.IOException;
 import java.net.URL;
 import java.nio.file.Files;
+import java.nio.file.Path;
 import java.time.Duration;
+import java.util.Arrays;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
 import org.junit.jupiter.api.AfterEach;
 import org.openqa.selenium.By;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.chrome.ChromeDriver;
 import org.openqa.selenium.chrome.ChromeOptions;
+import org.openqa.selenium.edge.EdgeOptions;
 import org.openqa.selenium.firefox.FirefoxDriver;
 import org.openqa.selenium.firefox.FirefoxOptions;
 import org.openqa.selenium.grid.Main;
@@ -22,6 +28,9 @@ public class BaseTest {
   protected WebDriverWait wait;
   protected File driverPath;
   protected File browserPath;
+  protected String username = "admin";
+  protected String password = "myStrongPassword";
+  protected String trustStorePassword = "seleniumkeystore";
 
   public WebElement getLocatedElement(WebDriver driver, By by) {
     WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
@@ -49,6 +58,18 @@ protected ChromeDriver startChromeDriver(ChromeOptions options) {
     return (ChromeDriver) driver;
   }
 
+  protected static ChromeOptions getDefaultChromeOptions() {
+    ChromeOptions options = new ChromeOptions();
+    options.addArguments("--no-sandbox");
+    return options;
+  }
+
+  protected static EdgeOptions getDefaultEdgeOptions() {
+    EdgeOptions options = new EdgeOptions();
+    options.addArguments("--no-sandbox");
+    return options;
+  }
+
   protected File getTempDirectory(String prefix) {
     File tempDirectory = null;
     try {
@@ -94,6 +115,46 @@ protected URL startStandaloneGrid() {
     }
   }
 
+  protected URL startStandaloneGridAdvanced() {
+    int port = PortProber.findFreePort();
+    try {
+      System.setProperty("javax.net.ssl.trustStore", Path.of("src/test/resources/server.jks").toAbsolutePath().toString());
+      System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword);
+      System.setProperty("jdk.internal.httpclient.disableHostnameVerification", "true");
+      Main.main(
+              new String[] {
+                      "standalone",
+                      "--port",
+                      String.valueOf(port),
+                      "--selenium-manager",
+                      "true",
+                      "--enable-managed-downloads",
+                      "true",
+                      "--log-level",
+                      "WARNING",
+                      "--username",
+                      username,
+                      "--password",
+                      password,
+                      "--https-certificate",
+                      Path.of("src/test/resources/tls.crt").toAbsolutePath().toString(),
+                      "--https-private-key",
+                      Path.of("src/test/resources/tls.key").toAbsolutePath().toString()
+              });
+      return new URL("https://localhost:" + port);
+    } catch (Exception e) {
+      throw new RuntimeException(e);
+    }
+  }
+
+  protected void enableLogging() {
+    Logger logger = Logger.getLogger("");
+    logger.setLevel(Level.FINE);
+    Arrays.stream(logger.getHandlers()).forEach(handler -> {
+      handler.setLevel(Level.FINE);
+    });
+  }
+
   @AfterEach
   public void quit() {
     if (driver != null) {
diff --git a/examples/java/src/test/java/dev/selenium/bidi/cdp/CdpApiTest.java b/examples/java/src/test/java/dev/selenium/bidi/cdp/CdpApiTest.java
new file mode 100644
index 000000000000..72f9a7032f3a
--- /dev/null
+++ b/examples/java/src/test/java/dev/selenium/bidi/cdp/CdpApiTest.java
@@ -0,0 +1,75 @@
+package dev.selenium.bidi.cdp;
+
+import com.google.common.collect.ImmutableMap;
+import dev.selenium.BaseTest;
+import java.time.Duration;
+import java.util.Base64;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.concurrent.atomic.AtomicBoolean;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.chrome.ChromeDriver;
+import org.openqa.selenium.chrome.ChromeOptions;
+import org.openqa.selenium.devtools.DevTools;
+import org.openqa.selenium.devtools.HasDevTools;
+import org.openqa.selenium.devtools.v137.browser.Browser;
+import org.openqa.selenium.devtools.v137.network.Network;
+import org.openqa.selenium.devtools.v137.network.model.Headers;
+import org.openqa.selenium.support.ui.WebDriverWait;
+
+public class CdpApiTest extends BaseTest {
+  DevTools devTools;
+
+  @BeforeEach
+  public void createSession() {
+    ChromeOptions options = getDefaultChromeOptions();
+    options.setBrowserVersion("139");
+    driver = new ChromeDriver(options);
+    wait = new WebDriverWait(driver, Duration.ofSeconds(10));
+  }
+
+  @Test
+  public void basicAuth() {
+    devTools = ((HasDevTools) driver).getDevTools();
+    devTools.createSession();
+    devTools.send(Network.enable(Optional.of(100000), Optional.of(100000), Optional.of(100000)));
+
+    String encodedAuth = Base64.getEncoder().encodeToString("admin:admin".getBytes());
+    Map<String, Object> headers = ImmutableMap.of("Authorization", "Basic " + encodedAuth);
+
+    devTools.send(Network.setExtraHTTPHeaders(new Headers(headers)));
+
+    driver.get("https://the-internet.herokuapp.com/basic_auth");
+
+    Assertions.assertEquals(
+        "Congratulations! You must have the proper credentials.",
+        driver.findElement(By.tagName("p")).getText());
+  }
+
+  @Test
+  public void waitForDownload() {
+    driver.get("https://www.selenium.dev/selenium/web/downloads/download.html");
+
+    devTools = ((HasDevTools) driver).getDevTools();
+    devTools.createSession();
+    devTools.send(
+        Browser.setDownloadBehavior(
+            Browser.SetDownloadBehaviorBehavior.ALLOWANDNAME,
+            Optional.empty(),
+            Optional.of(""),
+            Optional.of(true)));
+
+    AtomicBoolean completed = new AtomicBoolean(false);
+    devTools.addListener(
+        Browser.downloadProgress(),
+        e -> completed.set(Objects.equals(e.getState().toString(), "completed")));
+
+    driver.findElement(By.id("file-2")).click();
+
+    Assertions.assertDoesNotThrow(() -> wait.until(_d -> completed));
+  }
+}
diff --git a/examples/java/src/test/java/dev/selenium/bidi/cdp/CdpTest.java b/examples/java/src/test/java/dev/selenium/bidi/cdp/CdpTest.java
new file mode 100644
index 000000000000..f83c18832d95
--- /dev/null
+++ b/examples/java/src/test/java/dev/selenium/bidi/cdp/CdpTest.java
@@ -0,0 +1,33 @@
+package dev.selenium.bidi.cdp;
+
+import dev.selenium.BaseTest;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.Cookie;
+import org.openqa.selenium.chrome.ChromeDriver;
+import org.openqa.selenium.chromium.HasCdp;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class CdpTest extends BaseTest {
+  @BeforeEach
+  public void createSession() {
+    driver = new ChromeDriver();
+  }
+
+  @Test
+  public void setCookie() {
+    Map<String, Object> cookie = new HashMap<>();
+    cookie.put("name", "cheese");
+    cookie.put("value", "gouda");
+    cookie.put("domain", "www.selenium.dev");
+    cookie.put("secure", true);
+    ((HasCdp) driver).executeCdpCommand("Network.setCookie", cookie);
+
+    driver.get("https://www.selenium.dev");
+    Cookie cheese = driver.manage().getCookieNamed("cheese");
+    Assertions.assertEquals("gouda", cheese.getValue());
+  }
+}
diff --git a/examples/java/src/test/java/dev/selenium/bidi/cdp/LoggingTest.java b/examples/java/src/test/java/dev/selenium/bidi/cdp/LoggingTest.java
new file mode 100644
index 000000000000..01a0cfa09333
--- /dev/null
+++ b/examples/java/src/test/java/dev/selenium/bidi/cdp/LoggingTest.java
@@ -0,0 +1,40 @@
+package dev.selenium.bidi.cdp;
+
+import static org.openqa.selenium.devtools.events.CdpEventTypes.consoleEvent;
+
+import dev.selenium.BaseTest;
+
+import java.time.Duration;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.*;
+import org.openqa.selenium.chrome.ChromeDriver;
+import org.openqa.selenium.logging.HasLogEvents;
+import org.openqa.selenium.support.ui.WebDriverWait;
+
+public class LoggingTest extends BaseTest {
+
+  @BeforeEach
+  public void createSession() {
+    driver = new ChromeDriver();
+    wait = new WebDriverWait(driver, Duration.ofSeconds(10));
+  }
+
+  @Test
+  public void consoleLogs() {
+    driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");
+    CopyOnWriteArrayList<String> messages = new CopyOnWriteArrayList<>();
+
+    ((HasLogEvents) driver).onLogEvent(consoleEvent(e -> messages.add(e.getMessages().get(0))));
+
+    driver.findElement(By.id("consoleLog")).click();
+    driver.findElement(By.id("consoleError")).click();
+
+    wait.until(_d -> messages.size() > 1);
+    Assertions.assertTrue(messages.contains("Hello, world!"));
+    Assertions.assertTrue(messages.contains("I am console error"));
+  }
+}
diff --git a/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java b/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java
similarity index 57%
rename from examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java
rename to examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java
index cb657347d34c..68e0cdcc15b6 100644
--- a/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java
+++ b/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java
@@ -1,29 +1,34 @@
-package dev.selenium.bidirectional.chrome_devtools;
-
-import static org.openqa.selenium.devtools.events.CdpEventTypes.consoleEvent;
-import static org.openqa.selenium.devtools.events.CdpEventTypes.domMutation;
+package dev.selenium.bidi.cdp;
 
 import com.google.common.net.MediaType;
 import dev.selenium.BaseTest;
 import java.net.*;
 import java.time.Duration;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.function.Predicate;
 import java.util.function.Supplier;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.openqa.selenium.*;
 import org.openqa.selenium.chrome.ChromeDriver;
+import org.openqa.selenium.devtools.DevTools;
+import org.openqa.selenium.devtools.HasDevTools;
 import org.openqa.selenium.devtools.NetworkInterceptor;
-import org.openqa.selenium.logging.HasLogEvents;
+import org.openqa.selenium.devtools.v137.browser.Browser;
+import org.openqa.selenium.devtools.v137.network.Network;
+import org.openqa.selenium.devtools.v137.performance.Performance;
+import org.openqa.selenium.devtools.v137.performance.model.Metric;
 import org.openqa.selenium.remote.http.*;
 import org.openqa.selenium.support.ui.WebDriverWait;
 
-public class BidiApiTest extends BaseTest {
+public class NetworkTest extends BaseTest {
 
   @BeforeEach
   public void createSession() {
@@ -35,7 +40,6 @@ public void createSession() {
   public void basicAuthentication() {
     Predicate<URI> uriPredicate = uri -> uri.toString().contains("herokuapp.com");
     Supplier<Credentials> authentication = UsernameAndPassword.of("admin", "admin");
-
     ((HasAuthentication) driver).register(uriPredicate, authentication);
 
     driver.get("https://the-internet.herokuapp.com/basic_auth");
@@ -45,46 +49,6 @@ public void basicAuthentication() {
     Assertions.assertEquals(successMessage, elementMessage.getText());
   }
 
-  @Test
-  public void pinScript() {
-    driver.get("https://www.selenium.dev/selenium/web/xhtmlTest.html");
-    WebElement element = driver.findElement(By.id("id1"));
-
-    ScriptKey key = ((JavascriptExecutor) driver).pin("return arguments;");
-    List<Object> arguments =
-        (List<Object>) ((JavascriptExecutor) driver).executeScript(key, 1, true, element);
-
-    Assertions.assertEquals(List.of(1L, true, element), arguments);
-  }
-
-  @Test
-  public void mutatedElements() {
-    driver.get("https://www.selenium.dev/selenium/web/dynamic.html");
-
-    CopyOnWriteArrayList<WebElement> mutations = new CopyOnWriteArrayList<>();
-    ((HasLogEvents) driver).onLogEvent(domMutation(e -> mutations.add(e.getElement())));
-
-    driver.findElement(By.id("reveal")).click();
-
-    wait.until(_d -> !mutations.isEmpty());
-    Assertions.assertEquals(mutations.get(0), driver.findElement(By.id("revealed")));
-  }
-
-  @Test
-  public void consoleLogs() {
-    driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");
-
-    CopyOnWriteArrayList<String> messages = new CopyOnWriteArrayList<>();
-    ((HasLogEvents) driver).onLogEvent(consoleEvent(e -> messages.add(e.getMessages().get(0))));
-
-    driver.findElement(By.id("consoleLog")).click();
-    driver.findElement(By.id("consoleError")).click();
-
-    wait.until(_d -> messages.size() > 1);
-    Assertions.assertTrue(messages.contains("Hello, world!"));
-    Assertions.assertTrue(messages.contains("I am console error"));
-  }
-
   @Test
   public void recordResponse() {
     CopyOnWriteArrayList<String> contentType = new CopyOnWriteArrayList<>();
@@ -119,7 +83,6 @@ public void transformResponses() {
                                 .setStatus(200)
                                 .addHeader("Content-Type", MediaType.HTML_UTF_8.toString())
                                 .setContent(Contents.utf8String("Creamy, delicious cheese!"))))) {
-
       driver.get("https://www.selenium.dev/selenium/web/blank.html");
     }
 
@@ -128,7 +91,6 @@ public void transformResponses() {
   }
 
   @Test
-  @Disabled("Not working yet")
   public void interceptRequests() {
     AtomicBoolean completed = new AtomicBoolean(false);
 
@@ -152,4 +114,74 @@ public void interceptRequests() {
 
     Assertions.assertEquals("two", driver.findElement(By.id("result")).getText());
   }
+
+  @Test
+  public void performanceMetrics() {
+    driver.get("https://www.selenium.dev/selenium/web/frameset.html");
+
+    DevTools devTools = ((HasDevTools) driver).getDevTools();
+    devTools.createSession();
+
+    devTools.send(Performance.enable(Optional.empty()));
+    List<Metric> metricList = devTools.send(Performance.getMetrics());
+
+    Map<String, Number> metrics = new HashMap<>();
+    for (Metric metric : metricList) {
+      metrics.put(metric.getName(), metric.getValue());
+    }
+
+    Assertions.assertTrue(metrics.get("DevToolsCommandDuration").doubleValue() > 0);
+    Assertions.assertEquals(12, metrics.get("Frames").intValue());
+  }
+
+  @Test
+  public void setCookie() {
+    DevTools devTools = ((HasDevTools) driver).getDevTools();
+    devTools.createSession();
+
+    devTools.send(
+            Network.setCookie(
+                    "cheese",
+                    "gouda",
+                    Optional.empty(),
+                    Optional.of("www.selenium.dev"),
+                    Optional.empty(),
+                    Optional.of(true),
+                    Optional.empty(),
+                    Optional.empty(),
+                    Optional.empty(),
+                    Optional.empty(),
+                    Optional.empty(),
+                    Optional.empty(),
+                    Optional.empty(),
+                    Optional.empty()));
+
+    driver.get("https://www.selenium.dev");
+    Cookie cheese = driver.manage().getCookieNamed("cheese");
+    Assertions.assertEquals("gouda", cheese.getValue());
+  }
+
+  @Test
+  public void waitForDownload() {
+    driver.get("https://www.selenium.dev/selenium/web/downloads/download.html");
+
+    DevTools devTools = ((HasDevTools) driver).getDevTools();
+    devTools.createSession();
+
+    devTools.send(
+            Browser.setDownloadBehavior(
+                    Browser.SetDownloadBehaviorBehavior.ALLOWANDNAME,
+                    Optional.empty(),
+                    Optional.of(""),
+                    Optional.of(true)));
+
+    AtomicBoolean completed = new AtomicBoolean(false);
+    devTools.addListener(
+            Browser.downloadProgress(),
+            e -> completed.set(Objects.equals(e.getState().toString(), "completed")));
+
+    driver.findElement(By.id("file-2")).click();
+
+    Assertions.assertDoesNotThrow(() -> wait.until(_d -> completed));
+  }
 }
diff --git a/examples/java/src/test/java/dev/selenium/bidi/cdp/ScriptTest.java b/examples/java/src/test/java/dev/selenium/bidi/cdp/ScriptTest.java
new file mode 100644
index 000000000000..dd6436f4f327
--- /dev/null
+++ b/examples/java/src/test/java/dev/selenium/bidi/cdp/ScriptTest.java
@@ -0,0 +1,51 @@
+package dev.selenium.bidi.cdp;
+
+import static org.openqa.selenium.devtools.events.CdpEventTypes.domMutation;
+
+import dev.selenium.BaseTest;
+
+import java.time.Duration;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.*;
+import org.openqa.selenium.chrome.ChromeDriver;
+import org.openqa.selenium.logging.HasLogEvents;
+import org.openqa.selenium.support.ui.WebDriverWait;
+
+public class ScriptTest extends BaseTest {
+
+  @BeforeEach
+  public void createSession() {
+    driver = new ChromeDriver();
+    wait = new WebDriverWait(driver, Duration.ofSeconds(10));
+  }
+
+  @Test
+  public void pinScript() {
+    driver.get("https://www.selenium.dev/selenium/web/xhtmlTest.html");
+    WebElement element = driver.findElement(By.id("id1"));
+
+    ScriptKey key = ((JavascriptExecutor) driver).pin("return arguments;");
+    List<Object> arguments =
+        (List<Object>) ((JavascriptExecutor) driver).executeScript(key, 1, true, element);
+
+    Assertions.assertEquals(List.of(1L, true, element), arguments);
+  }
+
+  @Test
+  public void mutatedElements() {
+    driver.get("https://www.selenium.dev/selenium/web/dynamic.html");
+    CopyOnWriteArrayList<WebElement> mutations = new CopyOnWriteArrayList<>();
+
+    ((HasLogEvents) driver).onLogEvent(domMutation(e -> mutations.add(e.getElement())));
+
+    driver.findElement(By.id("reveal")).click();
+
+    wait.until(_d -> !mutations.isEmpty());
+    Assertions.assertEquals(mutations.get(0), driver.findElement(By.id("revealed")));
+  }
+}
diff --git a/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java b/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java
deleted file mode 100644
index 9a94e2b2932a..000000000000
--- a/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java
+++ /dev/null
@@ -1,168 +0,0 @@
-package dev.selenium.bidirectional.chrome_devtools;
-
-import com.google.common.collect.ImmutableMap;
-import dev.selenium.BaseTest;
-import java.time.Duration;
-import java.util.Base64;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-import org.openqa.selenium.By;
-import org.openqa.selenium.Cookie;
-import org.openqa.selenium.JavascriptException;
-import org.openqa.selenium.chrome.ChromeDriver;
-import org.openqa.selenium.chrome.ChromeOptions;
-import org.openqa.selenium.devtools.DevTools;
-import org.openqa.selenium.devtools.HasDevTools;
-import org.openqa.selenium.devtools.v118.browser.Browser;
-import org.openqa.selenium.devtools.v118.network.Network;
-import org.openqa.selenium.devtools.v118.network.model.Headers;
-import org.openqa.selenium.devtools.v118.performance.Performance;
-import org.openqa.selenium.devtools.v118.performance.model.Metric;
-import org.openqa.selenium.devtools.v118.runtime.Runtime;
-import org.openqa.selenium.support.ui.WebDriverWait;
-
-public class CdpApiTest extends BaseTest {
-  DevTools devTools;
-
-  @BeforeEach
-  public void createSession() {
-    ChromeOptions options = new ChromeOptions();
-    options.setBrowserVersion("118");
-    driver = new ChromeDriver(options);
-    wait = new WebDriverWait(driver, Duration.ofSeconds(10));
-  }
-
-  @Test
-  public void setCookie() {
-    devTools = ((HasDevTools) driver).getDevTools();
-    devTools.createSession();
-
-    devTools.send(
-        Network.setCookie(
-            "cheese",
-            "gouda",
-            Optional.empty(),
-            Optional.of("www.selenium.dev"),
-            Optional.empty(),
-            Optional.of(true),
-            Optional.empty(),
-            Optional.empty(),
-            Optional.empty(),
-            Optional.empty(),
-            Optional.empty(),
-            Optional.empty(),
-            Optional.empty(),
-            Optional.empty()));
-
-    driver.get("https://www.selenium.dev");
-    Cookie cheese = driver.manage().getCookieNamed("cheese");
-    Assertions.assertEquals("gouda", cheese.getValue());
-  }
-
-  @Test
-  @Disabled("4.15 broke the casting")
-  public void performanceMetrics() {
-    driver.get("https://www.selenium.dev/selenium/web/frameset.html");
-
-    devTools = ((HasDevTools) driver).getDevTools();
-    devTools.createSession();
-    devTools.send(Performance.enable(Optional.empty()));
-
-    List<Metric> metricList = devTools.send(Performance.getMetrics());
-
-    Map<String, Number> metrics = new HashMap<>();
-    for (Metric metric : metricList) {
-      metrics.put(metric.getName(), metric.getValue());
-    }
-
-    Assertions.assertTrue(metrics.get("DevToolsCommandDuration").doubleValue() > 0);
-    Assertions.assertEquals(12, metrics.get("Frames").intValue());
-  }
-
-  @Test
-  public void basicAuth() {
-    devTools = ((HasDevTools) driver).getDevTools();
-    devTools.createSession();
-    devTools.send(Network.enable(Optional.of(100000), Optional.of(100000), Optional.of(100000)));
-
-    String encodedAuth = Base64.getEncoder().encodeToString("admin:admin".getBytes());
-    Map<String, Object> headers = ImmutableMap.of("Authorization", "Basic " + encodedAuth);
-
-    devTools.send(Network.setExtraHTTPHeaders(new Headers(headers)));
-
-    driver.get("https://the-internet.herokuapp.com/basic_auth");
-
-    Assertions.assertEquals(
-        "Congratulations! You must have the proper credentials.",
-        driver.findElement(By.tagName("p")).getText());
-  }
-
-  @Test
-  public void consoleLogs() {
-    driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");
-
-    DevTools devTools = ((HasDevTools) driver).getDevTools();
-    devTools.createSession();
-    devTools.send(Runtime.enable());
-
-    CopyOnWriteArrayList<String> logs = new CopyOnWriteArrayList<>();
-    devTools.addListener(
-        Runtime.consoleAPICalled(),
-        event -> logs.add((String) event.getArgs().get(0).getValue().orElse("")));
-
-    driver.findElement(By.id("consoleLog")).click();
-
-    wait.until(_d -> !logs.isEmpty());
-    Assertions.assertEquals("Hello, world!", logs.get(0));
-  }
-
-  @Test
-  public void jsErrors() {
-    driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");
-
-    DevTools devTools = ((HasDevTools) driver).getDevTools();
-    devTools.createSession();
-    devTools.send(Runtime.enable());
-
-    CopyOnWriteArrayList<JavascriptException> errors = new CopyOnWriteArrayList<>();
-    devTools.getDomains().events().addJavascriptExceptionListener(errors::add);
-
-    driver.findElement(By.id("jsException")).click();
-
-    wait.until(_d -> !errors.isEmpty());
-    Assertions.assertTrue(errors.get(0).getMessage().contains("Error: Not working"));
-  }
-
-  @Test
-  public void waitForDownload() {
-    driver.get("https://www.selenium.dev/selenium/web/downloads/download.html");
-
-    devTools = ((HasDevTools) driver).getDevTools();
-    devTools.createSession();
-    devTools.send(
-        Browser.setDownloadBehavior(
-            Browser.SetDownloadBehaviorBehavior.ALLOWANDNAME,
-            Optional.empty(),
-            Optional.of(""),
-            Optional.of(true)));
-
-    AtomicBoolean completed = new AtomicBoolean(false);
-    devTools.addListener(
-        Browser.downloadProgress(),
-        e -> completed.set(Objects.equals(e.getState().toString(), "completed")));
-
-    driver.findElement(By.id("file-2")).click();
-
-    Assertions.assertDoesNotThrow(() -> wait.until(_d -> completed));
-  }
-}
diff --git a/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpEndpointTest.java b/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpEndpointTest.java
deleted file mode 100644
index c8845e727d4d..000000000000
--- a/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpEndpointTest.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package dev.selenium.bidirectional.chrome_devtools;
-
-import com.google.common.collect.ImmutableMap;
-import dev.selenium.BaseTest;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.openqa.selenium.By;
-import org.openqa.selenium.Cookie;
-import org.openqa.selenium.chrome.ChromeDriver;
-import org.openqa.selenium.chromium.HasCdp;
-
-import java.util.Base64;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class CdpEndpointTest extends BaseTest {
-  @BeforeEach
-  public void createSession() {
-    driver = new ChromeDriver();
-  }
-
-  @Test
-  public void setCookie() {
-    Map<String, Object> cookie = new HashMap<>();
-    cookie.put("name", "cheese");
-    cookie.put("value", "gouda");
-    cookie.put("domain", "www.selenium.dev");
-    cookie.put("secure", true);
-
-    ((HasCdp) driver).executeCdpCommand("Network.setCookie", cookie);
-
-    driver.get("https://www.selenium.dev");
-    Cookie cheese = driver.manage().getCookieNamed("cheese");
-    Assertions.assertEquals("gouda", cheese.getValue());
-  }
-
-  @Test
-  public void performanceMetrics() {
-    driver.get("https://www.selenium.dev/selenium/web/frameset.html");
-
-    ((HasCdp) driver).executeCdpCommand("Performance.enable", new HashMap<>());
-
-    Map<String, Object> response =
-        ((HasCdp) driver).executeCdpCommand("Performance.getMetrics", new HashMap<>());
-    List<Map<String, Object>> metricList = (List<Map<String, Object>>) response.get("metrics");
-
-    Map<String, Number> metrics = new HashMap<>();
-    for (Map<String, Object> metric : metricList) {
-      metrics.put((String) metric.get("name"), (Number) metric.get("value"));
-    }
-
-    Assertions.assertTrue(metrics.get("DevToolsCommandDuration").doubleValue() > 0);
-    Assertions.assertEquals(12, metrics.get("Frames").intValue());
-  }
-
-  @Test
-  public void basicAuth() {
-    ((HasCdp) driver).executeCdpCommand("Network.enable", new HashMap<>());
-
-    String encodedAuth = Base64.getEncoder().encodeToString("admin:admin".getBytes());
-    Map<String, Object> headers =
-        ImmutableMap.of("headers", ImmutableMap.of("authorization", "Basic " + encodedAuth));
-
-    ((HasCdp) driver).executeCdpCommand("Network.setExtraHTTPHeaders", headers);
-
-    driver.get("https://the-internet.herokuapp.com/basic_auth");
-
-    Assertions.assertEquals(
-        "Congratulations! You must have the proper credentials.",
-        driver.findElement(By.tagName("p")).getText());
-  }
-}
diff --git a/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ActionsTest.java b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ActionsTest.java
new file mode 100644
index 000000000000..ffc692a8fc9a
--- /dev/null
+++ b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ActionsTest.java
@@ -0,0 +1,73 @@
+package dev.selenium.bidirectional.webdriver_bidi;
+
+import dev.selenium.BaseTest;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.JavascriptExecutor;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.bidi.module.Input;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.firefox.FirefoxOptions;
+import org.openqa.selenium.interactions.Actions;
+
+class ActionsTest extends BaseTest {
+    private Input input;
+
+    private String windowHandle;
+
+    @BeforeEach
+    public void setup() {
+        FirefoxOptions options = new FirefoxOptions();
+        options.setCapability("webSocketUrl", true);
+        driver = new FirefoxDriver(options);
+        windowHandle = driver.getWindowHandle();
+        input = new Input(driver);
+    }
+
+    @Test
+    void canPerformInputActions() {
+        driver.get("https://www.selenium.dev/selenium/web/formSelectionPage.html");
+
+        List<WebElement> options = driver.findElements(By.tagName("option"));
+
+        Actions actions = new Actions(driver);
+        Actions selectThreeOptions =
+                actions.click(options.get(1)).keyDown(Keys.SHIFT).click(options.get(3)).keyUp(Keys.SHIFT);
+
+        input.perform(windowHandle, selectThreeOptions.getSequences());
+
+        WebElement showButton = driver.findElement(By.name("showselected"));
+        showButton.click();
+
+        WebElement resultElement = driver.findElement(By.id("result"));
+        Assertions.assertTrue(resultElement.getText().contains("roquefort parmigiano cheddar"));
+        }
+
+    @Test
+    void canPerformReleaseAction() {
+        driver.get("https://www.selenium.dev/selenium/web/bidi/release_action.html");
+
+        WebElement inputTextBox = driver.findElement(By.id("keys"));
+
+        Actions sendLowercase =
+                new Actions(driver).keyDown(inputTextBox, "a").keyDown(inputTextBox, "b");
+
+        input.perform(windowHandle, sendLowercase.getSequences());
+        ((JavascriptExecutor) driver).executeScript("resetEvents()");
+
+        input.release(windowHandle);
+
+        List<Map<String, Object>> events =
+                (List<Map<String, Object>>)
+                        ((JavascriptExecutor) driver).executeScript("return allEvents.events");
+        Assertions.assertEquals("KeyB", events.get(0).get("code"));
+        Assertions.assertEquals("KeyA", events.get(1).get("code"));
+        }
+    }
diff --git a/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java
new file mode 100644
index 000000000000..bd12d14e2b26
--- /dev/null
+++ b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java
@@ -0,0 +1,185 @@
+package dev.selenium.bidirectional.webdriver_bidi;
+
+import dev.selenium.BaseTest;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WindowType;
+import org.openqa.selenium.bidi.module.BrowsingContextInspector;
+import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
+import org.openqa.selenium.bidi.browsingcontext.BrowsingContextInfo;
+import org.openqa.selenium.bidi.browsingcontext.NavigationInfo;
+import org.openqa.selenium.bidi.browsingcontext.ReadinessState;
+import org.openqa.selenium.bidi.browsingcontext.UserPromptClosed;
+import org.openqa.selenium.bidi.browsingcontext.UserPromptOpened;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.firefox.FirefoxOptions;
+
+class BrowsingContextInspectorTest extends BaseTest {
+    @BeforeEach
+    public void setup() {
+        FirefoxOptions options = new FirefoxOptions();
+        options.setCapability("webSocketUrl", true);
+        driver = new FirefoxDriver(options);
+    }
+
+    @Test
+    void canListenToWindowBrowsingContextCreatedEvent()
+        throws ExecutionException, InterruptedException, TimeoutException {
+    try (BrowsingContextInspector inspector = new BrowsingContextInspector(driver)) {
+        CompletableFuture<BrowsingContextInfo> future = new CompletableFuture<>();
+
+        inspector.onBrowsingContextCreated(future::complete);
+
+        String windowHandle = driver.switchTo().newWindow(WindowType.WINDOW).getWindowHandle();
+
+        BrowsingContextInfo browsingContextInfo = future.get(5, TimeUnit.SECONDS);
+
+        Assertions.assertEquals(windowHandle, browsingContextInfo.getId());
+        }
+    }
+
+    @Test
+    void canListenToTabBrowsingContextCreatedEvent()
+            throws ExecutionException, InterruptedException, TimeoutException {
+        try (BrowsingContextInspector inspector = new BrowsingContextInspector(driver)) {
+            CompletableFuture<BrowsingContextInfo> future = new CompletableFuture<>();
+            inspector.onBrowsingContextCreated(future::complete);
+
+            String windowHandle = driver.switchTo().newWindow(WindowType.TAB).getWindowHandle();
+
+            BrowsingContextInfo browsingContextInfo = future.get(5, TimeUnit.SECONDS);
+
+            Assertions.assertEquals(windowHandle, browsingContextInfo.getId());
+        }
+    }
+
+    @Test
+    void canListenToDomContentLoadedEvent()
+            throws ExecutionException, InterruptedException, TimeoutException {
+        try (BrowsingContextInspector inspector = new BrowsingContextInspector(driver)) {
+            CompletableFuture<NavigationInfo> future = new CompletableFuture<>();
+            inspector.onDomContentLoaded(future::complete);
+
+            BrowsingContext context = new BrowsingContext(driver, driver.getWindowHandle());
+            context.navigate("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html", ReadinessState.COMPLETE);
+
+            NavigationInfo navigationInfo = future.get(5, TimeUnit.SECONDS);
+
+            Assertions.assertTrue(navigationInfo.getUrl().contains("bidi/logEntryAdded"));
+        }
+    }
+
+    @Test
+    void canListenToBrowsingContextLoadedEvent()
+            throws ExecutionException, InterruptedException, TimeoutException {
+        try (BrowsingContextInspector inspector = new BrowsingContextInspector(driver)) {
+            CompletableFuture<NavigationInfo> future = new CompletableFuture<>();
+            inspector.onBrowsingContextLoaded(future::complete);
+
+            BrowsingContext context = new BrowsingContext(driver, driver.getWindowHandle());
+            context.navigate("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html", ReadinessState.COMPLETE);
+
+            NavigationInfo navigationInfo = future.get(5, TimeUnit.SECONDS);
+
+            Assertions.assertTrue(navigationInfo.getUrl().contains("bidi/logEntryAdded"));
+        }
+    }
+
+    @Test
+    void canListenToNavigationStartedEvent()
+            throws ExecutionException, InterruptedException, TimeoutException {
+        try (BrowsingContextInspector inspector = new BrowsingContextInspector(driver)) {
+            CompletableFuture<NavigationInfo> future = new CompletableFuture<>();
+            inspector.onNavigationStarted(future::complete);
+
+            BrowsingContext context = new BrowsingContext(driver, driver.getWindowHandle());
+            context.navigate("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html", ReadinessState.COMPLETE);
+
+            NavigationInfo navigationInfo = future.get(5, TimeUnit.SECONDS);
+
+            Assertions.assertTrue(navigationInfo.getUrl().contains("bidi/logEntryAdded"));
+        }
+    }
+
+    @Test
+    void canListenToFragmentNavigatedEvent()
+            throws ExecutionException, InterruptedException, TimeoutException {
+        try (BrowsingContextInspector inspector = new BrowsingContextInspector(driver)) {
+            CompletableFuture<NavigationInfo> future = new CompletableFuture<>();
+
+            BrowsingContext context = new BrowsingContext(driver, driver.getWindowHandle());
+            context.navigate("https://www.selenium.dev/selenium/web/linked_image.html", ReadinessState.COMPLETE);
+
+            inspector.onFragmentNavigated(future::complete);
+
+            context.navigate("https://www.selenium.dev/selenium/web/linked_image.html#linkToAnchorOnThisPage", ReadinessState.COMPLETE);
+
+            NavigationInfo navigationInfo = future.get(5, TimeUnit.SECONDS);
+
+            Assertions.assertTrue(navigationInfo.getUrl().contains("linkToAnchorOnThisPage"));
+        }
+    }
+
+    @Test
+    void canListenToUserPromptOpenedEvent()
+            throws ExecutionException, InterruptedException, TimeoutException {
+        try (BrowsingContextInspector inspector = new BrowsingContextInspector(driver)) {
+            CompletableFuture<UserPromptOpened> future = new CompletableFuture<>();
+
+            BrowsingContext context = new BrowsingContext(driver, driver.getWindowHandle());
+            inspector.onUserPromptOpened(future::complete);
+
+            driver.get("https://www.selenium.dev/selenium/web/alerts.html");
+
+            driver.findElement(By.id("alert")).click();
+
+            UserPromptOpened userPromptOpened = future.get(5, TimeUnit.SECONDS);
+            Assertions.assertEquals(context.getId(), userPromptOpened.getBrowsingContextId());
+        }
+    }
+
+    @Test
+    void canListenToUserPromptClosedEvent()
+            throws ExecutionException, InterruptedException, TimeoutException {
+        try (BrowsingContextInspector inspector = new BrowsingContextInspector(driver)) {
+            CompletableFuture<UserPromptClosed> future = new CompletableFuture<>();
+
+            BrowsingContext context = new BrowsingContext(driver, driver.getWindowHandle());
+            inspector.onUserPromptClosed(future::complete);
+
+            driver.get("https://www.selenium.dev/selenium/web/alerts.html");
+
+            driver.findElement(By.id("prompt")).click();
+
+            context.handleUserPrompt(true, "selenium");
+
+            UserPromptClosed userPromptClosed = future.get(5, TimeUnit.SECONDS);
+            Assertions.assertEquals(context.getId(), userPromptClosed.getBrowsingContextId());
+        }
+    }
+
+    @Test
+    void canListenToBrowsingContextDestroyedEvent()
+            throws ExecutionException, InterruptedException, TimeoutException {
+        try (BrowsingContextInspector inspector = new BrowsingContextInspector(driver)) {
+            CompletableFuture<BrowsingContextInfo> future = new CompletableFuture<>();
+
+            inspector.onBrowsingContextDestroyed(future::complete);
+
+            String windowHandle = driver.switchTo().newWindow(WindowType.WINDOW).getWindowHandle();
+
+            driver.close();
+
+            BrowsingContextInfo browsingContextInfo = future.get(5, TimeUnit.SECONDS);
+
+            Assertions.assertEquals(windowHandle, browsingContextInfo.getId());
+            Assertions.assertTrue(browsingContextInfo.getUrl().contains("about:blank"));
+        }
+    }
+}
diff --git a/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java
index 6efc1425c899..ff611eff5d76 100644
--- a/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java
+++ b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java
@@ -1,10 +1,17 @@
 package dev.selenium.bidirectional.webdriver_bidi;
 
 import dev.selenium.BaseTest;
+
+import java.time.Duration;
 import java.util.List;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.JavascriptExecutor;
+import org.openqa.selenium.Rectangle;
+import org.openqa.selenium.WebElement;
 import org.openqa.selenium.WindowType;
 import org.openqa.selenium.bidi.BiDiException;
 import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
@@ -13,6 +20,12 @@
 import org.openqa.selenium.bidi.browsingcontext.ReadinessState;
 import org.openqa.selenium.firefox.FirefoxDriver;
 import org.openqa.selenium.firefox.FirefoxOptions;
+import org.openqa.selenium.print.PrintOptions;
+import org.openqa.selenium.remote.RemoteWebElement;
+import org.openqa.selenium.support.ui.WebDriverWait;
+
+import static org.openqa.selenium.support.ui.ExpectedConditions.titleIs;
+import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOfElementLocated;
 
 class BrowsingContextTest extends BaseTest {
 
@@ -21,6 +34,7 @@ public void setup() {
         FirefoxOptions options = new FirefoxOptions();
         options.setCapability("webSocketUrl", true);
         driver = new FirefoxDriver(options);
+        wait = new WebDriverWait(driver, Duration.ofSeconds(10));
     }
 
     @Test
@@ -36,28 +50,12 @@ void testCreateAWindow() {
         Assertions.assertNotNull(browsingContext.getId());
     }
 
-    @Test
-    void testCreateAWindowWithAReferenceContext() {
-        BrowsingContext
-                browsingContext =
-                new BrowsingContext(driver, WindowType.WINDOW, driver.getWindowHandle());
-        Assertions.assertNotNull(browsingContext.getId());
-    }
-
     @Test
     void testCreateATab() {
         BrowsingContext browsingContext = new BrowsingContext(driver, WindowType.TAB);
         Assertions.assertNotNull(browsingContext.getId());
     }
 
-    @Test
-    void testCreateATabWithAReferenceContext() {
-        BrowsingContext
-                browsingContext =
-                new BrowsingContext(driver, WindowType.TAB, driver.getWindowHandle());
-        Assertions.assertNotNull(browsingContext.getId());
-    }
-
     @Test
     void testNavigateToAUrl() {
         BrowsingContext browsingContext = new BrowsingContext(driver, WindowType.TAB);
@@ -141,4 +139,214 @@ void testCloseATab() {
 
         Assertions.assertThrows(BiDiException.class, tab2::getTree);
     }
+
+    @Test
+    void testActivateABrowsingContext() {
+        BrowsingContext window1 = new BrowsingContext(driver, driver.getWindowHandle());
+        BrowsingContext window2 = new BrowsingContext(driver, WindowType.WINDOW);
+
+        window1.activate();
+
+        boolean isFocused = (boolean) ((JavascriptExecutor) driver).executeScript("return document.hasFocus();");
+
+        Assertions.assertTrue(isFocused);
+    }
+
+    @Test
+    void testReloadABrowsingContext() {
+        BrowsingContext browsingContext = new BrowsingContext(driver, WindowType.TAB);
+
+        browsingContext.navigate("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html", ReadinessState.COMPLETE);
+
+        NavigationResult reloadInfo = browsingContext.reload(ReadinessState.INTERACTIVE);
+
+        Assertions.assertNotNull(reloadInfo.getNavigationId());
+        Assertions.assertTrue(reloadInfo.getUrl().contains("/bidi/logEntryAdded.html"));
+    }
+
+    @Test
+    void testHandleUserPrompt() {
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+
+        driver.get("https://www.selenium.dev/selenium/web/alerts.html");
+
+        driver.findElement(By.id("alert")).click();
+
+        browsingContext.handleUserPrompt();
+
+        Assertions.assertTrue(driver.getPageSource().contains("Testing Alerts and Stuff"));
+    }
+
+    @Test
+    void testAcceptUserPrompt() {
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+
+        driver.get("https://www.selenium.dev/selenium/web/alerts.html");
+
+        driver.findElement(By.id("alert")).click();
+
+        browsingContext.handleUserPrompt("true");
+
+        Assertions.assertTrue(driver.getPageSource().contains("Testing Alerts and Stuff"));
+    }
+
+    @Test
+    void testDismissUserPrompt() {
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+
+        driver.get("https://www.selenium.dev/selenium/web/alerts.html");
+
+        driver.findElement(By.id("alert")).click();
+
+        browsingContext.handleUserPrompt("true");
+
+        Assertions.assertTrue(driver.getPageSource().contains("Testing Alerts and Stuff"));
+    }
+
+    @Test
+    void testPassUserTextToUserPrompt() {
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+
+        driver.get("https://www.selenium.dev/selenium/web/alerts.html");
+
+        driver.findElement(By.id("prompt-with-default")).click();
+
+        String userText = "Selenium automates browsers";
+        browsingContext.handleUserPrompt(true, userText);
+
+        Assertions.assertTrue(driver.getPageSource().contains(userText));
+    }
+
+    @Test
+    void testDismissUserPromptWithText() {
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+
+        driver.get("https://www.selenium.dev/selenium/web/alerts.html");
+
+        driver.findElement(By.id("prompt-with-default")).click();
+
+        String userText = "Selenium automates browsers";
+        browsingContext.handleUserPrompt(false, userText);
+
+        Assertions.assertFalse(driver.getPageSource().contains(userText));
+    }
+
+    @Test
+    void textCaptureScreenshot() {
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+
+        driver.get("https://www.selenium.dev/selenium/web/alerts.html");
+
+        String screenshot = browsingContext.captureScreenshot();
+
+        Assertions.assertFalse(screenshot.isEmpty());
+    }
+
+    @Test
+    void textCaptureViewportScreenshot() {
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+
+        driver.get("https://www.selenium.dev/selenium/web/coordinates_tests/simple_page.html");
+
+        WebElement element = driver.findElement(By.id("box"));
+        Rectangle elementRectangle = element.getRect();
+
+        String screenshot =
+                browsingContext.captureBoxScreenshot(
+                        elementRectangle.getX(), elementRectangle.getY(), 5, 5);
+
+        Assertions.assertFalse(screenshot.isEmpty());
+    }
+
+    @Test
+    void textCaptureElementScreenshot() {
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+
+        driver.get("https://www.selenium.dev/selenium/web/formPage.html");
+        WebElement element = driver.findElement(By.id("checky"));
+
+        String screenshot = browsingContext.captureElementScreenshot(((RemoteWebElement) element).getId());
+
+        Assertions.assertFalse(screenshot.isEmpty());
+    }
+
+    @Test
+    void textSetViewport() {
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+        driver.get("https://www.selenium.dev/selenium/web/formPage.html");
+
+        browsingContext.setViewport(250, 300);
+
+        List<Long> newViewportSize =
+                (List<Long>)
+                        ((JavascriptExecutor) driver)
+                                .executeScript("return [window.innerWidth, window.innerHeight];");
+
+        Assertions.assertEquals(250, newViewportSize.get(0));
+        Assertions.assertEquals(300, newViewportSize.get(1));
+    }
+
+    @Test
+    void textSetViewportWithDevicePixelRatio() {
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+        driver.get("https://www.selenium.dev/selenium/web/formPage.html");
+
+        browsingContext.setViewport(250, 300, 5);
+
+        Long newDevicePixelRatio =
+                (Long) ((JavascriptExecutor) driver).executeScript("return window.devicePixelRatio");
+
+        Assertions.assertEquals(5, newDevicePixelRatio);
+    }
+
+    @Test
+    void testPrintPage() {
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+
+        driver.get("https://www.selenium.dev/selenium/web/formPage.html");
+        PrintOptions printOptions = new PrintOptions();
+
+        String printPage = browsingContext.print(printOptions);
+
+        Assertions.assertFalse(printPage.isEmpty());
+    }
+
+    @Test
+    void testNavigateBackInTheBrowserHistory() {
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+        browsingContext.navigate("https://www.selenium.dev/selenium/web/formPage.html", ReadinessState.COMPLETE);
+
+        wait.until(visibilityOfElementLocated(By.id("imageButton"))).submit();
+        wait.until(titleIs("We Arrive Here"));
+
+        browsingContext.back();
+        Assertions.assertTrue(driver.getPageSource().contains("We Leave From Here"));
+    }
+
+    @Test
+    void canNavigateForwardInTheBrowserHistory() {
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+        browsingContext.navigate("https://www.selenium.dev/selenium/web/formPage.html", ReadinessState.COMPLETE);
+
+        wait.until(visibilityOfElementLocated(By.id("imageButton"))).submit();
+        wait.until(titleIs("We Arrive Here"));
+
+        browsingContext.back();
+        Assertions.assertTrue(driver.getPageSource().contains("We Leave From Here"));
+
+        browsingContext.forward();
+        wait.until(titleIs("We Arrive Here"));
+    }
+
+    @Test
+    void canTraverseBrowserHistory() {
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+        browsingContext.navigate("https://www.selenium.dev/selenium/web/formPage.html", ReadinessState.COMPLETE);
+
+        wait.until(visibilityOfElementLocated(By.id("imageButton"))).submit();
+        wait.until(titleIs("We Arrive Here"));
+
+        browsingContext.traverseHistory(-1);
+        Assertions.assertTrue(driver.getPageSource().contains("We Leave From Here"));
+    }
 }
diff --git a/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LocateNodesTest.java b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LocateNodesTest.java
new file mode 100644
index 000000000000..04aaaf5f5a6f
--- /dev/null
+++ b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LocateNodesTest.java
@@ -0,0 +1,212 @@
+package dev.selenium.bidirectional.webdriver_bidi;
+
+import dev.selenium.BaseTest;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.bidi.module.Script;
+import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
+import org.openqa.selenium.bidi.browsingcontext.LocateNodeParameters;
+import org.openqa.selenium.bidi.browsingcontext.Locator;
+import org.openqa.selenium.bidi.browsingcontext.ReadinessState;
+import org.openqa.selenium.bidi.script.EvaluateResult;
+import org.openqa.selenium.bidi.script.EvaluateResultSuccess;
+import org.openqa.selenium.bidi.script.LocalValue;
+import org.openqa.selenium.bidi.script.NodeProperties;
+import org.openqa.selenium.bidi.script.RemoteReference;
+import org.openqa.selenium.bidi.script.RemoteValue;
+import org.openqa.selenium.bidi.script.ResultOwnership;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.firefox.FirefoxOptions;
+
+class LocateNodesTest extends BaseTest {
+
+    @BeforeEach
+    public void setup() {
+        FirefoxOptions options = new FirefoxOptions();
+        options.setCapability("webSocketUrl", true);
+        driver = new FirefoxDriver(options);
+    }
+
+    @Test
+    void testCreateABrowsingContextForGivenId() {
+        String id = driver.getWindowHandle();
+        BrowsingContext browsingContext = new BrowsingContext(driver, id);
+        Assertions.assertEquals(id, browsingContext.getId());
+    }
+
+    @Test
+    void canLocateNodes() {
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+        driver.get("https://www.selenium.dev/selenium/web/xhtmlTest.html");
+
+        LocateNodeParameters parameters = new LocateNodeParameters(Locator.css("div"));
+
+        List<RemoteValue> elements = browsingContext.locateNodes(parameters);
+        Assertions.assertEquals(13, elements.size());
+    }
+
+    @Test
+    void canLocateNodesWithJustLocator() {
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+        driver.get("https://www.selenium.dev/selenium/web/xhtmlTest.html");
+
+        List<RemoteValue> elements = browsingContext.locateNodes(Locator.css("div"));
+        Assertions.assertEquals(13, elements.size());
+    }
+
+    @Test
+    void canLocateNode() {
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+        driver.get("https://www.selenium.dev/selenium/web/xhtmlTest.html");
+
+        RemoteValue element = browsingContext.locateNode(Locator.css("div"));
+        Assertions.assertEquals("node", element.getType());
+    }
+
+    @Test
+    void canLocateNodesWithCSSLocator() {
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+
+        driver.get("https://www.selenium.dev/selenium/web/xhtmlTest.html");
+
+        LocateNodeParameters parameters =
+                new LocateNodeParameters(Locator.css("div.extraDiv, div.content"))
+                        .setMaxNodeCount(1);
+
+        List<RemoteValue> elements = browsingContext.locateNodes(parameters);
+
+        RemoteValue value = elements.get(0);
+        NodeProperties properties = (NodeProperties) value.getValue().get();
+        Assertions.assertEquals("div", properties.getLocalName().get());
+        Assertions.assertEquals("content", properties.getAttributes().get().get("class"));
+    }
+
+    @Test
+    void canLocateNodesWithXPathLocator() {
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+
+        driver.get("https://www.selenium.dev/selenium/web/xhtmlTest.html");
+
+        LocateNodeParameters parameters =
+                new LocateNodeParameters(Locator.xpath("/html/body/div[2]")).setMaxNodeCount(1);
+
+        List<RemoteValue> elements = browsingContext.locateNodes(parameters);
+
+        RemoteValue value = elements.get(0);
+        NodeProperties properties = (NodeProperties) value.getValue().get();
+        Assertions.assertEquals("div", properties.getLocalName().get());
+        Assertions.assertEquals("content", properties.getAttributes().get().get("class"));
+    }
+
+    @Test
+    @Disabled
+    void canLocateNodesWithInnerText() {
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+
+        driver.get("https://www.selenium.dev/selenium/web/xhtmlTest.html");
+
+        LocateNodeParameters parameters =
+                new LocateNodeParameters(Locator.innerText("Spaced out")).setMaxNodeCount(1);
+
+        List<RemoteValue> elements = browsingContext.locateNodes(parameters);
+
+        RemoteValue value = elements.get(0);
+        Assertions.assertEquals("node", value.getType());
+    }
+
+    @Test
+    void canLocateNodesWithMaxNodeCount() {
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+
+        driver.get("https://www.selenium.dev/selenium/web/xhtmlTest.html");
+
+        LocateNodeParameters parameters =
+                new LocateNodeParameters(Locator.css("div")).setMaxNodeCount(4);
+
+        List<RemoteValue> elements = browsingContext.locateNodes(parameters);
+        Assertions.assertEquals(4, elements.size());
+    }
+
+    @Test
+    void canLocateNodesGivenStartNodes() {
+        String handle = driver.getWindowHandle();
+        BrowsingContext browsingContext = new BrowsingContext(driver, handle);
+
+        driver.get("https://www.selenium.dev/selenium/web/formPage.html");
+
+        Script script = new Script(driver);
+        EvaluateResult result =
+                script.evaluateFunctionInBrowsingContext(
+                        handle,
+                        "document.querySelectorAll(\"form\")",
+                        false,
+                        Optional.of(ResultOwnership.ROOT));
+
+        EvaluateResultSuccess resultSuccess = (EvaluateResultSuccess) result;
+        List<RemoteReference> startNodes = new ArrayList<>();
+
+        RemoteValue remoteValue = resultSuccess.getResult();
+        List<RemoteValue> remoteValues = (List<RemoteValue>) remoteValue.getValue().get();
+
+        remoteValues.forEach(
+                value ->
+                        startNodes.add(
+                                new RemoteReference(RemoteReference.Type.SHARED_ID, value.getSharedId().get())));
+
+        LocateNodeParameters parameters =
+                new LocateNodeParameters(Locator.css("input"))
+                        .setStartNodes(startNodes)
+                        .setMaxNodeCount(50);
+
+        List<RemoteValue> elements = browsingContext.locateNodes(parameters);
+        Assertions.assertEquals(35, elements.size());
+    }
+
+    @Test
+    void canLocateNodesInAGivenSandbox() {
+        String sandbox = "sandbox";
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+
+        browsingContext.navigate("https://www.selenium.dev/selenium/web/xhtmlTest.html", ReadinessState.COMPLETE);
+
+        LocateNodeParameters parameters =
+                new LocateNodeParameters(Locator.css("div"))
+                        .setSandbox(sandbox)
+                        .setMaxNodeCount(1);
+
+        List<RemoteValue> elements = browsingContext.locateNodes(parameters);
+
+        String nodeId = elements.get(0).getSharedId().get();
+
+        List<LocalValue> arguments = new ArrayList<>();
+
+        LocalValue value = LocalValue.mapValue(Map.of("sharedId", LocalValue.stringValue(nodeId)));
+        arguments.add(value);
+
+        Script script = new Script(driver);
+
+        // Since the node was present in the sandbox, the script run in the same sandbox should be able
+        // to retrieve it
+        EvaluateResult result =
+                script.callFunctionInBrowsingContext(
+                        driver.getWindowHandle(),
+                        sandbox,
+                        "function(){ return arguments[0]; }",
+                        true,
+                        Optional.of(arguments),
+                        Optional.empty(),
+                        Optional.empty());
+
+        Map<String, Object> sharedIdMap =
+                (Map<String, Object>) ((EvaluateResultSuccess) result).getResult().getValue().get();
+
+        String sharedId = (String) ((RemoteValue) sharedIdMap.get("sharedId")).getValue().get();
+        Assertions.assertEquals(nodeId, sharedId);
+    }
+}
diff --git a/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java
index c5d634576faa..11ccec612536 100644
--- a/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java
+++ b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java
@@ -9,7 +9,7 @@
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.openqa.selenium.By;
-import org.openqa.selenium.bidi.LogInspector;
+import org.openqa.selenium.bidi.module.LogInspector;
 import org.openqa.selenium.bidi.log.ConsoleLogEntry;
 import org.openqa.selenium.bidi.log.JavascriptLogEntry;
 import org.openqa.selenium.bidi.log.LogLevel;
@@ -27,21 +27,6 @@ public void setup() {
         driver = new FirefoxDriver(options);
     }
 
-    @Test
-    public void jsErrors() {
-        CopyOnWriteArrayList<ConsoleLogEntry> logs = new CopyOnWriteArrayList<>();
-
-        try (LogInspector logInspector = new LogInspector(driver)) {
-            logInspector.onConsoleEntry(logs::add);
-        }
-
-        driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");
-        driver.findElement(By.id("consoleLog")).click();
-
-        new WebDriverWait(driver, Duration.ofSeconds(5)).until(_d -> !logs.isEmpty());
-        Assertions.assertEquals("Hello, world!", logs.get(0).getText());
-    }
-
     @Test
     void testListenToConsoleLog() throws ExecutionException, InterruptedException, TimeoutException {
         try (LogInspector logInspector = new LogInspector(driver)) {
@@ -54,7 +39,7 @@ void testListenToConsoleLog() throws ExecutionException, InterruptedException, T
             ConsoleLogEntry logEntry = future.get(5, TimeUnit.SECONDS);
 
             Assertions.assertEquals("Hello, world!", logEntry.getText());
-            Assertions.assertNull(logEntry.getRealm());
+
             Assertions.assertEquals(1, logEntry.getArgs().size());
             Assertions.assertEquals("console", logEntry.getType());
             Assertions.assertEquals("log", logEntry.getMethod());
diff --git a/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java
new file mode 100644
index 000000000000..8ff2f0e750ef
--- /dev/null
+++ b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java
@@ -0,0 +1,106 @@
+package dev.selenium.bidirectional.webdriver_bidi;
+
+import dev.selenium.BaseTest;
+import java.time.Duration;
+import java.time.temporal.ChronoUnit;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.Alert;
+import org.openqa.selenium.By;
+import org.openqa.selenium.TimeoutException;
+import org.openqa.selenium.UsernameAndPassword;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.bidi.module.Network;
+import org.openqa.selenium.bidi.network.AddInterceptParameters;
+import org.openqa.selenium.bidi.network.InterceptPhase;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.firefox.FirefoxOptions;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+
+class NetworkCommandsTest extends BaseTest {
+
+    @BeforeEach
+    public void setup() {
+        FirefoxOptions options = new FirefoxOptions();
+        options.setCapability("webSocketUrl", true);
+        driver = new FirefoxDriver(options);
+        wait = new WebDriverWait(driver, Duration.ofSeconds(10));
+    }
+
+    @Test
+    void canAddIntercept() {
+        try (Network network = new Network(driver)) {
+            String intercept =
+                    network.addIntercept(new AddInterceptParameters(InterceptPhase.BEFORE_REQUEST_SENT));
+            Assertions.assertNotNull(intercept);
+        }
+    }
+
+    @Test
+    void canRemoveIntercept() {
+        try (Network network = new Network(driver)) {
+            String intercept =
+                    network.addIntercept(new AddInterceptParameters(InterceptPhase.BEFORE_REQUEST_SENT));
+            Assertions.assertNotNull(intercept);
+            network.removeIntercept(intercept);
+        }
+    }
+
+    @Test
+    void canContinueWithAuthCredentials() {
+        try (Network network = new Network(driver)) {
+            network.addIntercept(new AddInterceptParameters(InterceptPhase.AUTH_REQUIRED));
+            network.onAuthRequired(
+                    responseDetails ->
+                            network.continueWithAuth(
+                                    responseDetails.getRequest().getRequestId(),
+                                    new UsernameAndPassword("admin", "admin")));
+            driver.get("https://the-internet.herokuapp.com/basic_auth");
+            String successMessage = "Congratulations! You must have the proper credentials.";
+            WebElement elementMessage = driver.findElement(By.tagName("p"));
+            Assertions.assertEquals(successMessage, elementMessage.getText());
+        }
+    }
+
+    @Test
+    void canContinueWithoutAuthCredentials() {
+        try (Network network = new Network(driver)) {
+            network.addIntercept(new AddInterceptParameters(InterceptPhase.AUTH_REQUIRED));
+            network.onAuthRequired(
+                    responseDetails ->
+                            // Does not handle the alert
+                            network.continueWithAuthNoCredentials(responseDetails.getRequest().getRequestId()));
+            driver.get("https://the-internet.herokuapp.com/basic_auth");
+            Alert alert = wait.until(ExpectedConditions.alertIsPresent());
+            alert.dismiss();
+            Assertions.assertTrue(driver.getPageSource().contains("Not authorized"));
+        }
+    }
+
+    @Test
+    void canCancelAuth() {
+        try (Network network = new Network(driver)) {
+            network.addIntercept(new AddInterceptParameters(InterceptPhase.AUTH_REQUIRED));
+            network.onAuthRequired(
+                    responseDetails ->
+                            // Does not handle the alert
+                            network.cancelAuth(responseDetails.getRequest().getRequestId()));
+            driver.get("https://the-internet.herokuapp.com/basic_auth");
+            Assertions.assertTrue(driver.getPageSource().contains("Not authorized"));
+        }
+    }
+
+    @Test
+    void canFailRequest() {
+        try (Network network = new Network(driver)) {
+            network.addIntercept(new AddInterceptParameters(InterceptPhase.BEFORE_REQUEST_SENT));
+            network.onBeforeRequestSent(
+                    responseDetails -> network.failRequest(responseDetails.getRequest().getRequestId()));
+            driver.manage().timeouts().pageLoadTimeout(Duration.of(5, ChronoUnit.SECONDS));
+            Assertions.assertThrows(TimeoutException.class, () -> driver.get("https://the-internet.herokuapp.com/basic_auth"));
+            }
+    }
+}
diff --git a/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkEventsTest.java b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkEventsTest.java
new file mode 100644
index 000000000000..d00d5af9ce8d
--- /dev/null
+++ b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkEventsTest.java
@@ -0,0 +1,113 @@
+package dev.selenium.bidirectional.webdriver_bidi;
+
+import dev.selenium.BaseTest;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.Cookie;
+import org.openqa.selenium.bidi.module.Network;
+import org.openqa.selenium.bidi.network.BeforeRequestSent;
+import org.openqa.selenium.bidi.network.ResponseDetails;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.firefox.FirefoxOptions;
+
+class NetworkEventsTest extends BaseTest {
+
+    @BeforeEach
+    public void setup() {
+        FirefoxOptions options = new FirefoxOptions();
+        options.setCapability("webSocketUrl", true);
+        driver = new FirefoxDriver(options);
+    }
+
+    @Test
+    void canListenToBeforeRequestSentEvent()
+            throws ExecutionException, InterruptedException, TimeoutException {
+        try (Network network = new Network(driver)) {
+            CompletableFuture<BeforeRequestSent> future = new CompletableFuture<>();
+            network.onBeforeRequestSent(future::complete);
+            driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");
+
+            BeforeRequestSent requestSent = future.get(5, TimeUnit.SECONDS);
+            String windowHandle = driver.getWindowHandle();
+            Assertions.assertEquals(windowHandle, requestSent.getBrowsingContextId());
+            Assertions.assertEquals("get", requestSent.getRequest().getMethod().toLowerCase());
+        }
+    }
+
+    @Test
+    void canListenToResponseStartedEvent()
+            throws ExecutionException, InterruptedException, TimeoutException {
+        try (Network network = new Network(driver)) {
+            CompletableFuture<ResponseDetails> future = new CompletableFuture<>();
+            network.onResponseStarted(future::complete);
+            driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");
+
+            ResponseDetails response = future.get(5, TimeUnit.SECONDS);
+            String windowHandle = driver.getWindowHandle();
+
+            Assertions.assertEquals(windowHandle, response.getBrowsingContextId());
+            Assertions.assertEquals("get", response.getRequest().getMethod().toLowerCase());
+            Assertions.assertEquals(200L, response.getResponseData().getStatus());
+        }
+    }
+
+    @Test
+    void canListenToResponseCompletedEvent()
+            throws ExecutionException, InterruptedException, TimeoutException {
+        try (Network network = new Network(driver)) {
+            CompletableFuture<ResponseDetails> future = new CompletableFuture<>();
+            network.onResponseCompleted(future::complete);
+            driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");
+
+            ResponseDetails response = future.get(5, TimeUnit.SECONDS);
+            String windowHandle = driver.getWindowHandle();
+
+            Assertions.assertEquals(windowHandle, response.getBrowsingContextId());
+            Assertions.assertEquals("get", response.getRequest().getMethod().toLowerCase());
+            Assertions.assertEquals(200L, response.getResponseData().getStatus());
+        }
+    }
+
+    @Test
+    void canListenToResponseCompletedEventWithCookie()
+            throws ExecutionException, InterruptedException, TimeoutException {
+        try (Network network = new Network(driver)) {
+            CompletableFuture<BeforeRequestSent> future = new CompletableFuture<>();
+
+            driver.get("https://www.selenium.dev/selenium/web/blankPage");
+            driver.manage().addCookie(new Cookie("foo", "bar"));
+            network.onBeforeRequestSent(future::complete);
+            driver.navigate().refresh();
+
+            BeforeRequestSent requestSent = future.get(5, TimeUnit.SECONDS);
+            String windowHandle = driver.getWindowHandle();
+
+            Assertions.assertEquals(windowHandle, requestSent.getBrowsingContextId());
+            Assertions.assertEquals("get", requestSent.getRequest().getMethod().toLowerCase());
+
+            Assertions.assertEquals("foo", requestSent.getRequest().getCookies().get(0).getName());
+            Assertions.assertEquals("bar", requestSent.getRequest().getCookies().get(0).getValue().getValue());
+        }
+    }
+
+    @Test
+    void canListenToOnAuthRequiredEvent()
+            throws ExecutionException, InterruptedException, TimeoutException {
+        try (Network network = new Network(driver)) {
+            CompletableFuture<ResponseDetails> future = new CompletableFuture<>();
+            network.onAuthRequired(future::complete);
+            driver.get("https://the-internet.herokuapp.com/basic_auth");
+
+            ResponseDetails response = future.get(5, TimeUnit.SECONDS);
+            String windowHandle = driver.getWindowHandle();
+            Assertions.assertEquals(windowHandle, response.getBrowsingContextId());
+            Assertions.assertEquals("get", response.getRequest().getMethod().toLowerCase());
+            Assertions.assertEquals(401L, response.getResponseData().getStatus());
+        }
+    }
+}
diff --git a/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptEventsTest.java b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptEventsTest.java
new file mode 100644
index 000000000000..b3f1ffae952e
--- /dev/null
+++ b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptEventsTest.java
@@ -0,0 +1,87 @@
+package dev.selenium.bidirectional.webdriver_bidi;
+
+import dev.selenium.BaseTest;
+import java.util.List;
+import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.condition.DisabledOnOs;
+import org.junit.jupiter.api.condition.OS;
+import org.openqa.selenium.bidi.module.Script;
+import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
+import org.openqa.selenium.bidi.script.LocalValue;
+import org.openqa.selenium.bidi.script.Message;
+import org.openqa.selenium.bidi.script.RealmInfo;
+import org.openqa.selenium.bidi.script.RealmType;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.firefox.FirefoxOptions;
+
+class ScriptEventsTest extends BaseTest {
+
+    @BeforeEach
+    public void setup() {
+        FirefoxOptions options = new FirefoxOptions();
+        options.setCapability("webSocketUrl", true);
+        driver = new FirefoxDriver(options);
+    }
+    
+    @Test
+    void canListenToChannelMessage()
+            throws ExecutionException, InterruptedException, TimeoutException {
+        try (Script script = new Script(driver)) {
+            CompletableFuture<Message> future = new CompletableFuture<>();
+            script.onMessage(future::complete);
+
+            script.callFunctionInBrowsingContext(
+                    driver.getWindowHandle(),
+                    "(channel) => channel('foo')",
+                    false,
+                    Optional.of(List.of(LocalValue.channelValue("channel_name"))),
+                    Optional.empty(),
+                    Optional.empty());
+
+            Message message = future.get(5, TimeUnit.SECONDS);
+            Assertions.assertEquals("channel_name", message.getChannel());
+        }
+    }
+
+    @Test
+    @DisabledOnOs(value = OS.MAC, disabledReason = "Works locally, times out on CI")
+    void canListenToRealmCreatedEvent()
+            throws ExecutionException, InterruptedException, TimeoutException {
+        try (Script script = new Script(driver)) {
+            CompletableFuture<RealmInfo> future = new CompletableFuture<>();
+            script.onRealmCreated(future::complete);
+
+            BrowsingContext context = new BrowsingContext(driver, driver.getWindowHandle());
+
+            context.navigate("https://www.selenium.dev/selenium/blankPage");
+            RealmInfo realmInfo = future.get(5, TimeUnit.SECONDS);
+            Assertions.assertNotNull(realmInfo.getRealmId());
+            Assertions.assertEquals(RealmType.WINDOW, realmInfo.getRealmType());
+        }
+    }
+
+    @Test
+    @Disabled
+    void canListenToRealmDestroyedEvent()
+            throws ExecutionException, InterruptedException, TimeoutException {
+        try (Script script = new Script(driver)) {
+            CompletableFuture<RealmInfo> future = new CompletableFuture<>();
+            script.onRealmDestroyed(future::complete);
+
+            BrowsingContext context = new BrowsingContext(driver, driver.getWindowHandle());
+
+            context.close();
+            RealmInfo realmInfo = future.get(5, TimeUnit.SECONDS);
+            Assertions.assertNotNull(realmInfo.getRealmId());
+            Assertions.assertEquals(RealmType.WINDOW, realmInfo.getRealmType());
+        }
+    }
+}
diff --git a/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java
new file mode 100644
index 000000000000..2e1ab65e9355
--- /dev/null
+++ b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java
@@ -0,0 +1,494 @@
+package dev.selenium.bidirectional.webdriver_bidi;
+
+import dev.selenium.BaseTest;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriverException;
+import org.openqa.selenium.WindowType;
+import org.openqa.selenium.bidi.module.LogInspector;
+import org.openqa.selenium.bidi.module.Script;
+import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
+import org.openqa.selenium.bidi.browsingcontext.ReadinessState;
+import org.openqa.selenium.bidi.log.ConsoleLogEntry;
+import org.openqa.selenium.bidi.script.ChannelValue;
+import org.openqa.selenium.bidi.script.EvaluateResult;
+import org.openqa.selenium.bidi.script.EvaluateResultExceptionValue;
+import org.openqa.selenium.bidi.script.EvaluateResultSuccess;
+import org.openqa.selenium.bidi.script.LocalValue;
+import org.openqa.selenium.bidi.script.ObjectLocalValue;
+import org.openqa.selenium.bidi.script.PrimitiveProtocolValue;
+import org.openqa.selenium.bidi.script.RealmInfo;
+import org.openqa.selenium.bidi.script.RealmType;
+import org.openqa.selenium.bidi.script.RemoteReference;
+import org.openqa.selenium.bidi.script.ResultOwnership;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.firefox.FirefoxOptions;
+
+class ScriptTest extends BaseTest {
+
+    @BeforeEach
+    public void setup() {
+        FirefoxOptions options = new FirefoxOptions();
+        options.setCapability("webSocketUrl", true);
+        driver = new FirefoxDriver(options);
+    }
+
+    @Test
+    void canCallFunction() {
+        String id = driver.getWindowHandle();
+        try (Script script = new Script(id, driver)) {
+            List<LocalValue> arguments = new ArrayList<>();
+            arguments.add(PrimitiveProtocolValue.numberValue(22));
+
+            Map<Object, LocalValue> value = new HashMap<>();
+            value.put("some_property", LocalValue.numberValue(42));
+            LocalValue thisParameter = LocalValue.objectValue(value);
+
+            arguments.add(thisParameter);
+
+            EvaluateResult result =
+                    script.callFunctionInBrowsingContext(
+                            id,
+                            "function processWithPromise(argument) {\n"
+                                    + "  return new Promise((resolve, reject) => {\n"
+                                    + "    setTimeout(() => {\n"
+                                    + "      resolve(argument + this.some_property);\n"
+                                    + "    }, 1000)\n"
+                                    + "  })\n"
+                                    + "}",
+                            true,
+                            Optional.of(arguments),
+                            Optional.of(thisParameter),
+                            Optional.of(ResultOwnership.ROOT));
+
+            EvaluateResultSuccess successResult = (EvaluateResultSuccess) result;
+            Assertions.assertEquals(64L, (Long) successResult.getResult().getValue().get());
+        }
+    }
+
+    @Test
+    void canCallFunctionWithDeclaration() {
+        String id = driver.getWindowHandle();
+        try (Script script = new Script(id, driver)) {
+            EvaluateResult result =
+                    script.callFunctionInBrowsingContext(
+                            id, "()=>{return 1+2;}", false, Optional.empty(), Optional.empty(), Optional.empty());
+            EvaluateResultSuccess successResult = (EvaluateResultSuccess) result;
+            Assertions.assertEquals(3L, (Long) successResult.getResult().getValue().get());
+        }
+    }
+
+    @Test
+    void canCallFunctionWithArguments() {
+        String id = driver.getWindowHandle();
+        try (Script script = new Script(id, driver)) {
+            List<LocalValue> arguments = new ArrayList<>();
+            LocalValue value1 = PrimitiveProtocolValue.stringValue("ARGUMENT_STRING_VALUE");
+            LocalValue value2 = PrimitiveProtocolValue.numberValue(42);
+            arguments.add(value1);
+            arguments.add(value2);
+
+            EvaluateResult result =
+                    script.callFunctionInBrowsingContext(
+                            id,
+                            "(...args)=>{return args}",
+                            false,
+                            Optional.of(arguments),
+                            Optional.empty(),
+                            Optional.empty());
+
+            EvaluateResultSuccess successResult = (EvaluateResultSuccess) result;
+            Assertions.assertEquals(2, ((List<Object>) successResult.getResult().getValue().get()).size());
+        }
+    }
+
+    @Test
+    void canCallFunctionWithAwaitPromise() {
+        String id = driver.getWindowHandle();
+    try (Script script = new Script(id, driver)) {
+        EvaluateResult result =
+                script.callFunctionInBrowsingContext(
+                        id,
+                        "async function() {{\n"
+                                + "            await new Promise(r => setTimeout(() => r(), 0));\n"
+                                + "            return \"SOME_DELAYED_RESULT\";\n"
+                                + "          }}",
+                        true,
+                        Optional.empty(),
+                        Optional.empty(),
+                        Optional.empty());
+        EvaluateResultSuccess successResult = (EvaluateResultSuccess) result;
+        Assertions.assertEquals("SOME_DELAYED_RESULT", (String) successResult.getResult().getValue().get());
+        }
+    }
+
+    @Test
+    void canCallFunctionWithThisParameter() {
+        String id = driver.getWindowHandle();
+    try (Script script = new Script(id, driver)) {
+        Map<Object, LocalValue> value = new HashMap<>();
+        value.put("some_property", PrimitiveProtocolValue.numberValue(42));
+        LocalValue thisParameter = LocalValue.objectValue(value);
+
+        EvaluateResult result =
+                script.callFunctionInBrowsingContext(
+                        id,
+                        "function(){return this.some_property}",
+                        false,
+                        Optional.empty(),
+                        Optional.of(thisParameter),
+                        Optional.empty());
+
+        EvaluateResultSuccess successResult = (EvaluateResultSuccess) result;
+        Assertions.assertEquals("number", successResult.getResult().getType());
+        Assertions.assertEquals(42L, (Long) successResult.getResult().getValue().get());
+        }
+    }
+
+    @Test
+    void canCallFunctionWithOwnershipRoot() {
+        String id = driver.getWindowHandle();
+        try (Script script = new Script(id, driver)) {
+            EvaluateResult result =
+                    script.callFunctionInBrowsingContext(
+                            id,
+                            "async function(){return {a:1}}",
+                            true,
+                            Optional.empty(),
+                            Optional.empty(),
+                            Optional.of(ResultOwnership.ROOT));
+
+            EvaluateResultSuccess successResult = (EvaluateResultSuccess) result;
+            Assertions.assertTrue(successResult.getResult().getHandle().isPresent());
+            }
+        }
+
+    @Test
+    void canCallFunctionThatThrowsException() {
+        String id = driver.getWindowHandle();
+    try (Script script = new Script(id, driver)) {
+        EvaluateResult result =
+                script.callFunctionInBrowsingContext(
+                        id,
+                        "))) !!@@## some invalid JS script (((",
+                        false,
+                        Optional.empty(),
+                        Optional.empty(),
+                        Optional.empty());
+        EvaluateResultExceptionValue exception = (EvaluateResultExceptionValue) result;
+        Assertions.assertEquals("error", exception.getExceptionDetails().getException().getType());
+        Assertions.assertEquals(
+                "SyntaxError: expected expression, got ')'", exception.getExceptionDetails().getText());
+        }
+    }
+
+    @Test
+    void canCallFunctionInASandBox() {
+        String id = driver.getWindowHandle();
+        try (Script script = new Script(id, driver)) {
+            EvaluateResult result =
+                    script.callFunctionInBrowsingContext(
+                            id,
+                            "sandbox",
+                            "() => window.foo",
+                            true,
+                            Optional.empty(),
+                            Optional.empty(),
+                            Optional.empty());
+
+        Assertions.assertEquals(EvaluateResult.Type.SUCCESS, result.getResultType());
+        }
+    }
+
+    @Test
+    void canCallFunctionInARealm() {
+        String tab = driver.getWindowHandle();
+        try (Script script = new Script(tab, driver)) {
+            List<RealmInfo> realms = script.getAllRealms();
+            String realmId = realms.get(0).getRealmId();
+
+            EvaluateResult result = script.callFunctionInRealm(
+                    realmId,
+                    "() => { window.foo = 3; }",
+                    true,
+                    Optional.empty(),
+                    Optional.empty(),
+                    Optional.empty());
+
+            Assertions.assertEquals(EvaluateResult.Type.SUCCESS, result.getResultType());
+        }
+    }
+
+    @Test
+    void canEvaluateScript() {
+        String id = driver.getWindowHandle();
+
+        try (Script script = new Script(id, driver)) {
+            EvaluateResult result =
+                    script.evaluateFunctionInBrowsingContext(id, "1 + 2", true, Optional.empty());
+
+            EvaluateResultSuccess successResult = (EvaluateResultSuccess) result;
+            Assertions.assertEquals(EvaluateResult.Type.SUCCESS, result.getResultType());
+            Assertions.assertEquals(3L, (Long) successResult.getResult().getValue().get());
+        }
+    }
+
+    @Test
+    void canEvaluateScriptThatThrowsException() {
+        String id = driver.getWindowHandle();
+        try (Script script = new Script(id, driver)) {
+            EvaluateResult result =
+                    script.evaluateFunctionInBrowsingContext(
+                            id, "))) !!@@## some invalid JS script (((", false, Optional.empty());
+
+            EvaluateResultExceptionValue exception = (EvaluateResultExceptionValue) result;
+            Assertions.assertEquals("error", exception.getExceptionDetails().getException().getType());
+            Assertions.assertEquals(
+                    "SyntaxError: expected expression, got ')'", exception.getExceptionDetails().getText());
+        }
+    }
+
+    @Test
+    void canEvaluateScriptWithResulWithOwnership() {
+        String id = driver.getWindowHandle();
+        try (Script script = new Script(id, driver)) {
+            EvaluateResult result =
+                    script.evaluateFunctionInBrowsingContext(
+                            id, "Promise.resolve({a:1})", true, Optional.of(ResultOwnership.ROOT));
+
+            EvaluateResultSuccess successResult = (EvaluateResultSuccess) result;
+            Assertions.assertTrue(successResult.getResult().getHandle().isPresent());
+        }
+    }
+
+    @Test
+    void canEvaluateInASandBox() {
+        String id = driver.getWindowHandle();
+        try (Script script = new Script(id, driver)) {
+            EvaluateResult result =
+                    script.evaluateFunctionInBrowsingContext(
+                            id, "sandbox", "window.foo", true, Optional.empty());
+
+
+            Assertions.assertEquals(EvaluateResult.Type.SUCCESS, result.getResultType());
+        }
+    }
+
+    @Test
+    void canEvaluateInARealm() {
+        String tab = driver.getWindowHandle();
+        try (Script script = new Script(tab, driver)) {
+            List<RealmInfo> realms = script.getAllRealms();
+            String realmId = realms.get(0).getRealmId();
+
+            EvaluateResult result =
+                    script.evaluateFunctionInRealm(
+                            realmId, "window.foo", true, Optional.empty());
+
+            Assertions.assertEquals(EvaluateResult.Type.SUCCESS, result.getResultType());
+        }
+    }
+
+    @Test
+    void canDisownHandle() {
+        String window = driver.getWindowHandle();
+        try (Script script = new Script(window, driver)) {
+            BrowsingContext context = new BrowsingContext(driver, window);
+
+            context.navigate("https://www.selenium.dev/selenium/web/dynamic.html", ReadinessState.COMPLETE);
+
+            driver.findElement(By.id("adder")).click();
+
+            getLocatedElement(driver, By.id("box0"));
+
+            EvaluateResult result =
+                    script.evaluateFunctionInBrowsingContext(
+                            window, "document.querySelector('.redbox');", false, Optional.of(ResultOwnership.ROOT));
+            String boxId = ((EvaluateResultSuccess)result).getResult().getHandle().get();
+
+            script.disownBrowsingContextScript(
+                            window, List.of(boxId));
+
+            LocalValue value =
+                    LocalValue.remoteReference(
+                            RemoteReference.Type.HANDLE, boxId);
+
+            // Since the handle is now eligible for garbage collections, it is no longer available to be used.
+            Assertions.assertThrows(WebDriverException.class, () -> script.callFunctionInBrowsingContext(
+                    window,
+                    "arg => arg.a",
+                    false, Optional.of(List.of(value)),
+                    Optional.empty(),
+                    Optional.empty()));
+        }
+    }
+
+    @Test
+    void canDisownHandleInARealm() {
+        String window = driver.getWindowHandle();
+        try (Script script = new Script(window, driver)) {
+            BrowsingContext context = new BrowsingContext(driver, window);
+
+            context.navigate("https://www.selenium.dev/selenium/web/dynamic.html", ReadinessState.COMPLETE);
+
+            driver.findElement(By.id("adder")).click();
+
+            getLocatedElement(driver, By.id("box0"));
+
+            List<RealmInfo> realms = script.getAllRealms();
+            String realmId = realms.get(0).getRealmId();
+
+            // Retrieve the handle for the element added to DOM
+            EvaluateResult result =
+                    script.evaluateFunctionInBrowsingContext(
+                            window, "document.querySelector('.redbox');", false, Optional.of(ResultOwnership.ROOT));
+            String boxId = ((EvaluateResultSuccess)result).getResult().getHandle().get();
+
+            LocalValue value =
+                    LocalValue.remoteReference(
+                            RemoteReference.Type.HANDLE, boxId);
+
+            EvaluateResult checkHandle = script.callFunctionInBrowsingContext(
+                    window,
+                    "arg => arg.a",
+                    false, Optional.of(List.of(value)),
+                    Optional.empty(),
+                    Optional.empty());
+
+            // The handle is present in memory, else it would result in exception
+            Assertions.assertEquals(EvaluateResult.Type.SUCCESS, checkHandle.getResultType());
+
+            // Useful to memory management in a dynamic webpage where DOM mutations happen often
+            script.disownRealmScript(realmId, List.of(boxId));
+
+            // Since the handle is now eligible for garbage collections, it is no longer available to be used.
+            Assertions.assertThrows(WebDriverException.class, () -> script.callFunctionInBrowsingContext(
+                    window,
+                    "arg => arg.a",
+                    false, Optional.of(List.of(value)),
+                    Optional.empty(),
+                    Optional.empty()));
+        }
+    }
+
+    @Test
+    void canGetAllRealms() {
+        String firstWindow = driver.getWindowHandle();
+        String secondWindow = driver.switchTo().newWindow(WindowType.WINDOW).getWindowHandle();
+        try (Script script = new Script(firstWindow, driver)) {
+            List<RealmInfo> realms = script.getAllRealms();
+            Assertions.assertEquals(2, realms.size());
+        }
+    }
+
+    @Test
+    void canGetRealmByType() {
+        String firstWindow = driver.getWindowHandle();
+        String secondWindow = driver.switchTo().newWindow(WindowType.WINDOW).getWindowHandle();
+        try (Script script = new Script(firstWindow, driver)) {
+            List<RealmInfo> realms = script.getRealmsByType(RealmType.WINDOW);
+            Assertions.assertEquals(2, realms.size());
+        }
+    }
+
+    @Test
+    void canGetRealmInBrowsingContext() {
+        String windowId = driver.getWindowHandle();
+        String tabId = driver.switchTo().newWindow(WindowType.TAB).getWindowHandle();
+        try (Script script = new Script(windowId, driver)) {
+            List<RealmInfo> realms = script.getRealmsInBrowsingContext(tabId);
+            Assertions.assertEquals(1, realms.size());
+        }
+    }
+
+    @Test
+    void canGetRealmInBrowsingContextByType() {
+        String windowId = driver.getWindowHandle();
+        String tabId = driver.switchTo().newWindow(WindowType.TAB).getWindowHandle();
+        try (Script script = new Script(windowId, driver)) {
+            List<RealmInfo> windowRealms =
+                    script.getRealmsInBrowsingContextByType(windowId, RealmType.WINDOW);
+            Assertions.assertEquals(1, windowRealms.size());
+        }
+    }
+
+    @Test
+    void canAddPreloadScript() throws ExecutionException, InterruptedException, TimeoutException {
+        try (Script script = new Script(driver)) {
+            String id =
+                    script.addPreloadScript("() => {{ console.log('{preload_script_console_text}') }}");
+
+            Assertions.assertNotNull(id);
+
+            try (LogInspector logInspector = new LogInspector(driver)) {
+                CompletableFuture<ConsoleLogEntry> future = new CompletableFuture<>();
+                logInspector.onConsoleEntry(future::complete);
+
+                driver.get("https://www.selenium.dev/selenium/blankPage");
+
+                ConsoleLogEntry logEntry = future.get(5, TimeUnit.SECONDS);
+
+                Assertions.assertEquals("{preload_script_console_text}", logEntry.getText());
+            }
+        }
+    }
+
+    @Test
+    void canAddPreloadScriptWithArguments() {
+        try (Script script = new Script(driver)) {
+            String id =
+                    script.addPreloadScript(
+                            "(channel) => channel('will_be_send', 'will_be_ignored')",
+                            List.of(new ChannelValue("channel_name")));
+            Assertions.assertNotNull(id);
+        }
+    }
+
+    @Test
+    void canAddPreloadScriptInASandbox() {
+        try (Script script = new Script(driver)) {
+            String id = script.addPreloadScript("() => { window.bar=2; }", "sandbox");
+            Assertions.assertNotNull(id);
+            driver.get("https://www.selenium.dev/selenium/blankPage");
+
+            EvaluateResult result =
+                    script.evaluateFunctionInBrowsingContext(
+                            driver.getWindowHandle(), "sandbox", "window.bar", true, Optional.empty());
+            Assertions.assertEquals(EvaluateResult.Type.SUCCESS, result.getResultType());
+        }
+    }
+
+    @Test
+    void canRemovePreloadScript() throws ExecutionException, InterruptedException, TimeoutException {
+        try (Script script = new Script(driver)) {
+            String id =
+                    script.addPreloadScript("() => {{ console.log('{preload_script_console_text}') }}");
+
+            Assertions.assertNotNull(id);
+
+            try (LogInspector logInspector = new LogInspector(driver)) {
+                CompletableFuture<ConsoleLogEntry> future = new CompletableFuture<>();
+                logInspector.onConsoleEntry(future::complete);
+
+                script.removePreloadScript(id);
+
+                driver.get("https://www.selenium.dev/selenium/blankPage");
+
+                Assertions.assertThrows(TimeoutException.class, () -> future.get(5, TimeUnit.SECONDS));
+            }
+        }
+    }
+}
diff --git a/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/high_level/LogTest.java b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/high_level/LogTest.java
new file mode 100644
index 000000000000..62d37c431306
--- /dev/null
+++ b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/high_level/LogTest.java
@@ -0,0 +1,89 @@
+package dev.selenium.bidirectional.webdriver_bidi.high_level;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.bidi.log.ConsoleLogEntry;
+import org.openqa.selenium.bidi.log.JavascriptLogEntry;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.firefox.FirefoxOptions;
+import org.openqa.selenium.remote.RemoteWebDriver;
+
+import dev.selenium.BaseTest;
+
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+class LogTest extends BaseTest {
+
+  @BeforeEach
+  public void setup() {
+    FirefoxOptions options = new FirefoxOptions();
+    options.setCapability("webSocketUrl", true);
+    driver = new FirefoxDriver(options);
+  }
+
+  @Test
+  void canAddConsoleMessageHandler()
+      throws ExecutionException, InterruptedException, TimeoutException {
+    CompletableFuture<ConsoleLogEntry> future = new CompletableFuture<>();
+
+    long id = ((RemoteWebDriver) driver).script().addConsoleMessageHandler(future::complete);
+
+    driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");
+    driver.findElement(By.id("consoleLog")).click();
+
+    ConsoleLogEntry logEntry = future.get(5, TimeUnit.SECONDS);
+
+    Assertions.assertEquals("Hello, world!", logEntry.getText());
+
+    ((RemoteWebDriver) driver).script().removeConsoleMessageHandler(id);
+  }
+
+  @Test
+  void canRemoveConsoleMessageHandler() {
+    CopyOnWriteArrayList<ConsoleLogEntry> logs = new CopyOnWriteArrayList<>();
+
+    driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");
+
+    long id = ((RemoteWebDriver) driver).script().addConsoleMessageHandler(logs::add);
+    ((RemoteWebDriver) driver).script().removeConsoleMessageHandler(id);
+
+    driver.findElement(By.id("consoleLog")).click();
+
+    Assertions.assertEquals(0, logs.size());
+  }
+
+  @Test
+  void canAddJsErrorHandler() throws ExecutionException, InterruptedException, TimeoutException {
+    CompletableFuture<JavascriptLogEntry> future = new CompletableFuture<>();
+
+    long id = ((RemoteWebDriver) driver).script().addJavaScriptErrorHandler(future::complete);
+
+    driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");
+    driver.findElement(By.id("jsException")).click();
+
+    JavascriptLogEntry logEntry = future.get(5, TimeUnit.SECONDS);
+
+    Assertions.assertEquals("Error: Not working", logEntry.getText());
+
+    ((RemoteWebDriver) driver).script().removeJavaScriptErrorHandler(id);
+  }
+
+  @Test
+  void canRemoveJsErrorHandler() {
+    CopyOnWriteArrayList<JavascriptLogEntry> logs = new CopyOnWriteArrayList<>();
+
+    long id = ((RemoteWebDriver) driver).script().addJavaScriptErrorHandler(logs::add);
+    ((RemoteWebDriver) driver).script().removeJavaScriptErrorHandler(id);
+
+    driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");
+    driver.findElement(By.id("jsException")).click();
+
+    Assertions.assertEquals(0, logs.size());
+  }
+}
diff --git a/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/user_context/MultipleInstanceParallelTest.java b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/user_context/MultipleInstanceParallelTest.java
new file mode 100644
index 000000000000..7f5b5a6ccc1d
--- /dev/null
+++ b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/user_context/MultipleInstanceParallelTest.java
@@ -0,0 +1,92 @@
+package dev.selenium.bidirectional.webdriver_bidi.user_context;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.firefox.FirefoxOptions;
+
+class MultipleInstanceParallelTest {
+
+  private WebDriver driver;
+
+  @BeforeEach
+  public void setup() {
+    FirefoxOptions options = new FirefoxOptions();
+    options.setCapability("webSocketUrl", true);
+    options.addArguments("-private");
+    driver = new FirefoxDriver(options);
+  }
+
+  @Test
+  void canSwitchToBlue() {
+    driver.get("https://www.selenium.dev/selenium/web/cookie-background.html");
+
+    WebElement body = driver.findElement(By.tagName("body"));
+    String bgColor = body.getCssValue("background-color");
+
+    String expectedColor = "rgb(255, 255, 255)";
+    // Background color is white
+    Assertions.assertEquals(bgColor, expectedColor);
+
+    driver.get("https://www.selenium.dev/selenium/web/cookie-background.html");
+
+    driver.findElement(By.id("blue-btn")).click();
+    body = driver.findElement(By.tagName("body"));
+    bgColor = body.getCssValue("background-color");
+
+    expectedColor = "rgb(173, 216, 230)";
+    // Background color is blue
+    Assertions.assertEquals(bgColor, expectedColor);
+
+    System.out.println(
+        Thread.currentThread().getName() + " " + Thread.currentThread().getStackTrace()[1]
+            .getMethodName() + " => executed successfully");
+  }
+
+  @Test
+  void canSwitchToGreen() {
+    driver.get("https://www.selenium.dev/selenium/web/cookie-background.html");
+
+    WebElement body = driver.findElement(By.tagName("body"));
+    String bgColor = body.getCssValue("background-color");
+
+    String expectedColor = "rgb(255, 255, 255)";
+    Assertions.assertEquals(bgColor, expectedColor);
+
+    driver.findElement(By.id("green-btn")).click();
+    body = driver.findElement(By.tagName("body"));
+    bgColor = body.getCssValue("background-color");
+
+    expectedColor = "rgb(144, 238, 144)";
+    Assertions.assertEquals(bgColor, expectedColor);
+
+    System.out.println(
+        Thread.currentThread().getName() + " " + Thread.currentThread().getStackTrace()[1]
+            .getMethodName() + " => executed successfully");
+  }
+
+  @Test
+  void canHaveTheDefaultBackgroundColor() {
+    driver.get("https://www.selenium.dev/selenium/web/cookie-background.html");
+
+    WebElement body = driver.findElement(By.tagName("body"));
+    String bgColor = body.getCssValue("background-color");
+
+    String expectedColor = "rgb(255, 255, 255)";
+    Assertions.assertEquals(bgColor, expectedColor);
+
+    System.out.println(
+        Thread.currentThread().getName() + " " + Thread.currentThread().getStackTrace()[1]
+            .getMethodName() + " => executed successfully");
+  }
+
+  @AfterEach
+  public void cleanup() {
+    driver.quit();
+  }
+}
diff --git a/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/user_context/SingleInstanceCookieParallelTest.java b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/user_context/SingleInstanceCookieParallelTest.java
new file mode 100644
index 000000000000..a40a6da5a85c
--- /dev/null
+++ b/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/user_context/SingleInstanceCookieParallelTest.java
@@ -0,0 +1,133 @@
+package dev.selenium.bidirectional.webdriver_bidi.user_context;
+
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WindowType;
+import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
+import org.openqa.selenium.bidi.browsingcontext.CreateContextParameters;
+import org.openqa.selenium.bidi.browsingcontext.Locator;
+import org.openqa.selenium.bidi.browsingcontext.ReadinessState;
+import org.openqa.selenium.bidi.module.Browser;
+import org.openqa.selenium.bidi.module.Input;
+import org.openqa.selenium.bidi.script.NodeProperties;
+import org.openqa.selenium.bidi.script.RemoteValue;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.firefox.FirefoxOptions;
+import org.openqa.selenium.interactions.Actions;
+import org.openqa.selenium.remote.RemoteWebElement;
+
+class SingleInstanceCookieParallelTest {
+
+  private static WebDriver driver;
+  BrowsingContext context;
+
+  @BeforeAll
+  public static void beforeAll() {
+    FirefoxOptions options = new FirefoxOptions();
+    options.setCapability("webSocketUrl", true);
+    driver = new FirefoxDriver(options);
+
+//    To use Grid uncomment the lines below
+
+//    driver = new RemoteWebDriver(
+//            new URL("http://localhost:4444"),
+//            options, false);
+//
+//    Augmenter augmenter = new Augmenter();
+//    driver = augmenter.augment(driver);
+  }
+
+  @BeforeEach
+  public void setup() {
+    Browser browser = new Browser(driver);
+    String userContext = browser.createUserContext();
+
+    CreateContextParameters parameters = new CreateContextParameters(WindowType.TAB);
+    parameters.userContext(userContext);
+
+    context = new BrowsingContext(driver, parameters);
+  }
+
+  @Test
+  void canSwitchToBlue() {
+    context.navigate("https://www.selenium.dev/selenium/web/cookie-background.html", ReadinessState.COMPLETE);
+
+    RemoteValue value = context.locateNode(Locator.xpath("/html/body/button[1]"));
+
+    Input inputModule = new Input(driver);
+    Actions actions = new Actions(driver);
+
+    RemoteWebElement element = new RemoteWebElement();
+    element.setId(value.getSharedId().get());
+    actions.moveToElement(element).click();
+
+    inputModule.perform(context.getId(), actions.getSequences());
+
+    value = context.locateNode(Locator.xpath("/html/body"));
+
+    NodeProperties properties = (NodeProperties) value.getValue().get();
+    String bgColor = properties.getAttributes().get().get("style");
+
+    Assertions.assertEquals(bgColor, "background-color: lightblue;");
+    System.out.println(
+        Thread.currentThread().getName() + " " + Thread.currentThread().getStackTrace()[1]
+            .getMethodName() + " => executed successfully");
+  }
+
+  @Test
+  void canSwitchToGreen() {
+    context.navigate("https://www.selenium.dev/selenium/web/cookie-background.html", ReadinessState.COMPLETE);
+
+    RemoteValue value = context.locateNode(Locator.xpath("/html/body"));
+
+    NodeProperties properties = (NodeProperties) value.getValue().get();
+    String bgColor = properties.getAttributes().get().get("style");
+
+    Assertions.assertEquals(bgColor, "background-color: white;");
+
+    value = context.locateNode(Locator.xpath("/html/body/button[2]"));
+
+    Input inputModule = new Input(driver);
+    Actions actions = new Actions(driver);
+
+    RemoteWebElement element = new RemoteWebElement();
+    element.setId(value.getSharedId().get());
+    actions.moveToElement(element).click();
+
+    inputModule.perform(context.getId(), actions.getSequences());
+
+    value = context.locateNode(Locator.xpath("/html/body"));
+
+    properties = (NodeProperties) value.getValue().get();
+    bgColor = properties.getAttributes().get().get("style");
+
+    Assertions.assertEquals(bgColor, "background-color: lightgreen;");
+    System.out.println(
+        Thread.currentThread().getName() + " " + Thread.currentThread().getStackTrace()[1]
+            .getMethodName() + " => executed successfully");
+  }
+
+  @Test
+  void canHaveTheDefaultBackgroundColor() {
+    context.navigate("https://www.selenium.dev/selenium/web/cookie-background.html", ReadinessState.COMPLETE);
+
+    RemoteValue value = context.locateNode(Locator.xpath("/html/body"));
+
+    NodeProperties properties = (NodeProperties) value.getValue().get();
+    String bgColor = properties.getAttributes().get().get("style");
+
+    Assertions.assertEquals(bgColor, "background-color: white;");
+    System.out.println(
+        Thread.currentThread().getName() + " " + Thread.currentThread().getStackTrace()[1]
+            .getMethodName() + " => executed successfully");
+  }
+
+  @AfterAll
+  public static void cleanup() {
+    driver.quit();
+  }
+}
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 a9f35e484cad..4ccd625f8a92 100644
--- a/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java
+++ b/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java
@@ -8,6 +8,7 @@
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.List;
+import java.util.Map;
 import java.util.logging.Level;
 import java.util.regex.Pattern;
 import org.junit.jupiter.api.AfterEach;
@@ -19,10 +20,8 @@
 import org.openqa.selenium.chrome.ChromeDriverService;
 import org.openqa.selenium.chrome.ChromeOptions;
 import org.openqa.selenium.chromium.ChromiumDriverLogLevel;
-import org.openqa.selenium.logging.LogEntries;
-import org.openqa.selenium.logging.LogType;
-import org.openqa.selenium.logging.LoggingPreferences;
-import org.openqa.selenium.manager.SeleniumManagerOutput;
+import org.openqa.selenium.chromium.ChromiumNetworkConditions;
+import org.openqa.selenium.logging.*;
 import org.openqa.selenium.remote.service.DriverFinder;
 
 public class ChromeTest extends BaseTest {
@@ -34,13 +33,13 @@ public void clearProperties() {
 
   @Test
   public void basicOptions() {
-    ChromeOptions options = new ChromeOptions();
+    ChromeOptions options = getDefaultChromeOptions();
     driver = new ChromeDriver(options);
   }
 
   @Test
   public void arguments() {
-    ChromeOptions options = new ChromeOptions();
+    ChromeOptions options = getDefaultChromeOptions();
 
     options.addArguments("--start-maximized");
 
@@ -49,7 +48,7 @@ public void arguments() {
 
   @Test
   public void setBrowserLocation() {
-    ChromeOptions options = new ChromeOptions();
+    ChromeOptions options = getDefaultChromeOptions();
 
     options.setBinary(getChromeLocation());
 
@@ -58,11 +57,12 @@ public void setBrowserLocation() {
 
   @Test
   public void extensionOptions() {
-    ChromeOptions options = new ChromeOptions();
+    ChromeOptions options = getDefaultChromeOptions();
     Path path = Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx");
     File extensionFilePath = new File(path.toUri());
 
     options.addExtensions(extensionFilePath);
+    options.addArguments("--disable-features=DisableLoadExtensionCommandLineSwitch");
 
     driver = new ChromeDriver(options);
     driver.get("https://www.selenium.dev/selenium/web/blank.html");
@@ -73,7 +73,7 @@ public void extensionOptions() {
 
   @Test
   public void excludeSwitches() {
-    ChromeOptions options = new ChromeOptions();
+    ChromeOptions options = getDefaultChromeOptions();
 
     options.setExperimentalOption("excludeSwitches", List.of("disable-popup-blocking"));
 
@@ -82,7 +82,7 @@ public void excludeSwitches() {
 
   @Test
   public void loggingPreferences() {
-    ChromeOptions options = new ChromeOptions();
+    ChromeOptions options = getDefaultChromeOptions();
     LoggingPreferences logPrefs = new LoggingPreferences();
     logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
     options.setCapability(ChromeOptions.LOGGING_PREFS, logPrefs);
@@ -175,10 +175,87 @@ public void disableBuildChecks() throws IOException {
   }
 
   private File getChromeLocation() {
-    ChromeOptions options = new ChromeOptions();
+    ChromeOptions options = getDefaultChromeOptions();
     options.setBrowserVersion("stable");
-    SeleniumManagerOutput.Result output =
-        DriverFinder.getPath(ChromeDriverService.createDefaultService(), options);
-    return new File(output.getBrowserPath());
+    DriverFinder finder = new DriverFinder(ChromeDriverService.createDefaultService(), options);
+    return new File(finder.getBrowserPath());
+  }
+
+  @Test
+  public void setPermission() {
+    ChromeDriver driver = new ChromeDriver();
+    driver.get("https://www.selenium.dev");
+
+    driver.setPermission("camera", "denied");
+
+    // Verify the permission state is 'denied'
+    String script = "return navigator.permissions.query({ name: 'camera' })" +
+            "    .then(permissionStatus => permissionStatus.state);";
+    String permissionState = (String) driver.executeScript(script);
+
+    Assertions.assertEquals("denied", permissionState);
+    driver.quit();
+  }
+
+  @Test
+  public void setNetworkConditions() {
+    driver = new ChromeDriver();
+
+    ChromiumNetworkConditions networkConditions = new ChromiumNetworkConditions();
+    networkConditions.setOffline(false);
+    networkConditions.setLatency(java.time.Duration.ofMillis(20)); // 20 ms of latency
+    networkConditions.setDownloadThroughput(2000 * 1024 / 8); // 2000 kbps
+    networkConditions.setUploadThroughput(2000 * 1024 / 8);   // 2000 kbps
+
+    ((ChromeDriver) driver).setNetworkConditions(networkConditions);
+
+    driver.get("https://www.selenium.dev");
+
+    // Assert the network conditions are set as expected
+    ChromiumNetworkConditions actualConditions = ((ChromeDriver) driver).getNetworkConditions();
+    Assertions.assertAll(
+        () -> Assertions.assertEquals(networkConditions.getOffline(), actualConditions.getOffline()),
+        () -> Assertions.assertEquals(networkConditions.getLatency(), actualConditions.getLatency()),
+        () -> Assertions.assertEquals(networkConditions.getDownloadThroughput(), actualConditions.getDownloadThroughput()),
+        () -> Assertions.assertEquals(networkConditions.getUploadThroughput(), actualConditions.getUploadThroughput())
+    );
+    ((ChromeDriver) driver).deleteNetworkConditions();
+    driver.quit();
+  }
+
+  @Test
+  public void castFeatures() {
+    ChromeDriver driver = new ChromeDriver();
+
+    List<Map<String, String>> sinks = driver.getCastSinks();
+    if (!sinks.isEmpty()) {
+      String sinkName = sinks.get(0).get("name");
+      driver.startTabMirroring(sinkName);
+      driver.stopCasting(sinkName);
+    }
+
+    driver.quit();
+  }
+
+  @Test
+  public void getBrowserLogs() {
+    ChromeDriver driver = new ChromeDriver();
+    driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");
+    WebElement consoleLogButton = driver.findElement(By.id("consoleError"));
+    consoleLogButton.click();
+
+    LogEntries logs = driver.manage().logs().get(LogType.BROWSER);
+
+    // Assert that at least one log contains the expected message
+    boolean logFound = false;
+    for (LogEntry log : logs) {
+      if (log.getMessage().contains("I am console error")) {
+        logFound = true;
+        break;
+      }
+    }
+
+    Assertions.assertTrue(logFound, "No matching log message found.");
+    driver.quit();
   }
 }
diff --git a/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java b/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java
index 071dd4f871fb..534d78a4cb6f 100644
--- a/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java
+++ b/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java
@@ -8,6 +8,7 @@
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.List;
+import java.util.Map;
 import java.util.logging.Level;
 import java.util.regex.Pattern;
 import org.junit.jupiter.api.AfterEach;
@@ -16,15 +17,15 @@
 import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.chromium.ChromiumDriverLogLevel;
+import org.openqa.selenium.chromium.ChromiumNetworkConditions;
 import org.openqa.selenium.edge.EdgeDriver;
 import org.openqa.selenium.edge.EdgeDriverService;
 import org.openqa.selenium.edge.EdgeOptions;
-import org.openqa.selenium.logging.LogEntries;
-import org.openqa.selenium.logging.LogType;
-import org.openqa.selenium.logging.LoggingPreferences;
-import org.openqa.selenium.manager.SeleniumManagerOutput;
+import org.openqa.selenium.logging.*;
 import org.openqa.selenium.remote.service.DriverFinder;
 
+
+
 public class EdgeTest extends BaseTest {
   @AfterEach
   public void clearProperties() {
@@ -34,13 +35,13 @@ public void clearProperties() {
 
   @Test
   public void basicOptions() {
-    EdgeOptions options = new EdgeOptions();
+    EdgeOptions options = getDefaultEdgeOptions();
     driver = new EdgeDriver(options);
   }
 
   @Test
   public void arguments() {
-    EdgeOptions options = new EdgeOptions();
+    EdgeOptions options = getDefaultEdgeOptions();
 
     options.addArguments("--start-maximized");
 
@@ -49,7 +50,7 @@ public void arguments() {
 
   @Test
   public void setBrowserLocation() {
-    EdgeOptions options = new EdgeOptions();
+    EdgeOptions options = getDefaultEdgeOptions();
 
     options.setBinary(getEdgeLocation());
 
@@ -58,7 +59,7 @@ public void setBrowserLocation() {
 
   @Test
   public void extensionOptions() {
-    EdgeOptions options = new EdgeOptions();
+    EdgeOptions options = getDefaultEdgeOptions();
     Path path = Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx");
     File extensionFilePath = new File(path.toUri());
 
@@ -73,7 +74,7 @@ public void extensionOptions() {
 
   @Test
   public void excludeSwitches() {
-    EdgeOptions options = new EdgeOptions();
+    EdgeOptions options = getDefaultEdgeOptions();
 
     options.setExperimentalOption("excludeSwitches", List.of("disable-popup-blocking"));
 
@@ -82,7 +83,7 @@ public void excludeSwitches() {
 
   @Test
   public void loggingPreferences() {
-    EdgeOptions options = new EdgeOptions();
+    EdgeOptions options = getDefaultEdgeOptions();
     LoggingPreferences logPrefs = new LoggingPreferences();
     logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
     options.setCapability(EdgeOptions.LOGGING_PREFS, logPrefs);
@@ -169,10 +170,87 @@ public void disableBuildChecks() throws IOException {
   }
 
   private File getEdgeLocation() {
-    EdgeOptions options = new EdgeOptions();
+    EdgeOptions options = getDefaultEdgeOptions();
     options.setBrowserVersion("stable");
-    SeleniumManagerOutput.Result output =
-        DriverFinder.getPath(EdgeDriverService.createDefaultService(), options);
-    return new File(output.getBrowserPath());
+    DriverFinder finder = new DriverFinder(EdgeDriverService.createDefaultService(), options);
+    return new File(finder.getBrowserPath());
+  }
+
+  @Test
+  public void setPermissions() {
+    EdgeDriver driver = new EdgeDriver();
+    driver.get("https://www.selenium.dev");
+
+    driver.setPermission("camera", "denied");
+
+    // Verify the permission state is 'denied'
+    String script = "return navigator.permissions.query({ name: 'camera' })" +
+            "    .then(permissionStatus => permissionStatus.state);";
+    String permissionState = (String) driver.executeScript(script);
+
+    Assertions.assertEquals("denied", permissionState);
+    driver.quit();
+  }
+
+  @Test
+  public void setNetworkConditions() {
+    driver = new EdgeDriver();
+
+    ChromiumNetworkConditions networkConditions = new ChromiumNetworkConditions();
+    networkConditions.setOffline(false);
+    networkConditions.setLatency(java.time.Duration.ofMillis(20)); // 20 ms of latency
+    networkConditions.setDownloadThroughput(2000 * 1024 / 8); // 2000 kbps
+    networkConditions.setUploadThroughput(2000 * 1024 / 8);   // 2000 kbps
+
+    ((EdgeDriver) driver).setNetworkConditions(networkConditions);
+
+    driver.get("https://www.selenium.dev");
+
+    // Assert the network conditions are set as expected
+    ChromiumNetworkConditions actualConditions = ((EdgeDriver) driver).getNetworkConditions();
+    Assertions.assertAll(
+            () -> Assertions.assertEquals(networkConditions.getOffline(), actualConditions.getOffline()),
+            () -> Assertions.assertEquals(networkConditions.getLatency(), actualConditions.getLatency()),
+            () -> Assertions.assertEquals(networkConditions.getDownloadThroughput(), actualConditions.getDownloadThroughput()),
+            () -> Assertions.assertEquals(networkConditions.getUploadThroughput(), actualConditions.getUploadThroughput())
+    );
+    ((EdgeDriver) driver).deleteNetworkConditions();
+    driver.quit();
+  }
+
+  @Test
+  public void castFeatures() {
+    EdgeDriver driver = new EdgeDriver();
+
+    List<Map<String, String>> sinks = driver.getCastSinks();
+    if (!sinks.isEmpty()) {
+      String sinkName = sinks.get(0).get("name");
+      driver.startTabMirroring(sinkName);
+      driver.stopCasting(sinkName);
+    }
+
+    driver.quit();
+  }
+
+  @Test
+  public void getBrowserLogs() {
+    EdgeDriver driver = new EdgeDriver();
+    driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");
+    WebElement consoleLogButton = driver.findElement(By.id("consoleError"));
+    consoleLogButton.click();
+
+    LogEntries logs = driver.manage().logs().get(LogType.BROWSER);
+
+    // Assert that at least one log contains the expected message
+    boolean logFound = false;
+    for (LogEntry log : logs) {
+      if (log.getMessage().contains("I am console error")) {
+        logFound = true;
+        break;
+      }
+    }
+
+    Assertions.assertTrue(logFound, "No matching log message found.");
+    driver.quit();
   }
 }
diff --git a/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java b/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java
index 77a1db789971..c66400cce76c 100644
--- a/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java
+++ b/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java
@@ -13,22 +13,22 @@
 import org.junit.jupiter.api.condition.DisabledOnOs;
 import org.junit.jupiter.api.condition.OS;
 import org.openqa.selenium.By;
+import org.openqa.selenium.OutputType;
 import org.openqa.selenium.WebElement;
-import org.openqa.selenium.firefox.FirefoxDriver;
-import org.openqa.selenium.firefox.FirefoxDriverLogLevel;
-import org.openqa.selenium.firefox.FirefoxDriverService;
-import org.openqa.selenium.firefox.FirefoxOptions;
-import org.openqa.selenium.firefox.GeckoDriverService;
-import org.openqa.selenium.manager.SeleniumManagerOutput;
+import org.openqa.selenium.firefox.*;
 import org.openqa.selenium.remote.service.DriverFinder;
 
+
+
+
+
 public class FirefoxTest extends BaseTest {
   private FirefoxDriver driver;
 
   @AfterEach
   public void clearProperties() {
     System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY);
-    System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY);
+    System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY);driver.quit();
   }
 
   @Test
@@ -124,6 +124,7 @@ public void setProfileLocation() {
     Assertions.assertTrue(location.contains(profileDirectory.getAbsolutePath()));
   }
 
+
   @Test
   public void installAddon() {
     driver = startFirefoxDriver();
@@ -137,6 +138,7 @@ public void installAddon() {
         "Content injected by webextensions-selenium-example", injected.getText());
   }
 
+
   @Test
   public void uninstallAddon() {
     driver = startFirefoxDriver();
@@ -149,6 +151,7 @@ public void uninstallAddon() {
     Assertions.assertEquals(driver.findElements(By.id("webextensions-selenium-example")).size(), 0);
   }
 
+
   @Test
   public void installUnsignedAddonPath() {
     driver = startFirefoxDriver();
@@ -165,8 +168,53 @@ public void installUnsignedAddonPath() {
   private Path getFirefoxLocation() {
     FirefoxOptions options = new FirefoxOptions();
     options.setBrowserVersion("stable");
-    SeleniumManagerOutput.Result output =
-        DriverFinder.getPath(GeckoDriverService.createDefaultService(), options);
-    return Path.of(output.getBrowserPath());
+    DriverFinder finder = new DriverFinder(GeckoDriverService.createDefaultService(), options);
+    return Path.of(finder.getBrowserPath());
+  }
+
+  @Test
+  public void fullPageScreenshot() throws Exception {
+    driver = startFirefoxDriver();
+
+    driver.get("https://www.selenium.dev");
+
+    File screenshot = driver.getFullPageScreenshotAs(OutputType.FILE);
+
+    File targetFile = new File("full_page_screenshot.png");
+    Files.move(screenshot.toPath(), targetFile.toPath());
+
+    // Verify the screenshot file exists
+    Assertions.assertTrue(targetFile.exists(), "The full page screenshot file should exist");
+    Files.deleteIfExists(targetFile.toPath());
+
+    driver.quit();
+  }
+
+  @Test
+  public void setContext() {
+    driver = startFirefoxDriver(new FirefoxOptions().addArguments("-remote-allow-system-access"));
+
+    ((HasContext) driver).setContext(FirefoxCommandContext.CHROME);
+    driver.executeScript("console.log('Inside Chrome context');");
+
+    // Verify the context is back to "content"
+    Assertions.assertEquals(
+            FirefoxCommandContext.CHROME, ((HasContext) driver).getContext(),
+            "The context should be 'chrome'"
+    );
+
+    driver.quit();
+  }
+
+  @Test
+  public void firefoxProfile() {
+    FirefoxProfile profile = new FirefoxProfile();
+    FirefoxOptions options = new FirefoxOptions();
+    profile.setPreference("javascript.enabled", "False");
+    options.setProfile(profile);
+
+    driver = new FirefoxDriver(options);
+
+    driver.quit();
   }
 }
diff --git a/examples/java/src/test/java/dev/selenium/browsers/SafariTest.java b/examples/java/src/test/java/dev/selenium/browsers/SafariTest.java
index 7e12aa362699..a579b2170e44 100644
--- a/examples/java/src/test/java/dev/selenium/browsers/SafariTest.java
+++ b/examples/java/src/test/java/dev/selenium/browsers/SafariTest.java
@@ -33,4 +33,10 @@ public void enableLogs() {
 
         driver = new SafariDriver(service);
     }
+    
+    public void safariTechnologyPreview() {
+        SafariOptions options = new SafariOptions();
+        options.setUseTechnologyPreview(true);
+        driver = new SafariDriver(options);
+    }
 }
diff --git a/examples/java/src/test/java/dev/selenium/drivers/HttpClientTest.java b/examples/java/src/test/java/dev/selenium/drivers/HttpClientTest.java
index 2bf0923f6cbb..16b36c91432c 100644
--- a/examples/java/src/test/java/dev/selenium/drivers/HttpClientTest.java
+++ b/examples/java/src/test/java/dev/selenium/drivers/HttpClientTest.java
@@ -2,6 +2,128 @@
 
 import dev.selenium.BaseTest;
 
+import org.openqa.selenium.remote.http.ClientConfig;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.chrome.ChromeOptions;
+import org.openqa.selenium.remote.RemoteWebDriver;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.TrustManagerFactory;
+import javax.net.ssl.X509TrustManager;
+import java.io.FileInputStream;
+import java.net.URL;
+import java.nio.file.Path;
+import java.security.KeyStore;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+import java.time.Duration;
+
+import org.openqa.selenium.UsernameAndPassword;
+
+import static java.net.http.HttpClient.Version.HTTP_1_1;
+
 public class HttpClientTest extends BaseTest {
+    URL gridUrl;
+
+    @BeforeEach
+    public void startGrid() {
+        gridUrl = startStandaloneGridAdvanced();
+    }
+
+    @Test
+    public void remoteWebDriverWithClientConfig() throws Exception {
+        ClientConfig clientConfig = ClientConfig.defaultConfig()
+                .withRetries()
+                .sslContext(createSSLContextWithCA(Path.of("src/test/resources/tls.crt").toAbsolutePath().toString()))
+                .connectionTimeout(Duration.ofSeconds(300))
+                .readTimeout(Duration.ofSeconds(3600))
+                .authenticateAs(new UsernameAndPassword("admin", "myStrongPassword"))
+                .version(HTTP_1_1.toString());
+        ChromeOptions options = getDefaultChromeOptions();
+        options.setEnableDownloads(true);
+        driver = RemoteWebDriver.builder()
+                .oneOf(options)
+                .address(gridUrl)
+                .config(clientConfig)
+                .build();
+        driver.quit();
+    }
+
+    @Test
+    public void remoteWebDriverIgnoreSSL() throws Exception {
+        ClientConfig clientConfig = ClientConfig.defaultConfig()
+                .withRetries()
+                .sslContext(createIgnoreSSLContext())
+                .connectionTimeout(Duration.ofSeconds(300))
+                .readTimeout(Duration.ofSeconds(3600))
+                .authenticateAs(new UsernameAndPassword("admin", "myStrongPassword"))
+                .version(HTTP_1_1.toString());
+        ChromeOptions options = getDefaultChromeOptions();
+        options.setEnableDownloads(true);
+        driver = RemoteWebDriver.builder()
+                .oneOf(options)
+                .address(gridUrl)
+                .config(clientConfig)
+                .build();
+        driver.quit();
+    }
+
+    @Test
+    public void remoteWebDriverWithEmbedAuthUrl() throws Exception {
+        ClientConfig clientConfig = ClientConfig.defaultConfig()
+                .withRetries()
+                .sslContext(createSSLContextWithCA(Path.of("src/test/resources/tls.crt").toAbsolutePath().toString()))
+                .connectionTimeout(Duration.ofSeconds(300))
+                .readTimeout(Duration.ofSeconds(3600))
+                .version(HTTP_1_1.toString());
+        ChromeOptions options = getDefaultChromeOptions();
+        options.setEnableDownloads(true);
+        driver = RemoteWebDriver.builder()
+                .oneOf(options)
+                .address(embedAuthToUrl(gridUrl, "admin", "myStrongPassword"))
+                .config(clientConfig)
+                .build();
+        driver.quit();
+    }
+
+    private URL embedAuthToUrl(URL url, String username, String password) throws Exception {
+        String userInfo = username + ":" + password;
+        String urlWithAuth = url.getProtocol() + "://" + userInfo + "@" + url.getHost() + ":" + url.getPort() + url.getPath();
+        return new URL(urlWithAuth);
+    }
+
+    public static SSLContext createSSLContextWithCA(String caCertPath) throws Exception {
+        FileInputStream fis = new FileInputStream(caCertPath);
+        CertificateFactory cf = CertificateFactory.getInstance("X.509");
+        X509Certificate caCert = (X509Certificate) cf.generateCertificate(fis);
+        KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
+        keyStore.load(null, null);
+        keyStore.setCertificateEntry("caCert", caCert);
+        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
+        tmf.init(keyStore);
+        SSLContext sslContext = SSLContext.getInstance("TLS");
+        sslContext.init(null, tmf.getTrustManagers(), null);
+        return sslContext;
+    }
+
+    public static SSLContext createIgnoreSSLContext() throws Exception {
+        TrustManager[] trustAllCerts = new TrustManager[]{
+                new X509TrustManager() {
+                    public X509Certificate[] getAcceptedIssuers() {
+                        return null;
+                    }
+
+                    public void checkClientTrusted(X509Certificate[] certs, String authType) {
+                    }
 
+                    public void checkServerTrusted(X509Certificate[] certs, String authType) {
+                    }
+                }
+        };
+        SSLContext sslContext = SSLContext.getInstance("TLS");
+        sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
+        return sslContext;
+    }
 }
diff --git a/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java b/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
index af650a3ed754..0ebf3e7d103d 100644
--- a/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
+++ b/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java
@@ -2,6 +2,172 @@
 
 import dev.selenium.BaseTest;
 
+import java.time.Duration;
+import java.time.temporal.ChronoUnit;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Assertions;
+import org.openqa.selenium.PageLoadStrategy;
+import org.openqa.selenium.UnexpectedAlertBehaviour;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.chrome.ChromeOptions;
+import org.openqa.selenium.remote.CapabilityType;
+import org.openqa.selenium.chrome.ChromeDriver;
+
 public class OptionsTest extends BaseTest {
 
+  @Test
+  public void setPageLoadStrategyNormal() {
+    ChromeOptions chromeOptions = getDefaultChromeOptions();
+    chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
+    WebDriver driver = new ChromeDriver(chromeOptions);
+    try {
+      // Navigate to Url
+      driver.get("https://selenium.dev");
+    } finally {
+      driver.quit();
+    }
+  }
+
+  @Test
+  public void setPageLoadStrategyEager() {
+    ChromeOptions chromeOptions = getDefaultChromeOptions();
+    chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER);
+    WebDriver driver = new ChromeDriver(chromeOptions);
+    try {
+      // Navigate to Url
+      driver.get("https://selenium.dev");
+    } finally {
+      driver.quit();
+    }
+  }
+
+  @Test
+  public void setPageLoadStrategyNone() {
+    ChromeOptions chromeOptions = getDefaultChromeOptions();
+    chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE);
+    WebDriver driver = new ChromeDriver(chromeOptions);
+    try {
+      // Navigate to Url
+      driver.get("https://selenium.dev");
+    } finally {
+      driver.quit();
+    }
+  }
+
+  @Test
+  public void setAcceptInsecureCerts() {
+    ChromeOptions chromeOptions = getDefaultChromeOptions();
+    chromeOptions.setAcceptInsecureCerts(true);
+    WebDriver driver = new ChromeDriver(chromeOptions);
+    try {
+      // Navigate to Url
+      driver.get("https://selenium.dev");
+    } finally {
+      driver.quit();
+    }
+  }
+
+  @Test
+  public void getBrowserName() {
+	ChromeOptions chromeOptions = getDefaultChromeOptions();
+	String name = chromeOptions.getBrowserName();
+	Assertions.assertFalse(name.isEmpty(), "Browser name should not be empty");
+  }
+
+  @Test
+  public void setBrowserVersion() {
+	ChromeOptions chromeOptions = getDefaultChromeOptions();
+	String version = "latest";
+	chromeOptions.setBrowserVersion(version);
+	Assertions.assertEquals(version, chromeOptions.getBrowserVersion());
+  }
+
+  @Test
+  public void setPlatformName() {
+	ChromeOptions chromeOptions = getDefaultChromeOptions();
+	String platform = "OS X 10.6";
+	chromeOptions.setPlatformName(platform);
+	Assertions.assertEquals(platform, chromeOptions.getPlatformName().toString());
+  }
+
+  @Test
+  public void setScriptTimeout() {
+	ChromeOptions chromeOptions = getDefaultChromeOptions();
+	Duration duration = Duration.of(5, ChronoUnit.SECONDS);
+	chromeOptions.setScriptTimeout(duration);
+
+	WebDriver driver = new ChromeDriver(chromeOptions);
+	try {
+	  Duration timeout = driver.manage().timeouts().getScriptTimeout();
+	  Assertions.assertEquals(timeout, duration, "The script timeout should be set to 5 seconds.");
+	} finally {
+	  driver.quit();
+	}
+  }
+
+  @Test
+  public void setPageLoadTimeout() {
+	ChromeOptions chromeOptions = getDefaultChromeOptions();
+	Duration duration = Duration.of(5, ChronoUnit.SECONDS);
+	chromeOptions.setPageLoadTimeout(duration);
+
+	WebDriver driver = new ChromeDriver(chromeOptions);
+	try {
+	  Duration timeout = driver.manage().timeouts().getPageLoadTimeout();
+	  Assertions.assertEquals(timeout, duration, "The page load timeout should be set to 5 seconds.");
+	} finally {
+	  driver.quit();
+	}
+  }
+
+  @Test
+  public void setImplicitWaitTimeout() {
+	ChromeOptions chromeOptions = getDefaultChromeOptions();
+	Duration duration = Duration.of(5, ChronoUnit.SECONDS);
+	chromeOptions.setImplicitWaitTimeout(duration);
+
+	WebDriver driver = new ChromeDriver(chromeOptions);
+	try {
+	  Duration timeout = driver.manage().timeouts().getImplicitWaitTimeout();
+	  Assertions.assertEquals(timeout, duration, "The implicit wait timeout should be set to 5 seconds.");
+	} finally {
+	  driver.quit();
+	}
+  }
+
+  @Test
+  public void setUnhandledPromptBehaviour() {
+	ChromeOptions chromeOptions = getDefaultChromeOptions();
+	chromeOptions.setUnhandledPromptBehaviour(UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY);
+	//verify the capability object is not null
+	Object capabilityObject = chromeOptions.getCapability(CapabilityType.UNHANDLED_PROMPT_BEHAVIOUR);
+	Assertions.assertNotNull(capabilityObject, "Capability UNHANDLED_PROMPT_BEHAVIOUR should not be null.");
+	Assertions.assertEquals(capabilityObject.toString(), UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY.toString());
+  }
+
+  @Test
+  public void setWindowRect() {
+   	ChromeOptions chromeOptions = getDefaultChromeOptions();
+   	chromeOptions.setCapability(CapabilityType.SET_WINDOW_RECT, true);
+   	//verify the capability object is not null
+   	Object capabilityObject = chromeOptions.getCapability(CapabilityType.SET_WINDOW_RECT);
+    Assertions.assertNotNull(capabilityObject, "Capability SET_WINDOW_RECT should not be null.");
+
+    Boolean capability = (Boolean) capabilityObject;
+    Assertions.assertTrue(capability, "The capability SET_WINDOW_RECT should be set to true.");
+  }
+	
+  @Test
+  public void setStrictFileInteractability() {
+    ChromeOptions chromeOptions = getDefaultChromeOptions();
+    chromeOptions.setCapability(CapabilityType.STRICT_FILE_INTERACTABILITY, true);
+	//verify the capability object is not null
+    Object capabilityObject = chromeOptions.getCapability(CapabilityType.STRICT_FILE_INTERACTABILITY);
+    Assertions.assertNotNull(capabilityObject, "Capability STRICT_FILE_INTERACTABILITY should not be null.");
+
+    Boolean capability = (Boolean) capabilityObject;
+    Assertions.assertTrue(capability, "The capability STRICT_FILE_INTERACTABILITY should be set to true.");
+  }
 }
+
diff --git a/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java b/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java
index 260818b4287c..cf3851e5284c 100644
--- a/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java
+++ b/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java
@@ -8,6 +8,7 @@
 import java.nio.file.Path;
 import java.time.Duration;
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import org.junit.jupiter.api.Assertions;
@@ -34,13 +35,13 @@ public void startGrid() {
 
   @Test
   public void runRemote() {
-    ChromeOptions options = new ChromeOptions();
+    ChromeOptions options = getDefaultChromeOptions();
     driver = new RemoteWebDriver(gridUrl, options);
   }
 
   @Test
   public void uploads() {
-    ChromeOptions options = new ChromeOptions();
+    ChromeOptions options = getDefaultChromeOptions();
     driver = new RemoteWebDriver(gridUrl, options);
     driver.get("https://the-internet.herokuapp.com/upload");
     File uploadFile = new File("src/test/resources/selenium-snapshot.png");
@@ -56,7 +57,7 @@ public void uploads() {
 
   @Test
   public void downloads() throws IOException {
-    ChromeOptions options = new ChromeOptions();
+    ChromeOptions options = getDefaultChromeOptions();
     options.setEnableDownloads(true);
     driver = new RemoteWebDriver(gridUrl, options);
 
@@ -71,6 +72,10 @@ public void downloads() throws IOException {
 
     List<String> files = ((HasDownloads) driver).getDownloadableFiles();
 
+    // Sorting them to avoid differences when comparing the files
+    fileNames.sort(Comparator.naturalOrder());
+    files.sort(Comparator.naturalOrder());
+    
     Assertions.assertEquals(fileNames, files);
     String downloadableFile = files.get(0);
     Path targetDirectory = Files.createTempDirectory("download");
@@ -87,7 +92,7 @@ public void downloads() throws IOException {
 
   @Test
   public void augment() {
-    ChromeOptions options = new ChromeOptions();
+    ChromeOptions options = getDefaultChromeOptions();
     driver = new RemoteWebDriver(gridUrl, options);
 
     driver = new Augmenter().augment(driver);
@@ -100,7 +105,7 @@ public void remoteWebDriverBuilder() {
     driver =
         RemoteWebDriver.builder()
             .address(gridUrl)
-            .oneOf(new ChromeOptions())
+            .oneOf(getDefaultChromeOptions())
             .setCapability("ext:options", Map.of("key", "value"))
             .config(ClientConfig.defaultConfig())
             .build();
diff --git a/examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java b/examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java
index e343e6e7b8b0..4a2eef8507bc 100644
--- a/examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java
+++ b/examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java
@@ -6,10 +6,10 @@
 import org.openqa.selenium.chrome.ChromeDriver;
 import org.openqa.selenium.chrome.ChromeDriverService;
 import org.openqa.selenium.chrome.ChromeOptions;
-import org.openqa.selenium.manager.SeleniumManagerOutput;
 import org.openqa.selenium.remote.service.DriverFinder;
 
 public class ServiceTest extends BaseTest {
+  
   @Test
   public void defaultService() {
     ChromeDriverService service = new ChromeDriverService.Builder().build();
@@ -19,7 +19,7 @@ public void defaultService() {
   @Test
   public void setDriverLocation() {
     setBinaryPaths();
-    ChromeOptions options = new ChromeOptions();
+    ChromeOptions options = getDefaultChromeOptions();
     options.setBinary(browserPath);
 
     ChromeDriverService service =
@@ -36,11 +36,10 @@ public void setPort() {
   }
 
   private void setBinaryPaths() {
-    ChromeOptions options = new ChromeOptions();
+    ChromeOptions options = getDefaultChromeOptions();
     options.setBrowserVersion("stable");
-    SeleniumManagerOutput.Result location =
-        DriverFinder.getPath(ChromeDriverService.createDefaultService(), options);
-    driverPath = new File(location.getDriverPath());
-    browserPath = new File(location.getBrowserPath());
+    DriverFinder finder = new DriverFinder(ChromeDriverService.createDefaultService(), options);
+    driverPath = new File(finder.getDriverPath());
+    browserPath = new File(finder.getBrowserPath());
   }
 }
diff --git a/examples/java/src/test/java/dev/selenium/elements/InformationTest.java b/examples/java/src/test/java/dev/selenium/elements/InformationTest.java
index 562b76397604..02d480fa3dab 100644
--- a/examples/java/src/test/java/dev/selenium/elements/InformationTest.java
+++ b/examples/java/src/test/java/dev/selenium/elements/InformationTest.java
@@ -1,7 +1,71 @@
 package dev.selenium.elements;
 
-import dev.selenium.BaseTest;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.Rectangle;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.chrome.ChromeDriver;
+import java.time.Duration;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
-public class InformationTest extends BaseTest {
+public class InformationTest {
+
+    @Test
+    public void informationWithElements() {
+
+    	 WebDriver driver = new ChromeDriver();
+       driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
+       // Navigate to Url
+       driver.get("https://www.selenium.dev/selenium/web/inputs.html");
+
+      // isDisplayed
+      // Get boolean value for is element display
+      boolean isEmailVisible = driver.findElement(By.name("email_input")).isDisplayed();
+      assertTrue(isEmailVisible);
+
+      // isEnabled
+      // returns true if element is enabled else returns false
+      boolean isEnabledButton = driver.findElement(By.name("button_input")).isEnabled();
+      assertTrue(isEnabledButton);
+
+      // isSelected
+      // returns true if element is checked else returns false
+      boolean isSelectedCheck = driver.findElement(By.name("checkbox_input")).isSelected();
+      assertTrue(isSelectedCheck);
+
+      // TagName
+      // returns TagName of the element
+      String tagNameInp = driver.findElement(By.name("email_input")).getTagName();
+      assertEquals("input", tagNameInp);
+
+      // GetRect
+      // Returns height, width, x and y coordinates referenced element
+      Rectangle res =  driver.findElement(By.name("range_input")).getRect();
+      // Rectangle class provides getX,getY, getWidth, getHeight methods
+      assertEquals(10, res.getX());
+
+      // Retrieves the computed style property 'font-size' of field
+      String cssValue = driver.findElement(By.name("color_input")).getCssValue("font-size");
+      assertEquals(cssValue, "13.3333px");
+
+
+      // GetText
+      // Retrieves the text of the element
+      String text = driver.findElement(By.tagName("h1")).getText();
+      assertEquals(text, "Testing Inputs");
+
+
+      // FetchAttributes
+      // identify the email text box
+      WebElement emailTxt = driver.findElement(By.name(("email_input")));
+      // fetch the value property associated with the textbox
+      String valueInfo = emailTxt.getAttribute("value");
+      assertEquals(valueInfo,"admin@localhost");
+
+
+      driver.quit();
+    }
 
 }
diff --git a/examples/java/src/test/java/dev/selenium/elements/InteractionTest.java b/examples/java/src/test/java/dev/selenium/elements/InteractionTest.java
index 90653f472806..e93e8b67e45f 100644
--- a/examples/java/src/test/java/dev/selenium/elements/InteractionTest.java
+++ b/examples/java/src/test/java/dev/selenium/elements/InteractionTest.java
@@ -17,31 +17,29 @@ public void interactWithElements() {
         // Navigate to Url
         driver.get("https://www.selenium.dev/selenium/web/inputs.html");
 
-	    // Click on the element 
-        WebElement checkInput=driver.findElement(By.name("checkbox_input"));
+        // Click on the element
+        WebElement checkInput = driver.findElement(By.name("checkbox_input"));
         checkInput.click();
-        Boolean isChecked=checkInput.isSelected();
-        assertEquals(isChecked,false);
+        Boolean isChecked = checkInput.isSelected();
+        assertEquals(isChecked, false);
 
-        //SendKeys
+        // SendKeys
         // Clear field to empty it from any previous data
-        WebElement emailInput=driver.findElement(By.name("email_input"));
+        WebElement emailInput = driver.findElement(By.name("email_input"));
         emailInput.clear();
-	    //Enter Text
-        String email="admin@localhost.dev";
-	    emailInput.sendKeys(email);
-        //Verify
-        String data=emailInput.getAttribute("value");
-        assertEquals(data,email);
-
-
-        //Clear Element
+        // Enter Text
+        String email = "admin@localhost.dev";
+        emailInput.sendKeys(email);
+        // Verify
+        String data = emailInput.getAttribute("value");
+        assertEquals(data, email);
+
+        // Clear Element
         // Clear field to empty it from any previous data
         emailInput.clear();
-        data=emailInput.getAttribute("value");
-        assertEquals(data, ""); 
+        data = emailInput.getAttribute("value");
+        assertEquals(data, "");
 
         driver.quit();
     }
-
 }
\ No newline at end of file
diff --git a/examples/java/src/test/java/dev/selenium/elements/LocatorsTest.java b/examples/java/src/test/java/dev/selenium/elements/LocatorsTest.java
index 08f73a7384d6..bcc473f7a8be 100644
--- a/examples/java/src/test/java/dev/selenium/elements/LocatorsTest.java
+++ b/examples/java/src/test/java/dev/selenium/elements/LocatorsTest.java
@@ -1,7 +1,44 @@
 package dev.selenium.elements;
-
+import org.openqa.selenium.By;
+import org.openqa.selenium.support.pagefactory.ByAll;
+import org.openqa.selenium.support.pagefactory.ByChained;
 import dev.selenium.BaseTest;
+import java.util.List;
+
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.chrome.ChromeDriver;
 
 public class LocatorsTest extends BaseTest {
 
+
+    public void ByAllTest() {
+        // Create instance of ChromeDriver
+        WebDriver driver = new ChromeDriver();
+        // Navigate to Url
+        driver.get("https://www.selenium.dev/selenium/web/login.html");
+
+        // get both logins
+        By example = new ByAll(By.id("password-field"), By.id("username-field"));
+        List<WebElement> login_inputs = driver.findElements(example);
+
+        //send them both input
+        login_inputs.get(0).sendKeys("username");
+        login_inputs.get(1).sendKeys("password");
+    }
+
+    public String ByChainedTest() {
+        // Create instance of ChromeDriver
+        WebDriver driver = new ChromeDriver();
+        // Navigate to Url
+        driver.get("https://www.selenium.dev/selenium/web/login.html");
+
+        // Find username-field inside of login-form
+        By example = new ByChained(By.id("login-form"), By.id("username-field"));
+        WebElement username_input = driver.findElement(example);
+
+        //return placeholder text
+        String placeholder = username_input.getAttribute("placeholder");
+        return placeholder;
+    }
 }
diff --git a/examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java b/examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java
index 5b314f68be9d..26ddc5229767 100644
--- a/examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java
+++ b/examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java
@@ -1,38 +1,50 @@
 package dev.selenium.getting_started;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.time.Duration;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.openqa.selenium.By;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.chrome.ChromeDriver;
 
-import java.time.Duration;
+public class UsingSeleniumTest {
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
+	WebDriver driver;
 
-public class UsingSeleniumTest {
+	@BeforeEach
+	public void setup() {
+		driver = new ChromeDriver();
+	}
+
+	@Test
+	public void eightComponents() {
 
-    @Test
-    public void eightComponents() {
-        WebDriver driver = new ChromeDriver();
-        driver.get("https://www.selenium.dev/selenium/web/web-form.html");
+		driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
+		driver.get("https://www.selenium.dev/selenium/web/web-form.html");
 
-        String title = driver.getTitle();
-        assertEquals("Web form", title);
+		String title = driver.getTitle();
+		assertEquals("Web form", title);
 
-        driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
+		WebElement textBox = driver.findElement(By.name("my-text"));
+		WebElement submitButton = driver.findElement(By.cssSelector("button"));
 
-        WebElement textBox = driver.findElement(By.name("my-text"));
-        WebElement submitButton = driver.findElement(By.cssSelector("button"));
+		textBox.sendKeys("Selenium");
+		submitButton.click();
 
-        textBox.sendKeys("Selenium");
-        submitButton.click();
+		WebElement message = driver.findElement(By.id("message"));
+		String value = message.getText();
+		assertEquals("Received!", value);
 
-        WebElement message = driver.findElement(By.id("message"));
-        String value = message.getText();
-        assertEquals("Received!", value);
+	}
 
-        driver.quit();
-    }
+	@AfterEach
+	public void teardown() {
+		driver.quit();
+	}
 
 }
diff --git a/examples/java/src/test/java/dev/selenium/interactions/AlertsTest.java b/examples/java/src/test/java/dev/selenium/interactions/AlertsTest.java
index 34835005d867..43c70347f44d 100644
--- a/examples/java/src/test/java/dev/selenium/interactions/AlertsTest.java
+++ b/examples/java/src/test/java/dev/selenium/interactions/AlertsTest.java
@@ -1,7 +1,234 @@
+// Licensed to the Software Freedom Conservancy (SFC) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The SFC licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
 package dev.selenium.interactions;
 
 import dev.selenium.BaseTest;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.Alert;
+import org.openqa.selenium.By;
+import org.openqa.selenium.JavascriptExecutor;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.chrome.ChromeDriver;
+import org.openqa.selenium.chrome.ChromeOptions;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+
+import java.time.Duration;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class AlertsTest extends BaseTest {
 
+    @BeforeEach
+    public void createSession() {
+        driver = new ChromeDriver();
+        wait = new WebDriverWait(driver, Duration.ofSeconds(10));
+    }
+
+    @AfterEach
+    public void endSession() {
+        driver.quit();
+    }
+
+    @Test
+    public void alertInformationTest() {
+        driver.get("https://www.selenium.dev/selenium/web/alerts.html#");
+
+        driver.findElement(By.id("alert")).click();
+
+        wait.until(ExpectedConditions.alertIsPresent());
+        Alert alert = driver.switchTo().alert();
+        Assertions.assertEquals("cheese", alert.getText());
+        alert.accept();
+
+    }
+
+    @Test
+    public void alertEmptyInformationTest() {
+        driver.get("https://www.selenium.dev/selenium/web/alerts.html#");
+        driver.findElement(By.id("empty-alert")).click();
+
+
+        wait.until(ExpectedConditions.alertIsPresent());
+
+        Alert alert = driver.switchTo().alert();
+        Assertions.assertEquals("", alert.getText());
+        alert.accept();
+
+    }
+
+    @Test
+    public void promptDisplayAndInputTest() {
+        driver.get("https://www.selenium.dev/selenium/web/alerts.html#");
+        driver.findElement(By.id("prompt")).click();
+
+        //Wait for the alert to be displayed and store it in a variable
+        wait.until(ExpectedConditions.alertIsPresent());
+
+        Alert alert = driver.switchTo().alert();
+        Assertions.assertEquals("Enter something", alert.getText());
+
+        alert.sendKeys("Selenium");
+        alert.accept();
+
+    }
+
+    @Test
+    public void promptDefaultInputTest() {
+        driver.get("https://www.selenium.dev/selenium/web/alerts.html#");
+
+        driver.findElement(By.id("prompt-with-default")).click();
+
+        wait.until(ExpectedConditions.alertIsPresent());
+        Alert alert = driver.switchTo().alert();
+        Assertions.assertEquals("Enter something", alert.getText());
+        alert.accept();
+    }
+
+    @Test
+    public void multiplePromptInputsTest() {
+        driver.get("https://www.selenium.dev/selenium/web/alerts.html#");
+        driver.findElement(By.id("double-prompt")).click();
+
+        wait.until(ExpectedConditions.alertIsPresent());
+
+        Alert alert1 = driver.switchTo().alert();
+        Assertions.assertEquals("First", alert1.getText());
+
+        alert1.sendKeys("first");
+        alert1.accept();
+
+
+        Alert alert2 = driver.switchTo().alert();
+        Assertions.assertEquals("Second", alert2.getText());
+        alert2.sendKeys("second");
+        alert2.accept();
+
+    }
+
+    @Test
+    public void slowAlertTest() {
+        driver.get("https://www.selenium.dev/selenium/web/alerts.html#");
+        driver.findElement(By.id("slow-alert")).click();
+
+        wait.until(ExpectedConditions.alertIsPresent());
+
+        Alert alert = driver.switchTo().alert();
+        Assertions.assertEquals("Slow", alert.getText());
+
+        alert.accept();
+
+    }
+
+
+    @Test
+    public void confirmationAlertTest() {
+        driver.get("https://www.selenium.dev/selenium/web/alerts.html#");
+
+        driver.findElement(By.id("confirm")).click();
+
+        wait.until(ExpectedConditions.alertIsPresent());
+        Alert alert = driver.switchTo().alert();
+        Assertions.assertEquals("Are you sure?", alert.getText());
+
+        alert.accept();
+        Assertions.assertTrue(driver.getCurrentUrl().endsWith("simpleTest.html"));
+
+    }
+
+
+    @Test
+    public void iframeAlertTest() {
+        driver.get("https://www.selenium.dev/selenium/web/alerts.html#");
+        WebElement iframe = driver.findElement(By.name("iframeWithAlert"));
+        driver.switchTo().frame(iframe);
+
+        driver.findElement(By.id("alertInFrame")).click();
+
+
+        wait.until(ExpectedConditions.alertIsPresent());
+
+        Alert alert = driver.switchTo().alert();
+        Assertions.assertEquals("framed cheese", alert.getText());
+
+        alert.accept();
+
+    }
+
+    @Test
+    public void nestedIframeAlertTest() {
+        driver.get("https://www.selenium.dev/selenium/web/alerts.html#");
+        WebElement iframe1 = driver.findElement(By.name("iframeWithIframe"));
+        driver.switchTo().frame(iframe1);
+
+        WebElement iframe2 = driver.findElement(By.name("iframeWithAlert"));
+        driver.switchTo().frame(iframe2);
+
+        driver.findElement(By.id("alertInFrame")).click();
+
+
+        wait.until(ExpectedConditions.alertIsPresent());
+
+        Alert alert = driver.switchTo().alert();
+        Assertions.assertEquals("framed cheese", alert.getText());
+
+        alert.accept();
+
+    }
+
+    @Test
+    public void testForAlerts() {
+
+        ChromeOptions chromeOptions = getDefaultChromeOptions();
+        chromeOptions.addArguments("disable-search-engine-choice-screen");
+        WebDriver driver = new ChromeDriver(chromeOptions);
+
+        driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
+        driver.get("https://www.selenium.dev/documentation/webdriver/interactions/alerts/");
+
+        JavascriptExecutor js = (JavascriptExecutor) driver;
+        js.executeScript("alert('Sample Alert');");
+        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30));
+        wait.until(ExpectedConditions.alertIsPresent());
+
+        Alert alert = driver.switchTo().alert();
+        assertEquals("Sample Alert", alert.getText());
+        alert.accept();
+
+        js.executeScript("confirm('Are you sure?');");
+        wait = new WebDriverWait(driver, Duration.ofSeconds(30));
+        wait.until(ExpectedConditions.alertIsPresent());
+
+        alert = driver.switchTo().alert();
+        assertEquals("Are you sure?", alert.getText());
+        alert.dismiss();
+
+        js.executeScript("prompt('What is your name?');");
+        wait = new WebDriverWait(driver, Duration.ofSeconds(30));
+        wait.until(ExpectedConditions.alertIsPresent());
+        alert = driver.switchTo().alert();
+        assertEquals("What is your name?", alert.getText());
+        alert.sendKeys("Selenium");
+        alert.accept();
+        driver.quit();
+    }
 }
diff --git a/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java b/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java
index a7fab56ac673..aea33ef54a0d 100644
--- a/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java
+++ b/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java
@@ -1,7 +1,127 @@
+// Licensed to the Software Freedom Conservancy (SFC) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The SFC licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
 package dev.selenium.interactions;
 
-import dev.selenium.BaseTest;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Assertions;
+import org.openqa.selenium.Cookie;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.chrome.ChromeDriver;
+import java.util.Set;
+
+public class CookiesTest {
+
+	WebDriver driver = new ChromeDriver();
+	@Test
+	  public void addCookie() {
+	      driver.get("https://www.selenium.dev/selenium/web/blank.html");
+	      // Add cookie into current browser context
+	      driver.manage().addCookie(new Cookie("key", "value"));
+	      driver.quit();
+	}
+	    @Test
+	    public void getNamedCookie() {
+
+	        driver.get("https://www.selenium.dev/selenium/web/blank.html");
+	        // Add cookie into current browser context
+	        driver.manage().addCookie(new Cookie("foo", "bar"));
+	        // Get cookie details with named cookie 'foo'
+	        Cookie cookie = driver.manage().getCookieNamed("foo");
+	        Assertions.assertEquals(cookie.getValue(), "bar");
+
+	        driver.quit();
+	      }
+
+
+	    @Test
+	    public void getAllCookies() {
+
+	        driver.get("https://www.selenium.dev/selenium/web/blank.html");
+	        // Add cookies into current browser context
+	        driver.manage().addCookie(new Cookie("test1", "cookie1"));
+	        driver.manage().addCookie(new Cookie("test2", "cookie2"));
+	        // Get cookies
+	        Set<Cookie> cookies = driver.manage().getCookies();
+	         for (Cookie cookie : cookies) {
+	            if (cookie.getName().equals("test1")) {
+	                Assertions.assertEquals(cookie.getValue(), "cookie1");
+	            }
+
+	            if (cookie.getName().equals("test2")) {
+	                Assertions.assertEquals(cookie.getValue(), "cookie2");
+	            }
+	         }
+	         driver.quit();
+	      }
+
+
+	    @Test
+	    public void deleteCookieNamed() {
+
+	        driver.get("https://www.selenium.dev/selenium/web/blank.html");
+	        driver.manage().addCookie(new Cookie("test1", "cookie1"));
+	        // delete cookie named
+	        driver.manage().deleteCookieNamed("test1");
+	        driver.quit();
+	    }
+
+	    @Test
+	    public void deleteCookieObject() {
+
+	        driver.get("https://www.selenium.dev/selenium/web/blank.html");
+	        Cookie cookie = new Cookie("test2", "cookie2");
+	        driver.manage().addCookie(cookie);
+	        /*
+	        Selenium Java bindings also provides a way to delete
+	        cookie by passing cookie object of current browsing context
+	        */
+	        driver.manage().deleteCookie(cookie);
+
+	        driver.quit();
+	      }
+
+
+	    @Test
+	    public void deleteAllCookies() {
+
+	        driver.get("https://www.selenium.dev/selenium/web/blank.html");
+	        // Add cookies into current browser context
+	        driver.manage().addCookie(new Cookie("test1", "cookie1"));
+	        driver.manage().addCookie(new Cookie("test2", "cookie2"));
+	        // Delete All cookies
+	        driver.manage().deleteAllCookies();
+
+	        driver.quit();
+	      }
+
+		  @Test
+		  public void sameSiteCookie() {
+		    driver.get("http://www.example.com");
+
+     	    Cookie cookie = new Cookie.Builder("key", "value").sameSite("Strict").build();
+            Cookie cookie1 = new Cookie.Builder("key", "value").sameSite("Lax").build();
+
+            driver.manage().addCookie(cookie);
+            driver.manage().addCookie(cookie1);
 
-public class CookiesTest extends BaseTest {
+            System.out.println(cookie.getSameSite());
+            System.out.println(cookie1.getSameSite());
 
+			driver.quit();
+		  }
 }
diff --git a/examples/java/src/test/java/dev/selenium/interactions/FramesTest.java b/examples/java/src/test/java/dev/selenium/interactions/FramesTest.java
index bf92911e3642..8a11a3e00df9 100644
--- a/examples/java/src/test/java/dev/selenium/interactions/FramesTest.java
+++ b/examples/java/src/test/java/dev/selenium/interactions/FramesTest.java
@@ -1,7 +1,74 @@
+// Licensed to the Software Freedom Conservancy (SFC) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The SFC licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
 package dev.selenium.interactions;
 
-import dev.selenium.BaseTest;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.*;
+import org.openqa.selenium.chrome.ChromeDriver;
+import java.time.Duration;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class FramesTest{
 
-public class FramesTest extends BaseTest {
+    @Test
+    public void informationWithElements() {
+    	
+    	 WebDriver driver = new ChromeDriver();
+         driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
+        
+         // Navigate to Url
+         driver.get("https://www.selenium.dev/selenium/web/iframes.html");
+        
+         
+         //switch To IFrame using Web Element
+         WebElement iframe = driver.findElement(By.id("iframe1"));
+         //Switch to the frame
+         driver.switchTo().frame(iframe);
+         assertEquals(true, driver.getPageSource().contains("We Leave From Here"));
+         //Now we can type text into email field
+         WebElement emailE = driver.findElement(By.id("email"));
+         emailE.sendKeys("admin@selenium.dev");
+         emailE.clear();
+         driver.switchTo().defaultContent();
+       
+         
+         //switch To IFrame using name or id
+         WebElement iframe1=driver.findElement(By.name("iframe1-name"));
+         //Switch to the frame
+         driver.switchTo().frame(iframe1);
+         assertEquals(true, driver.getPageSource().contains("We Leave From Here"));
+         WebElement email = driver.findElement(By.id("email"));
+         //Now we can type text into email field
+         email.sendKeys("admin@selenium.dev");
+         email.clear();
+         driver.switchTo().defaultContent();
+     
+         
+         //switch To IFrame using index
+         driver.switchTo().frame(0);
+         assertEquals(true, driver.getPageSource().contains("We Leave From Here"));
+         
+         //leave frame
+         driver.switchTo().defaultContent();
+         assertEquals(true, driver.getPageSource().contains("This page has iframes"));
+         
+         //quit the browser
+         driver.quit();
+    }
 
 }
diff --git a/examples/java/src/test/java/dev/selenium/interactions/InteractionsTest.java b/examples/java/src/test/java/dev/selenium/interactions/InteractionsTest.java
new file mode 100644
index 000000000000..4d7b857fe304
--- /dev/null
+++ b/examples/java/src/test/java/dev/selenium/interactions/InteractionsTest.java
@@ -0,0 +1,32 @@
+package dev.selenium.interactions;
+
+import dev.selenium.BaseChromeTest;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.Cookie;
+import java.util.Set;
+
+public class InteractionsTest extends BaseChromeTest {
+  @Test
+  public void getTitle() {
+    try {
+      driver.get("https://www.selenium.dev/");
+      // get title
+      String title = driver.getTitle();
+      Assertions.assertEquals(title, "Selenium");
+    } finally {
+      driver.quit();
+    }
+  }
+  @Test
+  public void getCurrentUrl() {
+    try {
+      driver.get("https://www.selenium.dev/");
+      // get current url
+      String url = driver.getCurrentUrl();
+      Assertions.assertEquals(url, "https://www.selenium.dev/");
+    } finally {
+      driver.quit();
+    }
+  }
+}
\ No newline at end of file
diff --git a/examples/java/src/test/java/dev/selenium/interactions/NavigationTest.java b/examples/java/src/test/java/dev/selenium/interactions/NavigationTest.java
index bb8a40ff263f..ad4dc07df050 100644
--- a/examples/java/src/test/java/dev/selenium/interactions/NavigationTest.java
+++ b/examples/java/src/test/java/dev/selenium/interactions/NavigationTest.java
@@ -1,7 +1,39 @@
 package dev.selenium.interactions;
 
-import dev.selenium.BaseTest;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.chrome.ChromeDriver;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
-public class NavigationTest extends BaseTest {
+public class NavigationTest {
+    @Test
+    public void navigateBrowser() {
+        
+        WebDriver driver = new ChromeDriver();
+      
+        //Convenient
+        driver.get("https://selenium.dev");
+            
+        //Longer way
+        driver.navigate().to("https://selenium.dev");
+        String title = driver.getTitle();
+        assertEquals(title, "Selenium");
+        
+        //Back
+        driver.navigate().back();
+        title = driver.getTitle();
+        assertEquals(title, "Selenium");
+        
+        //Forward
+        driver.navigate().forward();
+        title = driver.getTitle();
+        assertEquals(title, "Selenium");
 
+        //Refresh
+        driver.navigate().refresh();
+        title = driver.getTitle();
+        assertEquals(title, "Selenium");
+
+        driver.quit();
+    }
 }
diff --git a/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java b/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java
new file mode 100644
index 000000000000..f6e532e1e4da
--- /dev/null
+++ b/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java
@@ -0,0 +1,77 @@
+package dev.selenium.interactions;
+
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.print.PageMargin;
+import org.openqa.selenium.print.PrintOptions;
+import org.openqa.selenium.print.PageSize;
+import dev.selenium.BaseChromeTest;
+
+public class PrintOptionsTest extends BaseChromeTest {
+
+    @Test
+    public void TestOrientation() 
+    {
+        driver.get("https://www.selenium.dev/");
+        PrintOptions printOptions = new PrintOptions();
+        printOptions.setOrientation(PrintOptions.Orientation.LANDSCAPE);
+        PrintOptions.Orientation current_orientation = printOptions.getOrientation();
+    }
+
+    @Test
+    public void TestRange() 
+    {
+        driver.get("https://www.selenium.dev/");
+        PrintOptions printOptions = new PrintOptions();
+        printOptions.setPageRanges("1-2");
+        String[] current_range = printOptions.getPageRanges();
+    }
+
+    @Test
+    public void TestSize() 
+    {
+        driver.get("https://www.selenium.dev/");
+        PrintOptions printOptions = new PrintOptions();
+        printOptions.setPageSize(new PageSize(27.94, 21.59)); // A4 size in cm
+        double currentHeight = printOptions.getPageSize().getHeight(); // use getWidth() to retrieve width
+    }
+
+    @Test
+    public void TestMargins() 
+    {
+        driver.get("https://www.selenium.dev/");
+        PrintOptions printOptions = new PrintOptions();
+        PageMargin margins = new PageMargin(1.0,1.0,1.0,1.0);
+        printOptions.setPageMargin(margins);
+        double topMargin = margins.getTop();
+        double bottomMargin = margins.getBottom();
+        double leftMargin = margins.getLeft();
+        double rightMargin = margins.getRight();
+    }
+
+    @Test
+    public void TestScale() 
+    {
+        driver.get("https://www.selenium.dev/");
+        PrintOptions printOptions = new PrintOptions();
+        printOptions.setScale(.50);
+        double current_scale = printOptions.getScale();
+    }
+
+    @Test
+    public void TestBackground() 
+    {
+        driver.get("https://www.selenium.dev/");
+        PrintOptions printOptions = new PrintOptions();
+        printOptions.setBackground(true);
+        boolean current_background = printOptions.getBackground();
+    }
+
+    @Test
+    public void TestShrinkToFit() 
+    {
+        driver.get("https://www.selenium.dev/");
+        PrintOptions printOptions = new PrintOptions();
+        printOptions.setShrinkToFit(true);
+        boolean current_shrink_to_fit = printOptions.getShrinkToFit();
+    }
+}
diff --git a/examples/java/src/test/java/dev/selenium/interactions/PrintsPageTest.java b/examples/java/src/test/java/dev/selenium/interactions/PrintsPageTest.java
new file mode 100644
index 000000000000..b6b6dae776f3
--- /dev/null
+++ b/examples/java/src/test/java/dev/selenium/interactions/PrintsPageTest.java
@@ -0,0 +1,43 @@
+package dev.selenium.interactions;
+
+import org.openqa.selenium.Pdf;
+import org.openqa.selenium.bidi.browsingcontext.BrowsingContext;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.openqa.selenium.print.PageMargin;
+import org.openqa.selenium.print.PrintOptions;
+import org.openqa.selenium.chrome.ChromeOptions;
+import org.openqa.selenium.chrome.ChromeDriver;
+import org.openqa.selenium.PrintsPage;
+import dev.selenium.BaseTest;
+
+public class PrintsPageTest extends BaseTest{
+
+    @BeforeEach
+    public void setup() {
+        ChromeOptions options = getDefaultChromeOptions();
+        options.setCapability("webSocketUrl", true);
+        driver = new ChromeDriver(options);
+    }
+
+    @Test
+    public void PrintWithPrintsPageTest() 
+    {
+        driver.get("https://www.selenium.dev/");
+        PrintsPage printer = (PrintsPage) driver;
+        PrintOptions printOptions = new PrintOptions();
+        Pdf printedPage = printer.print(printOptions);
+        Assertions.assertNotNull(printedPage);
+    }
+
+    @Test
+    public void PrintWithBrowsingContextTest() 
+    {
+        BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());
+        driver.get("https://www.selenium.dev/selenium/web/formPage.html");
+        PrintOptions printOptions = new PrintOptions();
+        String printPage = browsingContext.print(printOptions);
+        Assertions.assertTrue(printPage.length() > 0);
+    }
+}
diff --git a/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java b/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java
index dde7477ebcc4..6f2756927985 100644
--- a/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java
+++ b/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java
@@ -5,6 +5,7 @@
 import java.util.Base64;
 import java.util.List;
 import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.openqa.selenium.InvalidArgumentException;
 import org.openqa.selenium.virtualauthenticator.Credential;
diff --git a/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java b/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java
index 2e686aa0fb6a..0ea2402da943 100644
--- a/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java
+++ b/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java
@@ -1,7 +1,48 @@
 package dev.selenium.interactions;
 
-import dev.selenium.BaseTest;
+import org.openqa.selenium.*;
+import org.openqa.selenium.chrome.ChromeDriver;
+import java.time.Duration;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.*;
 
-public class WindowsTest extends BaseTest {
+public class WindowsTest {
 
-}
+    @Test
+    public void windowsExampleCode() {
+        
+    	WebDriver driver = new ChromeDriver();
+        driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
+        // Navigate to Url
+        driver.get("https://www.selenium.dev/selenium/web/window_switching_tests/page_with_frame.html");
+        //fetch handle of this
+        String currHandle=driver.getWindowHandle();
+        assertNotNull(currHandle);
+        
+        //click on link to open a new window
+        driver.findElement(By.linkText("Open new window")).click();
+        //fetch handles of all windows, there will be two, [0]- default, [1] - new window
+        Object[] windowHandles=driver.getWindowHandles().toArray();
+        driver.switchTo().window((String) windowHandles[1]);
+        //assert on title of new window
+        String title=driver.getTitle();
+        assertEquals("Simple Page",title);
+        
+        //closing current window
+        driver.close();
+        //Switch back to the old tab or window
+        driver.switchTo().window((String) windowHandles[0]);
+        
+        //Opens a new tab and switches to new tab
+        driver.switchTo().newWindow(WindowType.TAB);
+        assertEquals("",driver.getTitle());
+        
+        //Opens a new window and switches to new window
+        driver.switchTo().newWindow(WindowType.WINDOW);
+        assertEquals("",driver.getTitle());
+             
+        //quitting driver
+        driver.quit(); //close all windows
+	   
+   	}
+}
\ No newline at end of file
diff --git a/examples/java/src/test/java/dev/selenium/selenium_manager/SeleniumManagerUsageDemo.java b/examples/java/src/test/java/dev/selenium/selenium_manager/SeleniumManagerUsageDemo.java
new file mode 100644
index 000000000000..e830dca9c204
--- /dev/null
+++ b/examples/java/src/test/java/dev/selenium/selenium_manager/SeleniumManagerUsageDemo.java
@@ -0,0 +1,26 @@
+package dev.selenium.selenium_manager;
+
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.chrome.ChromeDriver;
+
+public class SeleniumManagerUsageDemo {
+
+    @Test
+    @Disabled("This test is just for demo purposes and should not be run in CI")
+    public void testSetupWithoutManager() {
+        System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
+        WebDriver driver = new ChromeDriver();
+        driver.get("https://www.selenium.dev/documentation/selenium_manager/");
+        driver.quit();
+    }
+
+    @Test
+    public void testSetupWithManager() {
+        WebDriver driver = new ChromeDriver();
+        driver.get("https://www.selenium.dev/documentation/selenium_manager/");
+        driver.quit();
+    }
+
+}
diff --git a/examples/java/src/test/resources/extensions/selenium-example.xpi b/examples/java/src/test/resources/extensions/selenium-example.xpi
index 34b0ae3913f7..dca8e2e12312 100644
Binary files a/examples/java/src/test/resources/extensions/selenium-example.xpi and b/examples/java/src/test/resources/extensions/selenium-example.xpi differ
diff --git a/examples/java/src/test/resources/extensions/selenium-example/manifest.json b/examples/java/src/test/resources/extensions/selenium-example/manifest.json
index e938974a20b1..a8b4fec6e60f 100644
--- a/examples/java/src/test/resources/extensions/selenium-example/manifest.json
+++ b/examples/java/src/test/resources/extensions/selenium-example/manifest.json
@@ -1,17 +1,22 @@
 {
-  "manifest_version": 2,
+  "manifest_version": 3,
   "name": "webextensions-selenium-example",
-  "description": "Inject a div with id webextensions-selenium-example to verify that WebExtensions work in Firefox/Selenium" ,
+  "description": "Inject a div with id webextensions-selenium-example to verify that WebExtensions work in Firefox/Selenium",
   "version": "0.1",
   "content_scripts": [
     {
-      "matches": ["https://*/*","http://*/*"],
-      "js": ["inject.js"]
+      "matches": [
+        "https://*/*",
+        "http://*/*"
+      ],
+      "js": [
+        "inject.js"
+      ]
     }
   ],
-  "applications": {
-   "gecko": {
-     "id": "webextensions-selenium-example@example.com"
-   }
- }
-}
+  "browser_specific_settings": {
+    "gecko": {
+      "id": "webextensions-selenium-example-v3@example.com"
+    }
+  }
+}
\ No newline at end of file
diff --git a/examples/java/src/test/resources/extensions/webextensions-selenium-example.crx b/examples/java/src/test/resources/extensions/webextensions-selenium-example.crx
index 38b38003b7ec..941114eb446e 100644
Binary files a/examples/java/src/test/resources/extensions/webextensions-selenium-example.crx and b/examples/java/src/test/resources/extensions/webextensions-selenium-example.crx differ
diff --git a/examples/java/src/test/resources/server.jks b/examples/java/src/test/resources/server.jks
new file mode 100644
index 000000000000..76579e1776c1
Binary files /dev/null and b/examples/java/src/test/resources/server.jks differ
diff --git a/examples/java/src/test/resources/tls.crt b/examples/java/src/test/resources/tls.crt
new file mode 100644
index 000000000000..58a511093dde
--- /dev/null
+++ b/examples/java/src/test/resources/tls.crt
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIIEAzCCAuugAwIBAgIIPgWI/2ppJPowDQYJKoZIhvcNAQELBQAwgYcxEDAOBgNV
+BAYTB1Vua25vd24xEDAOBgNVBAgTB1Vua25vd24xEDAOBgNVBAcTB1Vua25vd24x
+EzARBgNVBAoTClNlbGVuaXVtSFExJTAjBgNVBAsTHFNvZnR3YXJlIEZyZWVkb20g
+Q29uc2VydmFuY3kxEzARBgNVBAMTClNlbGVuaXVtSFEwHhcNMjQxMTAzMDkwMDUz
+WhcNMzQxMTAxMDkwMDUzWjCBhzEQMA4GA1UEBhMHVW5rbm93bjEQMA4GA1UECBMH
+VW5rbm93bjEQMA4GA1UEBxMHVW5rbm93bjETMBEGA1UEChMKU2VsZW5pdW1IUTEl
+MCMGA1UECxMcU29mdHdhcmUgRnJlZWRvbSBDb25zZXJ2YW5jeTETMBEGA1UEAxMK
+U2VsZW5pdW1IUTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKVTx0e5
+6/75QgE5E6rTYPlTkIxDjZylOMT2YBNuB8vIFZkSaCtLEqto0XTVV6dQc8Ge41QV
+rkt7DID1oN40rvWZdla9/2bVhCsWsRiXlvrKDbjoUi5kiLcfKJW+erUWs28xnLOw
+bvGNLLAjEUitKKGpR1vsSMOuvMN9VnsSkn9smAHLT2y41CjKpvdkq+OCUdnqfYju
+vV6OthRPXFMsDb1fYqZfE7fZhLc806Rg31qLssNVPwxt6VeNYi1/e5cWYeKIJQoj
+sFkqIdvu7xHtR7Qu1tNdeQoiDhMS7VLdZDsnAAtQLHvyAVEBicBX95VrGnOTlKdk
++UDwyOP6djCISzUCAwEAAaNxMG8wHQYDVR0OBBYEFNrLCgZ7d2vfurWaJ4wa8O/T
+PfXPME4GA1UdEQEB/wREMEKCCWxvY2FsaG9zdIITc2VsZW5pdW0tZ3JpZC5sb2Nh
+bIISc2VsZW5pdW0tZ3JpZC5wcm9kggxzZWxlbml1bS5kZXYwDQYJKoZIhvcNAQEL
+BQADggEBABtxoPrVrPO5ELzUuSXbvYKHQG9YEuoAisXsiOWmldXRRvT/yTr3nzJn
+bC4dJywMW5unPdq1NoMxza0AF0KBFp1GzLDW5/KcA26R4IQi2xfQKVyRzb4vu0CY
+BDbnzF7Bisj50sSI4WThtF4xLEHVmzJ2GWNp6SgAScIrdGeB320aTqUIDO8YHH+y
+oeSu6qQfEcDiBWh3KD85vCIx0+L4AM3WKkP5nDq2FL6nwCdxqV7bo5/BZJEODMiW
+xv/hw0r1OBn2T2Z6o3pRI92zu9sjj6PzPP80DUPl7+fqAaRlLFglXd8b+Qxojm9o
+B0QN+gEM717L6WqmJGr1VC6HWQCvcCc=
+-----END CERTIFICATE-----
diff --git a/examples/java/src/test/resources/tls.key b/examples/java/src/test/resources/tls.key
new file mode 100644
index 000000000000..d97038cd2ef8
--- /dev/null
+++ b/examples/java/src/test/resources/tls.key
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQClU8dHuev++UIB
+OROq02D5U5CMQ42cpTjE9mATbgfLyBWZEmgrSxKraNF01VenUHPBnuNUFa5LewyA
+9aDeNK71mXZWvf9m1YQrFrEYl5b6yg246FIuZIi3HyiVvnq1FrNvMZyzsG7xjSyw
+IxFIrSihqUdb7EjDrrzDfVZ7EpJ/bJgBy09suNQoyqb3ZKvjglHZ6n2I7r1ejrYU
+T1xTLA29X2KmXxO32YS3PNOkYN9ai7LDVT8MbelXjWItf3uXFmHiiCUKI7BZKiHb
+7u8R7Ue0LtbTXXkKIg4TEu1S3WQ7JwALUCx78gFRAYnAV/eVaxpzk5SnZPlA8Mjj
++nYwiEs1AgMBAAECggEAA2D+tT3SGlmG9Tube2CLaRUW4shSVDBWmcSXn+teBUFv
+MDwdfRMGoZJdw4eaXWz0wgaItV7QZjJbMKXfK44ZQaOTtP/4QLuzkjuKE4tXloO7
+e5BjS5eaPrSIPGU9S0cDPvjH2oP22dYi4sJYt6ry+2ODC0Mn6o3p8Dc3Ja1HvrXA
+SNImimok7YemXVMbdPyaqbu2eXjPvWAA8W9/OW2L1n4U4neM0S5Nt3tVl5sMELj5
+iFC7Z+M3ZLon/54137h3xPmHYQMiPIX+PulaRLOJYSbR0dtMHhPMyWtR7GwEK4Aw
+EgtDLKfa6qMv5BYsI2E0bPHRDaj39UXGeWX5/2xzyQKBgQDcMUL3sEbRmeBKhYlT
+xv5ea2P4P247DDWObTDw5jLhwfmOycFcJVlaiXICpGR6hqWY8wI7kKxbQQVKFob6
+JVpIHmkkRqsV8JfXVAcaH1thlKAS4NVZsOJIVBHO3JdPaCUFq7HHbBA3436aJLtC
+HiINkuiNXd2dDMuDwOsfhsRFzQKBgQDANnK1P7sZSP7dJHinA2sPSbGAK8ZTbYWD
+8oe/lYlLkw6qM9i8vIKCfTpfi4vh4qfjQUczdy1w2zFbxriC2+uxhEqDN2tud3/P
+0CYrO0SGQKYCROrYUh0Pl1MswBeu8yT5AdrIBK3t92wfYqTWK7VUZQaUQ7YJWfXS
+usbz5qIzCQKBgH8ICHt+/gxUOtqjWYu0pPFyATWp2n1EWO13PyHrnHU0BDaFXQE9
+JuSdoOG3V6R8Y7Lul14n49etllCc2Hgd7ozmxn/AKVm5+M+oUYSXjI+qQANEJLHe
+410Y60EtcDnGen1gBWtog57KpzJkeIf3fGvaUkGkYoMFa6/yL3N7u2YNAoGADH29
+WKAKpasDvRVYrenf9D9ixKSTn+pXKesB/WZXZMzqwA7cf+90P8yplXn5HjXfmTot
+yV9uWY41F/TDGuX13DRvrzVTyvsDGFs7j8WrP1pGL5GQ/XvgnZnE8vyMzXbJqVEA
+ic0cDIHuyd9cPPrcLt7d3ZbE5ris7APtV/5d/hkCgYAMFCYoKcCh+9/2HOgwQ1b6
+16CS71TvDBCx7+D1V3WXrIOWkNzW2SIZtnhQwglU9L7PFw6ViJAY4sB2p9hDDtcZ
+e7Lotmnbrb75QQpWUyaoZMsw8l23MOGPzHKPqNiT57uOorjcFrePi9EOdERSG9+4
+lRKqCFhaNBUwQ4idzO0rWA==
+-----END PRIVATE KEY-----
diff --git a/examples/javascript/README.md b/examples/javascript/README.md
index 5bd5430d781b..f8c5f5ba10e7 100755
--- a/examples/javascript/README.md
+++ b/examples/javascript/README.md
@@ -26,4 +26,12 @@ npm install
 npm test
 ```
 
-> Please keep some patience - If you are doing it for the first time, it will take a little while to verify and download the browser drivers
\ No newline at end of file
+> Please keep some patience - If you are doing it for the first time, it will take a little while to verify and download the browser drivers
+
+# Execute a javascript test
+
+Use this command to run a JavaScript and follow the first script example
+
+```
+node example_script.spec.js
+```
\ No newline at end of file
diff --git a/examples/javascript/package-lock.json b/examples/javascript/package-lock.json
index 0797ecafc034..776422ba4e92 100644
--- a/examples/javascript/package-lock.json
+++ b/examples/javascript/package-lock.json
@@ -9,20 +9,123 @@
             "version": "1.0.0",
             "license": "Apache-2.0",
             "dependencies": {
-                "assert": "^2.0.0",
-                "selenium-webdriver": "^4.15.0"
+                "assert": "2.1.0",
+                "selenium-webdriver": "4.35.0"
             },
             "devDependencies": {
-                "mocha": "^10.2.0"
+                "mocha": "11.7.1"
             }
         },
-        "node_modules/ansi-colors": {
-            "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
-            "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+        "node_modules/@bazel/runfiles": {
+            "version": "6.3.1",
+            "resolved": "https://registry.npmjs.org/@bazel/runfiles/-/runfiles-6.3.1.tgz",
+            "integrity": "sha512-1uLNT5NZsUVIGS4syuHwTzZ8HycMPyr6POA3FCE4GbMtc4rhoJk8aZKtNIRthJYfL+iioppi+rTfH3olMPr9nA==",
+            "license": "Apache-2.0"
+        },
+        "node_modules/@isaacs/cliui": {
+            "version": "8.0.2",
+            "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+            "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
             "dev": true,
+            "dependencies": {
+                "string-width": "^5.1.2",
+                "string-width-cjs": "npm:string-width@^4.2.0",
+                "strip-ansi": "^7.0.1",
+                "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+                "wrap-ansi": "^8.1.0",
+                "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+            },
             "engines": {
-                "node": ">=6"
+                "node": ">=12"
+            }
+        },
+        "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+            "version": "6.1.0",
+            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+            "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+            "dev": true,
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+            }
+        },
+        "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
+            "version": "6.2.1",
+            "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+            "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+            "dev": true,
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+            }
+        },
+        "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
+            "version": "9.2.2",
+            "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+            "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+            "dev": true
+        },
+        "node_modules/@isaacs/cliui/node_modules/string-width": {
+            "version": "5.1.2",
+            "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+            "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+            "dev": true,
+            "dependencies": {
+                "eastasianwidth": "^0.2.0",
+                "emoji-regex": "^9.2.2",
+                "strip-ansi": "^7.0.1"
+            },
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+            "version": "7.1.0",
+            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+            "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+            "dev": true,
+            "dependencies": {
+                "ansi-regex": "^6.0.1"
+            },
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+            }
+        },
+        "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
+            "version": "8.1.0",
+            "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+            "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+            "dev": true,
+            "dependencies": {
+                "ansi-styles": "^6.1.0",
+                "string-width": "^5.0.1",
+                "strip-ansi": "^7.0.1"
+            },
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+            }
+        },
+        "node_modules/@pkgjs/parseargs": {
+            "version": "0.11.0",
+            "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+            "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+            "dev": true,
+            "optional": true,
+            "engines": {
+                "node": ">=14"
             }
         },
         "node_modules/ansi-regex": {
@@ -49,19 +152,6 @@
                 "url": "https://github.com/chalk/ansi-styles?sponsor=1"
             }
         },
-        "node_modules/anymatch": {
-            "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",
-                "picomatch": "^2.0.4"
-            },
-            "engines": {
-                "node": ">= 8"
-            }
-        },
         "node_modules/argparse": {
             "version": "2.0.1",
             "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -69,14 +159,15 @@
             "dev": true
         },
         "node_modules/assert": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz",
-            "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==",
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz",
+            "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==",
             "dependencies": {
-                "es6-object-assign": "^1.1.0",
-                "is-nan": "^1.2.1",
-                "object-is": "^1.0.1",
-                "util": "^0.12.0"
+                "call-bind": "^1.0.2",
+                "is-nan": "^1.3.2",
+                "object-is": "^1.1.5",
+                "object.assign": "^4.1.4",
+                "util": "^0.12.5"
             }
         },
         "node_modules/available-typed-arrays": {
@@ -93,16 +184,8 @@
         "node_modules/balanced-match": {
             "version": "1.0.2",
             "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-            "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
-        },
-        "node_modules/binary-extensions": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
-            "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
-            "dev": true,
-            "engines": {
-                "node": ">=8"
-            }
+            "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+            "dev": true
         },
         "node_modules/brace-expansion": {
             "version": "2.0.1",
@@ -113,18 +196,6 @@
                 "balanced-match": "^1.0.0"
             }
         },
-        "node_modules/braces": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-            "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
-            "dev": true,
-            "dependencies": {
-                "fill-range": "^7.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
         "node_modules/browser-stdout": {
             "version": "1.3.1",
             "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
@@ -132,12 +203,13 @@
             "dev": true
         },
         "node_modules/call-bind": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
-            "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+            "version": "1.0.5",
+            "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
+            "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
             "dependencies": {
-                "function-bind": "^1.1.1",
-                "get-intrinsic": "^1.0.2"
+                "function-bind": "^1.1.2",
+                "get-intrinsic": "^1.2.1",
+                "set-function-length": "^1.1.1"
             },
             "funding": {
                 "url": "https://github.com/sponsors/ljharb"
@@ -184,41 +256,34 @@
             }
         },
         "node_modules/chokidar": {
-            "version": "3.5.3",
-            "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
-            "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+            "version": "4.0.3",
+            "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
+            "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
             "dev": true,
-            "funding": [
-                {
-                    "type": "individual",
-                    "url": "https://paulmillr.com/funding/"
-                }
-            ],
+            "license": "MIT",
             "dependencies": {
-                "anymatch": "~3.1.2",
-                "braces": "~3.0.2",
-                "glob-parent": "~5.1.2",
-                "is-binary-path": "~2.1.0",
-                "is-glob": "~4.0.1",
-                "normalize-path": "~3.0.0",
-                "readdirp": "~3.6.0"
+                "readdirp": "^4.0.1"
             },
             "engines": {
-                "node": ">= 8.10.0"
+                "node": ">= 14.16.0"
             },
-            "optionalDependencies": {
-                "fsevents": "~2.3.2"
+            "funding": {
+                "url": "https://paulmillr.com/funding/"
             }
         },
         "node_modules/cliui": {
-            "version": "7.0.4",
-            "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
-            "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+            "version": "8.0.1",
+            "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+            "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
             "dev": true,
+            "license": "ISC",
             "dependencies": {
                 "string-width": "^4.2.0",
-                "strip-ansi": "^6.0.0",
+                "strip-ansi": "^6.0.1",
                 "wrap-ansi": "^7.0.0"
+            },
+            "engines": {
+                "node": ">=12"
             }
         },
         "node_modules/color-convert": {
@@ -239,20 +304,29 @@
             "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
             "dev": true
         },
-        "node_modules/concat-map": {
-            "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-            "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
-        },
         "node_modules/core-util-is": {
             "version": "1.0.3",
             "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
             "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
         },
+        "node_modules/cross-spawn": {
+            "version": "7.0.6",
+            "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+            "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+            "dev": true,
+            "dependencies": {
+                "path-key": "^3.1.0",
+                "shebang-command": "^2.0.0",
+                "which": "^2.0.1"
+            },
+            "engines": {
+                "node": ">= 8"
+            }
+        },
         "node_modules/debug": {
-            "version": "4.3.4",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-            "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+            "version": "4.3.5",
+            "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
+            "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
             "dev": true,
             "dependencies": {
                 "ms": "2.1.2"
@@ -278,11 +352,25 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
+        "node_modules/define-data-property": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
+            "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
+            "dependencies": {
+                "get-intrinsic": "^1.2.1",
+                "gopd": "^1.0.1",
+                "has-property-descriptors": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
         "node_modules/define-properties": {
-            "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==",
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+            "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
             "dependencies": {
+                "define-data-property": "^1.0.1",
                 "has-property-descriptors": "^1.0.0",
                 "object-keys": "^1.1.1"
             },
@@ -294,30 +382,32 @@
             }
         },
         "node_modules/diff": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
-            "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
+            "version": "7.0.0",
+            "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz",
+            "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==",
             "dev": true,
             "engines": {
                 "node": ">=0.3.1"
             }
         },
+        "node_modules/eastasianwidth": {
+            "version": "0.2.0",
+            "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+            "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+            "dev": true
+        },
         "node_modules/emoji-regex": {
             "version": "8.0.0",
             "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
             "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
             "dev": true
         },
-        "node_modules/es6-object-assign": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz",
-            "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw=="
-        },
         "node_modules/escalade": {
-            "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
-            "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+            "version": "3.2.0",
+            "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+            "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=6"
             }
@@ -334,18 +424,6 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "node_modules/fill-range": {
-            "version": "7.0.1",
-            "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-            "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
-            "dev": true,
-            "dependencies": {
-                "to-regex-range": "^5.0.1"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
         "node_modules/find-up": {
             "version": "5.0.0",
             "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
@@ -379,103 +457,74 @@
                 "is-callable": "^1.1.3"
             }
         },
-        "node_modules/fs.realpath": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-            "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
-        },
-        "node_modules/fsevents": {
-            "version": "2.3.2",
-            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
-            "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+        "node_modules/foreground-child": {
+            "version": "3.3.0",
+            "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+            "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
             "dev": true,
-            "hasInstallScript": true,
-            "optional": true,
-            "os": [
-                "darwin"
-            ],
+            "dependencies": {
+                "cross-spawn": "^7.0.0",
+                "signal-exit": "^4.0.1"
+            },
             "engines": {
-                "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+                "node": ">=14"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
             }
         },
         "node_modules/function-bind": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-            "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+            "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
         },
         "node_modules/get-caller-file": {
             "version": "2.0.5",
             "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
             "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
             "dev": true,
+            "license": "ISC",
             "engines": {
                 "node": "6.* || 8.* || >= 10.*"
             }
         },
         "node_modules/get-intrinsic": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
-            "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
+            "version": "1.2.2",
+            "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
+            "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
             "dependencies": {
-                "function-bind": "^1.1.1",
-                "has": "^1.0.3",
-                "has-symbols": "^1.0.3"
+                "function-bind": "^1.1.2",
+                "has-proto": "^1.0.1",
+                "has-symbols": "^1.0.3",
+                "hasown": "^2.0.0"
             },
             "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",
-            "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+            "version": "10.4.5",
+            "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+            "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+            "dev": true,
             "dependencies": {
-                "fs.realpath": "^1.0.0",
-                "inflight": "^1.0.4",
-                "inherits": "2",
-                "minimatch": "^3.0.4",
-                "once": "^1.3.0",
-                "path-is-absolute": "^1.0.0"
+                "foreground-child": "^3.1.0",
+                "jackspeak": "^3.1.2",
+                "minimatch": "^9.0.4",
+                "minipass": "^7.1.2",
+                "package-json-from-dist": "^1.0.0",
+                "path-scurry": "^1.11.1"
             },
-            "engines": {
-                "node": "*"
+            "bin": {
+                "glob": "dist/esm/bin.mjs"
             },
             "funding": {
                 "url": "https://github.com/sponsors/isaacs"
             }
         },
-        "node_modules/glob-parent": {
-            "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-            "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-            "dev": true,
-            "dependencies": {
-                "is-glob": "^4.0.1"
-            },
-            "engines": {
-                "node": ">= 6"
-            }
-        },
-        "node_modules/glob/node_modules/brace-expansion": {
-            "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-            "dependencies": {
-                "balanced-match": "^1.0.0",
-                "concat-map": "0.0.1"
-            }
-        },
-        "node_modules/glob/node_modules/minimatch": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-            "dependencies": {
-                "brace-expansion": "^1.1.7"
-            },
-            "engines": {
-                "node": "*"
-            }
-        },
         "node_modules/gopd": {
             "version": "1.0.1",
             "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
@@ -487,17 +536,6 @@
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "node_modules/has": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-            "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-            "dependencies": {
-                "function-bind": "^1.1.1"
-            },
-            "engines": {
-                "node": ">= 0.4.0"
-            }
-        },
         "node_modules/has-flag": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -518,6 +556,17 @@
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
+        "node_modules/has-proto": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+            "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
         "node_modules/has-symbols": {
             "version": "1.0.3",
             "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
@@ -543,6 +592,17 @@
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
+        "node_modules/hasown": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
+            "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+            "dependencies": {
+                "function-bind": "^1.1.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
         "node_modules/he": {
             "version": "1.2.0",
             "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@@ -557,15 +617,6 @@
             "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
             "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="
         },
-        "node_modules/inflight": {
-            "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-            "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
-            "dependencies": {
-                "once": "^1.3.0",
-                "wrappy": "1"
-            }
-        },
         "node_modules/inherits": {
             "version": "2.0.4",
             "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
@@ -586,18 +637,6 @@
                 "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",
-            "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
-            "dev": true,
-            "dependencies": {
-                "binary-extensions": "^2.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
         "node_modules/is-callable": {
             "version": "1.2.7",
             "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
@@ -609,15 +648,6 @@
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "node_modules/is-extglob": {
-            "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-            "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
-            "dev": true,
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
         "node_modules/is-fullwidth-code-point": {
             "version": "3.0.0",
             "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
@@ -641,18 +671,6 @@
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "node_modules/is-glob": {
-            "version": "4.0.3",
-            "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
-            "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
-            "dev": true,
-            "dependencies": {
-                "is-extglob": "^2.1.1"
-            },
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
         "node_modules/is-nan": {
             "version": "1.3.2",
             "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz",
@@ -668,15 +686,6 @@
                 "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",
-            "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-            "dev": true,
-            "engines": {
-                "node": ">=0.12.0"
-            }
-        },
         "node_modules/is-plain-obj": {
             "version": "2.1.0",
             "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
@@ -721,6 +730,27 @@
             "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
             "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
         },
+        "node_modules/isexe": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+            "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+            "dev": true
+        },
+        "node_modules/jackspeak": {
+            "version": "3.4.3",
+            "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+            "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+            "dev": true,
+            "dependencies": {
+                "@isaacs/cliui": "^8.0.2"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            },
+            "optionalDependencies": {
+                "@pkgjs/parseargs": "^0.11.0"
+            }
+        },
         "node_modules/js-yaml": {
             "version": "4.1.0",
             "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -783,56 +813,69 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
+        "node_modules/lru-cache": {
+            "version": "10.4.3",
+            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+            "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+            "dev": true
+        },
         "node_modules/minimatch": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
-            "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
+            "version": "9.0.5",
+            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+            "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
             "dev": true,
             "dependencies": {
                 "brace-expansion": "^2.0.1"
             },
             "engines": {
-                "node": ">=10"
+                "node": ">=16 || 14 >=14.17"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
+        "node_modules/minipass": {
+            "version": "7.1.2",
+            "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+            "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+            "dev": true,
+            "engines": {
+                "node": ">=16 || 14 >=14.17"
             }
         },
         "node_modules/mocha": {
-            "version": "10.2.0",
-            "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz",
-            "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==",
-            "dev": true,
-            "dependencies": {
-                "ansi-colors": "4.1.1",
-                "browser-stdout": "1.3.1",
-                "chokidar": "3.5.3",
-                "debug": "4.3.4",
-                "diff": "5.0.0",
-                "escape-string-regexp": "4.0.0",
-                "find-up": "5.0.0",
-                "glob": "7.2.0",
-                "he": "1.2.0",
-                "js-yaml": "4.1.0",
-                "log-symbols": "4.1.0",
-                "minimatch": "5.0.1",
-                "ms": "2.1.3",
-                "nanoid": "3.3.3",
-                "serialize-javascript": "6.0.0",
-                "strip-json-comments": "3.1.1",
-                "supports-color": "8.1.1",
-                "workerpool": "6.2.1",
-                "yargs": "16.2.0",
-                "yargs-parser": "20.2.4",
-                "yargs-unparser": "2.0.0"
+            "version": "11.7.1",
+            "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.1.tgz",
+            "integrity": "sha512-5EK+Cty6KheMS/YLPPMJC64g5V61gIR25KsRItHw6x4hEKT6Njp1n9LOlH4gpevuwMVS66SXaBBpg+RWZkza4A==",
+            "dev": true,
+            "dependencies": {
+                "browser-stdout": "^1.3.1",
+                "chokidar": "^4.0.1",
+                "debug": "^4.3.5",
+                "diff": "^7.0.0",
+                "escape-string-regexp": "^4.0.0",
+                "find-up": "^5.0.0",
+                "glob": "^10.4.5",
+                "he": "^1.2.0",
+                "js-yaml": "^4.1.0",
+                "log-symbols": "^4.1.0",
+                "minimatch": "^9.0.5",
+                "ms": "^2.1.3",
+                "picocolors": "^1.1.1",
+                "serialize-javascript": "^6.0.2",
+                "strip-json-comments": "^3.1.1",
+                "supports-color": "^8.1.1",
+                "workerpool": "^9.2.0",
+                "yargs": "^17.7.2",
+                "yargs-parser": "^21.1.1",
+                "yargs-unparser": "^2.0.0"
             },
             "bin": {
                 "_mocha": "bin/_mocha",
                 "mocha": "bin/mocha.js"
             },
             "engines": {
-                "node": ">= 14.0.0"
-            },
-            "funding": {
-                "type": "opencollective",
-                "url": "https://opencollective.com/mochajs"
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
             }
         },
         "node_modules/mocha/node_modules/ms": {
@@ -847,27 +890,6 @@
             "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
             "dev": true
         },
-        "node_modules/nanoid": {
-            "version": "3.3.3",
-            "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
-            "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
-            "dev": true,
-            "bin": {
-                "nanoid": "bin/nanoid.cjs"
-            },
-            "engines": {
-                "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
-            }
-        },
-        "node_modules/normalize-path": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
-            "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
-            "dev": true,
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
         "node_modules/object-is": {
             "version": "1.1.5",
             "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
@@ -891,12 +913,21 @@
                 "node": ">= 0.4"
             }
         },
-        "node_modules/once": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-            "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+        "node_modules/object.assign": {
+            "version": "4.1.5",
+            "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+            "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
             "dependencies": {
-                "wrappy": "1"
+                "call-bind": "^1.0.5",
+                "define-properties": "^1.2.1",
+                "has-symbols": "^1.0.3",
+                "object-keys": "^1.1.1"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
             }
         },
         "node_modules/p-limit": {
@@ -929,6 +960,12 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
+        "node_modules/package-json-from-dist": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+            "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+            "dev": true
+        },
         "node_modules/pako": {
             "version": "1.0.11",
             "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
@@ -943,26 +980,38 @@
                 "node": ">=8"
             }
         },
-        "node_modules/path-is-absolute": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-            "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+        "node_modules/path-key": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+            "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+            "dev": true,
             "engines": {
-                "node": ">=0.10.0"
+                "node": ">=8"
             }
         },
-        "node_modules/picomatch": {
-            "version": "2.3.1",
-            "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
-            "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+        "node_modules/path-scurry": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+            "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
             "dev": true,
+            "dependencies": {
+                "lru-cache": "^10.2.0",
+                "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+            },
             "engines": {
-                "node": ">=8.6"
+                "node": ">=16 || 14 >=14.18"
             },
             "funding": {
-                "url": "https://github.com/sponsors/jonschlinkert"
+                "url": "https://github.com/sponsors/isaacs"
             }
         },
+        "node_modules/picocolors": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+            "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+            "dev": true,
+            "license": "ISC"
+        },
         "node_modules/process-nextick-args": {
             "version": "2.0.1",
             "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@@ -992,15 +1041,17 @@
             }
         },
         "node_modules/readdirp": {
-            "version": "3.6.0",
-            "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
-            "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+            "version": "4.1.2",
+            "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
+            "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
             "dev": true,
-            "dependencies": {
-                "picomatch": "^2.2.1"
-            },
+            "license": "MIT",
             "engines": {
-                "node": ">=8.10.0"
+                "node": ">= 14.18.0"
+            },
+            "funding": {
+                "type": "individual",
+                "url": "https://paulmillr.com/funding/"
             }
         },
         "node_modules/require-directory": {
@@ -1008,56 +1059,101 @@
             "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
             "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
             "dev": true,
+            "license": "MIT",
             "engines": {
                 "node": ">=0.10.0"
             }
         },
-        "node_modules/rimraf": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
-            "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
-            "dependencies": {
-                "glob": "^7.1.3"
-            },
-            "bin": {
-                "rimraf": "bin.js"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
-            }
-        },
         "node_modules/safe-buffer": {
             "version": "5.1.2",
             "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
             "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
         },
         "node_modules/selenium-webdriver": {
-            "version": "4.15.0",
-            "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.15.0.tgz",
-            "integrity": "sha512-BNG1bq+KWiBGHcJ/wULi0eKY0yaDqFIbEmtbsYJmfaEghdCkXBsx1akgOorhNwjBipOr0uwpvNXqT6/nzl+zjg==",
+            "version": "4.35.0",
+            "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.35.0.tgz",
+            "integrity": "sha512-Baaeiuyu7BIIsSYf0SI7Mi55gsNmdI00KM0Hcofw1RnAY+0QEVpdh5yAxueDxgTZS8vcbGZFU0NJ6Qc1riIrLg==",
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/SeleniumHQ"
+                },
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/selenium"
+                }
+            ],
             "dependencies": {
+                "@bazel/runfiles": "^6.3.1",
                 "jszip": "^3.10.1",
-                "tmp": "^0.2.1",
-                "ws": ">=8.14.2"
+                "tmp": "^0.2.3",
+                "ws": "^8.18.2"
             },
             "engines": {
-                "node": ">= 14.20.0"
+                "node": ">= 20.0.0"
             }
         },
         "node_modules/serialize-javascript": {
-            "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
-            "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+            "version": "6.0.2",
+            "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+            "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
             "dev": true,
             "dependencies": {
                 "randombytes": "^2.1.0"
             }
         },
+        "node_modules/set-function-length": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
+            "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
+            "dependencies": {
+                "define-data-property": "^1.1.1",
+                "get-intrinsic": "^1.2.1",
+                "gopd": "^1.0.1",
+                "has-property-descriptors": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
         "node_modules/setimmediate": {
             "version": "1.0.5",
             "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
             "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="
         },
+        "node_modules/shebang-command": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+            "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+            "dev": true,
+            "dependencies": {
+                "shebang-regex": "^3.0.0"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/shebang-regex": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+            "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+            "dev": true,
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/signal-exit": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+            "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+            "dev": true,
+            "engines": {
+                "node": ">=14"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
         "node_modules/string_decoder": {
             "version": "1.1.1",
             "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -1066,7 +1162,22 @@
                 "safe-buffer": "~5.1.0"
             }
         },
-        "node_modules/string-width": {
+        "node_modules/string-width": {
+            "version": "4.2.3",
+            "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+            "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+            "dev": true,
+            "dependencies": {
+                "emoji-regex": "^8.0.0",
+                "is-fullwidth-code-point": "^3.0.0",
+                "strip-ansi": "^6.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
+        "node_modules/string-width-cjs": {
+            "name": "string-width",
             "version": "4.2.3",
             "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
             "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
@@ -1092,6 +1203,19 @@
                 "node": ">=8"
             }
         },
+        "node_modules/strip-ansi-cjs": {
+            "name": "strip-ansi",
+            "version": "6.0.1",
+            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+            "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+            "dev": true,
+            "dependencies": {
+                "ansi-regex": "^5.0.1"
+            },
+            "engines": {
+                "node": ">=8"
+            }
+        },
         "node_modules/strip-json-comments": {
             "version": "3.1.1",
             "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
@@ -1120,26 +1244,11 @@
             }
         },
         "node_modules/tmp": {
-            "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
-            "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
-            "dependencies": {
-                "rimraf": "^3.0.0"
-            },
-            "engines": {
-                "node": ">=8.17.0"
-            }
-        },
-        "node_modules/to-regex-range": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-            "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-            "dev": true,
-            "dependencies": {
-                "is-number": "^7.0.0"
-            },
+            "version": "0.2.4",
+            "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.4.tgz",
+            "integrity": "sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==",
             "engines": {
-                "node": ">=8.0"
+                "node": ">=14.14"
             }
         },
         "node_modules/util": {
@@ -1159,6 +1268,21 @@
             "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
             "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
         },
+        "node_modules/which": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+            "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+            "dev": true,
+            "dependencies": {
+                "isexe": "^2.0.0"
+            },
+            "bin": {
+                "node-which": "bin/node-which"
+            },
+            "engines": {
+                "node": ">= 8"
+            }
+        },
         "node_modules/which-typed-array": {
             "version": "1.1.9",
             "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
@@ -1179,9 +1303,9 @@
             }
         },
         "node_modules/workerpool": {
-            "version": "6.2.1",
-            "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
-            "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
+            "version": "9.3.2",
+            "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.2.tgz",
+            "integrity": "sha512-Xz4Nm9c+LiBHhDR5bDLnNzmj6+5F+cyEAWPMkbs2awq/dYazR/efelZzUAjB/y3kNHL+uzkHvxVVpaOfGCPV7A==",
             "dev": true
         },
         "node_modules/wrap-ansi": {
@@ -1189,6 +1313,7 @@
             "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
             "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
                 "ansi-styles": "^4.0.0",
                 "string-width": "^4.1.0",
@@ -1201,15 +1326,28 @@
                 "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
             }
         },
-        "node_modules/wrappy": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-            "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+        "node_modules/wrap-ansi-cjs": {
+            "name": "wrap-ansi",
+            "version": "7.0.0",
+            "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+            "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+            "dev": true,
+            "dependencies": {
+                "ansi-styles": "^4.0.0",
+                "string-width": "^4.1.0",
+                "strip-ansi": "^6.0.0"
+            },
+            "engines": {
+                "node": ">=10"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+            }
         },
         "node_modules/ws": {
-            "version": "8.14.2",
-            "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz",
-            "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==",
+            "version": "8.18.3",
+            "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
+            "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
             "engines": {
                 "node": ">=10.0.0"
             },
@@ -1231,35 +1369,38 @@
             "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
             "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
             "dev": true,
+            "license": "ISC",
             "engines": {
                 "node": ">=10"
             }
         },
         "node_modules/yargs": {
-            "version": "16.2.0",
-            "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
-            "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+            "version": "17.7.2",
+            "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+            "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
             "dev": true,
+            "license": "MIT",
             "dependencies": {
-                "cliui": "^7.0.2",
+                "cliui": "^8.0.1",
                 "escalade": "^3.1.1",
                 "get-caller-file": "^2.0.5",
                 "require-directory": "^2.1.1",
-                "string-width": "^4.2.0",
+                "string-width": "^4.2.3",
                 "y18n": "^5.0.5",
-                "yargs-parser": "^20.2.2"
+                "yargs-parser": "^21.1.1"
             },
             "engines": {
-                "node": ">=10"
+                "node": ">=12"
             }
         },
         "node_modules/yargs-parser": {
-            "version": "20.2.4",
-            "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
-            "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
+            "version": "21.1.1",
+            "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+            "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
             "dev": true,
+            "license": "ISC",
             "engines": {
-                "node": ">=10"
+                "node": ">=12"
             }
         },
         "node_modules/yargs-unparser": {
@@ -1291,11 +1432,82 @@
         }
     },
     "dependencies": {
-        "ansi-colors": {
-            "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
-            "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
-            "dev": true
+        "@bazel/runfiles": {
+            "version": "6.3.1",
+            "resolved": "https://registry.npmjs.org/@bazel/runfiles/-/runfiles-6.3.1.tgz",
+            "integrity": "sha512-1uLNT5NZsUVIGS4syuHwTzZ8HycMPyr6POA3FCE4GbMtc4rhoJk8aZKtNIRthJYfL+iioppi+rTfH3olMPr9nA=="
+        },
+        "@isaacs/cliui": {
+            "version": "8.0.2",
+            "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+            "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+            "dev": true,
+            "requires": {
+                "string-width": "^5.1.2",
+                "string-width-cjs": "npm:string-width@^4.2.0",
+                "strip-ansi": "^7.0.1",
+                "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+                "wrap-ansi": "^8.1.0",
+                "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+            },
+            "dependencies": {
+                "ansi-regex": {
+                    "version": "6.1.0",
+                    "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+                    "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+                    "dev": true
+                },
+                "ansi-styles": {
+                    "version": "6.2.1",
+                    "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+                    "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+                    "dev": true
+                },
+                "emoji-regex": {
+                    "version": "9.2.2",
+                    "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+                    "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+                    "dev": true
+                },
+                "string-width": {
+                    "version": "5.1.2",
+                    "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+                    "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+                    "dev": true,
+                    "requires": {
+                        "eastasianwidth": "^0.2.0",
+                        "emoji-regex": "^9.2.2",
+                        "strip-ansi": "^7.0.1"
+                    }
+                },
+                "strip-ansi": {
+                    "version": "7.1.0",
+                    "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+                    "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+                    "dev": true,
+                    "requires": {
+                        "ansi-regex": "^6.0.1"
+                    }
+                },
+                "wrap-ansi": {
+                    "version": "8.1.0",
+                    "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+                    "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+                    "dev": true,
+                    "requires": {
+                        "ansi-styles": "^6.1.0",
+                        "string-width": "^5.0.1",
+                        "strip-ansi": "^7.0.1"
+                    }
+                }
+            }
+        },
+        "@pkgjs/parseargs": {
+            "version": "0.11.0",
+            "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+            "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+            "dev": true,
+            "optional": true
         },
         "ansi-regex": {
             "version": "5.0.1",
@@ -1312,16 +1524,6 @@
                 "color-convert": "^2.0.1"
             }
         },
-        "anymatch": {
-            "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",
-                "picomatch": "^2.0.4"
-            }
-        },
         "argparse": {
             "version": "2.0.1",
             "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -1329,14 +1531,15 @@
             "dev": true
         },
         "assert": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz",
-            "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==",
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz",
+            "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==",
             "requires": {
-                "es6-object-assign": "^1.1.0",
-                "is-nan": "^1.2.1",
-                "object-is": "^1.0.1",
-                "util": "^0.12.0"
+                "call-bind": "^1.0.2",
+                "is-nan": "^1.3.2",
+                "object-is": "^1.1.5",
+                "object.assign": "^4.1.4",
+                "util": "^0.12.5"
             }
         },
         "available-typed-arrays": {
@@ -1347,12 +1550,7 @@
         "balanced-match": {
             "version": "1.0.2",
             "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-            "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
-        },
-        "binary-extensions": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
-            "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+            "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
             "dev": true
         },
         "brace-expansion": {
@@ -1364,15 +1562,6 @@
                 "balanced-match": "^1.0.0"
             }
         },
-        "braces": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-            "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
-            "dev": true,
-            "requires": {
-                "fill-range": "^7.0.1"
-            }
-        },
         "browser-stdout": {
             "version": "1.3.1",
             "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
@@ -1380,12 +1569,13 @@
             "dev": true
         },
         "call-bind": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
-            "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+            "version": "1.0.5",
+            "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
+            "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
             "requires": {
-                "function-bind": "^1.1.1",
-                "get-intrinsic": "^1.0.2"
+                "function-bind": "^1.1.2",
+                "get-intrinsic": "^1.2.1",
+                "set-function-length": "^1.1.1"
             }
         },
         "camelcase": {
@@ -1416,29 +1606,22 @@
             }
         },
         "chokidar": {
-            "version": "3.5.3",
-            "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
-            "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+            "version": "4.0.3",
+            "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
+            "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
             "dev": true,
             "requires": {
-                "anymatch": "~3.1.2",
-                "braces": "~3.0.2",
-                "fsevents": "~2.3.2",
-                "glob-parent": "~5.1.2",
-                "is-binary-path": "~2.1.0",
-                "is-glob": "~4.0.1",
-                "normalize-path": "~3.0.0",
-                "readdirp": "~3.6.0"
+                "readdirp": "^4.0.1"
             }
         },
         "cliui": {
-            "version": "7.0.4",
-            "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
-            "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+            "version": "8.0.1",
+            "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+            "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
             "dev": true,
             "requires": {
                 "string-width": "^4.2.0",
-                "strip-ansi": "^6.0.0",
+                "strip-ansi": "^6.0.1",
                 "wrap-ansi": "^7.0.0"
             }
         },
@@ -1457,20 +1640,26 @@
             "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
             "dev": true
         },
-        "concat-map": {
-            "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-            "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
-        },
         "core-util-is": {
             "version": "1.0.3",
             "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
             "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
         },
+        "cross-spawn": {
+            "version": "7.0.6",
+            "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+            "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+            "dev": true,
+            "requires": {
+                "path-key": "^3.1.0",
+                "shebang-command": "^2.0.0",
+                "which": "^2.0.1"
+            }
+        },
         "debug": {
-            "version": "4.3.4",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-            "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+            "version": "4.3.5",
+            "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
+            "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
             "dev": true,
             "requires": {
                 "ms": "2.1.2"
@@ -1482,19 +1671,36 @@
             "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
             "dev": true
         },
+        "define-data-property": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
+            "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
+            "requires": {
+                "get-intrinsic": "^1.2.1",
+                "gopd": "^1.0.1",
+                "has-property-descriptors": "^1.0.0"
+            }
+        },
         "define-properties": {
-            "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==",
+            "version": "1.2.1",
+            "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+            "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
             "requires": {
+                "define-data-property": "^1.0.1",
                 "has-property-descriptors": "^1.0.0",
                 "object-keys": "^1.1.1"
             }
         },
         "diff": {
-            "version": "5.0.0",
-            "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
-            "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
+            "version": "7.0.0",
+            "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz",
+            "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==",
+            "dev": true
+        },
+        "eastasianwidth": {
+            "version": "0.2.0",
+            "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+            "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
             "dev": true
         },
         "emoji-regex": {
@@ -1503,15 +1709,10 @@
             "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
             "dev": true
         },
-        "es6-object-assign": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz",
-            "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw=="
-        },
         "escalade": {
-            "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
-            "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+            "version": "3.2.0",
+            "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+            "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
             "dev": true
         },
         "escape-string-regexp": {
@@ -1520,15 +1721,6 @@
             "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
             "dev": true
         },
-        "fill-range": {
-            "version": "7.0.1",
-            "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-            "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
-            "dev": true,
-            "requires": {
-                "to-regex-range": "^5.0.1"
-            }
-        },
         "find-up": {
             "version": "5.0.0",
             "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
@@ -1553,22 +1745,20 @@
                 "is-callable": "^1.1.3"
             }
         },
-        "fs.realpath": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-            "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
-        },
-        "fsevents": {
-            "version": "2.3.2",
-            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
-            "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+        "foreground-child": {
+            "version": "3.3.0",
+            "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+            "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
             "dev": true,
-            "optional": true
+            "requires": {
+                "cross-spawn": "^7.0.0",
+                "signal-exit": "^4.0.1"
+            }
         },
         "function-bind": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-            "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+            "version": "1.1.2",
+            "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+            "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
         },
         "get-caller-file": {
             "version": "2.0.5",
@@ -1577,54 +1767,28 @@
             "dev": true
         },
         "get-intrinsic": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
-            "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
+            "version": "1.2.2",
+            "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
+            "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
             "requires": {
-                "function-bind": "^1.1.1",
-                "has": "^1.0.3",
-                "has-symbols": "^1.0.3"
+                "function-bind": "^1.1.2",
+                "has-proto": "^1.0.1",
+                "has-symbols": "^1.0.3",
+                "hasown": "^2.0.0"
             }
         },
         "glob": {
-            "version": "7.2.0",
-            "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
-            "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
-            "requires": {
-                "fs.realpath": "^1.0.0",
-                "inflight": "^1.0.4",
-                "inherits": "2",
-                "minimatch": "^3.0.4",
-                "once": "^1.3.0",
-                "path-is-absolute": "^1.0.0"
-            },
-            "dependencies": {
-                "brace-expansion": {
-                    "version": "1.1.11",
-                    "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-                    "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-                    "requires": {
-                        "balanced-match": "^1.0.0",
-                        "concat-map": "0.0.1"
-                    }
-                },
-                "minimatch": {
-                    "version": "3.1.2",
-                    "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-                    "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-                    "requires": {
-                        "brace-expansion": "^1.1.7"
-                    }
-                }
-            }
-        },
-        "glob-parent": {
-            "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-            "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+            "version": "10.4.5",
+            "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+            "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
             "dev": true,
             "requires": {
-                "is-glob": "^4.0.1"
+                "foreground-child": "^3.1.0",
+                "jackspeak": "^3.1.2",
+                "minimatch": "^9.0.4",
+                "minipass": "^7.1.2",
+                "package-json-from-dist": "^1.0.0",
+                "path-scurry": "^1.11.1"
             }
         },
         "gopd": {
@@ -1635,14 +1799,6 @@
                 "get-intrinsic": "^1.1.3"
             }
         },
-        "has": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-            "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-            "requires": {
-                "function-bind": "^1.1.1"
-            }
-        },
         "has-flag": {
             "version": "4.0.0",
             "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -1657,6 +1813,11 @@
                 "get-intrinsic": "^1.1.1"
             }
         },
+        "has-proto": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+            "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+        },
         "has-symbols": {
             "version": "1.0.3",
             "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
@@ -1670,6 +1831,14 @@
                 "has-symbols": "^1.0.2"
             }
         },
+        "hasown": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
+            "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+            "requires": {
+                "function-bind": "^1.1.2"
+            }
+        },
         "he": {
             "version": "1.2.0",
             "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@@ -1681,15 +1850,6 @@
             "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
             "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="
         },
-        "inflight": {
-            "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-            "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
-            "requires": {
-                "once": "^1.3.0",
-                "wrappy": "1"
-            }
-        },
         "inherits": {
             "version": "2.0.4",
             "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
@@ -1704,26 +1864,11 @@
                 "has-tostringtag": "^1.0.0"
             }
         },
-        "is-binary-path": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
-            "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
-            "dev": true,
-            "requires": {
-                "binary-extensions": "^2.0.0"
-            }
-        },
         "is-callable": {
             "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",
-            "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-            "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
-            "dev": true
-        },
         "is-fullwidth-code-point": {
             "version": "3.0.0",
             "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
@@ -1738,15 +1883,6 @@
                 "has-tostringtag": "^1.0.0"
             }
         },
-        "is-glob": {
-            "version": "4.0.3",
-            "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
-            "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
-            "dev": true,
-            "requires": {
-                "is-extglob": "^2.1.1"
-            }
-        },
         "is-nan": {
             "version": "1.3.2",
             "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz",
@@ -1756,12 +1892,6 @@
                 "define-properties": "^1.1.3"
             }
         },
-        "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-plain-obj": {
             "version": "2.1.0",
             "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
@@ -1791,6 +1921,22 @@
             "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
             "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
         },
+        "isexe": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+            "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+            "dev": true
+        },
+        "jackspeak": {
+            "version": "3.4.3",
+            "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+            "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+            "dev": true,
+            "requires": {
+                "@isaacs/cliui": "^8.0.2",
+                "@pkgjs/parseargs": "^0.11.0"
+            }
+        },
         "js-yaml": {
             "version": "4.1.0",
             "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -1838,42 +1984,53 @@
                 "is-unicode-supported": "^0.1.0"
             }
         },
+        "lru-cache": {
+            "version": "10.4.3",
+            "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+            "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+            "dev": true
+        },
         "minimatch": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
-            "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
+            "version": "9.0.5",
+            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+            "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
             "dev": true,
             "requires": {
                 "brace-expansion": "^2.0.1"
             }
         },
+        "minipass": {
+            "version": "7.1.2",
+            "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+            "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+            "dev": true
+        },
         "mocha": {
-            "version": "10.2.0",
-            "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz",
-            "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==",
+            "version": "11.7.1",
+            "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.1.tgz",
+            "integrity": "sha512-5EK+Cty6KheMS/YLPPMJC64g5V61gIR25KsRItHw6x4hEKT6Njp1n9LOlH4gpevuwMVS66SXaBBpg+RWZkza4A==",
             "dev": true,
             "requires": {
-                "ansi-colors": "4.1.1",
-                "browser-stdout": "1.3.1",
-                "chokidar": "3.5.3",
-                "debug": "4.3.4",
-                "diff": "5.0.0",
-                "escape-string-regexp": "4.0.0",
-                "find-up": "5.0.0",
-                "glob": "7.2.0",
-                "he": "1.2.0",
-                "js-yaml": "4.1.0",
-                "log-symbols": "4.1.0",
-                "minimatch": "5.0.1",
-                "ms": "2.1.3",
-                "nanoid": "3.3.3",
-                "serialize-javascript": "6.0.0",
-                "strip-json-comments": "3.1.1",
-                "supports-color": "8.1.1",
-                "workerpool": "6.2.1",
-                "yargs": "16.2.0",
-                "yargs-parser": "20.2.4",
-                "yargs-unparser": "2.0.0"
+                "browser-stdout": "^1.3.1",
+                "chokidar": "^4.0.1",
+                "debug": "^4.3.5",
+                "diff": "^7.0.0",
+                "escape-string-regexp": "^4.0.0",
+                "find-up": "^5.0.0",
+                "glob": "^10.4.5",
+                "he": "^1.2.0",
+                "js-yaml": "^4.1.0",
+                "log-symbols": "^4.1.0",
+                "minimatch": "^9.0.5",
+                "ms": "^2.1.3",
+                "picocolors": "^1.1.1",
+                "serialize-javascript": "^6.0.2",
+                "strip-json-comments": "^3.1.1",
+                "supports-color": "^8.1.1",
+                "workerpool": "^9.2.0",
+                "yargs": "^17.7.2",
+                "yargs-parser": "^21.1.1",
+                "yargs-unparser": "^2.0.0"
             },
             "dependencies": {
                 "ms": {
@@ -1890,18 +2047,6 @@
             "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
             "dev": true
         },
-        "nanoid": {
-            "version": "3.3.3",
-            "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
-            "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
-            "dev": true
-        },
-        "normalize-path": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
-            "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
-            "dev": true
-        },
         "object-is": {
             "version": "1.1.5",
             "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
@@ -1916,12 +2061,15 @@
             "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
             "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
         },
-        "once": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-            "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+        "object.assign": {
+            "version": "4.1.5",
+            "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+            "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
             "requires": {
-                "wrappy": "1"
+                "call-bind": "^1.0.5",
+                "define-properties": "^1.2.1",
+                "has-symbols": "^1.0.3",
+                "object-keys": "^1.1.1"
             }
         },
         "p-limit": {
@@ -1942,6 +2090,12 @@
                 "p-limit": "^3.0.2"
             }
         },
+        "package-json-from-dist": {
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+            "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+            "dev": true
+        },
         "pako": {
             "version": "1.0.11",
             "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
@@ -1953,15 +2107,26 @@
             "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
             "dev": true
         },
-        "path-is-absolute": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-            "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+        "path-key": {
+            "version": "3.1.1",
+            "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+            "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+            "dev": true
+        },
+        "path-scurry": {
+            "version": "1.11.1",
+            "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+            "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+            "dev": true,
+            "requires": {
+                "lru-cache": "^10.2.0",
+                "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+            }
         },
-        "picomatch": {
-            "version": "2.3.1",
-            "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
-            "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+        "picocolors": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+            "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
             "dev": true
         },
         "process-nextick-args": {
@@ -1993,13 +2158,10 @@
             }
         },
         "readdirp": {
-            "version": "3.6.0",
-            "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
-            "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
-            "dev": true,
-            "requires": {
-                "picomatch": "^2.2.1"
-            }
+            "version": "4.1.2",
+            "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
+            "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+            "dev": true
         },
         "require-directory": {
             "version": "2.1.1",
@@ -2007,43 +2169,68 @@
             "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
             "dev": true
         },
-        "rimraf": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
-            "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
-            "requires": {
-                "glob": "^7.1.3"
-            }
-        },
         "safe-buffer": {
             "version": "5.1.2",
             "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
             "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
         },
         "selenium-webdriver": {
-            "version": "4.15.0",
-            "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.15.0.tgz",
-            "integrity": "sha512-BNG1bq+KWiBGHcJ/wULi0eKY0yaDqFIbEmtbsYJmfaEghdCkXBsx1akgOorhNwjBipOr0uwpvNXqT6/nzl+zjg==",
+            "version": "4.35.0",
+            "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.35.0.tgz",
+            "integrity": "sha512-Baaeiuyu7BIIsSYf0SI7Mi55gsNmdI00KM0Hcofw1RnAY+0QEVpdh5yAxueDxgTZS8vcbGZFU0NJ6Qc1riIrLg==",
             "requires": {
+                "@bazel/runfiles": "^6.3.1",
                 "jszip": "^3.10.1",
-                "tmp": "^0.2.1",
-                "ws": ">=8.14.2"
+                "tmp": "^0.2.3",
+                "ws": "^8.18.2"
             }
         },
         "serialize-javascript": {
-            "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
-            "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+            "version": "6.0.2",
+            "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+            "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
             "dev": true,
             "requires": {
                 "randombytes": "^2.1.0"
             }
         },
+        "set-function-length": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
+            "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
+            "requires": {
+                "define-data-property": "^1.1.1",
+                "get-intrinsic": "^1.2.1",
+                "gopd": "^1.0.1",
+                "has-property-descriptors": "^1.0.0"
+            }
+        },
         "setimmediate": {
             "version": "1.0.5",
             "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
             "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="
         },
+        "shebang-command": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+            "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+            "dev": true,
+            "requires": {
+                "shebang-regex": "^3.0.0"
+            }
+        },
+        "shebang-regex": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+            "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+            "dev": true
+        },
+        "signal-exit": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+            "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+            "dev": true
+        },
         "string_decoder": {
             "version": "1.1.1",
             "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -2063,6 +2250,17 @@
                 "strip-ansi": "^6.0.1"
             }
         },
+        "string-width-cjs": {
+            "version": "npm:string-width@4.2.3",
+            "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+            "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+            "dev": true,
+            "requires": {
+                "emoji-regex": "^8.0.0",
+                "is-fullwidth-code-point": "^3.0.0",
+                "strip-ansi": "^6.0.1"
+            }
+        },
         "strip-ansi": {
             "version": "6.0.1",
             "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -2072,6 +2270,15 @@
                 "ansi-regex": "^5.0.1"
             }
         },
+        "strip-ansi-cjs": {
+            "version": "npm:strip-ansi@6.0.1",
+            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+            "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+            "dev": true,
+            "requires": {
+                "ansi-regex": "^5.0.1"
+            }
+        },
         "strip-json-comments": {
             "version": "3.1.1",
             "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
@@ -2088,21 +2295,9 @@
             }
         },
         "tmp": {
-            "version": "0.2.1",
-            "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
-            "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
-            "requires": {
-                "rimraf": "^3.0.0"
-            }
-        },
-        "to-regex-range": {
-            "version": "5.0.1",
-            "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-            "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-            "dev": true,
-            "requires": {
-                "is-number": "^7.0.0"
-            }
+            "version": "0.2.4",
+            "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.4.tgz",
+            "integrity": "sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ=="
         },
         "util": {
             "version": "0.12.5",
@@ -2121,6 +2316,15 @@
             "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
             "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
         },
+        "which": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+            "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+            "dev": true,
+            "requires": {
+                "isexe": "^2.0.0"
+            }
+        },
         "which-typed-array": {
             "version": "1.1.9",
             "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
@@ -2135,9 +2339,9 @@
             }
         },
         "workerpool": {
-            "version": "6.2.1",
-            "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
-            "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
+            "version": "9.3.2",
+            "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.2.tgz",
+            "integrity": "sha512-Xz4Nm9c+LiBHhDR5bDLnNzmj6+5F+cyEAWPMkbs2awq/dYazR/efelZzUAjB/y3kNHL+uzkHvxVVpaOfGCPV7A==",
             "dev": true
         },
         "wrap-ansi": {
@@ -2151,15 +2355,21 @@
                 "strip-ansi": "^6.0.0"
             }
         },
-        "wrappy": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-            "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+        "wrap-ansi-cjs": {
+            "version": "npm:wrap-ansi@7.0.0",
+            "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+            "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+            "dev": true,
+            "requires": {
+                "ansi-styles": "^4.0.0",
+                "string-width": "^4.1.0",
+                "strip-ansi": "^6.0.0"
+            }
         },
         "ws": {
-            "version": "8.14.2",
-            "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz",
-            "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==",
+            "version": "8.18.3",
+            "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
+            "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
             "requires": {}
         },
         "y18n": {
@@ -2169,24 +2379,24 @@
             "dev": true
         },
         "yargs": {
-            "version": "16.2.0",
-            "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
-            "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+            "version": "17.7.2",
+            "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+            "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
             "dev": true,
             "requires": {
-                "cliui": "^7.0.2",
+                "cliui": "^8.0.1",
                 "escalade": "^3.1.1",
                 "get-caller-file": "^2.0.5",
                 "require-directory": "^2.1.1",
-                "string-width": "^4.2.0",
+                "string-width": "^4.2.3",
                 "y18n": "^5.0.5",
-                "yargs-parser": "^20.2.2"
+                "yargs-parser": "^21.1.1"
             }
         },
         "yargs-parser": {
-            "version": "20.2.4",
-            "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
-            "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
+            "version": "21.1.1",
+            "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+            "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
             "dev": true
         },
         "yargs-unparser": {
diff --git a/examples/javascript/package.json b/examples/javascript/package.json
index 0f73e4364123..1156b0f16fd5 100644
--- a/examples/javascript/package.json
+++ b/examples/javascript/package.json
@@ -2,15 +2,15 @@
     "name": "javascript-examples",
     "version": "1.0.0",
     "scripts": {
-        "test": "npx mocha test/**/*.spec.js --timeout 60000"
+        "test": "npx mocha test/**/*.spec.js --timeout 120000 --parallel --retries 2"
     },
     "author": "The Selenium project",
     "license": "Apache-2.0",
     "dependencies": {
-        "assert": "^2.0.0",
-        "selenium-webdriver": "^4.15.0"
+        "assert": "2.1.0",
+        "selenium-webdriver": "4.35.0"
     },
     "devDependencies": {
-        "mocha": "^10.2.0"
+        "mocha": "11.7.1"
     }
 }
diff --git a/examples/javascript/test/actionsApi/actionsTest.spec.js b/examples/javascript/test/actionsApi/actionsTest.spec.js
index c2214108c10c..b67cb668914a 100644
--- a/examples/javascript/test/actionsApi/actionsTest.spec.js
+++ b/examples/javascript/test/actionsApi/actionsTest.spec.js
@@ -1,52 +1,49 @@
-const { By, Key, Browser} = require('selenium-webdriver')
-const { suite } = require('selenium-webdriver/testing')
+const { By, Key, Browser, Builder} = require('selenium-webdriver')
 const assert = require('assert')
 
-suite(function(env) {
-  describe('Actions API - Pause and Release All Actions', function() {
-    let driver
+describe('Actions API - Pause and Release All Actions', function() {
+  let driver
 
-    before(async function() {
-      driver = await env.builder().build()
-    })
+  before(async function() {
+    driver = await new Builder().forBrowser('chrome').build();
+  })
 
-    after(() => driver.quit())
+  after(async () => await driver.quit())
 
-    it('Pause', async function() {
-      await driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
+  it('Pause', async function() {
+    await driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
 
-      const start = Date.now()
+    const start = Date.now()
 
-      const clickable = await driver.findElement(By.id('clickable'))
-      await driver.actions()
-        .move({ origin: clickable })
-        .pause(1000)
-        .press()
-        .pause(1000)
-        .sendKeys('abc')
-        .perform()
+    const clickable = await driver.findElement(By.id('clickable'))
+    await driver.actions()
+      .move({ origin: clickable })
+      .pause(1000)
+      .press()
+      .pause(1000)
+      .sendKeys('abc')
+      .perform()
 
-      const end = Date.now() - start
-      assert.ok(end > 2000)
-      assert.ok(end < 4000)
-    })
+    const end = Date.now() - start
+    assert.ok(end > 2000)
+    assert.ok(end < 4000)
+  })
 
-    it('Clear', async function() {
-      await driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
+  it('Clear', async function() {
+    await driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
 
-      const clickable = driver.findElement(By.id('clickable'))
-      await driver.actions()
-        .click(clickable)
-        .keyDown(Key.SHIFT)
-        .sendKeys('a')
-        .perform()
+    const clickable = driver.findElement(By.id('clickable'))
+    await driver.actions()
+      .click(clickable)
+      .keyDown(Key.SHIFT)
+      .sendKeys('a')
+      .perform()
 
-      await driver.actions().clear()
-      await driver.actions().sendKeys('a').perform()
+    await driver.actions().clear()
+    await driver.actions().sendKeys('a').perform()
 
-      const value = await clickable.getAttribute('value')
-      assert.deepStrictEqual('A', value.substring(0, 1))
-      assert.deepStrictEqual('a', value.substring(1, 2))
-    })
+    const value = await clickable.getAttribute('value')
+    assert.deepStrictEqual('A', value.substring(0, 1))
+    assert.deepStrictEqual('a', value.substring(1, 2))
   })
-}, { browsers: [Browser.CHROME]})
+})
diff --git a/examples/javascript/test/actionsApi/keysTest.spec.js b/examples/javascript/test/actionsApi/keysTest.spec.js
index 36a45767e841..30682b9065ea 100644
--- a/examples/javascript/test/actionsApi/keysTest.spec.js
+++ b/examples/javascript/test/actionsApi/keysTest.spec.js
@@ -1,92 +1,89 @@
-const { By, Key, Browser} = require('selenium-webdriver')
-const { suite } = require('selenium-webdriver/testing')
+const { By, Key, Browser, Builder} = require('selenium-webdriver')
 const assert = require('assert')
 const { platform } = require('node:process')
 
-suite(function(env) {
-  describe('Keyboard Action - Keys test', function() {
-    let driver
+describe('Keyboard Action - Keys test', function() {
+  let driver
 
-    before(async function() {
-      driver = await env.builder().build()
-    })
+  before(async function() {
+    driver = await new Builder().forBrowser('chrome').build();
+  })
 
-    after(() => driver.quit())
+  after(async () => await driver.quit())
 
-    it('KeyDown', async function() {
-      await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html')
+  it('KeyDown', async function() {
+    await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html')
 
-      await driver.actions()
-        .keyDown(Key.SHIFT)
-        .sendKeys('a')
-        .perform()
+    await driver.actions()
+      .keyDown(Key.SHIFT)
+      .sendKeys('a')
+      .perform()
 
-      const textField = driver.findElement(By.id('textInput'))
-      assert.deepStrictEqual(await textField.getAttribute('value'), 'A')
-    })
+    const textField = driver.findElement(By.id('textInput'))
+    assert.deepStrictEqual(await textField.getAttribute('value'), 'A')
+  })
 
-    it('KeyUp', async function() {
-      await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html')
+  it('KeyUp', async function() {
+    await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html')
 
-      const textField = driver.findElement(By.id('textInput'))
-      await textField.click()
+    const textField = driver.findElement(By.id('textInput'))
+    await textField.click()
 
-      await driver.actions()
-        .keyDown(Key.SHIFT)
-        .sendKeys('a')
-        .keyUp(Key.SHIFT)
-        .sendKeys('b')
-        .perform()
+    await driver.actions()
+      .keyDown(Key.SHIFT)
+      .sendKeys('a')
+      .keyUp(Key.SHIFT)
+      .sendKeys('b')
+      .perform()
 
-      assert.deepStrictEqual(await textField.getAttribute('value'), 'Ab')
-    })
+    assert.deepStrictEqual(await textField.getAttribute('value'), 'Ab')
+  })
 
-    it('sendKeys', async function() {
-      await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html')
+  it('sendKeys', async function() {
+    await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html')
 
-      const textField = driver.findElement(By.id('textInput'))
-      await textField.click()
+    const textField = driver.findElement(By.id('textInput'))
+    await textField.click()
 
-      await driver.actions()
-        .sendKeys('abc')
-        .perform()
+    await driver.actions()
+      .sendKeys('abc')
+      .perform()
 
-      assert.deepStrictEqual(await textField.getAttribute('value'), 'abc')
-    })
+    assert.deepStrictEqual(await textField.getAttribute('value'), 'abc')
+  })
 
-    it('Designated Element', async function() {
-      await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html')
+  it('Designated Element', async function() {
+    await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html')
 
-      await driver.findElement(By.css('body')).click()
-      const textField = await driver.findElement(By.id('textInput'))
+    await driver.findElement(By.css('body')).click()
+    const textField = await driver.findElement(By.id('textInput'))
 
-      await driver.actions()
-        .sendKeys(textField, 'abc')
-        .perform()
+    await driver.actions()
+      .sendKeys(textField, 'abc')
+      .perform()
 
-      assert.deepStrictEqual(await textField.getAttribute('value'), 'abc')
-    })
+    assert.deepStrictEqual(await textField.getAttribute('value'), 'abc')
+  })
 
-    it('Copy and Paste', async function() {
-      await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html')
+  it('Copy and Paste', async function() {
+    await driver.get('https://www.selenium.dev/selenium/web/single_text_input.html')
 
-      const textField = await driver.findElement(By.id('textInput'))
+    const textField = await driver.findElement(By.id('textInput'))
 
-      const cmdCtrl = platform.includes('darwin') ? Key.COMMAND : Key.CONTROL
+    const cmdCtrl = platform.includes('darwin') ? Key.COMMAND : Key.CONTROL
 
-      await driver.actions()
-        .click(textField)
-        .sendKeys('Selenium!')
-        .sendKeys(Key.ARROW_LEFT)
-        .keyDown(Key.SHIFT)
-        .sendKeys(Key.ARROW_UP)
-        .keyUp(Key.SHIFT)
-        .keyDown(cmdCtrl)
-        .sendKeys('xvv')
-        .keyUp(cmdCtrl)
-        .perform()
+    await driver.actions()
+      .click(textField)
+      .sendKeys('Selenium!')
+      .sendKeys(Key.ARROW_LEFT)
+      .keyDown(Key.SHIFT)
+      .sendKeys(Key.ARROW_UP)
+      .keyUp(Key.SHIFT)
+      .keyDown(cmdCtrl)
+      .sendKeys('xvv')
+      .keyUp(cmdCtrl)
+      .perform()
 
-      assert.deepStrictEqual(await textField.getAttribute('value'), 'SeleniumSelenium!')
-    })
+    assert.deepStrictEqual(await textField.getAttribute('value'), 'SeleniumSelenium!')
   })
-}, { browsers: [Browser.CHROME, Browser.FIREFOX]})
+})
diff --git a/examples/javascript/test/actionsApi/mouse/backAndForwardClick.spec.js b/examples/javascript/test/actionsApi/mouse/backAndForwardClick.spec.js
index 7d669c23b241..c3236c887f02 100644
--- a/examples/javascript/test/actionsApi/mouse/backAndForwardClick.spec.js
+++ b/examples/javascript/test/actionsApi/mouse/backAndForwardClick.spec.js
@@ -1,40 +1,37 @@
-const {By, Button, Browser} = require('selenium-webdriver');
-const {suite, ignore} = require('selenium-webdriver/testing');
+const {By, Button, Browser, Builder} = require('selenium-webdriver');
 const assert = require('assert');
 
-suite(function (env) {
-  describe('Should be able to perform BACK click and FORWARD click', function () {
-    let driver;
+describe('Should be able to perform BACK click and FORWARD click', function () {
+  let driver;
 
-    before(async function () {
-      driver = await env.builder().build();
-    });
+  before(async function () {
+    driver = new Builder().forBrowser('chrome').build();
+  });
 
-    after(async () => await driver.quit());
+  after(async () => await driver.quit());
 
-    ignore(env.browsers(Browser.FIREFOX, Browser.SAFARI)).it('Back click', async function () {
-      await driver.get('https://selenium.dev/selenium/web/mouse_interaction.html');
-      await driver.findElement(By.id("click")).click();
+  it('Back click', async function () {
+    await driver.get('https://selenium.dev/selenium/web/mouse_interaction.html');
+    await driver.findElement(By.id("click")).click();
 
-      assert.deepStrictEqual(await driver.getTitle(), `We Arrive Here`)
+    assert.deepStrictEqual(await driver.getTitle(), `We Arrive Here`)
 
-      const actions = driver.actions({async: true});
-      await actions.press(Button.BACK).release(Button.BACK).perform()
+    const actions = driver.actions({async: true});
+    await actions.press(Button.BACK).release(Button.BACK).perform()
 
-      assert.deepStrictEqual(await driver.getTitle(), `BasicMouseInterfaceTest`)
-    });
+    assert.deepStrictEqual(await driver.getTitle(), `BasicMouseInterfaceTest`)
+  });
 
-    ignore(env.browsers(Browser.FIREFOX, Browser.SAFARI)).it('Forward click', async function () {
-      await driver.get('https://selenium.dev/selenium/web/mouse_interaction.html');
-      await driver.findElement(By.id("click")).click();
-      await driver.navigate().back();
+  it('Forward click', async function () {
+    await driver.get('https://selenium.dev/selenium/web/mouse_interaction.html');
+    await driver.findElement(By.id("click")).click();
+    await driver.navigate().back();
 
-      assert.deepStrictEqual(await driver.getTitle(), `BasicMouseInterfaceTest`)
+    assert.deepStrictEqual(await driver.getTitle(), `BasicMouseInterfaceTest`)
 
-      const actions = driver.actions({async: true});
-      await actions.press(Button.FORWARD).release(Button.FORWARD).perform()
+    const actions = driver.actions({async: true});
+    await actions.press(Button.FORWARD).release(Button.FORWARD).perform()
 
-      assert.deepStrictEqual(await driver.getTitle(), `We Arrive Here`)
-    });
+    assert.deepStrictEqual(await driver.getTitle(), `We Arrive Here`)
   });
-}, { browsers: [Browser.CHROME]});
\ No newline at end of file
+});
diff --git a/examples/javascript/test/actionsApi/mouse/clickAndHold.spec.js b/examples/javascript/test/actionsApi/mouse/clickAndHold.spec.js
index 80a190ce3ba6..2e6dbf286afa 100644
--- a/examples/javascript/test/actionsApi/mouse/clickAndHold.spec.js
+++ b/examples/javascript/test/actionsApi/mouse/clickAndHold.spec.js
@@ -1,22 +1,18 @@
-const {By, Browser} = require('selenium-webdriver');
-const {suite} = require('selenium-webdriver/testing');
+const {By, Builder} = require('selenium-webdriver');
 
-suite(function (env) {
-  describe('Click and hold', function () {
-    let driver;
+describe('Click and hold', function () {
+  let driver;
 
-    before(async function () {
-      driver = await env.builder().build();
-    });
-
-    after(() => driver.quit());
+  before(async function () {
+    driver = new Builder().forBrowser('chrome').build();
+  });
 
-    it('Mouse move and mouseDown on an element', async function () {
-      await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
-      let clickable = driver.findElement(By.id("clickable"));
-      const actions = driver.actions({async: true});
-      await actions.move({origin: clickable}).press().perform();
-    });
+  after(async () => await driver.quit());
 
+  it('Mouse move and mouseDown on an element', async function () {
+    await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
+    let clickable = driver.findElement(By.id("clickable"));
+    const actions = driver.actions({async: true});
+    await actions.move({origin: clickable}).press().perform();
   });
-}, { browsers: [Browser.CHROME, Browser.FIREFOX]});
\ No newline at end of file
+});
diff --git a/examples/javascript/test/actionsApi/mouse/clickAndRelease.spec.js b/examples/javascript/test/actionsApi/mouse/clickAndRelease.spec.js
index 86ae72234132..97e2b2ceb5cc 100644
--- a/examples/javascript/test/actionsApi/mouse/clickAndRelease.spec.js
+++ b/examples/javascript/test/actionsApi/mouse/clickAndRelease.spec.js
@@ -1,22 +1,18 @@
-const {By, Browser} = require('selenium-webdriver');
-const {suite} = require('selenium-webdriver/testing');
+const {By,Builder} = require('selenium-webdriver');
 
-suite(function (env) {
-  describe('Click and release', function () {
-    let driver;
+describe('Click and release', function () {
+  let driver;
 
-    before(async function () {
-      driver = await env.builder().build();
-    });
-
-    after(() => driver.quit());
+  before(async function () {
+    driver = new Builder().forBrowser('chrome').build();
+  });
 
-    it('Mouse move and click on an element', async function () {
-      await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
-      let click = driver.findElement(By.id("click"));
-      const actions = driver.actions({async: true});
-      await actions.move({origin: click}).click().perform();
-    });
+  after(async () => await driver.quit());
 
+  it('Mouse move and click on an element', async function () {
+    await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
+    let click = driver.findElement(By.id("click"));
+    const actions = driver.actions({async: true});
+    await actions.move({origin: click}).click().perform();
   });
-}, { browsers: [Browser.CHROME, Browser.FIREFOX]});
\ No newline at end of file
+});
diff --git a/examples/javascript/test/actionsApi/mouse/doubleClick.spec.js b/examples/javascript/test/actionsApi/mouse/doubleClick.spec.js
index 3efd915b3379..e7bd3aaa278f 100644
--- a/examples/javascript/test/actionsApi/mouse/doubleClick.spec.js
+++ b/examples/javascript/test/actionsApi/mouse/doubleClick.spec.js
@@ -1,26 +1,23 @@
-const {By, Browser} = require('selenium-webdriver');
-const {suite} = require('selenium-webdriver/testing');
+const {By, Builder} = require('selenium-webdriver');
 const assert = require("assert");
 
-suite(function (env) {
-  describe('Double click', function () {
-    let driver;
+describe('Double click', function () {
+  let driver;
 
-    before(async function () {
-      driver = await env.builder().build();
-    });
+  before(async function () {
+    driver = new Builder().forBrowser('chrome').build();
+  });
 
-    after(async () => await driver.quit());
+  after(async () => await driver.quit());
 
-    it('Double-click on an element', async function () {
-      await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
-      const clickable = driver.findElement(By.id("clickable"));
-      const actions = driver.actions({async: true});
-      await actions.doubleClick(clickable).perform();
+  it('Double-click on an element', async function () {
+    await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
+    const clickable = driver.findElement(By.id("clickable"));
+    const actions = driver.actions({async: true});
+    await actions.doubleClick(clickable).perform();
 
-      await driver.sleep(500);
-      const status = await driver.findElement(By.id('click-status')).getText();
-      assert.deepStrictEqual(status, `double-clicked`)
-    });
+    await driver.sleep(500);
+    const status = await driver.findElement(By.id('click-status')).getText();
+    assert.deepStrictEqual(status, `double-clicked`)
   });
-}, { browsers: [Browser.CHROME, Browser.FIREFOX]});
\ No newline at end of file
+});
diff --git a/examples/javascript/test/actionsApi/mouse/dragAndDrop.spec.js b/examples/javascript/test/actionsApi/mouse/dragAndDrop.spec.js
index 09fe0d76fc61..e83673ff11af 100644
--- a/examples/javascript/test/actionsApi/mouse/dragAndDrop.spec.js
+++ b/examples/javascript/test/actionsApi/mouse/dragAndDrop.spec.js
@@ -1,38 +1,35 @@
-const {By, Browser} = require('selenium-webdriver');
-const {suite} = require('selenium-webdriver/testing');
+const {By, Builder} = require('selenium-webdriver');
 const assert = require('assert');
 
-suite(function (env) {
-  describe('Drag and Drop', function () {
-    let driver;
+describe('Drag and Drop', function () {
+  let driver;
 
-    before(async function () {
-      driver = await env.builder().build();
-    });
+  before(async function () {
+    driver = new Builder().forBrowser('chrome').build();
+  });
 
-    after(async () => await driver.quit());
+  after(async () => await driver.quit());
 
-    it('By Offset', async function () {
-      await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
-      const draggable = driver.findElement(By.id("draggable"));
-      let start = await draggable.getRect();
-      let finish = await driver.findElement(By.id("droppable")).getRect();
-      const actions = driver.actions({async: true});
-      await actions.dragAndDrop(draggable, {x: finish.x - start.x, y: finish.y - start.y}).perform();
+  it('By Offset', async function () {
+    await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
+    const draggable = driver.findElement(By.id("draggable"));
+    let start = await draggable.getRect();
+    let finish = await driver.findElement(By.id("droppable")).getRect();
+    const actions = driver.actions({async: true});
+    await actions.dragAndDrop(draggable, {x: finish.x - start.x, y: finish.y - start.y}).perform();
 
-      let result = await driver.findElement(By.id("drop-status")).getText();
-      assert.deepStrictEqual('dropped', result)
-    });
+    let result = await driver.findElement(By.id("drop-status")).getText();
+    assert.deepStrictEqual('dropped', result)
+  });
 
-    it('Onto Element', async function () {
-      await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
-      const draggable = driver.findElement(By.id("draggable"));
-      const droppable = await driver.findElement(By.id("droppable"));
-      const actions = driver.actions({async: true});
-      await actions.dragAndDrop(draggable, droppable).perform();
+  it('Onto Element', async function () {
+    await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
+    const draggable = driver.findElement(By.id("draggable"));
+    const droppable = await driver.findElement(By.id("droppable"));
+    const actions = driver.actions({async: true});
+    await actions.dragAndDrop(draggable, droppable).perform();
 
-      let result = await driver.findElement(By.id("drop-status")).getText();
-      assert.deepStrictEqual('dropped', result)
-    });
+    let result = await driver.findElement(By.id("drop-status")).getText();
+    assert.deepStrictEqual('dropped', result)
   });
-}, { browsers: [Browser.CHROME, Browser.FIREFOX]});
\ No newline at end of file
+});
diff --git a/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js b/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js
index e6c6e7c2c857..949fef61bc99 100644
--- a/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js
+++ b/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js
@@ -1,50 +1,47 @@
-const {By, Origin, Browser} = require('selenium-webdriver');
-const {suite} = require('selenium-webdriver/testing');
+const {By, Origin, Builder, until } = require('selenium-webdriver');
 const assert = require('assert');
 
-suite(function (env) {
-  describe('Mouse move by offset', function () {
-    let driver;
-
-    before(async function () {
-      driver = await env.builder().build();
-    });
-
-    after(async () => await driver.quit());
-
-    it('From element', async function () {
-      await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
-      const mouseTracker = driver.findElement(By.id("mouse-tracker"));
-      const actions = driver.actions({async: true});
-      await actions.move({x: 8, y: 0, origin: mouseTracker}).perform();
-
-      await driver.sleep(500);
-      let result = await driver.findElement(By.id('relative-location')).getText();
-      result = result.split(', ');
-      assert.deepStrictEqual((Math.abs(parseInt(result[0]) - 100 - 8) < 2), true)
-    });
-
-    it('From viewport origin', async function () {
-      await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
-      const actions = driver.actions({async: true});
-      await actions.move({x: 8, y: 0}).perform();
-
-      let result = await driver.findElement(By.id('absolute-location')).getText();
-      result = result.split(', ');
-      assert.deepStrictEqual((Math.abs(parseInt(result[0]) - 8) < 2), true)
-    });
-
-    it('From current pointer location', async function () {
-      await driver.get('https://selenium.dev/selenium/web/mouse_interaction.html');
-      const actions = driver.actions({async: true});
-      await actions.move({x: 6, y: 3}).perform()
-
-      await actions.move({x: 13, y: 15, origin: Origin.POINTER}).perform()
-
-      let result = await driver.findElement(By.id('absolute-location')).getText();
-      result = result.split(', ');
-      assert.deepStrictEqual(Math.abs(parseInt(result[0]) - 6 - 13) < 2, true)
-      assert.deepStrictEqual(Math.abs(parseInt(result[1]) - 3 - 15) < 2, true)
-    });
+describe('Mouse move by offset', function () {
+  let driver;
+
+  before(async function () {
+    driver = new Builder().forBrowser('chrome').build();
+  });
+
+  after(async () => await driver.quit());
+
+  it('From element', async function () {
+    await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
+    const mouseTracker = driver.findElement(By.id("mouse-tracker"));
+    const actions = driver.actions({async: true});
+    await actions.move({x: 8, y: 0, origin: mouseTracker}).perform();
+
+    await driver.wait(until.elementTextContains(await driver.findElement(By.id('relative-location')), ","), 2000);
+    let result = await driver.findElement(By.id('relative-location')).getText();
+    result = result.split(', ');
+    assert.deepStrictEqual((Math.abs(parseInt(result[0]) - 100 - 8) < 2), true)
+  });
+
+  it('From viewport origin', async function () {
+    await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
+    const actions = driver.actions({async: true});
+    await actions.move({x: 8, y: 0}).perform();
+
+    let result = await driver.findElement(By.id('absolute-location')).getText();
+    result = result.split(', ');
+    assert.deepStrictEqual((Math.abs(parseInt(result[0]) - 8) < 2), true)
+  });
+
+  it('From current pointer location', async function () {
+    await driver.get('https://selenium.dev/selenium/web/mouse_interaction.html');
+    const actions = driver.actions({async: true});
+    await actions.move({x: 6, y: 3}).perform()
+
+    await actions.move({x: 13, y: 15, origin: Origin.POINTER}).perform()
+
+    let result = await driver.findElement(By.id('absolute-location')).getText();
+    result = result.split(', ');
+    assert.deepStrictEqual(Math.abs(parseInt(result[0]) - 6 - 13) < 2, true)
+    assert.deepStrictEqual(Math.abs(parseInt(result[1]) - 3 - 15) < 2, true)
   });
-}, { browsers: [Browser.CHROME, Browser.FIREFOX]});
\ No newline at end of file
+});
diff --git a/examples/javascript/test/actionsApi/mouse/moveToElement.spec.js b/examples/javascript/test/actionsApi/mouse/moveToElement.spec.js
index a29acac9045c..9c994a6e2b9e 100644
--- a/examples/javascript/test/actionsApi/mouse/moveToElement.spec.js
+++ b/examples/javascript/test/actionsApi/mouse/moveToElement.spec.js
@@ -1,25 +1,22 @@
-const {By, Browser} = require('selenium-webdriver');
-const {suite} = require('selenium-webdriver/testing');
+const {By, Builder} = require('selenium-webdriver');
 const assert = require("assert");
 
-suite(function (env) {
-  describe('Move to element', function () {
-    let driver;
+describe('Move to element', function () {
+  let driver;
 
-    before(async function () {
-      driver = await env.builder().build();
-    });
+  before(async function () {
+    driver = new Builder().forBrowser('chrome').build();
+  });
 
-    after(async () => await driver.quit());
+  after(async () => await driver.quit());
 
-    it('Mouse move into an element', async function () {
-      await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
-      const hoverable = driver.findElement(By.id("hover"));
-      const actions = driver.actions({async: true});
-      await actions.move({origin: hoverable}).perform();
+  it('Mouse move into an element', async function () {
+    await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
+    const hoverable = driver.findElement(By.id("hover"));
+    const actions = driver.actions({async: true});
+    await actions.move({origin: hoverable}).perform();
 
-      const status = await driver.findElement(By.id('move-status')).getText();
-      assert.deepStrictEqual(status, `hovered`)
-    });
+    const status = await driver.findElement(By.id('move-status')).getText();
+    assert.deepStrictEqual(status, `hovered`)
   });
-}, { browsers: [Browser.CHROME, Browser.FIREFOX]});
\ No newline at end of file
+});
diff --git a/examples/javascript/test/actionsApi/mouse/rightClick.spec.js b/examples/javascript/test/actionsApi/mouse/rightClick.spec.js
index c09d30ad716b..fbad07649e02 100644
--- a/examples/javascript/test/actionsApi/mouse/rightClick.spec.js
+++ b/examples/javascript/test/actionsApi/mouse/rightClick.spec.js
@@ -1,26 +1,23 @@
-const {By, Browser} = require('selenium-webdriver');
-const {suite} = require('selenium-webdriver/testing');
+const {By, Builder} = require('selenium-webdriver');
 const assert = require('assert');
 
-suite(function (env) {
-  describe('Right click', function () {
-    let driver;
+describe('Right click', function () {
+  let driver;
 
-    before(async function () {
-      driver = await env.builder().build();
-    });
+  before(async function () {
+    driver = new Builder().forBrowser('chrome').build();
+  });
 
-    after(async () => await driver.quit());
+  after(async () => await driver.quit());
 
-    it('Mouse move and right click on an element', async function () {
-      await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
-      const clickable = driver.findElement(By.id("clickable"));
-      const actions = driver.actions({async: true});
-      await actions.contextClick(clickable).perform();
+  it('Mouse move and right click on an element', async function () {
+    await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
+    const clickable = driver.findElement(By.id("clickable"));
+    const actions = driver.actions({async: true});
+    await actions.contextClick(clickable).perform();
 
-      await driver.sleep(500);
-      const clicked = await driver.findElement(By.id('click-status')).getText();
-      assert.deepStrictEqual(clicked, `context-clicked`)
-    });
+    await driver.sleep(500);
+    const clicked = await driver.findElement(By.id('click-status')).getText();
+    assert.deepStrictEqual(clicked, `context-clicked`)
   });
-},{ browsers: [Browser.CHROME, Browser.FIREFOX]});
\ No newline at end of file
+});
diff --git a/examples/javascript/test/actionsApi/wheel/scrollByAmount.spec.js b/examples/javascript/test/actionsApi/wheel/scrollByAmount.spec.js
index 201167f8dd60..8bcb307fe475 100644
--- a/examples/javascript/test/actionsApi/wheel/scrollByAmount.spec.js
+++ b/examples/javascript/test/actionsApi/wheel/scrollByAmount.spec.js
@@ -1,28 +1,21 @@
-const { By, Builder, Browser} = require('selenium-webdriver');
-const { suite } = require('selenium-webdriver/testing');
-
-suite(function(env) {
-    describe('Scroll by given amount from element', function() {
-        let driver;
-
-        before(async function() {
-            driver = await new Builder().forBrowser('chrome').build();
-        });
-
-        after(() => driver.quit());
-
-        it('Scroll to element by 300', async function() {
-            await driver.manage().window().setRect({ width: 500, height: 400 });
-
-            // Navigate to url
-            await driver.get('https://crossbrowsertesting.github.io/selenium_example_page.html');
-
-            // Store element
-            let element = await driver.findElement(By.linkText('Go To Page 2'));
-
-            // Scroll to element by 300
-            await driver.actions().scroll(0, 0, 0, 300, element).perform();
-        });
-
-    });
-}, { browsers: [Browser.CHROME, Browser.FIREFOX]});
\ No newline at end of file
+const { By, Builder} = require('selenium-webdriver');
+
+describe('Scroll by given amount from element', function() {
+  let driver;
+
+  before(async function() {
+    driver = await new Builder().forBrowser('chrome').build();
+  });
+
+  after(async() => await driver.quit());
+
+  it('Scroll to element by 300', async function() {
+    await driver.manage().window().setRect({ width: 500, height: 400 });
+    // Navigate to url
+    await driver.get('https://crossbrowsertesting.github.io/selenium_example_page.html');
+    // Store element
+    let element = await driver.findElement(By.linkText('Go To Page 2'));
+    // Scroll to element by 300
+    await driver.actions().scroll(0, 0, 0, 300, element).perform();
+  });
+});
\ No newline at end of file
diff --git a/examples/javascript/test/actionsApi/wheel/wheelScrollToElement.spec.js b/examples/javascript/test/actionsApi/wheel/wheelScrollToElement.spec.js
index f9abaffdf85e..4341d237359a 100644
--- a/examples/javascript/test/actionsApi/wheel/wheelScrollToElement.spec.js
+++ b/examples/javascript/test/actionsApi/wheel/wheelScrollToElement.spec.js
@@ -1,26 +1,20 @@
-const { By, Builder, Browser} = require('selenium-webdriver');
-const { suite } = require('selenium-webdriver/testing');
+const { By, Builder} = require('selenium-webdriver');
 
-suite(function(env) {
-    describe('Whell scroll to element', function() {
-        let driver;
+describe('Wheel scroll to element', function() {
+  let driver;
 
-        before(async function() {
-            driver = await new Builder().forBrowser('chrome').build();
-        });
+  before(async function() {
+    driver = await new Builder().forBrowser('chrome').build();
+  });
 
-        after(() => driver.quit());
+  after(async () => await driver.quit());
 
-        it('Scroll to the element', async function() {
-            // Navigate to the url
-            await driver.get('https://crossbrowsertesting.github.io/selenium_example_page.html');
-
-            // Find close button element
-            let element = driver.findElement(By.id('closepopup'));
-
-            // Scroll to the element
-            await driver.actions().scroll(0, 0, 0, 0, element).perform();
-        });
-
-    });
-}, { browsers: [Browser.CHROME, Browser.FIREFOX]});
\ No newline at end of file
+  it('Scroll to the element', async function() {
+    // Navigate to the url
+    await driver.get('https://crossbrowsertesting.github.io/selenium_example_page.html');
+    // Find close button element
+    let element = driver.findElement(By.id('closepopup'));
+    // Scroll to the element
+    await driver.actions().scroll(0, 0, 0, 0, element).perform();
+  });
+});
\ No newline at end of file
diff --git a/examples/javascript/test/actionsApi/wheelTest.spec.js b/examples/javascript/test/actionsApi/wheelTest.spec.js
index 6fdc103d299f..666e576f5cda 100644
--- a/examples/javascript/test/actionsApi/wheelTest.spec.js
+++ b/examples/javascript/test/actionsApi/wheelTest.spec.js
@@ -1,95 +1,89 @@
-const { By, Browser} = require('selenium-webdriver')
-const { suite } = require('selenium-webdriver/testing')
+const { By, Browser, Builder} = require('selenium-webdriver')
 const assert = require('assert')
 
-suite(function (env) {
-  describe('Actions API - Wheel Tests', function () {
-    let driver
+describe('Actions API - Wheel Tests', function () {
+  let driver
 
-    before(async function () {
-      driver = await env.builder().build()
-    })
+  before(async function () {
+    driver = await new Builder().forBrowser('chrome').build();
+  })
 
-    after(async() => await driver.quit())
+  after(async() => await driver.quit())
 
-    it('Scroll to element', async function () {
-      await driver.get("https://www.selenium.dev/selenium/web/scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html")
+  it('Scroll to element', async function () {
+    await driver.get("https://www.selenium.dev/selenium/web/scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html")
 
-      const iframe = await driver.findElement(By.css("iframe"))
+    const iframe = await driver.findElement(By.css("iframe"))
+    await driver.actions()
+      .scroll(0, 0, 0, 0, iframe)
+      .perform()
+    assert.ok(await inViewport(iframe))
+  })
 
-      await driver.actions()
-        .scroll(0, 0, 0, 0, iframe)
-        .perform()
+  it('Scroll by given amount', async function () {
+    await driver.get("https://www.selenium.dev/selenium/web/scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html")
 
-      assert.ok(await inViewport(iframe))
-    })
+    const footer = await driver.findElement(By.css("footer"))
+    const deltaY = (await footer.getRect()).y
 
-    it('Scroll by given amount', async function () {
-      await driver.get("https://www.selenium.dev/selenium/web/scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html")
+    await driver.actions()
+      .scroll(0, 0, 0, deltaY)
+      .perform()
 
-      const footer = await driver.findElement(By.css("footer"))
-      const deltaY = (await footer.getRect()).y
+    await driver.sleep(500)
+    assert.ok(await inViewport(footer))
+  })
 
-      await driver.actions()
-        .scroll(0, 0, 0, deltaY)
-        .perform()
+  it('Scroll from an element by a given amount', async function () {
+    await driver.get("https://www.selenium.dev/selenium/web/scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html")
 
-      await driver.sleep(500)
+    const iframe = await driver.findElement(By.css("iframe"))
 
-      assert.ok(await inViewport(footer))
-    })
+    await driver.actions()
+      .scroll(0, 0, 0, 200, iframe)
+      .perform()
 
-    it('Scroll from an element by a given amount', async function () {
-      await driver.get("https://www.selenium.dev/selenium/web/scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html")
+    await driver.sleep(500)
 
-      const iframe = await driver.findElement(By.css("iframe"))
+    await driver.switchTo().frame(iframe)
+    const checkbox = await driver.findElement(By.name('scroll_checkbox'))
+    assert.ok(await inViewport(checkbox))
+  })
 
-      await driver.actions()
-        .scroll(0, 0, 0, 200, iframe)
-        .perform()
+  it('Scroll from an element with an offset', async function () {
+    await driver.get("https://www.selenium.dev/selenium/web/scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html")
 
-      await driver.sleep(500)
+    const iframe = await driver.findElement(By.css("iframe"))
+    const footer = await driver.findElement(By.css("footer"))
 
-      await driver.switchTo().frame(iframe)
-      const checkbox = await driver.findElement(By.name('scroll_checkbox'))
-      assert.ok(await inViewport(checkbox))
-    })
+    await driver.actions()
+      .scroll(0, -50, 0, 200, footer)
+      .perform()
 
-    it('Scroll from an element with an offset', async function () {
-      await driver.get("https://www.selenium.dev/selenium/web/scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html")
+    await driver.sleep(500)
 
-      const iframe = await driver.findElement(By.css("iframe"))
-      const footer = await driver.findElement(By.css("footer"))
+    await driver.switchTo().frame(iframe)
+    const checkbox = await driver.findElement(By.name('scroll_checkbox'))
+    assert.ok(await inViewport(checkbox))
+  })
 
-      await driver.actions()
-        .scroll(0, -50, 0, 200, footer)
-        .perform()
+  it('Scroll from an offset of origin (element) by given amount', async function () {
+    await driver.get("https://www.selenium.dev/selenium/web/scrolling_tests/frame_with_nested_scrolling_frame.html")
 
-      await driver.sleep(500)
+    const iframe = await driver.findElement(By.css("iframe"))
 
-      await driver.switchTo().frame(iframe)
-      const checkbox = await driver.findElement(By.name('scroll_checkbox'))
-      assert.ok(await inViewport(checkbox))
-    })
+    await driver.actions()
+      .scroll(10, 10, 0, 200)
+      .perform()
 
-    it('Scroll from an offset of origin (element) by given amount', async function () {
-      await driver.get("https://www.selenium.dev/selenium/web/scrolling_tests/frame_with_nested_scrolling_frame.html")
-  
-      const iframe = await driver.findElement(By.css("iframe"))
-  
-      await driver.actions()
-        .scroll(10, 10, 0, 200)
-        .perform()
-  
-      await driver.sleep(500)
-  
-      await driver.switchTo().frame(iframe)
-      const checkbox = await driver.findElement(By.name('scroll_checkbox'))
-      assert.ok(await inViewport(checkbox))
-    })
+    await driver.sleep(500)
 
-    function inViewport(element) {
-      return driver.executeScript("for(var e=arguments[0],f=e.offsetTop,t=e.offsetLeft,o=e.offsetWidth,n=e.offsetHeight;\ne.offsetParent;)f+=(e=e.offsetParent).offsetTop,t+=e.offsetLeft;\nreturn f<window.pageYOffset+window.innerHeight&&t<window.pageXOffset+window.innerWidth&&f+n>\nwindow.pageYOffset&&t+o>window.pageXOffset", element)
-    }
+    await driver.switchTo().frame(iframe)
+    const checkbox = await driver.findElement(By.name('scroll_checkbox'))
+    assert.ok(await inViewport(checkbox))
   })
-}, { browsers: [Browser.CHROME]})
\ No newline at end of file
+
+  function inViewport(element) {
+    return driver.executeScript("for(var e=arguments[0],f=e.offsetTop,t=e.offsetLeft,o=e.offsetWidth,n=e.offsetHeight;\ne.offsetParent;)f+=(e=e.offsetParent).offsetTop,t+=e.offsetLeft;\nreturn f<window.pageYOffset+window.innerHeight&&t<window.pageXOffset+window.innerWidth&&f+n>\nwindow.pageYOffset&&t+o>window.pageXOffset", element)
+  }
+})
\ No newline at end of file
diff --git a/examples/javascript/test/bidirectional/bidi.spec.js b/examples/javascript/test/bidirectional/bidi.spec.js
index bcb8277d750c..d540a88757c3 100644
--- a/examples/javascript/test/bidirectional/bidi.spec.js
+++ b/examples/javascript/test/bidirectional/bidi.spec.js
@@ -1,52 +1,49 @@
-const { suite } = require('selenium-webdriver/testing');
 const assert = require("assert");
+const {until, Builder} = require('selenium-webdriver');
 const firefox = require('selenium-webdriver/firefox');
 const LogInspector = require('selenium-webdriver/bidi/logInspector');
 const BrowsingContext = require('selenium-webdriver/bidi/browsingContext');
-const { until } = require('selenium-webdriver');
-
-suite(function(env) {
-    describe('Integration Tests', function() {
-        let driver
-
-        beforeEach(async function () {
-          driver = await env
-              .builder()
-              .setFirefoxOptions(new firefox.Options().enableBidi())
-              .build()
-        })
-
-        afterEach(async function () {
-          await driver.quit()
-        })
-
-        it('test navigate and listen to errors', async function () {
-            let logEntry = null
-            const inspector = await LogInspector(driver)
-            await inspector.onJavascriptException(function (log) {
-              logEntry = log
-            })
-
-            const id = await driver.getWindowHandle()
-            const browsingContext = await BrowsingContext(driver, {
-              browsingContextId: id,
-            })
-    
-            let info = await browsingContext.navigate('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
-            
-            assert.notEqual(browsingContext.id, null)
-            assert.equal(info.navigationId, null)
-            assert(info.url.includes('/bidi/logEntryAdded.html'))
-            
-            await driver.wait(until.urlIs('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'))
-            await driver.findElement({ id: 'jsException' }).click()
-
-            assert.equal(logEntry.text, 'Error: Not working')
-            assert.equal(logEntry.type, 'javascript')
-            assert.equal(logEntry.level, 'error')
-
-            await inspector.close()
-            await browsingContext.close()
-        })
+
+describe('Integration Tests', function () {
+  let driver
+
+  beforeEach(async function () {
+    driver = new Builder()
+      .forBrowser('firefox')
+      .setFirefoxOptions(new firefox.Options().enableBidi())
+      .build()
+  })
+
+  afterEach(async function () {
+    await driver.quit()
+  })
+
+  it('test navigate and listen to errors', async function () {
+    let logEntry = null
+    const inspector = await LogInspector(driver)
+    await inspector.onJavascriptException(function (log) {
+      logEntry = log
+    })
+
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
     })
-}, { browsers: ['firefox'] })
\ No newline at end of file
+
+    let info = await browsingContext.navigate('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
+
+    assert.notEqual(browsingContext.id, null)
+    assert.notEqual(info.navigationId, null)
+    assert(info.url.includes('/bidi/logEntryAdded.html'))
+
+    await driver.wait(until.urlIs('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'))
+    await driver.findElement({id: 'jsException'}).click()
+
+    assert.equal(logEntry.text, 'Error: Not working')
+    assert.equal(logEntry.type, 'javascript')
+    assert.equal(logEntry.level, 'error')
+
+    await inspector.close()
+    await browsingContext.close()
+  })
+})
\ No newline at end of file
diff --git a/examples/javascript/test/bidirectional/browsingContext.spec.js b/examples/javascript/test/bidirectional/browsingContext.spec.js
index 5f635ccb0051..6de6b2461579 100644
--- a/examples/javascript/test/bidirectional/browsingContext.spec.js
+++ b/examples/javascript/test/bidirectional/browsingContext.spec.js
@@ -1,135 +1,434 @@
-const { suite } = require('selenium-webdriver/testing');
-const assert = require("assert");
+const {By, until, Builder} = require("selenium-webdriver");
 const firefox = require('selenium-webdriver/firefox');
 const BrowsingContext = require('selenium-webdriver/bidi/browsingContext');
+const assert = require("assert");
+
+describe('Browsing Context', function () {
+  let driver
+  let startIndex = 0
+  let endIndex = 5
+  let pdfMagicNumber = 'JVBER'
+  let pngMagicNumber = 'iVBOR'
+
+  beforeEach(async function () {
+    driver = new Builder()
+      .forBrowser('firefox')
+      .setFirefoxOptions(new firefox.Options().enableBidi())
+      .build()
+  })
+
+  afterEach(async function () {
+    await driver.quit()
+  })
+
+  it('test create a browsing context for given id', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+    assert.equal(browsingContext.id, id)
+  })
+
+  it('test create a window', async function () {
+    const browsingContext = await BrowsingContext(driver, {
+      type: 'window',
+    })
+    assert.notEqual(browsingContext.id, null)
+  })
+
+  it('test create a window with a reference context', async function () {
+    const browsingContext = await BrowsingContext(driver, {
+      type: 'window',
+      referenceContext: await driver.getWindowHandle(),
+    })
+    assert.notEqual(browsingContext.id, null)
+  })
+
+  it('test create a tab', async function () {
+    const browsingContext = await BrowsingContext(driver, {
+      type: 'tab',
+    })
+    assert.notEqual(browsingContext.id, null)
+  })
+
+  it('test create a tab with a reference context', async function () {
+    const browsingContext = await BrowsingContext(driver, {
+      type: 'tab',
+      referenceContext: await driver.getWindowHandle(),
+    })
+    assert.notEqual(browsingContext.id, null)
+  })
+
+  it('test navigate to a url', async function () {
+    const browsingContext = await BrowsingContext(driver, {
+      type: 'tab',
+    })
+
+    let info = await browsingContext.navigate('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
+
+    assert.notEqual(browsingContext.id, null)
+    assert.notEqual(info.navigationId, null)
+    assert(info.url.includes('/bidi/logEntryAdded.html'))
+  })
+
+  it('test navigate to a url with readiness state', async function () {
+    const browsingContext = await BrowsingContext(driver, {
+      type: 'tab',
+    })
+
+    const info = await browsingContext.navigate(
+      'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html',
+      'complete'
+    )
+
+    assert.notEqual(browsingContext.id, null)
+    assert.notEqual(info.navigationId, null)
+    assert(info.url.includes('/bidi/logEntryAdded.html'))
+  })
+
+  it('test get tree with a child', async function () {
+    const browsingContextId = await driver.getWindowHandle()
+    const parentWindow = await BrowsingContext(driver, {
+      browsingContextId: browsingContextId,
+    })
+    await parentWindow.navigate('https://www.selenium.dev/selenium/web/iframes.html', 'complete')
+
+    const contextInfo = await parentWindow.getTree()
+    assert.equal(contextInfo.children.length, 1)
+    assert.equal(contextInfo.id, browsingContextId)
+    assert(contextInfo.children[0]['url'].includes('formPage.html'))
+  })
+
+  it('test get tree with depth', async function () {
+    const browsingContextId = await driver.getWindowHandle()
+    const parentWindow = await BrowsingContext(driver, {
+      browsingContextId: browsingContextId,
+    })
+    await parentWindow.navigate('https://www.selenium.dev/selenium/web/iframes.html', 'complete')
+
+    const contextInfo = await parentWindow.getTree(0)
+    assert.equal(contextInfo.children, null)
+    assert.equal(contextInfo.id, browsingContextId)
+  })
+
+  it('test close a window', async function () {
+    const window1 = await BrowsingContext(driver, {type: 'window'})
+    const window2 = await BrowsingContext(driver, {type: 'window'})
+
+    await window2.close()
+
+    assert.doesNotThrow(async function () {
+      await window1.getTree()
+    })
+    await assert.rejects(window2.getTree(), {message: 'no such frame'})
+  })
+
+  it('test close a tab', async function () {
+    const tab1 = await BrowsingContext(driver, {type: 'tab'})
+    const tab2 = await BrowsingContext(driver, {type: 'tab'})
+
+    await tab2.close()
+
+    assert.doesNotThrow(async function () {
+      await tab1.getTree()
+    })
+    await assert.rejects(tab2.getTree(), {message: 'no such frame'})
+  })
+
+  it('can print PDF with all valid parameters', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await driver.get("https://www.selenium.dev/selenium/web/printPage.html")
+    const result = await browsingContext.printPage({
+      orientation: 'landscape',
+      scale: 1,
+      background: true,
+      width: 30,
+      height: 30,
+      top: 1,
+      bottom: 1,
+      left: 1,
+      right: 1,
+      shrinkToFit: true,
+      pageRanges: ['1-2'],
+    })
+
+    let base64Code = result.data.slice(0, 5)
+    assert.strictEqual(base64Code, 'JVBER')
+  })
+
+  it('can take box screenshot', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    const response = await browsingContext.captureBoxScreenshot(5, 5, 10, 10)
+
+    const base64code = response.slice(0, 5)
+    assert.equal(base64code, 'iVBOR')
+  })
+
+  it('can take element screenshot', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await driver.get("https://www.selenium.dev/selenium/web/formPage.html")
+    const element = await driver.findElement(By.id('checky'))
+    const elementId = await element.getId()
+    const response = await browsingContext.captureElementScreenshot(elementId)
+
+    const base64code = response.slice(0, 5)
+    assert.equal(base64code, 'iVBOR')
+  })
+
+  it('can activate a browsing context', async function () {
+    const id = await driver.getWindowHandle()
+    const window1 = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await BrowsingContext(driver, {
+      type: 'window',
+    })
+
+    const result = await driver.executeScript('return document.hasFocus();')
+
+    assert.equal(result, false)
+
+    await window1.activate()
+    const result2 = await driver.executeScript('return document.hasFocus();')
+
+    assert.equal(result2, true)
+  })
+
+  it('can handle user prompt', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await driver.get("https://www.selenium.dev/selenium/web/alerts.html")
+
+    await driver.findElement(By.id('alert')).click()
+
+    await driver.wait(until.alertIsPresent())
+
+    await browsingContext.handleUserPrompt()
+
+    const result = await driver.getTitle()
+
+    assert.equal(result, 'Testing Alerts')
+  })
+
+  it('can accept user prompt', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await driver.get("https://www.selenium.dev/selenium/web/alerts.html")
+
+    await driver.findElement(By.id('alert')).click()
+
+    await driver.wait(until.alertIsPresent())
 
-suite(function(env) {
-    describe('Browsing Context', function() {
-        let driver
-
-        beforeEach(async function () {
-          driver = await env
-              .builder()
-              .setFirefoxOptions(new firefox.Options().enableBidi())
-              .build()
-        })
-
-        afterEach(async function () {
-          await driver.quit()
-        })
-
-        it('test create a browsing context for given id', async function () {
-            const id = await driver.getWindowHandle()
-            const browsingContext = await BrowsingContext(driver, {
-              browsingContextId: id,
-            })
-            assert.equal(browsingContext.id, id)
-        })
-
-        it('test create a window', async function () {
-            const browsingContext = await BrowsingContext(driver, {
-              type: 'window',
-            })
-            assert.notEqual(browsingContext.id, null)
-        })
-
-        it('test create a window with a reference context', async function () {
-            const browsingContext = await BrowsingContext(driver, {
-              type: 'window',
-              referenceContext: await driver.getWindowHandle(),
-            })
-            assert.notEqual(browsingContext.id, null)
-        })
-
-        it('test create a tab', async function () {
-            const browsingContext = await BrowsingContext(driver, {
-              type: 'tab',
-            })
-            assert.notEqual(browsingContext.id, null)
-        })
-
-        it('test create a tab with a reference context', async function () {
-            const browsingContext = await BrowsingContext(driver, {
-              type: 'tab',
-              referenceContext: await driver.getWindowHandle(),
-            })
-            assert.notEqual(browsingContext.id, null)
-        })
-
-        it('test navigate to a url', async function () {
-            const browsingContext = await BrowsingContext(driver, {
-              type: 'tab',
-            })
-    
-            let info = await browsingContext.navigate('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
-    
-            assert.notEqual(browsingContext.id, null)
-            assert.equal(info.navigationId, null)
-            assert(info.url.includes('/bidi/logEntryAdded.html'))
-        })
-
-        it('test navigate to a url with readiness state', async function () {
-          const browsingContext = await BrowsingContext(driver, {
-            type: 'tab',
-          })
-  
-          const info = await browsingContext.navigate(
-            'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html',
-            'complete'
-          )
-  
-          assert.notEqual(browsingContext.id, null)
-          assert.equal(info.navigationId, null)
-          assert(info.url.includes('/bidi/logEntryAdded.html'))
-        })
-
-        it('test get tree with a child', async function () {
-          const browsingContextId = await driver.getWindowHandle()
-          const parentWindow = await BrowsingContext(driver, {
-            browsingContextId: browsingContextId,
-          })
-          await parentWindow.navigate('https://www.selenium.dev/selenium/web/iframes.html', 'complete')
-  
-          const contextInfo = await parentWindow.getTree()
-          assert.equal(contextInfo.children.length, 1)
-          assert.equal(contextInfo.id, browsingContextId)
-          assert(contextInfo.children[0]['url'].includes('formPage.html'))
-        })
-
-        it('test get tree with depth', async function () {
-          const browsingContextId = await driver.getWindowHandle()
-          const parentWindow = await BrowsingContext(driver, {
-            browsingContextId: browsingContextId,
-          })
-          await parentWindow.navigate('https://www.selenium.dev/selenium/web/iframes.html', 'complete')
-  
-          const contextInfo = await parentWindow.getTree(0)
-          assert.equal(contextInfo.children, null)
-          assert.equal(contextInfo.id, browsingContextId)
-        })
-
-        it('test close a window', async function () {
-          const window1 = await BrowsingContext(driver, { type: 'window' })
-          const window2 = await BrowsingContext(driver, { type: 'window' })
-  
-          await window2.close()
-  
-          assert.doesNotThrow(async function () {
-            await window1.getTree()
-          })
-          await assert.rejects(window2.getTree(), { message: 'no such frame' })
-        })
-
-        it('test close a tab', async function () {
-          const tab1 = await BrowsingContext(driver, { type: 'tab' })
-          const tab2 = await BrowsingContext(driver, { type: 'tab' })
-  
-          await tab2.close()
-  
-          assert.doesNotThrow(async function () {
-            await tab1.getTree()
-          })
-          await assert.rejects(tab2.getTree(), { message: 'no such frame' })
-        })
-    })
-}, { browsers: ['firefox'] })
+    await browsingContext.handleUserPrompt(true)
+
+    const result = await driver.getTitle()
+
+    assert.equal(result, 'Testing Alerts')
+  })
+
+  it('can dismiss user prompt', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await driver.get("https://www.selenium.dev/selenium/web/alerts.html")
+
+    await driver.findElement(By.id('alert')).click()
+
+    await driver.wait(until.alertIsPresent())
+
+    await browsingContext.handleUserPrompt(false)
+
+    const result = await driver.getTitle()
+
+    assert.equal(result, 'Testing Alerts')
+  })
+
+  it('can pass user text to user prompt', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await driver.get("https://www.selenium.dev/selenium/web/alerts.html")
+
+    await driver.findElement(By.id('prompt')).click()
+
+    await driver.wait(until.alertIsPresent())
+
+    const userText = 'Selenium automates browsers'
+
+    await browsingContext.handleUserPrompt(undefined, userText)
+
+    const result = await driver.getPageSource()
+    assert.equal(result.includes(userText), true)
+  })
+
+  it('can accept user prompt with user text', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await driver.get("https://www.selenium.dev/selenium/web/alerts.html")
+
+    await driver.findElement(By.id('prompt')).click()
+
+    await driver.wait(until.alertIsPresent())
+
+    const userText = 'Selenium automates browsers'
+
+    await browsingContext.handleUserPrompt(true, userText)
+
+    const result = await driver.getPageSource()
+    assert.equal(result.includes(userText), true)
+  })
+
+  it('can dismiss user prompt with user text', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await driver.get("https://www.selenium.dev/selenium/web/alerts.html")
+
+    await driver.findElement(By.id('alert')).click()
+
+    await driver.wait(until.alertIsPresent())
+
+    const userText = 'Selenium automates browsers'
+
+    await browsingContext.handleUserPrompt(false, userText)
+
+    const result = await driver.getPageSource()
+    assert.equal(result.includes(userText), false)
+  })
+
+  it('can set viewport', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await driver.get("https://www.selenium.dev/selenium/web/blank.html")
+
+    await browsingContext.setViewport(250, 300)
+
+    const result = await driver.executeScript('return [window.innerWidth, window.innerHeight];')
+    assert.equal(result[0], 250)
+    assert.equal(result[1], 300)
+  })
+
+  it('can reload a browsing context', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    const result = await browsingContext.navigate(
+      'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html', 'complete')
+
+    await browsingContext.reload(undefined, 'complete')
+    assert.notEqual(result.navigationId, null)
+    assert(result.url.includes('/bidi/logEntryAdded.html'))
+  })
+
+  it('can take screenshot', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    const response = await browsingContext.captureScreenshot()
+    const base64code = response.slice(startIndex, endIndex)
+    assert.equal(base64code, pngMagicNumber)
+  })
+
+  it('can traverse browser history', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await browsingContext.navigate('https://www.selenium.dev/selenium/web/formPage.html', 'complete')
+
+    await driver.wait(until.elementLocated(By.id('imageButton'))).submit()
+    await driver.wait(until.titleIs('We Arrive Here'), 2500)
+
+    await browsingContext.traverseHistory(-1)
+
+    const source = await driver.getPageSource()
+
+    assert.equal(source.includes('We Leave From Here'), true)
+  })
+
+  it('can navigate back in browser history', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await browsingContext.navigate('https://www.selenium.dev/selenium/web/formPage.html', 'complete')
+
+    await driver.wait(until.elementLocated(By.id('imageButton'))).submit()
+    await driver.wait(until.titleIs('We Arrive Here'), 2500)
+
+    await browsingContext.back()
+
+    const source = await driver.getPageSource()
+
+    assert.equal(source.includes('We Leave From Here'), true)
+  })
+
+  it('can navigate forward in browser history', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await browsingContext.navigate('https://www.selenium.dev/selenium/web/formPage.html', 'complete')
+
+    await driver.wait(until.elementLocated(By.id('imageButton'))).submit()
+    await driver.wait(until.titleIs('We Arrive Here'), 2500)
+
+    await browsingContext.back()
+
+    const source = await driver.getPageSource()
+
+    assert.equal(source.includes('We Leave From Here'), true)
+
+    await browsingContext.forward()
+
+    await driver.wait(until.titleIs('We Arrive Here'), 2500)
+  });
+
+  it('Get All Top level browsing contexts', async () => {
+    const id = await driver.getWindowHandle()
+    const window1 = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+    await BrowsingContext(driver, { type: 'window' })
+    const res = await window1.getTopLevelContexts()
+    assert.equal(res.length, 2)
+  })
+})
diff --git a/examples/javascript/test/bidirectional/browsingContextInspector.spec.js b/examples/javascript/test/bidirectional/browsingContextInspector.spec.js
new file mode 100644
index 000000000000..e7f7e9f4cab8
--- /dev/null
+++ b/examples/javascript/test/bidirectional/browsingContextInspector.spec.js
@@ -0,0 +1,120 @@
+const BrowsingContextInspector = require("selenium-webdriver/bidi/browsingContextInspector");
+const BrowsingContext = require("selenium-webdriver/bidi/browsingContext");
+const assert = require("assert");
+const firefox = require('selenium-webdriver/firefox');
+const {Builder} = require("selenium-webdriver");
+
+describe('Browsing Context Inspector', function () {
+  let driver
+
+  beforeEach(async function () {
+    driver = new Builder()
+      .forBrowser('firefox')
+      .setFirefoxOptions(new firefox.Options().enableBidi())
+      .build()
+  })
+
+  afterEach(async function () {
+    await driver.quit()
+  })
+
+  it('can listen to window browsing context created event', async function () {
+    let contextInfo = null
+    const browsingContextInspector = await BrowsingContextInspector(driver)
+    await browsingContextInspector.onBrowsingContextCreated((entry) => {
+      contextInfo = entry
+    })
+
+    await driver.switchTo().newWindow('window')
+    const windowHandle = await driver.getWindowHandle()
+    assert.equal(contextInfo.id, windowHandle)
+    assert.equal(contextInfo.url, 'about:blank')
+    assert.equal(contextInfo.children, null)
+    assert.equal(contextInfo.parentBrowsingContext, null)
+  })
+
+  it('can listen to tab browsing context created event', async function () {
+    let contextInfo = null
+    const browsingContextInspector = await BrowsingContextInspector(driver)
+    await browsingContextInspector.onBrowsingContextCreated((entry) => {
+      contextInfo = entry
+    })
+
+    await driver.switchTo().newWindow('tab')
+    const tabHandle = await driver.getWindowHandle()
+
+    assert.equal(contextInfo.id, tabHandle)
+    assert.equal(contextInfo.url, 'about:blank')
+    assert.equal(contextInfo.children, null)
+    assert.equal(contextInfo.parentBrowsingContext, null)
+  })
+
+  it('can listen to dom content loaded event', async function () {
+    const browsingContextInspector = await BrowsingContextInspector(driver)
+    let navigationInfo = null
+    await browsingContextInspector.onDomContentLoaded((entry) => {
+      navigationInfo = entry
+    })
+
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: await driver.getWindowHandle(),
+    })
+    await browsingContext.navigate('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html', 'complete')
+
+    assert.equal(navigationInfo.browsingContextId, browsingContext.id)
+    assert.strictEqual(navigationInfo.url.includes('/bidi/logEntryAdded.html'), true)
+  })
+
+  it('can listen to browsing context loaded event', async function () {
+    let navigationInfo = null
+    const browsingContextInspector = await BrowsingContextInspector(driver)
+
+    await browsingContextInspector.onBrowsingContextLoaded((entry) => {
+      navigationInfo = entry
+    })
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: await driver.getWindowHandle(),
+    })
+    await browsingContext.navigate('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html', 'complete')
+
+    assert.equal(navigationInfo.browsingContextId, browsingContext.id)
+    assert.strictEqual(navigationInfo.url.includes('/bidi/logEntryAdded.html'), true)
+  })
+
+  it('can listen to fragment navigated event', async function () {
+    let navigationInfo = null
+    const browsingContextInspector = await BrowsingContextInspector(driver)
+
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: await driver.getWindowHandle(),
+    })
+    await browsingContext.navigate('https://www.selenium.dev/selenium/web/linked_image.html', 'complete')
+
+    await browsingContextInspector.onFragmentNavigated((entry) => {
+      navigationInfo = entry
+    })
+
+    await browsingContext.navigate('https://www.selenium.dev/selenium/web/linked_image.html#linkToAnchorOnThisPage', 'complete')
+
+    assert.equal(navigationInfo.browsingContextId, browsingContext.id)
+    assert.strictEqual(navigationInfo.url.includes('linkToAnchorOnThisPage'), true)
+  })
+
+  it('can listen to browsing context destroyed event', async function () {
+    let contextInfo = null
+    const browsingContextInspector = await BrowsingContextInspector(driver)
+    await browsingContextInspector.onBrowsingContextDestroyed((entry) => {
+      contextInfo = entry
+    })
+
+    await driver.switchTo().newWindow('window')
+
+    const windowHandle = await driver.getWindowHandle()
+    await driver.close()
+
+    assert.equal(contextInfo.id, windowHandle)
+    assert.equal(contextInfo.url, 'about:blank')
+    assert.equal(contextInfo.children.length, 0)
+    assert.equal(contextInfo.parentBrowsingContext, null)
+  })
+})
diff --git a/examples/javascript/test/bidirectional/emulateGeoLocation.spec.js b/examples/javascript/test/bidirectional/emulateGeoLocation.spec.js
index 776a156a18e3..2fc607d537ca 100644
--- a/examples/javascript/test/bidirectional/emulateGeoLocation.spec.js
+++ b/examples/javascript/test/bidirectional/emulateGeoLocation.spec.js
@@ -1,33 +1,28 @@
-const { By, Key, Browser} = require('selenium-webdriver');
-const { suite } = require('selenium-webdriver/testing');
-const assert = require("assert");
+const { Builder } = require('selenium-webdriver');
 
-suite(function(env) {
-    describe('Emulate geolocation', function() {
-        let driver;
+describe('Emulate geolocation', function() {
+  let driver;
 
-        before(async function() {
-            driver = await env.builder().build();
-        });
+  before(async function() {
+    driver = new Builder().forBrowser('chrome').build();
+  });
 
-        after(() => driver.quit());
+  after(async () => await driver.quit());
 
-        it('Emulate coordinates of Tokyo', async function() {
-            const cdpConnection = await driver.createCDPConnection('page');
+  it('Emulate coordinates of Tokyo', async function() {
+    const cdpConnection = await driver.createCDPConnection('page');
 
-            // Latitude and longitude of Tokyo, Japan
-            const coordinates = {
-                latitude: 35.689487,
-                longitude: 139.691706,
-                accuracy: 100,
-            };
+    // Latitude and longitude of Tokyo, Japan
+    const coordinates = {
+      latitude: 35.689487,
+      longitude: 139.691706,
+      accuracy: 100,
+    };
 
-            await cdpConnection.execute(
-                "Emulation.setGeolocationOverride",
-                coordinates
-            );
-            await driver.get("https://kawasaki-india.com/dealer-locator/");
-        });
-
-    });
-},{ browsers: [Browser.CHROME, Browser.FIREFOX]});
\ No newline at end of file
+    await cdpConnection.execute(
+      "Emulation.setGeolocationOverride",
+      coordinates
+    );
+    await driver.get("https://kawasaki-india.com/dealer-locator/");
+  });
+});
\ No newline at end of file
diff --git a/examples/javascript/test/bidirectional/input.spec.js b/examples/javascript/test/bidirectional/input.spec.js
new file mode 100644
index 000000000000..9dd2ca5a45f7
--- /dev/null
+++ b/examples/javascript/test/bidirectional/input.spec.js
@@ -0,0 +1,62 @@
+const assert = require("assert")
+const firefox = require('selenium-webdriver/firefox')
+const {By, Key, Builder} = require("selenium-webdriver")
+const Input = require('selenium-webdriver/bidi/input')
+
+describe('Input module', function () {
+  let driver
+
+  beforeEach(async function () {
+    driver = new Builder()
+      .forBrowser('firefox')
+      .setFirefoxOptions(new firefox.Options().enableBidi())
+      .build()
+  })
+
+  afterEach(async function () {
+    await driver.quit()
+  })
+
+  it('can perform input action', async function () {
+    const browsingContextId = await driver.getWindowHandle()
+    const input = await Input(driver)
+    await driver.get('https://www.selenium.dev/selenium/web/formSelectionPage.html')
+
+    let options = await driver.findElements(By.tagName('option'))
+
+    const actions = driver.actions().click(options[1]).keyDown(Key.SHIFT).click(options[3]).keyUp(Key.SHIFT).getSequences()
+
+    await input.perform(browsingContextId, actions)
+
+    let showButton = await driver.findElement(By.name('showselected'))
+    showButton.click()
+
+    let resultElement = await driver.findElement(By.id('result'))
+    await resultElement.getText().then(function (text) {
+      assert(text.includes('oquefort parmigiano cheddar'), `text is: ${text}`)
+    })
+  })
+
+  it('can execute release in browsing context', async function () {
+    const browsingContextId = await driver.getWindowHandle()
+    const input = await Input(driver)
+    await driver.get('https://www.selenium.dev/selenium/web/bidi/release_action.html')
+
+    let inputTextBox = await driver.findElement(By.id('keys'))
+
+    await driver.executeScript('arguments[0].focus()', inputTextBox)
+
+    const actions = driver.actions().keyDown('a').keyDown('b').getSequences()
+
+    await input.perform(browsingContextId, actions)
+
+    await driver.executeScript('resetEvents()')
+
+    await input.release(browsingContextId)
+
+    const events = await driver.executeScript('return allEvents.events')
+
+    assert.strictEqual(events[0].code, 'KeyB')
+    assert.strictEqual(events[1].code, 'KeyA')
+  })
+})
diff --git a/examples/javascript/test/bidirectional/locateNodes.spec.js b/examples/javascript/test/bidirectional/locateNodes.spec.js
new file mode 100644
index 000000000000..cde1d6502d2c
--- /dev/null
+++ b/examples/javascript/test/bidirectional/locateNodes.spec.js
@@ -0,0 +1,243 @@
+const assert = require("assert");
+const firefox = require('selenium-webdriver/firefox');
+const {BrowsingContext, ScriptManager, Builder} = require("selenium-webdriver");
+const {Locator} = require("selenium-webdriver/bidi/browsingContext");
+const {LocalValue, ReferenceValue} = require("selenium-webdriver/bidi/protocolValue");
+const {ArgumentValue} = require("selenium-webdriver/bidi/argumentValue");
+const {EvaluateResultType} = require("selenium-webdriver/bidi/evaluateResult");
+
+describe('Locate Nodes', function () {
+  let driver
+
+  beforeEach(async function () {
+    driver = new Builder()
+      .forBrowser('firefox')
+      .setFirefoxOptions(new firefox.Options().enableBidi())
+      .build()
+  })
+
+  afterEach(async function () {
+    await driver.quit()
+  })
+
+  it('can locate nodes', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/xhtmlTest.html')
+
+    const element = await browsingContext.locateNodes(Locator.css('div'))
+    assert.strictEqual(element.length, 13)
+  })
+
+  it('can locate node', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/xhtmlTest.html')
+
+    const element = await browsingContext.locateNode(Locator.css('div'))
+    assert.strictEqual(element.type, 'node')
+  })
+
+  it('can locate node with css locator', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/xhtmlTest.html')
+
+    const elements = await browsingContext.locateNodes(Locator.css('div.extraDiv, div.content'), 1)
+    const element = elements[0]
+    assert.strictEqual(element.type, 'node')
+    assert.notEqual(element.value, undefined)
+    assert.strictEqual(element.value.localName, 'div')
+    assert.strictEqual(element.value.attributes.class, 'content')
+    assert.notEqual(element.sharedId, undefined)
+  })
+
+  it('can locate node with xpath locator', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/xhtmlTest.html')
+    const elements = await browsingContext.locateNodes(Locator.xpath('/html/body/div[2]'), 1)
+
+    const element = elements[0]
+    assert.strictEqual(element.type, 'node')
+    assert.notEqual(element.value, undefined)
+    assert.strictEqual(element.value.localName, 'div')
+    assert.strictEqual(element.value.attributes.class, 'content')
+    assert.notEqual(element.sharedId, undefined)
+  })
+
+  xit('can locate node with inner test locator', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/xhtmlTest.html')
+    const elements = await browsingContext.locateNodes(Locator.innerText('Spaced out'), 1)
+
+    const element = elements[0]
+    assert.strictEqual(element.type, 'node')
+    assert.notEqual(element.value, undefined)
+    assert.strictEqual(element.value.localName, 'div')
+    assert.strictEqual(element.value.attributes.class, 'content')
+    assert.notEqual(element.sharedId, undefined)
+  })
+
+  it('can locate node with max node count', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/xhtmlTest.html')
+
+    const elements = await browsingContext.locateNodes(Locator.css('div'), 4)
+    assert.strictEqual(elements.length, 4)
+  })
+
+  it('can locate node with none ownership value', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/xhtmlTest.html')
+
+    const elements = await browsingContext.locateNodes(Locator.css('div'), undefined, 'none')
+    assert.strictEqual(elements.length, 13)
+    assert.strictEqual(elements[0].handle, null)
+  })
+
+  xit('can locate node with root ownership value', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/xhtmlTest.html')
+
+    const elements = await browsingContext.locateNodes(Locator.css('div'), undefined, 'root')
+    assert.strictEqual(elements.length, 13)
+    assert.notEqual(elements[0].handle, null)
+  })
+
+  it('can locate node with given start nodes', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/formPage.html')
+
+    const script = await ScriptManager(id, driver)
+
+    const result = await script.evaluateFunctionInBrowsingContext(
+      id,
+      "document.querySelectorAll('form')",
+      false,
+      'root',
+    )
+
+    assert.equal(result.resultType, EvaluateResultType.SUCCESS)
+    assert.notEqual(result.realmId, null)
+    assert.equal(result.result.type, 'nodelist')
+
+    const value = result.result.value
+
+    const startNodes = []
+
+    value.forEach((node) => {
+      startNodes.push(new ReferenceValue(node.handle, node.sharedId))
+    })
+
+    const elements = await browsingContext.locateNodes(
+      Locator.css('input'),
+      50,
+      'none',
+      undefined,
+      undefined,
+      startNodes,
+    )
+
+    assert.strictEqual(elements.length, 37)
+  })
+
+  xit('can locate nodes in a given sandbox', async function () {
+    const sandbox = 'sandbox'
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await browsingContext.navigate('https://www.selenium.dev/selenium/web/xhtmlTest.html', 'complete')
+
+    const elements = await browsingContext.locateNodes(Locator.css('div'), 1, undefined, sandbox)
+
+    assert.strictEqual(elements.length, 1)
+
+    const nodeId = elements[0].sharedId
+
+    const script = await ScriptManager(id, driver)
+
+    let argumentValues = []
+    let mapValue = { sharedId: LocalValue.createStringValue(nodeId) }
+    argumentValues.push(new ArgumentValue(LocalValue.createMapValue(mapValue)))
+
+    const response = await script.callFunctionInBrowsingContext(
+      id,
+      'function(){ return arguments[0]; }',
+      false,
+      argumentValues,
+      undefined,
+      undefined,
+      sandbox,
+    )
+
+    assert.equal(response.resultType, EvaluateResultType.SUCCESS)
+    assert.equal(response.result.type, 'map')
+
+    const sharedId = response.result.value.sharedId
+
+    assert.strictEqual(sharedId.value, nodeId)
+  })
+
+  it('can find element', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/xhtmlTest.html')
+
+    const element = await browsingContext.locateElement(Locator.css('p'))
+    const elementText = await element.getText()
+    assert.strictEqual(elementText, 'Open new window')
+  })
+
+  it('can find elements', async function () {
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/xhtmlTest.html')
+
+    const elements = await browsingContext.locateElements(Locator.css('div'))
+    assert.strictEqual(elements.length, 13)
+
+    const elementText = await elements[0].getText()
+    assert.strictEqual(elementText.includes('Open new window'), true)
+  })
+})
diff --git a/examples/javascript/test/bidirectional/logInspector.spec.js b/examples/javascript/test/bidirectional/logInspector.spec.js
index d6596302ebf4..fc0923d8c0fb 100644
--- a/examples/javascript/test/bidirectional/logInspector.spec.js
+++ b/examples/javascript/test/bidirectional/logInspector.spec.js
@@ -1,101 +1,100 @@
-const { suite } = require('selenium-webdriver/testing');
 const assert = require("assert");
 const firefox = require('selenium-webdriver/firefox');
 const LogInspector = require('selenium-webdriver/bidi/logInspector');
+const {Builder} = require("selenium-webdriver");
 
-suite(function(env) {
-    describe('Log Inspector', function() {
-        let driver
-
-        beforeEach(async function () {
-            driver = await env
-                .builder()
-                .setFirefoxOptions(new firefox.Options().enableBidi())
-                .build()
-        })
-  
-          afterEach(async function () {
-            await driver.quit()
-          })
-
-        it('test listen to console log', async function () {
-            let logEntry = null
-            const inspector = await LogInspector(driver)
-            await inspector.onConsoleEntry(function (log) {
-              logEntry = log
-            })
-    
-            await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
-            await driver.findElement({ id: 'consoleLog' }).click()
-            
-            assert.equal(logEntry.text, 'Hello, world!')
-            assert.equal(logEntry.realm, null)
-            assert.equal(logEntry.type, 'console')
-            assert.equal(logEntry.level, 'info')
-            assert.equal(logEntry.method, 'log')
-            assert.equal(logEntry.stackTrace, null)
-            assert.equal(logEntry.args.length, 1)
-    
-            await inspector.close()
-        })
-
-        it('test listen to javascript error log', async function () {
-        let logEntry = null
-        const inspector = await LogInspector(driver)
-        await inspector.onJavascriptException(function (log) {
-            logEntry = log
-        })
-
-        await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
-        await driver.findElement({ id: 'jsException' }).click()
-
-        assert.equal(logEntry.text, 'Error: Not working')
-        assert.equal(logEntry.type, 'javascript')
-        assert.equal(logEntry.level, 'error')
-
-        await inspector.close()
-        })
-
-        it('test retrieve stack trace for a log', async function () {
-        let logEntry = null
-        const inspector = await LogInspector(driver)
-        await inspector.onJavascriptException(function (log) {
-            logEntry = log
-        })
-
-        await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
-        await driver.findElement({ id: 'jsException' }).click()
-
-        const stackTrace = logEntry.stackTrace
-        assert.notEqual(stackTrace, null)
-        assert.equal(stackTrace.callFrames.length, 3)
-
-        await inspector.close()
-        })
-
-        it('test listen to logs with multiple consumers', async function () {
-        let logEntry1 = null
-        let logEntry2 = null
-        const inspector = await LogInspector(driver)
-        await inspector.onJavascriptException(function (log) {
-            logEntry1 = log
-        })
-        await inspector.onJavascriptException(function (log) {
-            logEntry2 = log
-        })
-
-        await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
-        await driver.findElement({ id: 'jsException' }).click()
-
-        assert.equal(logEntry1.text, 'Error: Not working')
-        assert.equal(logEntry1.type, 'javascript')
-        assert.equal(logEntry1.level, 'error')
-
-        assert.equal(logEntry2.text, 'Error: Not working')
-        assert.equal(logEntry2.type, 'javascript')
-        assert.equal(logEntry2.level, 'error')
-
-        await inspector.close()
-        })
+
+describe('Log Inspector', function () {
+  let driver
+
+  beforeEach(async function () {
+    driver = new Builder()
+      .forBrowser('firefox')
+      .setFirefoxOptions(new firefox.Options().enableBidi())
+      .build()
+  })
+
+  afterEach(async function () {
+    await driver.quit()
+  })
+
+  it('test listen to console log', async function () {
+    let logEntry = null
+    const inspector = await LogInspector(driver)
+    await inspector.onConsoleEntry(function (log) {
+      logEntry = log
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
+    await driver.findElement({id: 'consoleLog'}).click()
+
+    assert.equal(logEntry.text, 'Hello, world!')
+    assert.equal(logEntry.realm, null)
+    assert.equal(logEntry.type, 'console')
+    assert.equal(logEntry.level, 'info')
+    assert.equal(logEntry.method, 'log')
+    assert.equal(logEntry.stackTrace, null)
+    assert.equal(logEntry.args.length, 1)
+
+    await inspector.close()
+  })
+
+  it('test listen to javascript error log', async function () {
+    let logEntry = null
+    const inspector = await LogInspector(driver)
+    await inspector.onJavascriptException(function (log) {
+      logEntry = log
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
+    await driver.findElement({id: 'jsException'}).click()
+
+    assert.equal(logEntry.text, 'Error: Not working')
+    assert.equal(logEntry.type, 'javascript')
+    assert.equal(logEntry.level, 'error')
+
+    await inspector.close()
+  })
+
+  it('test retrieve stack trace for a log', async function () {
+    let logEntry = null
+    const inspector = await LogInspector(driver)
+    await inspector.onJavascriptException(function (log) {
+      logEntry = log
     })
-}, { browsers: ['firefox'] })
+
+    await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
+    await driver.findElement({id: 'jsException'}).click()
+
+    const stackTrace = logEntry.stackTrace
+    assert.notEqual(stackTrace, null)
+    assert.equal(stackTrace.callFrames.length, 3)
+
+    await inspector.close()
+  })
+
+  it('test listen to logs with multiple consumers', async function () {
+    let logEntry1 = null
+    let logEntry2 = null
+    const inspector = await LogInspector(driver)
+    await inspector.onJavascriptException(function (log) {
+      logEntry1 = log
+    })
+    await inspector.onJavascriptException(function (log) {
+      logEntry2 = log
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
+    await driver.findElement({id: 'jsException'}).click()
+
+    assert.equal(logEntry1.text, 'Error: Not working')
+    assert.equal(logEntry1.type, 'javascript')
+    assert.equal(logEntry1.level, 'error')
+
+    assert.equal(logEntry2.text, 'Error: Not working')
+    assert.equal(logEntry2.type, 'javascript')
+    assert.equal(logEntry2.level, 'error')
+
+    await inspector.close()
+  })
+})
\ No newline at end of file
diff --git a/examples/javascript/test/bidirectional/network_commands.spec.js b/examples/javascript/test/bidirectional/network_commands.spec.js
new file mode 100644
index 000000000000..25fd3c8c73e8
--- /dev/null
+++ b/examples/javascript/test/bidirectional/network_commands.spec.js
@@ -0,0 +1,80 @@
+const assert = require("assert")
+const firefox = require('selenium-webdriver/firefox')
+const { Network } = require('selenium-webdriver/bidi/network')
+const {until, By, Builder} = require('selenium-webdriver')
+const {AddInterceptParameters} = require("selenium-webdriver/bidi/addInterceptParameters");
+const {InterceptPhase} = require("selenium-webdriver/bidi/interceptPhase");
+
+describe('Network commands', function () {
+  let driver
+  let network
+
+
+  beforeEach(async function () {
+    driver = new Builder()
+      .forBrowser('firefox')
+      .setFirefoxOptions(new firefox.Options().enableBidi())
+      .build()
+
+    network = await Network(driver)
+  })
+
+  afterEach(async function () {
+    await network.close()
+    await driver.quit()
+  })
+
+  it('can add intercept', async function () {
+    const intercept = await network.addIntercept(new AddInterceptParameters(InterceptPhase.BEFORE_REQUEST_SENT))
+    assert.notEqual(intercept, null)
+  })
+
+  it('can remove intercept', async function () {
+    const network = await Network(driver)
+    const intercept = await network.addIntercept(new AddInterceptParameters(InterceptPhase.BEFORE_REQUEST_SENT))
+    assert.notEqual(intercept, null)
+
+    await network.removeIntercept(intercept)
+  })
+
+  it('can continue with auth credentials ', async function () {
+    await network.addIntercept(new AddInterceptParameters(InterceptPhase.AUTH_REQUIRED))
+
+    await network.authRequired(async (event) => {
+      await network.continueWithAuth(event.request.request, 'admin','admin')
+    })
+    await driver.get('https://the-internet.herokuapp.com/basic_auth')
+
+    const successMessage = 'Congratulations! You must have the proper credentials.'
+
+    let elementMessage = await driver.findElement(By.tagName('p')).getText()
+    assert.equal(elementMessage, successMessage)
+  })
+
+  it('can continue without auth credentials ', async function () {
+    await network.addIntercept(new AddInterceptParameters(InterceptPhase.AUTH_REQUIRED))
+
+    await network.authRequired(async (event) => {
+      await network.continueWithAuthNoCredentials(event.request.request)
+    })
+
+    await driver.get('https://the-internet.herokuapp.com/basic_auth')
+    const alert = await driver.wait(until.alertIsPresent())
+    await alert.dismiss()
+
+    let source = await driver.getPageSource()
+    assert.equal(source.includes('Not authorized'), true)
+  })
+
+  it('can cancel auth ', async function () {
+    await network.addIntercept(new AddInterceptParameters(InterceptPhase.AUTH_REQUIRED))
+
+    await network.authRequired(async (event) => {
+      await network.cancelAuth(event.request.request)
+    })
+
+    await driver.get('https://the-internet.herokuapp.com/basic_auth')
+    let source = await driver.getPageSource()
+    assert.equal(source.includes('Not authorized'), true)
+  })
+})
diff --git a/examples/javascript/test/bidirectional/network_events.spec.js b/examples/javascript/test/bidirectional/network_events.spec.js
new file mode 100644
index 000000000000..f6141bfbaf23
--- /dev/null
+++ b/examples/javascript/test/bidirectional/network_events.spec.js
@@ -0,0 +1,109 @@
+const assert = require("assert");
+const firefox = require('selenium-webdriver/firefox');
+const { Network } = require("selenium-webdriver/bidi/network");
+const {until, Builder} = require("selenium-webdriver");
+
+
+describe('Network events', function () {
+  let driver
+
+
+  beforeEach(async function () {
+    driver = new Builder()
+      .forBrowser('firefox')
+      .setFirefoxOptions(new firefox.Options().enableBidi())
+      .build()
+  })
+
+  afterEach(async function () {
+    await driver.quit()
+  })
+
+  it('can listen to event before request is sent', async function () {
+    let beforeRequestEvent = []
+    const network = await Network(driver)
+    await network.beforeRequestSent(function (event) {
+      beforeRequestEvent.push(event)
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html')
+
+    const currentUrl = await driver.getCurrentUrl()
+    const currentUrlFound = beforeRequestEvent.some(event => event.request.url.includes(currentUrl))
+    assert(currentUrlFound, `${currentUrl} was not requested`)
+  })
+
+  it('can request cookies', async function () {
+    const network = await Network(driver)
+    let beforeRequestEvent = null
+    await network.beforeRequestSent(function (event) {
+      beforeRequestEvent = event
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html')
+    await driver.manage().addCookie({
+      name: 'north',
+      value: 'biryani',
+    })
+    await driver.navigate().refresh()
+
+    assert.equal(beforeRequestEvent.request.method, 'GET')
+    assert.equal(beforeRequestEvent.request.cookies[0].name, 'north')
+    assert.equal(beforeRequestEvent.request.cookies[0].value.value, 'biryani')
+
+    await driver.manage().addCookie({
+      name: 'south',
+      value: 'dosa',
+    })
+    await driver.navigate().refresh()
+
+    assert.equal(beforeRequestEvent.request.cookies[1].name, 'south')
+    assert.equal(beforeRequestEvent.request.cookies[1].value.value, 'dosa')
+  })
+
+  it('can redirect http equiv', async function () {
+    let beforeRequestEvent = []
+    const network = await Network(driver)
+    await network.beforeRequestSent(function (event) {
+      beforeRequestEvent.push(event)
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/bidi/redirected_http_equiv.html')
+    await driver.wait(until.urlContains('redirected.html'), 1000)
+
+    assert.equal(beforeRequestEvent[0].request.method, 'GET')
+    let redirectedFound = beforeRequestEvent.some(event => event.request.url.includes('redirected.html'))
+    assert(redirectedFound, 'redirected.html was not requested')
+    redirectedFound = beforeRequestEvent.some(event => event.request.url.includes('redirected_http_equiv.html'))
+    assert(redirectedFound, 'redirected_http_equiv.html was not requested')
+  })
+
+  it('can subscribe to response started', async function () {
+    let onResponseStarted = []
+    const network = await Network(driver)
+    await network.responseStarted(function (event) {
+      onResponseStarted.push(event)
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
+
+    assert.equal(onResponseStarted[0].request.method, 'GET')
+    assert.equal(onResponseStarted[0].request.url, await driver.getCurrentUrl())
+    assert.equal(onResponseStarted[0].response.url, await driver.getCurrentUrl())
+  })
+
+  it('can subscribe to response completed', async function () {
+    let onResponseCompleted = []
+    const network = await Network(driver)
+    await network.responseCompleted(function (event) {
+      onResponseCompleted.push(event)
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
+
+    assert.equal(onResponseCompleted[0].request.method, 'GET')
+    assert.equal(onResponseCompleted[0].request.url, await driver.getCurrentUrl())
+    assert.equal(onResponseCompleted[0].response.fromCache, false)
+    assert.equal(onResponseCompleted[0].response.status, 200)
+  })
+})
diff --git a/examples/javascript/test/bidirectional/script_commands.spec.js b/examples/javascript/test/bidirectional/script_commands.spec.js
new file mode 100644
index 000000000000..0625ab0db146
--- /dev/null
+++ b/examples/javascript/test/bidirectional/script_commands.spec.js
@@ -0,0 +1,477 @@
+const assert = require("assert")
+const firefox = require('selenium-webdriver/firefox')
+const {By, until, Builder} = require("selenium-webdriver")
+const ScriptManager = require('selenium-webdriver/bidi/scriptManager')
+const {ResultOwnership} = require("selenium-webdriver/bidi/resultOwnership");
+const {ArgumentValue} = require("selenium-webdriver/bidi/argumentValue");
+const {LocalValue, RemoteReferenceType, ReferenceValue} = require("selenium-webdriver/bidi/protocolValue");
+const {EvaluateResultType} = require("selenium-webdriver/bidi/evaluateResult");
+const BrowsingContext = require("selenium-webdriver/bidi/browsingContext");
+const {WebDriverError} = require("selenium-webdriver/lib/error");
+const {RealmType} = require("selenium-webdriver/bidi/realmInfo");
+const LogInspector = require("selenium-webdriver/bidi/logInspector");
+
+
+
+describe('Script commands', function () {
+  let driver
+
+  beforeEach(async function () {
+    driver = new Builder()
+      .forBrowser('firefox')
+      .setFirefoxOptions(new firefox.Options().enableBidi())
+      .build()
+  })
+
+  afterEach(async function () {
+    await driver.quit()
+  })
+
+  it('can call function', async function () {
+    const id = await driver.getWindowHandle()
+    const manager = await ScriptManager(id, driver)
+
+    let argumentValues = []
+    let value = new ArgumentValue(LocalValue.createNumberValue(22))
+    argumentValues.push(value)
+
+    let mapValue = {some_property: LocalValue.createNumberValue(42)}
+    let thisParameter = new ArgumentValue(LocalValue.createObjectValue(mapValue)).asMap()
+
+    const result = await manager.callFunctionInBrowsingContext(
+      id,
+      'function processWithPromise(argument) {' +
+      'return new Promise((resolve, reject) => {' +
+      'setTimeout(() => {' +
+      'resolve(argument + this.some_property);' +
+      '}, 1000)' +
+      '})' +
+      '}',
+      true,
+      argumentValues,
+      thisParameter,
+      ResultOwnership.ROOT)
+    assert.equal(result.resultType, EvaluateResultType.SUCCESS)
+    assert.equal(result.result.value, 64)
+  })
+
+  it('can call function with declaration', async function () {
+    const id = await driver.getWindowHandle()
+    const manager = await ScriptManager(id, driver)
+
+    const result = await manager.callFunctionInBrowsingContext(id, '()=>{return 1+2;}', false)
+    assert.equal(result.resultType, EvaluateResultType.SUCCESS)
+    assert.equal(result.result.value, 3)
+  })
+
+  it('can call function to get element', async function () {
+    await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded')
+    const id = await driver.getWindowHandle()
+    const manager = await ScriptManager(id, driver)
+
+    const result = await manager.callFunctionInBrowsingContext(
+      id,
+      '() => document.getElementById("consoleLog")',
+      false,
+    )
+    assert.equal(result.resultType, EvaluateResultType.SUCCESS)
+    assert.notEqual(result.realmId, null)
+    assert.equal(result.result.type, 'node')
+    assert.notEqual(result.result.value, null)
+    assert.notEqual(result.result.value.nodeType, null)
+  })
+
+  it('can call function with arguments', async function () {
+    const id = await driver.getWindowHandle()
+    const manager = await ScriptManager(id, driver)
+
+    let argumentValues = []
+    let value1 = new ArgumentValue(LocalValue.createStringValue('ARGUMENT_STRING_VALUE'))
+    let value2 = new ArgumentValue(LocalValue.createNumberValue(42))
+    argumentValues.push(value1)
+    argumentValues.push(value2)
+
+    const result = await manager.callFunctionInBrowsingContext(
+      id,
+      '(...args)=>{return args}',
+      false,
+      argumentValues,
+    )
+    assert.equal(result.resultType, EvaluateResultType.SUCCESS)
+    assert.equal(result.result.value.length, 2)
+  })
+
+  it('can call function with await promise', async function () {
+    const id = await driver.getWindowHandle()
+    const manager = await ScriptManager(id, driver)
+
+    const result = await manager.callFunctionInBrowsingContext(
+      id,
+      'async function() {{\n' +
+      '            await new Promise(r => setTimeout(() => r(), 0));\n' +
+      '            return "SOME_DELAYED_RESULT";\n' +
+      '          }}',
+      true,
+    )
+    assert.equal(result.resultType, EvaluateResultType.SUCCESS)
+    assert.equal(result.result.value, 'SOME_DELAYED_RESULT')
+  })
+
+  it('can call function with await promise false', async function () {
+    const id = await driver.getWindowHandle()
+    const manager = await ScriptManager(id, driver)
+
+    const result = await manager.callFunctionInBrowsingContext(
+      id,
+      'async function() {{\n' +
+      '            await new Promise(r => setTimeout(() => r(), 0));\n' +
+      '            return "SOME_DELAYED_RESULT";\n' +
+      '          }}',
+      false,
+    )
+    assert.equal(result.resultType, EvaluateResultType.SUCCESS)
+    assert.equal(result.result.type, 'promise')
+  })
+
+  it('can call function with this parameter', async function () {
+    const id = await driver.getWindowHandle()
+    const manager = await ScriptManager(id, driver)
+
+    let mapValue = {some_property: LocalValue.createNumberValue(42)}
+    let thisParameter = new ArgumentValue(LocalValue.createObjectValue(mapValue)).asMap()
+
+    const result = await manager.callFunctionInBrowsingContext(
+      id,
+      'function(){return this.some_property}',
+      false,
+      null,
+      thisParameter,
+    )
+    assert.equal(result.resultType, EvaluateResultType.SUCCESS)
+    assert.equal(result.result.value, 42)
+  })
+
+  it('can call function with ownership root', async function () {
+    const id = await driver.getWindowHandle()
+    const manager = await ScriptManager(id, driver)
+
+    const result = await manager.callFunctionInBrowsingContext(
+      id,
+      'async function(){return {a:1}}',
+      true,
+      null,
+      null,
+      ResultOwnership.ROOT,
+    )
+    assert.equal(result.resultType, EvaluateResultType.SUCCESS)
+  })
+
+  it('can call function with ownership none', async function () {
+    const id = await driver.getWindowHandle()
+    const manager = await ScriptManager(id, driver)
+
+    const result = await manager.callFunctionInBrowsingContext(
+      id,
+      'async function(){return {a:1}}',
+      true,
+      null,
+      null,
+      ResultOwnership.NONE,
+    )
+    assert.equal(result.resultType, EvaluateResultType.SUCCESS)
+    assert.notEqual(result.realmId, null)
+    assert.equal(result.result.handle, undefined)
+    assert.notEqual(result.result.value, null)
+  })
+
+  it('can call function that throws exception', async function () {
+    const id = await driver.getWindowHandle()
+    const manager = await ScriptManager(id, driver)
+
+    const result = await manager.callFunctionInBrowsingContext(id, '))) !!@@## some invalid JS script (((', false)
+    assert.equal(result.resultType, EvaluateResultType.EXCEPTION)
+
+    assert.equal(result.exceptionDetails.exception.type, 'error')
+    assert.equal(result.exceptionDetails.text, "SyntaxError: expected expression, got ')'")
+    assert.equal(result.exceptionDetails.columnNumber, 39)
+    assert.equal(result.exceptionDetails.stackTrace.callFrames.length, 0)
+  })
+
+  it('can call function in a sandbox', async function () {
+    const id = await driver.getWindowHandle()
+    const manager = await ScriptManager(id, driver)
+
+    await manager.callFunctionInBrowsingContext(id, '() => { window.foo = 2; }', true, null, null, null, 'sandbox')
+
+    const resultInSandbox = await manager.callFunctionInBrowsingContext(
+      id,
+      '() => window.foo',
+      true,
+      null,
+      null,
+      null,
+      'sandbox',
+    )
+
+    assert.equal(resultInSandbox.resultType, EvaluateResultType.SUCCESS)
+  })
+
+  it('can call function in a realm', async function () {
+    const firstTab = await driver.getWindowHandle()
+    await driver.switchTo().newWindow('tab')
+    const manager = await ScriptManager(firstTab, driver)
+
+    const realms = await manager.getAllRealms()
+    const realmId = realms[0].realmId
+
+    await manager.callFunctionInRealm(realmId, '() => { window.foo = 3; }', true)
+
+    const result = await manager.callFunctionInRealm(realmId, '() => window.foo', true)
+
+    assert.equal(result.resultType, EvaluateResultType.SUCCESS)
+    assert.equal(result.result.value, 3)
+  })
+
+  it('can evaluate script', async function () {
+    const id = await driver.getWindowHandle()
+    const manager = await ScriptManager(id, driver)
+
+    const result = await manager.evaluateFunctionInBrowsingContext(id, '1 + 2', true)
+
+    assert.equal(result.resultType, EvaluateResultType.SUCCESS)
+    assert.equal(result.result.value, 3)
+  })
+
+  it('can evaluate script that throws exception', async function () {
+    const id = await driver.getWindowHandle()
+    const manager = await ScriptManager(id, driver)
+
+    const result = await manager.evaluateFunctionInBrowsingContext(
+      id,
+      '))) !!@@## some invalid JS script (((',
+      false,
+    )
+
+    assert.equal(result.resultType, EvaluateResultType.EXCEPTION)
+    assert.equal(result.exceptionDetails.exception.type, 'error')
+    assert.equal(result.exceptionDetails.text, "SyntaxError: expected expression, got ')'")
+    assert.equal(result.exceptionDetails.columnNumber, 39)
+    assert.equal(result.exceptionDetails.stackTrace.callFrames.length, 0)
+  })
+
+  it('can evaluate script with result ownership', async function () {
+    const id = await driver.getWindowHandle()
+    const manager = await ScriptManager(id, driver)
+
+    const result = await manager.evaluateFunctionInBrowsingContext(
+      id,
+      'Promise.resolve({a:1})',
+      true,
+      ResultOwnership.ROOT,
+    )
+
+    assert.equal(result.resultType, EvaluateResultType.SUCCESS)
+    assert.notEqual(result.result.handle, null)
+  })
+
+  it('can evaluate in a sandbox', async function () {
+    const id = await driver.getWindowHandle()
+    const manager = await ScriptManager(id, driver)
+
+    await manager.evaluateFunctionInBrowsingContext(id, 'window.foo = 2', true, null, 'sandbox')
+
+    const resultInSandbox = await manager.evaluateFunctionInBrowsingContext(id, 'window.foo', true, null, 'sandbox')
+
+    assert.equal(resultInSandbox.resultType, EvaluateResultType.SUCCESS)
+    assert.equal(resultInSandbox.result.value, 2)
+  })
+
+  it('can evaluate in a realm', async function () {
+    const firstTab = await driver.getWindowHandle()
+    await driver.switchTo().newWindow('tab')
+    const manager = await ScriptManager(firstTab, driver)
+
+    const realms = await manager.getAllRealms()
+    const realmId = realms[0].realmId
+
+    await manager.evaluateFunctionInRealm(realmId, 'window.foo = 3', true)
+
+    const result = await manager.evaluateFunctionInRealm(realmId, 'window.foo', true)
+
+    assert.equal(result.resultType, EvaluateResultType.SUCCESS)
+    assert.equal(result.result.value, 3)
+  })
+
+  it('can disown handles', async function () {
+    const id = await driver.getWindowHandle()
+    const manager = await ScriptManager(id, driver)
+
+    const browsingContext = await BrowsingContext(driver, {browsingContextId: id})
+
+    const info = await browsingContext.navigate(
+      'https://www.selenium.dev/selenium/web/dynamic.html',
+      'complete'
+    )
+
+    await driver.findElement(By.id('adder')).click()
+
+    await driver.wait(until.elementLocated(By.id('box0')), 10000)
+
+    const evaluateResult = await manager.evaluateFunctionInBrowsingContext(
+      id,
+      "document.querySelector('.redbox');",
+      false,
+      ResultOwnership.ROOT,
+    )
+
+    assert.equal(evaluateResult.resultType, EvaluateResultType.SUCCESS)
+    let boxId = evaluateResult.result.handle
+
+    await manager.disownBrowsingContextScript(id, boxId)
+
+    await manager.callFunctionInBrowsingContext(id, 'arg => arg.a', false).catch((error) => {
+      assert(error instanceof WebDriverError)
+    })
+  })
+
+  it('can disown handles in realm', async function () {
+    const id = await driver.getWindowHandle()
+    const manager = await ScriptManager(id, driver)
+
+    const browsingContext = await BrowsingContext(driver, {browsingContextId: id})
+
+    const info = await browsingContext.navigate(
+      'https://www.selenium.dev/selenium/web/dynamic.html',
+      'complete'
+    )
+
+    await driver.findElement(By.id('adder')).click()
+
+    await driver.wait(until.elementLocated(By.id('box0')), 10000)
+
+    const realms = await manager.getAllRealms()
+    const realmId = realms[0].realmId
+
+    const evaluateResult = await manager.evaluateFunctionInBrowsingContext(
+      id,
+      "document.querySelector('.redbox');",
+      false,
+      ResultOwnership.ROOT,
+    )
+
+    assert.equal(evaluateResult.resultType, EvaluateResultType.SUCCESS)
+    let boxId = evaluateResult.result.handle
+
+    let argumentValues = []
+    let value1 = new ArgumentValue(new ReferenceValue(RemoteReferenceType.HANDLE, boxId))
+    argumentValues.push(value1)
+    let checkHandle = await manager.callFunctionInBrowsingContext(id, 'arg => arg.a', false, argumentValues)
+
+    assert.equal(checkHandle.resultType, EvaluateResultType.SUCCESS)
+
+    await manager.disownRealmScript(realmId, boxId)
+
+    await manager.callFunctionInBrowsingContext(id, 'arg => arg.a', false).catch((error) => {
+      assert(error instanceof WebDriverError)
+    })
+  })
+
+  it('can get all realms', async function () {
+    const firstWindow = await driver.getWindowHandle()
+    await driver.switchTo().newWindow('window')
+    const secondWindow = await driver.getWindowHandle()
+    const manager = await ScriptManager(firstWindow, driver)
+
+    const realms = await manager.getAllRealms()
+    assert.equal(realms.length, 2)
+  })
+
+  it('can get realm by type', async function () {
+    const firstWindow = await driver.getWindowHandle()
+    await driver.switchTo().newWindow('window')
+    const secondWindow = await driver.getWindowHandle()
+    const manager = await ScriptManager(firstWindow, driver)
+
+    const realms = await manager.getRealmsByType(RealmType.WINDOW)
+    assert.equal(realms.length, 2)
+  })
+
+  it('can get realm in browsing context', async function () {
+    const windowId = await driver.getWindowHandle()
+    await driver.switchTo().newWindow('tab')
+    const tabId = await driver.getWindowHandle()
+    const manager = await ScriptManager(windowId, driver)
+
+    const realms = await manager.getRealmsInBrowsingContext(tabId)
+
+    const tabRealm = realms[0]
+    assert.equal(tabRealm.realmType, RealmType.WINDOW)
+  })
+
+  it('can get realm in browsing context by type', async function () {
+    const windowId = await driver.getWindowHandle()
+    await driver.switchTo().newWindow('tab')
+    const manager = await ScriptManager(windowId, driver)
+
+    const realms = await manager.getRealmsInBrowsingContextByType(windowId, RealmType.WINDOW)
+
+    const windowRealm = realms[0]
+    assert.equal(windowRealm.realmType, RealmType.WINDOW)
+  })
+
+  it('can add preload script', async function () {
+    const id = await driver.getWindowHandle()
+    const manager = await ScriptManager(id, driver)
+
+    const scriptId = await manager.addPreloadScript('() => {{ console.log(\'{preload_script_console_text}\') }}')
+
+    let logEntry = null
+    const inspector = await LogInspector(driver)
+    await inspector.onConsoleEntry(function (log) {
+      logEntry = log
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/blank')
+
+    assert.equal(logEntry.text, '{preload_script_console_text}')
+  })
+
+  it('can add preload script to sandbox', async function () {
+    const id = await driver.getWindowHandle()
+    const manager = await ScriptManager(id, driver)
+
+    await manager.addPreloadScript('() => { window.bar = 2; }', undefined, 'sandbox')
+
+    await driver.get('https://www.selenium.dev/selenium/blank')
+
+    let result_in_sandbox = await manager.evaluateFunctionInBrowsingContext(
+      id,
+      'window.bar',
+      true,
+      null,
+      'sandbox',
+    )
+
+    assert.equal(result_in_sandbox.result.type, 'number')
+    assert.equal(result_in_sandbox.result.value, 2)
+  })
+
+  it('can remove preload script', async function () {
+    const id = await driver.getWindowHandle()
+    const manager = await ScriptManager(id, driver)
+
+    const scriptId = await manager.addPreloadScript('() => {{ console.log(\'{preload_script_console_text}\') }}')
+
+    let logEntry = null
+    const inspector = await LogInspector(driver)
+    await inspector.onConsoleEntry(function (log) {
+      logEntry = log
+    })
+
+    await manager.removePreloadScript(scriptId)
+
+    await driver.get('https://www.selenium.dev/selenium/blank')
+
+    assert.equal(logEntry, null)
+  })
+})
diff --git a/examples/javascript/test/bidirectional/script_events.spec.js b/examples/javascript/test/bidirectional/script_events.spec.js
new file mode 100644
index 000000000000..f87312531e61
--- /dev/null
+++ b/examples/javascript/test/bidirectional/script_events.spec.js
@@ -0,0 +1,92 @@
+const assert = require("assert")
+const firefox = require('selenium-webdriver/firefox')
+const {ScriptManager, BrowsingContext, Builder} = require("selenium-webdriver")
+const {ArgumentValue} = require("selenium-webdriver/bidi/argumentValue")
+const {RealmType} = require("selenium-webdriver/bidi/realmInfo")
+const {LocalValue, ChannelValue} = require("selenium-webdriver/bidi/protocolValue")
+const {EvaluateResultType} = require("selenium-webdriver/bidi/evaluateResult");
+
+
+
+describe('Script events', function () {
+  let driver
+
+  beforeEach(async function () {
+    driver = new Builder()
+      .forBrowser('firefox')
+      .setFirefoxOptions(new firefox.Options().enableBidi())
+      .build()
+  })
+
+  afterEach(async function () {
+    await driver.quit()
+  })
+
+  it('can listen to channel message', async function () {
+    const manager = await ScriptManager(undefined, driver)
+
+    let message = null
+
+    await manager.onMessage((m) => {
+      message = m
+    })
+
+    let argumentValues = []
+    let value = new ArgumentValue(LocalValue.createChannelValue(new ChannelValue('channel_name')))
+    argumentValues.push(value)
+
+    const result = await manager.callFunctionInBrowsingContext(
+      await driver.getWindowHandle(),
+      '(channel) => channel("foo")',
+      false,
+      argumentValues,
+    )
+    assert.equal(result.resultType, EvaluateResultType.SUCCESS)
+    assert.notEqual(message, null)
+    assert.equal(message.channel, 'channel_name')
+    assert.equal(message.data.type, 'string')
+    assert.equal(message.data.value, 'foo')
+  })
+
+  it('can listen to realm created message', async function () {
+    const manager = await ScriptManager(undefined, driver)
+
+    let realmInfo = null
+
+    await manager.onRealmCreated((result) => {
+      realmInfo = result
+    })
+
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await browsingContext.navigate('https://www.selenium.dev/selenium/web/blank', 'complete')
+
+    assert.notEqual(realmInfo, null)
+    assert.notEqual(realmInfo.realmId, null)
+    assert.equal(realmInfo.realmType, RealmType.WINDOW)
+  })
+
+  xit('can listen to realm destroyed message', async function () {
+    const manager = await ScriptManager(undefined, driver)
+
+    let realmInfo = null
+
+    await manager.onRealmDestroyed((result) => {
+      realmInfo = result
+    })
+
+    const id = await driver.getWindowHandle()
+    const browsingContext = await BrowsingContext(driver, {
+      browsingContextId: id,
+    })
+
+    await browsingContext.close()
+
+    assert.notEqual(realmInfo, null)
+    assert.notEqual(realmInfo.realmId, null)
+    assert.equal(realmInfo.realmType, RealmType.WINDOW)
+  })
+})
diff --git a/examples/javascript/test/bidirectional/w3c/log.spec.js b/examples/javascript/test/bidirectional/w3c/log.spec.js
new file mode 100644
index 000000000000..41ca36fb8040
--- /dev/null
+++ b/examples/javascript/test/bidirectional/w3c/log.spec.js
@@ -0,0 +1,89 @@
+
+const assert = require("assert");
+const firefox = require('selenium-webdriver/firefox');
+const {until, Builder} = require("selenium-webdriver");
+
+let driver
+
+beforeEach(async function () {
+  driver = new Builder()
+    .setFirefoxOptions(new firefox.Options().enableBidi())
+    .build()
+})
+
+afterEach(async function () {
+  await driver.quit()
+})
+
+function delay(ms) {
+  return new Promise((resolve) => setTimeout(resolve, ms))
+}
+
+describe('BiDi Logging', function () {
+  it('can listen to console log', async function () {
+    let log = null
+    const handler = await driver.script().addConsoleMessageHandler((logEntry) => {
+      log = logEntry
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
+    await driver.findElement({ id: 'consoleLog' }).click()
+
+    await delay(3000)
+
+    assert.equal(log.text, 'Hello, world!')
+    await driver.script().removeConsoleMessageHandler(handler)
+  })
+
+  it('can remove console log handler', async function () {
+    let log = null
+    const handler = await driver.script().addConsoleMessageHandler((logEntry) => {
+      log = logEntry
+    })
+
+    await driver.script().removeConsoleMessageHandler(handler)
+
+    await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
+    await driver.findElement({ id: 'consoleLog' }).click()
+
+    await delay(3000)
+
+    assert.equal(log, null)
+  })
+
+  it('can listen to javascript error', async function () {
+    let log = null
+    const handler = await driver.script().addJavaScriptErrorHandler((logEntry) => {
+      log = logEntry
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
+    await driver.findElement({ id: 'jsException' }).click()
+
+    await delay(3000)
+
+    assert.equal(log.text, 'Error: Not working')
+    assert.equal(log.type, 'javascript')
+    assert.equal(log.level, 'error')
+
+    await driver.script().removeJavaScriptErrorHandler(handler)
+  })
+
+  it('can remove to javascript error handler', async function () {
+    let log = null
+    const handler = await driver.script().addJavaScriptErrorHandler((logEntry) => {
+      log = logEntry
+    })
+
+    await driver.script().removeJavaScriptErrorHandler(handler)
+
+    await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
+    await driver.findElement({ id: 'jsException' }).click()
+
+    await delay(3000)
+
+    assert.equal(log, null)
+  })
+})
+
+
diff --git a/examples/javascript/test/bidirectional/w3c/script.spec.js b/examples/javascript/test/bidirectional/w3c/script.spec.js
new file mode 100644
index 000000000000..7b29ba4a65be
--- /dev/null
+++ b/examples/javascript/test/bidirectional/w3c/script.spec.js
@@ -0,0 +1,93 @@
+
+const assert = require("assert");
+const firefox = require('selenium-webdriver/firefox');
+const {until, Builder} = require("selenium-webdriver");
+
+let driver
+
+beforeEach(async function () {
+  driver = new Builder()
+    .setFirefoxOptions(new firefox.Options().enableBidi())
+    .build()
+})
+
+afterEach(async function () {
+  await driver.quit()
+})
+
+function delay(ms) {
+  return new Promise((resolve) => setTimeout(resolve, ms))
+}
+
+describe('BiDi Script', function () {
+
+  it('can listen to dom mutations', async function () {
+    let message = null
+    await driver.script().addDomMutationHandler((m) => {
+      message = m
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/dynamic')
+
+    let element = driver.findElement({ id: 'reveal' })
+    await element.click()
+    let revealed = driver.findElement({ id: 'revealed' })
+    await driver.wait(until.elementIsVisible(revealed), 5000)
+
+    assert.strictEqual(message['attribute_name'], 'style')
+    assert.strictEqual(message['current_value'], '')
+    assert.strictEqual(message['old_value'], 'display:none;')
+  })
+
+  it('can remove to dom mutation handler', async function () {
+    let message = null
+    let id = await driver.script().addDomMutationHandler((m) => {
+      message = m
+    })
+
+    await driver.script().removeDomMutationHandler(id)
+
+    await driver.get('https://www.selenium.dev/selenium/web/dynamic')
+
+    let element = driver.findElement({ id: 'reveal' })
+    await element.click()
+    let revealed = driver.findElement({ id: 'revealed' })
+    await driver.wait(until.elementIsVisible(revealed), 5000)
+
+    assert.strictEqual(message, null)
+  })
+
+  it('can pin script', async function () {
+    await driver.script().pin("() => { console.log('Hello!'); }")
+    let log
+
+    await driver.script().addConsoleMessageHandler((logEntry) => {
+      log = logEntry
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
+
+    await delay(3000)
+
+    assert.equal(log.text, 'Hello!')
+  })
+
+  it('can unpin script', async function () {
+    const id = await driver.script().pin("() => { console.log('Hello!'); }")
+
+    let count = 0
+    await driver.script().addConsoleMessageHandler((logEntry) => {
+      count++
+    })
+
+    await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
+
+    await driver.script().unpin(id)
+
+    await driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
+
+    assert.equal(count, 1)
+  })
+})
+
+
diff --git a/examples/javascript/test/browser/chromeSpecificCaps.spec.js b/examples/javascript/test/browser/chromeSpecificCaps.spec.js
index 29ad798ed060..04175656d870 100644
--- a/examples/javascript/test/browser/chromeSpecificCaps.spec.js
+++ b/examples/javascript/test/browser/chromeSpecificCaps.spec.js
@@ -1,72 +1,71 @@
 const Chrome = require('selenium-webdriver/chrome');
-const {suite} = require('selenium-webdriver/testing');
-const {Browser} = require("selenium-webdriver");
+const { Browser, Builder } = require("selenium-webdriver");
 const options = new Chrome.Options();
 
-suite(function (env) {
-  describe('Should be able to Test Command line arguments', function () {
-    it('headless', async function () {
-      let driver = await env
-        .builder()
-        .setChromeOptions(options.addArguments('--headless=new'))
-        .build();
 
-      await driver.get('https://www.selenium.dev/selenium/web/blank.html');
-      await driver.quit();
-    });
 
-    it('exclude switches', async function () {
-      let driver = await env
-        .builder()
-        .setChromeOptions(options.excludeSwitches('enable-automation'))
-        .build();
+describe('Should be able to Test Command line arguments', function () {
+  it('headless', async function () {
+    let driver = new Builder()
+      .forBrowser(Browser.CHROME)
+      .setChromeOptions(options.addArguments('--headless=new'))
+      .build();
 
-      await driver.get('https://www.selenium.dev/selenium/web/blank.html');
-      await driver.quit();
-    });
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+    await driver.quit();
+  });
 
-    it('Keep browser open - set detach to true ', async function () {
-      let driver = await env
-        .builder()
-        .setChromeOptions(options.detachDriver(true))
-        .build();
+  it('exclude switches', async function () {
+    let driver = new Builder()
+      .forBrowser(Browser.CHROME)
+      .setChromeOptions(options.excludeSwitches('enable-automation'))
+      .build();
 
-      await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+    await driver.quit();
+  });
 
-      // As tests runs in ci, quitting the driver instance to avoid any failures
-      await driver.quit();
-    });
+  it('Keep browser open - set detach to true ', async function () {
+    let driver = new Builder()
+      .forBrowser(Browser.CHROME)
+      .setChromeOptions(options.detachDriver(true))
+      .build();
 
-    xit('Start browser from specified location ', async function () {
-      let driver = await env
-        .builder()
-        .setChromeOptions(options.setChromeBinaryPath(`Path to chrome binary`))
-        .build();
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
 
-      await driver.get('https://www.selenium.dev/selenium/web/blank.html');
-      await driver.quit();
-    });
+    // As tests runs in ci, quitting the driver instance to avoid any failures
+    await driver.quit();
+  });
 
-    it('Basic Chrome test', async function () {
-      const Options = new Chrome.Options();
-      let driver = await env
-        .builder()
-        .setChromeOptions(Options)
-        .build();
+  xit('Start browser from specified location ', async function () {
+    let driver = new Builder()
+      .forBrowser(Browser.CHROME)
+      .setChromeOptions(options.setChromeBinaryPath(`Path to chrome binary`))
+      .build();
 
-      await driver.get('https://www.selenium.dev/selenium/web/blank.html');
-      await driver.quit();
-    });
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+    await driver.quit();
+  });
+
+  it('Basic Chrome test', async function () {
+    const Options = new Chrome.Options();
+    let driver = new Builder()
+      .forBrowser(Browser.CHROME)
+      .setChromeOptions(Options)
+      .build();
+
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+    await driver.quit();
+  });
 
-    it('Add Extension', async function () {
-      const options = new Chrome.Options();
-      let driver = await env
-        .builder()
-        .setChromeOptions(options.addExtensions(['./test/resources/extensions/webextensions-selenium-example.crx']))
-        .build();
+  it('Add Extension', async function () {
+    const options = new Chrome.Options();
+    let driver = new Builder()
+      .forBrowser(Browser.CHROME)
+      .setChromeOptions(options.addExtensions(['./test/resources/extensions/webextensions-selenium-example.crx']))
+      .build();
 
-      await driver.get('https://www.selenium.dev/selenium/web/blank.html');
-      await driver.quit();
-    });
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+    await driver.quit();
   });
-}, { browsers: [Browser.CHROME]});
\ No newline at end of file
+});
\ No newline at end of file
diff --git a/examples/javascript/test/browser/cookies.spec.js b/examples/javascript/test/browser/cookies.spec.js
deleted file mode 100644
index dab19465e94b..000000000000
--- a/examples/javascript/test/browser/cookies.spec.js
+++ /dev/null
@@ -1,82 +0,0 @@
-const { suite } = require('selenium-webdriver/testing');
-const {Browser} = require("selenium-webdriver");
-
-suite(function(env) {
-    describe('Cookies', function() {
-        let driver;
-
-        before(async function() {
-            driver = await env.builder().build();
-        });
-
-        after(() => driver.quit());
-
-        it('Create a cookie', async function() {
-            await driver.get('https://www.selenium.dev/selenium/web/blank.html');
-
-            // set a cookie on the current domain
-            await driver.manage().addCookie({ name: 'key', value: 'value' });
-        });
-
-        it('Create cookies with sameSite', async function() {
-            await driver.get('https://www.selenium.dev/selenium/web/blank.html');
-
-            // set a cookie on the current domain with sameSite 'Strict' (or) 'Lax'
-            await driver.manage().addCookie({ name: 'key', value: 'value', sameSite: 'Strict' });
-            await driver.manage().addCookie({ name: 'key', value: 'value', sameSite: 'Lax' });
-        });
-
-        it('Read cookie', async function() {
-            await driver.get('https://www.selenium.dev/selenium/web/blank.html');
-
-            // set a cookie on the current domain
-            await driver.manage().addCookie({ name: 'foo', value: 'bar' });
-
-            // Get cookie details with named cookie 'foo'
-            await driver.manage().getCookie('foo').then(function(cookie) {
-                console.log('cookie details => ', cookie);
-            });
-        });
-
-        it('Read all cookies', async function() {
-            await driver.get('https://www.selenium.dev/selenium/web/blank.html');
-
-            // Add few cookies
-            await driver.manage().addCookie({ name: 'test1', value: 'cookie1' });
-            await driver.manage().addCookie({ name: 'test2', value: 'cookie2' });
-
-            // Get all Available cookies
-            await driver.manage().getCookies().then(function(cookies) {
-                console.log('cookie details => ', cookies);
-            });
-        });
-
-        it('Delete a cookie', async function() {
-            await driver.get('https://www.selenium.dev/selenium/web/blank.html');
-
-            // Add few cookies
-            await driver.manage().addCookie({ name: 'test1', value: 'cookie1' });
-            await driver.manage().addCookie({ name: 'test2', value: 'cookie2' });
-
-            // Delete a cookie with name 'test1'
-            await driver.manage().deleteCookie('test1');
-
-            // Get all Available cookies
-            await driver.manage().getCookies().then(function(cookies) {
-                console.log('cookie details => ', cookies);
-            });
-        });
-
-        it('Delete all cookies', async function() {
-            await driver.get('https://www.selenium.dev/selenium/web/blank.html');
-
-            // Add few cookies
-            await driver.manage().addCookie({ name: 'test1', value: 'cookie1' });
-            await driver.manage().addCookie({ name: 'test2', value: 'cookie2' });
-
-            // Delete all cookies
-            await driver.manage().deleteAllCookies();
-        });
-
-    });
-}, { browsers: [Browser.CHROME, Browser.FIREFOX]});
\ No newline at end of file
diff --git a/examples/javascript/test/browser/edgeSpecificCaps.spec.js b/examples/javascript/test/browser/edgeSpecificCaps.spec.js
index d05e94cfb743..4f059f5c79a5 100644
--- a/examples/javascript/test/browser/edgeSpecificCaps.spec.js
+++ b/examples/javascript/test/browser/edgeSpecificCaps.spec.js
@@ -1,51 +1,63 @@
-const {Browser} = require('selenium-webdriver');
-const {suite} = require('selenium-webdriver/testing');
+const {Browser, By, Builder } = require('selenium-webdriver');
 const edge = require('selenium-webdriver/edge');
 const options = new edge.Options();
+const assert = require("assert");
 
-suite(function (env) {
-  describe('Should be able to Test Command line arguments', function () {
-    it('headless', async function () {
-      let driver = await env
-        .builder()
-        .setEdgeOptions(options.addArguments('--headless=new'))
-        .build();
-
-      await driver.get('https://www.selenium.dev/selenium/web/blank.html');
-      await driver.quit();
-    });
-
-    it('exclude switches', async function () {
-      let driver = await env
-        .builder()
-        .setEdgeOptions(options.excludeSwitches('enable-automation'))
-        .build();
-
-      await driver.get('https://www.selenium.dev/selenium/web/blank.html');
-      await driver.quit();
-    });
-
-    it('Keep browser open - set detach to true ', async function () {
-      let driver = await env
-        .builder()
-        .setEdgeOptions(options.detachDriver(true))
-        .build();
-
-      await driver.get('https://www.selenium.dev/selenium/web/blank.html');
-
-      // As tests runs in ci, quitting the driver instance to avoid any failures
-      await driver.quit();
-    });
-
-    it('Basic edge test', async function () {
-      const Options = new edge.Options();
-      let driver = await env
-        .builder()
-        .setEdgeOptions(Options)
-        .build();
-
-      await driver.get('https://www.selenium.dev/selenium/web/blank.html');
-      await driver.quit();
-    });
+
+
+describe('Should be able to Test Command line arguments', function () {
+  it('headless', async function () {
+    let driver = new Builder()
+      .forBrowser(Browser.EDGE)
+      .setEdgeOptions(options.addArguments('--headless=new'))
+      .build();
+
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+    await driver.quit();
+  });
+
+  it('exclude switches', async function () {
+    let driver = new Builder()
+      .forBrowser(Browser.EDGE)
+      .setEdgeOptions(options.excludeSwitches('enable-automation'))
+      .build();
+
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+    await driver.quit();
+  });
+
+  it('Keep browser open - set detach to true ', async function () {
+    let driver = new Builder()
+      .forBrowser(Browser.EDGE)
+      .setEdgeOptions(options.detachDriver(true))
+      .build();
+
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+
+    // As tests runs in ci, quitting the driver instance to avoid any failures
+    await driver.quit();
+  });
+
+  it('Basic edge test', async function () {
+    const Options = new edge.Options();
+    let driver = new Builder()
+      .forBrowser(Browser.EDGE)
+      .setEdgeOptions(Options)
+      .build();
+
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+    await driver.quit();
+  });
+
+  it('Add Extension', async function () {
+    let driver = new Builder()
+      .forBrowser(Browser.EDGE)
+      .setEdgeOptions(options.addExtensions(['./test/resources/extensions/webextensions-selenium-example.crx']))
+      .build();
+
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+    let injected = await driver.findElement(By.id('webextensions-selenium-example'));
+    assert.equal(await injected.getText(), `Content injected by webextensions-selenium-example`)
+    await driver.quit();
   });
-}, { browsers: [Browser.EDGE]});
\ No newline at end of file
+});
\ No newline at end of file
diff --git a/examples/javascript/test/browser/firefoxSpecificFunctionalities.js b/examples/javascript/test/browser/firefoxSpecificFunctionalities.spec.js
similarity index 54%
rename from examples/javascript/test/browser/firefoxSpecificFunctionalities.js
rename to examples/javascript/test/browser/firefoxSpecificFunctionalities.spec.js
index 8382759921fd..4fefa794e833 100644
--- a/examples/javascript/test/browser/firefoxSpecificFunctionalities.js
+++ b/examples/javascript/test/browser/firefoxSpecificFunctionalities.spec.js
@@ -1,15 +1,14 @@
-const {Browser, By} = require('selenium-webdriver');
+const {Browser, By, Builder} = require('selenium-webdriver');
 const Firefox = require('selenium-webdriver/firefox');
 const options = new Firefox.Options();
 const path = require('path');
-const {suite} = require("selenium-webdriver/testing");
 const assert = require("assert");
 
 
-suite(function (env) {
 describe('Should be able to Test Command line arguments', function () {
   it('headless', async function () {
-    let driver = await env.builder()
+    let driver = new Builder()
+      .forBrowser(Browser.FIREFOX)
       .setFirefoxOptions(options.addArguments('--headless'))
       .build();
 
@@ -20,7 +19,9 @@ describe('Should be able to Test Command line arguments', function () {
   it('Should be able to add extension', async function () {
 
     const xpiPath = path.resolve('./test/resources/extensions/selenium-example.xpi')
-    let driver = await env.builder().build();
+    let driver = new Builder()
+      .forBrowser(Browser.FIREFOX)
+      .build()
     let id = await driver.installAddon(xpiPath);
     await driver.uninstallAddon(id);
 
@@ -30,5 +31,20 @@ describe('Should be able to Test Command line arguments', function () {
     assert.equal(ele.length, 0);
     await driver.quit();
   });
-});
-}, { browsers: [Browser.FIREFOX]});
\ No newline at end of file
+
+  it('Should be able to install unsigned addon', async function () {
+
+    const xpiPath = path.resolve('./test/resources/extensions/selenium-example')
+    let driver = new Builder()
+      .forBrowser(Browser.FIREFOX)
+      .build()
+    let id = await driver.installAddon(xpiPath, true);
+    await driver.uninstallAddon(id);
+
+
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+    const ele = await driver.findElements(By.id("webextensions-selenium-example"));
+    assert.equal(ele.length, 0);
+    await driver.quit();
+  });
+});
\ No newline at end of file
diff --git a/examples/javascript/test/browser/safariSpecificCap.spec.js b/examples/javascript/test/browser/safariSpecificCap.spec.js
index e4ace0fc717d..d5fb2a5d54c3 100644
--- a/examples/javascript/test/browser/safariSpecificCap.spec.js
+++ b/examples/javascript/test/browser/safariSpecificCap.spec.js
@@ -1,18 +1,16 @@
 const safari = require('selenium-webdriver/safari');
-const {Browser} = require("selenium-webdriver");
-const { suite } = require('selenium-webdriver/testing')
+const {Browser, Builder} = require("selenium-webdriver");
 const options = new safari.Options();
 const process  =  require('node:process');
 
-suite(function(env) {
-  describe('Should be able to Test Command line arguments', function () {
-    (process.platform === 'darwin' ? it : it.skip)('headless', async function () {
-      let driver = await env.builder()
+describe('Should be able to Test Command line arguments', function () {
+  (process.platform === 'darwin' ? it : it.skip)('safari caps', async function () {
+    let driver = new Builder()
+      .forBrowser(Browser.SAFARI)
       .setSafariOptions(options)
       .build();
 
     await driver.get('https://www.selenium.dev/selenium/web/blank.html');
     await driver.quit();
-    });
   });
-}, { browsers: [Browser.SAFARI]});
\ No newline at end of file
+});
diff --git a/examples/javascript/test/capabilities/pageLoading.spec.js b/examples/javascript/test/capabilities/pageLoading.spec.js
index 0c6605864452..d2eb0a91b08d 100644
--- a/examples/javascript/test/capabilities/pageLoading.spec.js
+++ b/examples/javascript/test/capabilities/pageLoading.spec.js
@@ -1,38 +1,46 @@
 const Chrome = require('selenium-webdriver/chrome');
-const {suite} = require('selenium-webdriver/testing');
-const {Browser} = require("selenium-webdriver");
+const {Browser, Builder} = require("selenium-webdriver");
 const options = new Chrome.Options()
 
-suite(function (env) {
-  describe('Page loading strategies', function () {
-    it('Navigate using eager page loading strategy', async function () {
-      let driver = await env
-        .builder()
-        .setChromeOptions(options.setPageLoadStrategy('eager'))
-        .build();
-
-      await driver.get('https://www.selenium.dev/selenium/web/blank.html');
-      await driver.quit();
-    });
-
-    it('Navigate using none page loading strategy', async function () {
-      let driver = await env
-        .builder()
-        .setChromeOptions(options.setPageLoadStrategy('none'))
-        .build();
-
-      await driver.get('https://www.selenium.dev/selenium/web/blank.html');
-      await driver.quit();
-    });
-
-    it('Navigate using normal page loading strategy', async function () {
-      let driver = await env
-        .builder()
-        .setChromeOptions(options.setPageLoadStrategy('normal'))
-        .build();
-
-      await driver.get('https://www.selenium.dev/selenium/web/blank.html');
-      await driver.quit();
-    });
+
+describe('Page loading strategies', function () {
+  it('Navigate using eager page loading strategy', async function () {
+    let driver = new Builder()
+      .forBrowser(Browser.CHROME)
+      .setChromeOptions(options.setPageLoadStrategy('eager'))
+      .build();
+
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+    await driver.quit();
+  });
+
+  it('Navigate using none page loading strategy', async function () {
+    let driver = new Builder()
+      .forBrowser(Browser.CHROME)
+      .setChromeOptions(options.setPageLoadStrategy('none'))
+      .build();
+
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+    await driver.quit();
+  });
+
+  it('Navigate using normal page loading strategy', async function () {
+    let driver = new Builder()
+      .forBrowser(Browser.CHROME)
+      .setChromeOptions(options.setPageLoadStrategy('normal'))
+      .build();
+
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+    await driver.quit();
+  });
+
+  it('Should be able to accept certs', async function () {
+    let driver = new Builder()
+      .forBrowser(Browser.CHROME)
+      .setChromeOptions(options.setAcceptInsecureCerts(true))
+      .build();
+
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+    await driver.quit();
   });
-}, { browsers: [Browser.CHROME, Browser.FIREFOX]});
\ No newline at end of file
+});
\ No newline at end of file
diff --git a/examples/javascript/test/drivers/service.spec.js b/examples/javascript/test/drivers/service.spec.js
new file mode 100644
index 000000000000..c2983631fb43
--- /dev/null
+++ b/examples/javascript/test/drivers/service.spec.js
@@ -0,0 +1,62 @@
+const fs = require('fs');
+const os = require('os');
+const path = require('path');
+const Chrome = require('selenium-webdriver/chrome');
+const {Browser, Builder} = require("selenium-webdriver");
+const {getBinaryPaths} = require("selenium-webdriver/common/driverFinder");
+
+describe('Service Test', function () {
+  let driver;
+  let userDataDir;
+  let service;
+  let options;
+
+  afterEach(async function () {
+    if (driver) {
+      await driver.quit();
+      driver = null;
+    }
+    if (userDataDir) {
+      fs.rmSync(userDataDir, { recursive: true, force: true });
+      userDataDir = null;
+    }
+  });
+
+  it('Default service', async function () {
+    service = new Chrome.ServiceBuilder();
+    driver = new Builder()
+      .forBrowser(Browser.CHROME)
+      .setChromeService(service)
+      .build();
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+  });
+
+  it('Set Driver Location', async function () {
+    options = new Chrome.Options();
+    options.setBrowserVersion("stable");
+    let paths = getBinaryPaths(options);
+    let driverPath = paths.driverPath;
+    let browserPath = paths.browserPath;
+    options.setChromeBinaryPath(browserPath);
+    userDataDir = fs.mkdtempSync(path.join(os.tmpdir(), 'chrome-profile-'));
+    options.addArguments(`--user-data-dir=${userDataDir}`);
+    options.addArguments('--no-sandbox');
+    options.addArguments('--disable-dev-shm-usage');
+    service = new Chrome.ServiceBuilder(driverPath);
+    driver = new Builder()
+      .forBrowser(Browser.CHROME)
+      .setChromeOptions(options)
+      .setChromeService(service)
+      .build();
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+  });
+
+  it('Set port', async function () {
+    service = new Chrome.ServiceBuilder().setPort(1234);
+    driver = new Builder()
+      .forBrowser(Browser.CHROME)
+      .setChromeService(service)
+      .build();
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+  });
+});
diff --git a/examples/javascript/test/elements/fileUpload.spec.js b/examples/javascript/test/elements/fileUpload.spec.js
index cafa37e7f68d..feb7d0402cfb 100644
--- a/examples/javascript/test/elements/fileUpload.spec.js
+++ b/examples/javascript/test/elements/fileUpload.spec.js
@@ -1,35 +1,35 @@
-const { suite } = require('selenium-webdriver/testing');
-const {Browser, By, until} = require("selenium-webdriver");
+
+const {Browser, By, until, Builder} = require("selenium-webdriver");
 const path = require("path");
 const assert = require('node:assert');
 
-suite(function(env) {
-  describe('File Upload Test', function() {
-    let driver;
 
-    before(async function() {
-      driver = await env.builder().build();
-    });
+describe('File Upload Test', function() {
+  let driver;
+
+  before(async function() {
+    driver = new Builder()
+      .forBrowser(Browser.CHROME)
+      .build();
+  });
+
+  after(async() => await driver.quit());
 
-    after(() => driver.quit());
+  it('Should be able to upload a file successfully', async function() {
+    const image = path.resolve('./test/resources/selenium-snapshot.png')
 
-    it('Should be able to upload a file successfully', async function() {
-      const image = path.resolve('./test/resources/selenium-snapshot.png')
+    await driver.manage().setTimeouts({implicit: 5000});
 
-      await driver.manage().setTimeouts({implicit: 5000});
+    // Navigate to URL
+    await driver.get('https://the-internet.herokuapp.com/upload');
+    // Upload snapshot
+    await driver.findElement(By.id("file-upload")).sendKeys(image);
+    await driver.findElement(By.id("file-submit")).submit();
 
-      // Navigate to URL
-      await driver.get('https://the-internet.herokuapp.com/upload');
-      // Upload snapshot
-      await driver.findElement(By.id("file-upload")).sendKeys(image);
-      await driver.findElement(By.id("file-submit")).submit();
-      
-      const revealed = await driver.findElement(By.id('uploaded-files'))
-      await driver.wait(until.elementIsVisible(revealed), 2000);
-      const data = await driver.findElement(By.css('h3'));
-      
-      assert.equal(await data.getText(), `File Uploaded!`);
-    });
+    const revealed = await driver.findElement(By.id('uploaded-files'))
+    await driver.wait(until.elementIsVisible(revealed), 2000);
+    const data = await driver.findElement(By.css('h3'));
 
+    assert.equal(await data.getText(), `File Uploaded!`);
   });
-}, { browsers: [Browser.CHROME, Browser.FIREFOX]});
\ No newline at end of file
+});
\ No newline at end of file
diff --git a/examples/javascript/test/elements/interactions.spec.js b/examples/javascript/test/elements/interactions.spec.js
index cca6e5b960a0..005974f85129 100644
--- a/examples/javascript/test/elements/interactions.spec.js
+++ b/examples/javascript/test/elements/interactions.spec.js
@@ -1,28 +1,30 @@
-const {suite} = require('selenium-webdriver/testing');
-const {By, Browser} = require('selenium-webdriver');
+
+const {By, Browser, Builder} = require('selenium-webdriver');
 const assert = require("node:assert");
 
-suite(function (env) {
-  describe('Element Interactions', function () {
-    let driver;
 
-    before(async function () {
-      driver = await env.builder().build();
-    });
+describe('Element Interactions', function () {
+  let driver;
+
+  before(async function () {
+    driver = new Builder()
+      .forBrowser(Browser.CHROME)
+      .build();
+  });
 
-    after(async () => await driver.quit());
+  after(async () => await driver.quit());
 
-    it('should Clear input and send keys into input field', async function () {
+  it('should Clear input and send keys into input field', async function () {
 
-      try {
-        await driver.get('https://www.selenium.dev/selenium/web/inputs.html');
-        let inputField = await driver.findElement(By.name('no_type'));
-        await inputField.clear();
-        await inputField.sendKeys('Selenium');
-        assert.strictEqual(await inputField.getText(), "Selenium");
-      } catch (e) {
-        console.log(e)
-      }
-    });
+    try {
+      await driver.get('https://www.selenium.dev/selenium/web/inputs.html');
+      let inputField = await driver.findElement(By.name('no_type'));
+      await inputField.clear();
+      await inputField.sendKeys('Selenium');
+      const text = await inputField.getAttribute('value');
+      assert.strictEqual(text, "Selenium");
+    } catch (e) {
+      console.log(e)
+    }
   });
-}, { browsers: [Browser.CHROME, Browser.FIREFOX]});
\ No newline at end of file
+});
\ No newline at end of file
diff --git a/examples/javascript/test/getting_started/firstScript.spec.js b/examples/javascript/test/getting_started/firstScript.spec.js
index 0aa870f331b6..4c0a2a496d90 100644
--- a/examples/javascript/test/getting_started/firstScript.spec.js
+++ b/examples/javascript/test/getting_started/firstScript.spec.js
@@ -1,11 +1,11 @@
-const {By, Builder} = require('selenium-webdriver');
+const {By, Builder, Browser} = require('selenium-webdriver');
 const assert = require("assert");
 
 (async function firstTest() {
   let driver;
   
   try {
-    driver = await new Builder().forBrowser('chrome').build();
+    driver = await new Builder().forBrowser(Browser.CHROME).build();
     await driver.get('https://www.selenium.dev/selenium/web/web-form.html');
   
     let title = await driver.getTitle();
@@ -27,4 +27,4 @@ const assert = require("assert");
   } finally {
     await driver.quit();
   }
-}())
\ No newline at end of file
+}())
diff --git a/examples/javascript/test/getting_started/openEdgeTest.spec.js b/examples/javascript/test/getting_started/openEdgeTest.spec.js
index 24a053ed0461..001337c356ec 100644
--- a/examples/javascript/test/getting_started/openEdgeTest.spec.js
+++ b/examples/javascript/test/getting_started/openEdgeTest.spec.js
@@ -1,22 +1,23 @@
-const {Browser} = require('selenium-webdriver');
-const {suite} = require('selenium-webdriver/testing');
+const {Browser, Builder} = require('selenium-webdriver');
 const edge = require('selenium-webdriver/edge');
 
-suite(function (env) {
-  describe('Open Edge', function () {
-    let driver;
 
-    before(async function () {
-      let options = new edge.Options();
-      driver = await env.builder()
-        .setEdgeOptions(options)
-        .build();
-    });
+describe('Open Edge', function () {
+  let driver;
 
-    after(async () => await driver.quit());
 
-    it('Basic Edge test', async function () {
-      await driver.get('https://www.selenium.dev/selenium/web/blank.html');
-    });
+
+  before(async function () {
+    let options = new edge.Options();
+    driver = new Builder()
+      .forBrowser(Browser.EDGE)
+      .setEdgeOptions(options)
+      .build();
+  });
+
+  after(async () => await driver.quit());
+
+  it('Basic Edge test', async function () {
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
   });
-}, { browsers: [Browser.EDGE]});
+});
diff --git a/examples/javascript/test/getting_started/openFirefoxTest.spec.js b/examples/javascript/test/getting_started/openFirefoxTest.spec.js
index 5de1112df72f..023006fda961 100644
--- a/examples/javascript/test/getting_started/openFirefoxTest.spec.js
+++ b/examples/javascript/test/getting_started/openFirefoxTest.spec.js
@@ -1,22 +1,21 @@
-const {Browser} = require('selenium-webdriver');
-const {suite} = require('selenium-webdriver/testing');
+const {Browser, Builder} = require('selenium-webdriver');
 const firefox = require('selenium-webdriver/firefox');
 
-suite(function (env) {
-  describe('Open Firefox', function () {
-    let driver;
 
-    before(async function () {
-      let options = new firefox.Options();
-      driver = await env.builder()
-        .setFirefoxOptions(options)
-        .build();
-    });
+describe('Open Firefox', function () {
+  let driver;
 
-    after(async () => await driver.quit());
+  before(async function () {
+    let options = new firefox.Options();
+    driver = new Builder()
+      .forBrowser(Browser.FIREFOX)
+      .setFirefoxOptions(options)
+      .build();
+  });
+
+  after(async () => await driver.quit());
 
-    it('Basic Firefox test', async function () {
-      await driver.get('https://www.selenium.dev/selenium/web/blank.html');
-    });
+  it('Basic Firefox test', async function () {
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
   });
-}, { browsers: [Browser.FIREFOX]});
\ No newline at end of file
+});
\ No newline at end of file
diff --git a/examples/javascript/test/getting_started/runningTests.spec.js b/examples/javascript/test/getting_started/runningTests.spec.js
index 31aa8732396e..764515add235 100644
--- a/examples/javascript/test/getting_started/runningTests.spec.js
+++ b/examples/javascript/test/getting_started/runningTests.spec.js
@@ -1,31 +1,31 @@
 const {By, Builder} = require('selenium-webdriver');
 const assert = require("assert");
 
-  describe('First script', function () {
-    let driver;
-    
-    before(async function () {
-      driver = await new Builder().forBrowser('chrome').build();
-    });
-    
-    it('First Selenium script with mocha', async function () {
-      await driver.get('https://www.selenium.dev/selenium/web/web-form.html');
-      
-      let title = await driver.getTitle();
-      assert.equal("Web form", title);
-      
-      await driver.manage().setTimeouts({implicit: 500});
-      
-      let textBox = await driver.findElement(By.name('my-text'));
-      let submitButton = await driver.findElement(By.css('button'));
-      
-      await textBox.sendKeys('Selenium');
-      await submitButton.click();
-      
-      let message = await driver.findElement(By.id('message'));
-      let value = await message.getText();
-      assert.equal("Received!", value);
-    });
-  
-    after(async () => await driver.quit());
-  });
\ No newline at end of file
+describe('First script', function () {
+  let driver;
+
+  before(async function () {
+    driver = await new Builder().forBrowser('chrome').build();
+  });
+
+  it('First Selenium script with mocha', async function () {
+    await driver.get('https://www.selenium.dev/selenium/web/web-form.html');
+
+    let title = await driver.getTitle();
+    assert.equal("Web form", title);
+
+    await driver.manage().setTimeouts({implicit: 500});
+
+    let textBox = await driver.findElement(By.name('my-text'));
+    let submitButton = await driver.findElement(By.css('button'));
+
+    await textBox.sendKeys('Selenium');
+    await submitButton.click();
+
+    let message = await driver.findElement(By.id('message'));
+    let value = await message.getText();
+    assert.equal("Received!", value);
+  });
+
+  after(async () => await driver.quit());
+});
\ No newline at end of file
diff --git a/examples/javascript/test/hello/helloSelenium.js b/examples/javascript/test/hello/helloSelenium.js
index 41e2b701e659..732205a424bd 100644
--- a/examples/javascript/test/hello/helloSelenium.js
+++ b/examples/javascript/test/hello/helloSelenium.js
@@ -1,7 +1,7 @@
-const {Builder} = require('selenium-webdriver');
+const {Builder, Browser} = require('selenium-webdriver');
 
 (async function helloSelenium() {
-  let driver = await new Builder().forBrowser('chrome').build();
+  let driver = await new Builder().forBrowser(Browser.CHROME).build();
 
   await driver.get('https://selenium.dev');
 
diff --git a/examples/javascript/test/interactions/alert.spec.js b/examples/javascript/test/interactions/alert.spec.js
new file mode 100644
index 000000000000..ea503eb817d0
--- /dev/null
+++ b/examples/javascript/test/interactions/alert.spec.js
@@ -0,0 +1,50 @@
+
+const { By, Builder, until } = require('selenium-webdriver');
+const assert = require("node:assert");
+
+
+describe('Interactions - Alerts', function () {
+    let driver;
+
+    before(async function () {
+        driver = await new Builder().forBrowser('chrome').build();
+    });
+
+    after(async () => await driver.quit());
+
+    it('Should be able to getText from alert and accept', async function () {
+        await driver.get('https://www.selenium.dev/selenium/web/alerts.html');
+        await driver.findElement(By.id("alert")).click();
+        await driver.wait(until.alertIsPresent());
+        let alert = await driver.switchTo().alert();
+        let alertText = await alert.getText();
+        await alert.accept();
+        // Verify
+        assert.equal(alertText, "cheese");
+    });
+
+    it('Should be able to getText from alert and dismiss', async function () {
+        await driver.get('https://www.selenium.dev/selenium/web/alerts.html');
+        await driver.findElement(By.id("confirm")).click();
+        await driver.wait(until.alertIsPresent());
+        let alert = await driver.switchTo().alert();
+        let alertText = await alert.getText();
+        await alert.dismiss();
+        // Verify
+        assert.equal(alertText, "Are you sure?");
+    });
+
+    it('Should be able to enter text in alert prompt', async function () {
+        let text = 'Selenium';
+        await driver.get('https://www.selenium.dev/selenium/web/alerts.html');
+        await driver.findElement(By.id("prompt")).click();
+        await driver.wait(until.alertIsPresent());
+        let alert = await driver.switchTo().alert();
+        //Type your message
+        await alert.sendKeys(text);
+        await alert.accept();
+
+        let enteredText = await driver.findElement(By.id('text'));
+        assert.equal(await enteredText.getText(), text);
+    });
+});
\ No newline at end of file
diff --git a/examples/javascript/test/interactions/cookies.spec.js b/examples/javascript/test/interactions/cookies.spec.js
new file mode 100644
index 000000000000..b16bb99ec756
--- /dev/null
+++ b/examples/javascript/test/interactions/cookies.spec.js
@@ -0,0 +1,83 @@
+
+const {Browser, Builder} = require("selenium-webdriver");
+const assert = require('assert')
+
+
+describe('Cookies', function() {
+  let driver;
+
+  before(async function() {
+    driver = new Builder()
+      .forBrowser(Browser.CHROME)
+      .build();
+  });
+
+  after(async () => await driver.quit());
+
+  it('Create a cookie', async function() {
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+
+    // set a cookie on the current domain
+    await driver.manage().addCookie({ name: 'key', value: 'value' });
+  });
+
+  it('Create cookies with sameSite', async function() {
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+
+    // set a cookie on the current domain with sameSite 'Strict' (or) 'Lax'
+    await driver.manage().addCookie({ name: 'key', value: 'value', sameSite: 'Strict' });
+    await driver.manage().addCookie({ name: 'key', value: 'value', sameSite: 'Lax' });
+  });
+
+  it('Read cookie', async function() {
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+
+    // set a cookie on the current domain
+    await driver.manage().addCookie({ name: 'foo', value: 'bar' });
+
+    // Get cookie details with named cookie 'foo'
+    await driver.manage().getCookie('foo').then(function(cookie) {
+      assert.equal(cookie.value, 'bar');
+    });
+  });
+
+  it('Read all cookies', async function() {
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+
+    // Add few cookies
+    await driver.manage().addCookie({ name: 'test1', value: 'cookie1' });
+    await driver.manage().addCookie({ name: 'test2', value: 'cookie2' });
+
+    // Get all Available cookies
+    await driver.manage().getCookies().then(function(cookies) {
+      assert.equal(cookies.filter(cookie => cookie.name.startsWith('test')).length, 2);
+    });
+  });
+
+  it('Delete a cookie', async function() {
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+
+    // Add few cookies
+    await driver.manage().addCookie({ name: 'test1', value: 'cookie1' });
+    await driver.manage().addCookie({ name: 'test2', value: 'cookie2' });
+
+    // Delete a cookie with name 'test1'
+    await driver.manage().deleteCookie('test1');
+
+    // Get all Available cookies
+    await driver.manage().getCookies().then(function(cookies) {
+      assert.equal(cookies.filter(cookie => cookie.name.startsWith('test')).length, 1);
+    });
+  });
+
+  it('Delete all cookies', async function() {
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+
+    // Add few cookies
+    await driver.manage().addCookie({ name: 'test1', value: 'cookie1' });
+    await driver.manage().addCookie({ name: 'test2', value: 'cookie2' });
+
+    // Delete all cookies
+    await driver.manage().deleteAllCookies();
+  });
+});
diff --git a/examples/javascript/test/interactions/interactionsIndex.spec.js b/examples/javascript/test/interactions/interactionsIndex.spec.js
new file mode 100644
index 000000000000..8dea313d6620
--- /dev/null
+++ b/examples/javascript/test/interactions/interactionsIndex.spec.js
@@ -0,0 +1,27 @@
+const {Builder } = require('selenium-webdriver');
+const assert = require("node:assert");
+
+describe('Interactions', function () {
+  let driver;
+
+  before(async function () {
+    driver = new Builder()
+      .forBrowser('chrome')
+      .build();
+  });
+
+  after(async () => await driver.quit());
+
+  it('Should be able to get title and current url', async function () {
+    const url = 'https://www.selenium.dev/';
+    await driver.get(url);
+
+    //Get Current title
+    let title = await driver.getTitle();
+    assert.equal(title, "Selenium");
+
+    //Get Current url
+    let currentUrl = await driver.getCurrentUrl();
+    assert.equal(currentUrl, url);
+  });
+});
\ No newline at end of file
diff --git a/examples/javascript/test/interactions/navigation.spec.js b/examples/javascript/test/interactions/navigation.spec.js
new file mode 100644
index 000000000000..07fbd4be7705
--- /dev/null
+++ b/examples/javascript/test/interactions/navigation.spec.js
@@ -0,0 +1,39 @@
+const {Builder } = require('selenium-webdriver');
+const assert = require("node:assert");
+
+describe('Interactions - Navigation', function () {
+  let driver;
+
+  before(async function () {
+    driver = new Builder()
+      .forBrowser('chrome')
+      .build();
+  });
+
+  after(async () => await driver.quit());
+
+  it('Browser navigation test', async function () {
+    //Convenient
+    await driver.get('https://www.selenium.dev');
+
+    //Longer way
+    await driver.navigate().to("https://www.selenium.dev/selenium/web/index.html");
+    let title = await driver.getTitle();
+    assert.equal(title, "Index of Available Pages");
+
+    //Back
+    await driver.navigate().back();
+    title = await driver.getTitle();
+    assert.equal(title, "Selenium");
+
+    //Forward
+    await driver.navigate().forward();
+    title = await driver.getTitle();
+    assert.equal(title, "Index of Available Pages");
+
+    //Refresh
+    await driver.navigate().refresh();
+    title = await driver.getTitle();
+    assert.equal(title, "Index of Available Pages");
+  });
+});
\ No newline at end of file
diff --git a/examples/javascript/test/interactions/windows.spec.js b/examples/javascript/test/interactions/windows.spec.js
new file mode 100644
index 000000000000..6907c7d33ba8
--- /dev/null
+++ b/examples/javascript/test/interactions/windows.spec.js
@@ -0,0 +1,118 @@
+const {Builder, By} = require('selenium-webdriver');
+const chrome = require('selenium-webdriver/chrome');
+const assert = require("node:assert");
+let opts = new chrome.Options();
+opts.addArguments('--headless');
+let startIndex = 0
+let endIndex = 5
+let pdfMagicNumber = 'JVBER'
+let imgMagicNumber = 'iVBOR'
+let base64Code
+
+describe('Interactions - Windows', function () {
+  let driver;
+  before(async function () {
+    driver = await new Builder().forBrowser('chrome').setChromeOptions(opts).build();
+  });
+
+  after(async () => await driver.quit());
+
+  it('Should be able to print page to pdf', async function () {
+
+    await driver.get('https://www.selenium.dev/selenium/web/alerts.html');
+    let base64 = await driver.printPage({pageRanges: ["1-2"]});
+    // page can be saved as a PDF as below
+    // await fs.writeFileSync('./test.pdf', base64, 'base64');
+
+    base64Code = base64.slice(startIndex, endIndex)
+    assert.strictEqual(base64Code, pdfMagicNumber)
+  });
+
+  it('Should be able to get text using executeScript', async function () {
+    await driver.get('https://www.selenium.dev/selenium/web/javascriptPage.html');
+    // Stores the header element
+    let header = await driver.findElement(By.css('h1'));
+
+    // Executing JavaScript to capture innerText of header element
+    let text = await driver.executeScript('return arguments[0].innerText', header);
+    assert.strictEqual(text, `Type Stuff`)
+  });
+
+  it('Should be able to take Element Screenshot', async function () {
+    await driver.get('https://www.selenium.dev/selenium/web/javascriptPage.html');
+
+    let header = await driver.findElement(By.css('h1'));
+    // Captures the element screenshot
+    let encodedString = await header.takeScreenshot(true);
+    // save screenshot as below
+    // await fs.writeFileSync('./image.png', encodedString, 'base64');
+    base64Code = encodedString.slice(startIndex, endIndex)
+    assert.strictEqual(base64Code, imgMagicNumber)
+  });
+
+  it('Should be able to takeScreenshot', async function () {
+    await driver.get('https://www.selenium.dev/selenium/web/javascriptPage.html');
+
+    // Captures the screenshot
+    let encodedString = await driver.takeScreenshot();
+    // save screenshot as below
+    // await fs.writeFileSync('./image.png', encodedString, 'base64');
+    base64Code = encodedString.slice(startIndex, endIndex)
+    assert.strictEqual(base64Code, imgMagicNumber)
+  });
+
+  it('Should be able to switch to newWindow and newTab and close', async function () {
+    await driver.get('https://www.selenium.dev/selenium/web/');
+    const initialWindow = await driver.getAllWindowHandles();
+    assert.strictEqual(initialWindow.length, 1)
+
+    // Opens a new tab and switches to new tab
+    await driver.switchTo().newWindow('tab');
+    const browserTabs = await driver.getAllWindowHandles();
+    assert.strictEqual(browserTabs.length, 2)
+
+    // Opens a new window and switches to new window
+    await driver.switchTo().newWindow('window');
+    const windows = await driver.getAllWindowHandles();
+    assert.strictEqual(windows.length, 3)
+
+    //Close the tab or window
+    await driver.close();
+
+    //Switch back to the old tab or window
+    await driver.switchTo().window(windows[1]);
+
+    const windowsAfterClose = await driver.getAllWindowHandles();
+    assert.strictEqual(windowsAfterClose.length, 2);
+  });
+
+  it('Should be able to getWindow Size', async function () {
+    await driver.get('https://www.selenium.dev/selenium/web/');
+
+    // Access each dimension individually
+    const { width, height } = await driver.manage().window().getRect();
+
+    // Or store the dimensions and query them later
+    const rect = await driver.manage().window().getRect();
+    const windowWidth = rect.width;
+    const windowHeight = rect.height;
+
+    assert.ok(windowWidth>0);
+    assert.ok(windowHeight>0);
+  });
+
+  it('Should be able to getWindow position', async function () {
+    await driver.get('https://www.selenium.dev/selenium/web/');
+
+    // Access each dimension individually
+    const { x, y } = await driver.manage().window().getRect();
+
+    // Or store the dimensions and query them later
+    const rect = await driver.manage().window().getRect();
+    const x1 = rect.x;
+    const y1 = rect.y;
+
+    assert.ok(x1>=0);
+    assert.ok(y1>=0);
+  });
+});
\ No newline at end of file
diff --git a/examples/javascript/test/resources/extensions/selenium-example.xpi b/examples/javascript/test/resources/extensions/selenium-example.xpi
index 34b0ae3913f7..dca8e2e12312 100644
Binary files a/examples/javascript/test/resources/extensions/selenium-example.xpi and b/examples/javascript/test/resources/extensions/selenium-example.xpi differ
diff --git a/examples/javascript/test/resources/extensions/selenium-example/manifest.json b/examples/javascript/test/resources/extensions/selenium-example/manifest.json
index e938974a20b1..a8b4fec6e60f 100644
--- a/examples/javascript/test/resources/extensions/selenium-example/manifest.json
+++ b/examples/javascript/test/resources/extensions/selenium-example/manifest.json
@@ -1,17 +1,22 @@
 {
-  "manifest_version": 2,
+  "manifest_version": 3,
   "name": "webextensions-selenium-example",
-  "description": "Inject a div with id webextensions-selenium-example to verify that WebExtensions work in Firefox/Selenium" ,
+  "description": "Inject a div with id webextensions-selenium-example to verify that WebExtensions work in Firefox/Selenium",
   "version": "0.1",
   "content_scripts": [
     {
-      "matches": ["https://*/*","http://*/*"],
-      "js": ["inject.js"]
+      "matches": [
+        "https://*/*",
+        "http://*/*"
+      ],
+      "js": [
+        "inject.js"
+      ]
     }
   ],
-  "applications": {
-   "gecko": {
-     "id": "webextensions-selenium-example@example.com"
-   }
- }
-}
+  "browser_specific_settings": {
+    "gecko": {
+      "id": "webextensions-selenium-example-v3@example.com"
+    }
+  }
+}
\ No newline at end of file
diff --git a/examples/javascript/test/select/selectListTest.spec.js b/examples/javascript/test/select/selectListTest.spec.js
index 4fe88d79cf9d..840ea2bd2935 100644
--- a/examples/javascript/test/select/selectListTest.spec.js
+++ b/examples/javascript/test/select/selectListTest.spec.js
@@ -1,81 +1,82 @@
-const {By, Browser} = require('selenium-webdriver')
-const {suite} = require('selenium-webdriver/testing')
+
+const {By, Browser, Builder} = require('selenium-webdriver')
 const assert = require('assert/strict')
 const {Select} = require('selenium-webdriver')
 
-suite(function (env) {
-  describe('Select Tests', async function () {
-    let driver
 
-    before(async function () {
-      driver = await env.builder().build()
-      await driver.get('https://www.selenium.dev/selenium/web/formPage.html')
-    })
+describe('Select Tests', async function () {
+  let driver
 
-    after(async () => await driver.quit())
+  before(async function () {
+    driver = new Builder()
+      .forBrowser(Browser.FIREFOX)
+      .build()
+    await driver.get('https://www.selenium.dev/selenium/web/formPage.html')
+  })
 
-    it('Select an option', async function () {
-      const selectElement = await driver.findElement(By.name('selectomatic'))
-      const select = new Select(selectElement)
+  after(async () => await driver.quit())
 
-      const twoElement = await driver.findElement(By.css('option[value=two]'))
-      const fourElement = await driver.findElement(By.css('option[value=four]'))
-      const countElement = await driver.findElement(By.css("option[value='still learning how to count, apparently']"))
+  it('Select an option', async function () {
+    const selectElement = await driver.findElement(By.name('selectomatic'))
+    const select = new Select(selectElement)
 
-      await select.selectByVisibleText('Four')
-      assert.equal(true, await fourElement.isSelected())
+    const twoElement = await driver.findElement(By.css('option[value=two]'))
+    const fourElement = await driver.findElement(By.css('option[value=four]'))
+    const countElement = await driver.findElement(By.css("option[value='still learning how to count, apparently']"))
 
-      await select.selectByValue('two')
-      assert.equal(true, await twoElement.isSelected())
+    await select.selectByVisibleText('Four')
+    assert.equal(true, await fourElement.isSelected())
 
-      await select.selectByIndex(3)
-      assert.equal(true, await countElement.isSelected())
-    })
+    await select.selectByValue('two')
+    assert.equal(true, await twoElement.isSelected())
 
-    it('Select by multiple options', async function () {
-      const selectElement = await driver.findElement(By.name('multi'))
-      const select = await new Select(selectElement)
-
-      const hamElement = await driver.findElement(By.css('option[value=ham]'))
-      const gravyElement = await driver.findElement(By.css("option[value='onion gravy']"))
-      const eggElement = await driver.findElement(By.css('option[value=eggs]'))
-      const sausageElement = await driver.findElement(By.css("option[value='sausages']"))
-
-      const optionElements = await selectElement.findElements(By.css('option'))
-      const optionList = await select.getOptions()
-      assert.equal(optionList.length, optionElements.length)
-      for (const index in optionList) {
-        assert.equal(await optionList[index].getText(), await optionElements[index].getText())
-      }
-
-      const selectedOptionList = await select.getAllSelectedOptions()
-      const expectedSelection = [eggElement, sausageElement]
-      assert.equal(expectedSelection.length, selectedOptionList.length)
-      for (const index in selectedOptionList) {
-        assert.equal(await selectedOptionList[index].getText(), await expectedSelection[index].getText())
-      }
-
-      await select.selectByValue('ham')
-      await select.selectByValue('onion gravy')
-      assert.equal(true, await hamElement.isSelected())
-      assert.equal(true, await gravyElement.isSelected())
-
-      await select.deselectByValue('eggs')
-      await select.deselectByValue('sausages')
-      assert.equal(false, await eggElement.isSelected())
-      assert.equal(false, await sausageElement.isSelected())
-    })
+    await select.selectByIndex(3)
+    assert.equal(true, await countElement.isSelected())
+  })
+
+  it('Select by multiple options', async function () {
+    const selectElement = await driver.findElement(By.name('multi'))
+    const select = await new Select(selectElement)
+
+    const hamElement = await driver.findElement(By.css('option[value=ham]'))
+    const gravyElement = await driver.findElement(By.css("option[value='onion gravy']"))
+    const eggElement = await driver.findElement(By.css('option[value=eggs]'))
+    const sausageElement = await driver.findElement(By.css("option[value='sausages']"))
+
+    const optionElements = await selectElement.findElements(By.css('option'))
+    const optionList = await select.getOptions()
+    assert.equal(optionList.length, optionElements.length)
+    for (const index in optionList) {
+      assert.equal(await optionList[index].getText(), await optionElements[index].getText())
+    }
+
+    const selectedOptionList = await select.getAllSelectedOptions()
+    const expectedSelection = [eggElement, sausageElement]
+    assert.equal(expectedSelection.length, selectedOptionList.length)
+    for (const index in selectedOptionList) {
+      assert.equal(await selectedOptionList[index].getText(), await expectedSelection[index].getText())
+    }
+
+    await select.selectByValue('ham')
+    await select.selectByValue('onion gravy')
+    assert.equal(true, await hamElement.isSelected())
+    assert.equal(true, await gravyElement.isSelected())
+
+    await select.deselectByValue('eggs')
+    await select.deselectByValue('sausages')
+    assert.equal(false, await eggElement.isSelected())
+    assert.equal(false, await sausageElement.isSelected())
+  })
 
-    it('Try selecting disabled option', async function () {
-      const selectElement = await driver.findElement(By.name('single_disabled'))
-      const select = await new Select(selectElement)
+  it('Try selecting disabled option', async function () {
+    const selectElement = await driver.findElement(By.name('single_disabled'))
+    const select = await new Select(selectElement)
 
-      await assert.rejects(async () => {
-        await select.selectByValue("disabled")
-      }, {
-        name: 'UnsupportedOperationError',
-        message: 'You may not select a disabled option'
-      })
+    await assert.rejects(async () => {
+      await select.selectByValue("disabled")
+    }, {
+      name: 'UnsupportedOperationError',
+      message: 'You may not select a disabled option'
     })
   })
-}, { browsers: [Browser.CHROME, Browser.FIREFOX]})
\ No newline at end of file
+})
\ No newline at end of file
diff --git a/examples/javascript/test/selenium_manager/usage.spec.js b/examples/javascript/test/selenium_manager/usage.spec.js
new file mode 100644
index 000000000000..9ef17707aeb5
--- /dev/null
+++ b/examples/javascript/test/selenium_manager/usage.spec.js
@@ -0,0 +1,32 @@
+const Chrome = require('selenium-webdriver/chrome');
+const {Browser, Builder} = require("selenium-webdriver");
+const options = new Chrome.Options();
+
+describe('Usage Test', function () {
+  it('Creates driver wit Selenium Manager', async function () {
+
+    let driver = new Builder()
+        .forBrowser(Browser.CHROME)
+        .build();
+
+    await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+    await driver.quit();
+  });
+
+  // it('Creates driver with Selenium Manager', async function () {
+  //   let driverPath = '/path/to/chromedriver';
+  //   let browserPath = '/path/to/chrome';
+
+  //   options.setChromeBinaryPath(browserPath)
+
+  //   let service = new Chrome.ServiceBuilder().setPath(driverPath)
+
+  //   let driver = new Builder()
+  //       .forBrowser(Browser.CHROME)
+  //       .setChromeService(service)
+  //       .build();
+
+  //   await driver.get('https://www.selenium.dev/selenium/web/blank.html');
+  //   await driver.quit();
+  // });
+});
diff --git a/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js b/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js
index 43bf056c3c4e..7e6b5ea13340 100644
--- a/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js
+++ b/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js
@@ -1,197 +1,200 @@
-const { Builder, Browser} = require("selenium-webdriver");
+
+const { Builder} = require("selenium-webdriver");
 const { Credential, VirtualAuthenticatorOptions, Transport, Protocol } = require("selenium-webdriver/lib/virtual_authenticator");
-const { suite } = require('selenium-webdriver/testing');
 const assert = require('assert')
 const { InvalidArgumentError } = require("selenium-webdriver/lib/error");
 
-suite(function(env) {
-    describe('Virtual authenticator', function() {
-        const BASE64_ENCODED_PK =
-            "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDbBOu5Lhs4vpowbCnmCyLUpIE7JM9sm9QXzye2G+jr+Kr" +
-            "MsinWohEce47BFPJlTaDzHSvOW2eeunBO89ZcvvVc8RLz4qyQ8rO98xS1jtgqi1NcBPETDrtzthODu/gd0sjB2Tk3TLuBGV" +
-            "oPXt54a+Oo4JbBJ6h3s0+5eAfGplCbSNq6hN3Jh9YOTw5ZA6GCEy5l8zBaOgjXytd2v2OdSVoEDNiNQRkjJd2rmS2oi9AyQ" +
-            "FR3B7BrPSiDlCcITZFOWgLF5C31Wp/PSHwQhlnh7/6YhnE2y9tzsUvzx0wJXrBADW13+oMxrneDK3WGbxTNYgIi1PvSqXlq" +
-            "GjHtCK+R2QkXAgMBAAECggEAVc6bu7VAnP6v0gDOeX4razv4FX/adCao9ZsHZ+WPX8PQxtmWYqykH5CY4TSfsuizAgyPuQ0" +
-            "+j4Vjssr9VODLqFoanspT6YXsvaKanncUYbasNgUJnfnLnw3an2XpU2XdmXTNYckCPRX9nsAAURWT3/n9ljc/XYY22ecYxM" +
-            "8sDWnHu2uKZ1B7M3X60bQYL5T/lVXkKdD6xgSNLeP4AkRx0H4egaop68hoW8FIwmDPVWYVAvo8etzWCtibRXz5FcNld9MgD" +
-            "/Ai7ycKy4Q1KhX5GBFI79MVVaHkSQfxPHpr7/XcmpQOEAr+BMPon4s4vnKqAGdGB3j/E3d/+4F2swykoQKBgQD8hCsp6FIQ" +
-            "5umJlk9/j/nGsMl85LgLaNVYpWlPRKPc54YNumtvj5vx1BG+zMbT7qIE3nmUPTCHP7qb5ERZG4CdMCS6S64/qzZEqijLCqe" +
-            "pwj6j4fV5SyPWEcpxf6ehNdmcfgzVB3Wolfwh1ydhx/96L1jHJcTKchdJJzlfTvq8wwKBgQDeCnKws1t5GapfE1rmC/h4ol" +
-            "L2qZTth9oQmbrXYohVnoqNFslDa43ePZwL9Jmd9kYb0axOTNMmyrP0NTj41uCfgDS0cJnNTc63ojKjegxHIyYDKRZNVUR/d" +
-            "xAYB/vPfBYZUS7M89pO6LLsHhzS3qpu3/hppo/Uc/AM/r8PSflNHQKBgDnWgBh6OQncChPUlOLv9FMZPR1ZOfqLCYrjYEqi" +
-            "uzGm6iKM13zXFO4AGAxu1P/IAd5BovFcTpg79Z8tWqZaUUwvscnl+cRlj+mMXAmdqCeO8VASOmqM1ml667axeZDIR867ZG8" +
-            "K5V029Wg+4qtX5uFypNAAi6GfHkxIKrD04yOHAoGACdh4wXESi0oiDdkz3KOHPwIjn6BhZC7z8mx+pnJODU3cYukxv3WTct" +
-            "lUhAsyjJiQ/0bK1yX87ulqFVgO0Knmh+wNajrb9wiONAJTMICG7tiWJOm7fW5cfTJwWkBwYADmkfTRmHDvqzQSSvoC2S7aa" +
-            "9QulbC3C/qgGFNrcWgcT9kCgYAZTa1P9bFCDU7hJc2mHwJwAW7/FQKEJg8SL33KINpLwcR8fqaYOdAHWWz636osVEqosRrH" +
-            "zJOGpf9x2RSWzQJ+dq8+6fACgfFZOVpN644+sAHfNPAI/gnNKU5OfUv+eav8fBnzlf1A3y3GIkyMyzFN3DE7e0n/lyqxE4H" +
-            "BYGpI8g==";
-
-        const base64EncodedPK =
-            "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg8_zMDQDYAxlU-Q" +
-            "hk1Dwkf0v18GZca1DMF3SaJ9HPdmShRANCAASNYX5lyVCOZLzFZzrIKmeZ2jwU" +
-            "RmgsJYxGP__fWN_S-j5sN4tT15XEpN_7QZnt14YvI6uvAgO0uJEboFaZlOEB";
-
-        let options;
-        let driver;
-
-        before(async function() {
-            options = new VirtualAuthenticatorOptions();
-            driver = await new Builder().forBrowser('chrome').build();
-        });
-
-        after(() => driver.quit());
-
-        function arraysEqual(array1, array2) {
-            return (array1.length === array2.length &&
-                array1.every((item) => array2.includes(item)) &&
-                array2.every((item) => array1.includes(item)));
-        }
-
-        it('Register a virtual authenticator', async function() {
-            options.setProtocol(Protocol['U2F']);
-            options.setHasResidentKey(false);
-
-            // Register a virtual authenticator
-            await driver.addVirtualAuthenticator(options);
-            let credentialList = await driver.getCredentials();
-
-            assert.equal(0, credentialList.length);
-        });
-
-        it('Remove authenticator', async function() {
-            await driver.addVirtualAuthenticator(options);
-            await driver.removeVirtualAuthenticator();
-
-            // Since the authenticator was removed, any operation using it will throw an error
-            try {
-                await driver.getCredentials()
-            }
-            catch (e) {
-                if (e instanceof InvalidArgumentError) {
-                    assert(true)
-                }
-                else {
-                    assert(false)
-                }
-            }
-        });
-
-        it('Createa and add residential key', async function() {
-            options.setProtocol(Protocol['CTAP2']);
-            options.setHasResidentKey(true);
-            options.setHasUserVerification(true);
-            options.setIsUserVerified(true);
-
-            await driver.addVirtualAuthenticator(options);
-
-            let residentCredential = new Credential().createResidentCredential(
-                new Uint8Array([1, 2, 3, 4]),
-                'localhost',
-                new Uint8Array([1]),
-                Buffer.from(BASE64_ENCODED_PK, 'base64').toString('binary'),
-                0);
-
-            await driver.addCredential(residentCredential);
-            let credentialList = await driver.getCredentials();
-            assert.equal(1, credentialList.length);
-
-            let credential_id = credentialList[0].id();
-            let test_id = new Uint8Array([1, 2, 3, 4]);
-
-            assert(arraysEqual(credential_id, test_id));
-        });
-
-        it('Add resident credential not supported when authenticator uses U2F protocol', async function() {
-            options.setProtocol(Protocol['U2F']);
-            options.setHasResidentKey(true);
-
-            await driver.addVirtualAuthenticator(options);
-
-            let credential = new Credential().createResidentCredential(
-                new Uint8Array([1, 2, 3, 4]),
-                'localhost',
-                new Uint8Array([1]),
-                Buffer.from(base64EncodedPK, 'base64').toString('binary'),
-                0);
-
-            try {
-                await driver.addCredential(credential)
-            }
-            catch (e) {
-                if (e instanceof InvalidArgumentError) {
-                    assert(true)
-                }
-                else {
-                    assert(false)
-                }
-            }
-        });
-
-        it('Create and add non residential key', async function() {
-            options.setProtocol(Protocol['U2F']);
-            options.setHasResidentKey(false);
-
-            await driver.addVirtualAuthenticator(options);
-
-            let nonResidentCredential = new Credential().createNonResidentCredential(
-                new Uint8Array([1, 2, 3, 4]),
-                'localhost',
-                Buffer.from(base64EncodedPK, 'base64').toString('binary'),
-                0);
-
-            await driver.addCredential(nonResidentCredential);
-
-            let credentialList = await driver.getCredentials();
-            assert.equal(1, credentialList.length);
-
-            let credential_id = credentialList[0].id();
-            let test_id = new Uint8Array([1, 2, 3, 4]);
-
-            assert(arraysEqual(credential_id, test_id));
-        });
-
-        it('Get credential', async function() {
-            options.setProtocol(Protocol['CTAP2']);
-            options.setHasResidentKey(true);
-            options.setHasUserVerification(true);
-            options.setIsUserVerified(true);
-
-            await driver.addVirtualAuthenticator(options);
-
-            let residentCredential = new Credential().createResidentCredential(
-                new Uint8Array([1, 2, 3, 4]),
-                'localhost',
-                new Uint8Array([1]),
-                Buffer.from(BASE64_ENCODED_PK, 'base64').toString('binary'),
-                0);
-
-            await driver.addCredential(residentCredential);
-
-            let credentialList = await driver.getCredentials();
-            assert.equal(1, credentialList.length);
-
-            let credential_id = credentialList[0].id();
-            let test_id = new Uint8Array([1, 2, 3, 4]);
-
-            assert(arraysEqual(credential_id, test_id));
-            assert.equal(BASE64_ENCODED_PK, Buffer.from(credentialList[0].privateKey(), 'binary').toString('base64'));
-        });
-
-        it('Remove all credentials', async function() {
-            await driver.addVirtualAuthenticator(options);
-
-            let nonResidentCredential = new Credential().createNonResidentCredential(
-                new Uint8Array([1, 2, 3, 4]),
-                'localhost',
-                Buffer.from(BASE64_ENCODED_PK, 'base64').toString('binary'),
-                0);
-
-            await driver.addCredential(nonResidentCredential);
-            driver.removeAllCredentials();
-
-            let credentialList = await driver.getCredentials();
-            assert.equal(0, credentialList.length);
-        });
 
-    });
-}, { browsers: [Browser.CHROME]});
\ No newline at end of file
+describe('Virtual authenticator', function() {
+  const BASE64_ENCODED_PK =
+    "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDbBOu5Lhs4vpowbCnmCyLUpIE7JM9sm9QXzye2G+jr+Kr" +
+    "MsinWohEce47BFPJlTaDzHSvOW2eeunBO89ZcvvVc8RLz4qyQ8rO98xS1jtgqi1NcBPETDrtzthODu/gd0sjB2Tk3TLuBGV" +
+    "oPXt54a+Oo4JbBJ6h3s0+5eAfGplCbSNq6hN3Jh9YOTw5ZA6GCEy5l8zBaOgjXytd2v2OdSVoEDNiNQRkjJd2rmS2oi9AyQ" +
+    "FR3B7BrPSiDlCcITZFOWgLF5C31Wp/PSHwQhlnh7/6YhnE2y9tzsUvzx0wJXrBADW13+oMxrneDK3WGbxTNYgIi1PvSqXlq" +
+    "GjHtCK+R2QkXAgMBAAECggEAVc6bu7VAnP6v0gDOeX4razv4FX/adCao9ZsHZ+WPX8PQxtmWYqykH5CY4TSfsuizAgyPuQ0" +
+    "+j4Vjssr9VODLqFoanspT6YXsvaKanncUYbasNgUJnfnLnw3an2XpU2XdmXTNYckCPRX9nsAAURWT3/n9ljc/XYY22ecYxM" +
+    "8sDWnHu2uKZ1B7M3X60bQYL5T/lVXkKdD6xgSNLeP4AkRx0H4egaop68hoW8FIwmDPVWYVAvo8etzWCtibRXz5FcNld9MgD" +
+    "/Ai7ycKy4Q1KhX5GBFI79MVVaHkSQfxPHpr7/XcmpQOEAr+BMPon4s4vnKqAGdGB3j/E3d/+4F2swykoQKBgQD8hCsp6FIQ" +
+    "5umJlk9/j/nGsMl85LgLaNVYpWlPRKPc54YNumtvj5vx1BG+zMbT7qIE3nmUPTCHP7qb5ERZG4CdMCS6S64/qzZEqijLCqe" +
+    "pwj6j4fV5SyPWEcpxf6ehNdmcfgzVB3Wolfwh1ydhx/96L1jHJcTKchdJJzlfTvq8wwKBgQDeCnKws1t5GapfE1rmC/h4ol" +
+    "L2qZTth9oQmbrXYohVnoqNFslDa43ePZwL9Jmd9kYb0axOTNMmyrP0NTj41uCfgDS0cJnNTc63ojKjegxHIyYDKRZNVUR/d" +
+    "xAYB/vPfBYZUS7M89pO6LLsHhzS3qpu3/hppo/Uc/AM/r8PSflNHQKBgDnWgBh6OQncChPUlOLv9FMZPR1ZOfqLCYrjYEqi" +
+    "uzGm6iKM13zXFO4AGAxu1P/IAd5BovFcTpg79Z8tWqZaUUwvscnl+cRlj+mMXAmdqCeO8VASOmqM1ml667axeZDIR867ZG8" +
+    "K5V029Wg+4qtX5uFypNAAi6GfHkxIKrD04yOHAoGACdh4wXESi0oiDdkz3KOHPwIjn6BhZC7z8mx+pnJODU3cYukxv3WTct" +
+    "lUhAsyjJiQ/0bK1yX87ulqFVgO0Knmh+wNajrb9wiONAJTMICG7tiWJOm7fW5cfTJwWkBwYADmkfTRmHDvqzQSSvoC2S7aa" +
+    "9QulbC3C/qgGFNrcWgcT9kCgYAZTa1P9bFCDU7hJc2mHwJwAW7/FQKEJg8SL33KINpLwcR8fqaYOdAHWWz636osVEqosRrH" +
+    "zJOGpf9x2RSWzQJ+dq8+6fACgfFZOVpN644+sAHfNPAI/gnNKU5OfUv+eav8fBnzlf1A3y3GIkyMyzFN3DE7e0n/lyqxE4H" +
+    "BYGpI8g==";
+
+  const base64EncodedPK =
+    "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg8_zMDQDYAxlU-Q" +
+    "hk1Dwkf0v18GZca1DMF3SaJ9HPdmShRANCAASNYX5lyVCOZLzFZzrIKmeZ2jwU" +
+    "RmgsJYxGP__fWN_S-j5sN4tT15XEpN_7QZnt14YvI6uvAgO0uJEboFaZlOEB";
+
+  let options;
+  let driver;
+
+  before(async function() {
+    options = new VirtualAuthenticatorOptions();
+    driver = await new Builder().forBrowser('chrome').build();
+  });
+
+  after(async() => await driver.quit());
+
+  function arraysEqual(array1, array2) {
+    return (array1.length === array2.length &&
+      array1.every((item) => array2.includes(item)) &&
+      array2.every((item) => array1.includes(item)));
+  }
+
+  it('Register a virtual authenticator', async function() {
+    options.setProtocol(Protocol['U2F']);
+    options.setHasResidentKey(false);
+
+    // Register a virtual authenticator
+    await driver.addVirtualAuthenticator(options);
+    let credentialList = await driver.getCredentials();
+
+    assert.equal(0, credentialList.length);
+  });
+
+  it('Remove authenticator', async function() {
+    await driver.addVirtualAuthenticator(options);
+    await driver.removeVirtualAuthenticator();
+
+    // Since the authenticator was removed, any operation using it will throw an error
+    try {
+      await driver.getCredentials()
+    }
+    catch (e) {
+      if (e instanceof InvalidArgumentError) {
+        assert(true)
+      }
+      else {
+        assert(false)
+      }
+    }
+  });
+
+  it('Createa and add residential key', async function() {
+    options.setProtocol(Protocol['CTAP2']);
+    options.setHasResidentKey(true);
+    options.setHasUserVerification(true);
+    options.setIsUserVerified(true);
+
+    await driver.addVirtualAuthenticator(options);
+
+    let residentCredential = new Credential().createResidentCredential(
+      new Uint8Array([1, 2, 3, 4]),
+      'localhost',
+      new Uint8Array([1]),
+      Buffer.from(BASE64_ENCODED_PK, 'base64').toString('binary'),
+      0);
+
+    await driver.addCredential(residentCredential);
+    let credentialList = await driver.getCredentials();
+    assert.equal(1, credentialList.length);
+
+    let credential_id = credentialList[0].id();
+    let test_id = new Uint8Array([1, 2, 3, 4]);
+
+    assert(arraysEqual(credential_id, test_id));
+  });
+
+  it('Add resident credential not supported when authenticator uses U2F protocol', async function() {
+    options.setProtocol(Protocol['U2F']);
+    options.setHasResidentKey(true);
+
+    await driver.addVirtualAuthenticator(options);
+
+    let credential = new Credential().createResidentCredential(
+      new Uint8Array([1, 2, 3, 4]),
+      'localhost',
+      new Uint8Array([1]),
+      Buffer.from(base64EncodedPK, 'base64').toString('binary'),
+      0);
+
+    try {
+      await driver.addCredential(credential)
+    }
+    catch (e) {
+      if (e instanceof InvalidArgumentError) {
+        assert(true)
+      }
+      else {
+        assert(false)
+      }
+    }
+  });
+
+  it('Create and add non residential key', async function() {
+    options.setProtocol(Protocol['U2F']);
+    options.setHasResidentKey(false);
+
+    await driver.addVirtualAuthenticator(options);
+
+    let nonResidentCredential = new Credential().createNonResidentCredential(
+      new Uint8Array([1, 2, 3, 4]),
+      'localhost',
+      Buffer.from(base64EncodedPK, 'base64').toString('binary'),
+      0);
+
+    await driver.addCredential(nonResidentCredential);
+
+    let credentialList = await driver.getCredentials();
+    assert.equal(1, credentialList.length);
+
+    let credential_id = credentialList[0].id();
+    let test_id = new Uint8Array([1, 2, 3, 4]);
+
+    assert(arraysEqual(credential_id, test_id));
+  });
+
+  it('Get credential', async function() {
+    options.setProtocol(Protocol['CTAP2']);
+    options.setHasResidentKey(true);
+    options.setHasUserVerification(true);
+    options.setIsUserVerified(true);
+
+    await driver.addVirtualAuthenticator(options);
+
+    let residentCredential = new Credential().createResidentCredential(
+      new Uint8Array([1, 2, 3, 4]),
+      'localhost',
+      new Uint8Array([1]),
+      Buffer.from(BASE64_ENCODED_PK, 'base64').toString('binary'),
+      0);
+
+    await driver.addCredential(residentCredential);
+
+    let credentialList = await driver.getCredentials();
+    assert.equal(1, credentialList.length);
+
+    let credential_id = credentialList[0].id();
+    let test_id = new Uint8Array([1, 2, 3, 4]);
+
+    assert(arraysEqual(credential_id, test_id));
+    assert.equal(BASE64_ENCODED_PK, Buffer.from(credentialList[0].privateKey(), 'binary').toString('base64'));
+  });
+
+  it('Remove all credentials', async function() {
+    await driver.addVirtualAuthenticator(options);
+
+    let nonResidentCredential = new Credential().createNonResidentCredential(
+      new Uint8Array([1, 2, 3, 4]),
+      'localhost',
+      Buffer.from(BASE64_ENCODED_PK, 'base64').toString('binary'),
+      0);
+
+    await driver.addCredential(nonResidentCredential);
+    await driver.removeAllCredentials();
+
+    let credentialList = await driver.getCredentials();
+    assert.equal(0, credentialList.length);
+  });
+
+  it('Set is user verified', async function() {
+    options.setIsUserVerified(true);
+    assert.equal(options.getIsUserVerified(), true);
+  });
+});
\ No newline at end of file
diff --git a/examples/javascript/test/virtual_authenticator/virtualAuthenticatorOptions.spec.js b/examples/javascript/test/virtual_authenticator/virtualAuthenticatorOptions.spec.js
index c44f4c234f2b..9848db83eed8 100644
--- a/examples/javascript/test/virtual_authenticator/virtualAuthenticatorOptions.spec.js
+++ b/examples/javascript/test/virtual_authenticator/virtualAuthenticatorOptions.spec.js
@@ -1,29 +1,25 @@
 const {VirtualAuthenticatorOptions, Transport, Protocol} = require("selenium-webdriver/lib/virtual_authenticator");
-const {suite} = require('selenium-webdriver/testing');
 const assert = require('assert')
-const {Browser} = require("selenium-webdriver");
 
-suite(function () {
-  describe('Virtual authenticator options', function () {
-    let options;
 
-    it('Virtual options', async function () {
-      options = new VirtualAuthenticatorOptions();
-      options.setIsUserVerified(true);
-      options.setHasUserVerification(true);
-      options.setIsUserConsenting(true);
-      options.setTransport(Transport['USB']);
-      options.setProtocol(Protocol['U2F']);
-      options.setHasResidentKey(false);
+describe('Virtual authenticator options', function () {
+  let options;
 
-      assert(Object.keys(options).length === 6);
-    });
+  it('Virtual options', async function () {
+    options = new VirtualAuthenticatorOptions();
+    options.setIsUserVerified(true);
+    options.setHasUserVerification(true);
+    options.setIsUserConsenting(true);
+    options.setTransport(Transport['USB']);
+    options.setProtocol(Protocol['U2F']);
+    options.setHasResidentKey(false);
 
-    it('User verified', async function () {
-      options.setIsUserVerified(true);
+    assert(Object.keys(options).length === 6);
+  });
 
-      assert(options.toDict()['isUserVerified']);
-    });
+  it('User verified', async function () {
+    options.setIsUserVerified(true);
 
+    assert(options.toDict()['isUserVerified']);
   });
-}, { browsers: [Browser.CHROME]});
\ No newline at end of file
+});
\ No newline at end of file
diff --git a/examples/javascript/test/waits/waits.spec.js b/examples/javascript/test/waits/waits.spec.js
index 59a7d91677fb..dbc3c83e93f2 100644
--- a/examples/javascript/test/waits/waits.spec.js
+++ b/examples/javascript/test/waits/waits.spec.js
@@ -1,55 +1,56 @@
-const { suite } = require('selenium-webdriver/testing');
-const { By, Browser, until } = require('selenium-webdriver');
+
+const { By, Browser, until, Builder} = require('selenium-webdriver');
 const assert = require("node:assert");
 
-suite(function (env) {
-    describe('Element Interactions', function () {
-        let driver;
 
-        before(async function () {
-            driver = await env.builder().build();
-        });
+describe('Waits', function () {
+    let driver;
 
-        after(async () => await driver.quit());
+    before(async function () {
+        driver = new Builder()
+          .forBrowser(Browser.CHROME)
+          .build();
+    });
 
-        it('fail', async function () {
-            await driver.get('https://www.selenium.dev/selenium/web/dynamic.html');
-            await driver.findElement(By.id("adder")).click();
+    after(async () => await driver.quit());
 
-            await assert.rejects(async () => {
-                await driver.findElement(By.id("box0"))
-            },
-                Error
-            )
-        });
+    it('fail', async function () {
+        await driver.get('https://www.selenium.dev/selenium/web/dynamic.html');
+        await driver.findElement(By.id("adder")).click();
 
-        it('sleep', async function () {
-            await driver.get('https://www.selenium.dev/selenium/web/dynamic.html');
-            await driver.findElement(By.id("adder")).click();
+        await assert.rejects(async () => {
+              await driver.findElement(By.id("box0"))
+          },
+          Error
+        )
+    });
 
-            await driver.sleep(2000);
-            let added = await driver.findElement(By.id("box0"));
+    it('sleep', async function () {
+        await driver.get('https://www.selenium.dev/selenium/web/dynamic.html');
+        await driver.findElement(By.id("adder")).click();
 
-            assert.equal(await added.getAttribute('class'), "redbox")
-        });
+        await driver.sleep(2000);
+        let added = await driver.findElement(By.id("box0"));
 
-        it('implicit', async function () {
-            await driver.manage().setTimeouts({ implicit: 2000 });
-            await driver.get('https://www.selenium.dev/selenium/web/dynamic.html');
-            await driver.findElement(By.id("adder")).click();
+        assert.equal(await added.getAttribute('class'), "redbox")
+    });
 
-            let added = await driver.findElement(By.id("box0"));
+    it('implicit', async function () {
+        await driver.manage().setTimeouts({ implicit: 2000 });
+        await driver.get('https://www.selenium.dev/selenium/web/dynamic.html');
+        await driver.findElement(By.id("adder")).click();
 
-            assert.equal(await added.getAttribute('class'), "redbox")
-        });
+        let added = await driver.findElement(By.id("box0"));
 
-        it('explicit', async function () {
-            await driver.get('https://www.selenium.dev/selenium/web/dynamic.html');
-            let revealed = await driver.findElement(By.id("revealed"));
-            await driver.findElement(By.id("reveal")).click();
-            await driver.wait(until.elementIsVisible(revealed), 2000);
-            await revealed.sendKeys("Displayed");
-            assert.equal(await revealed.getAttribute("value"), "Displayed")
-        })
+        assert.equal(await added.getAttribute('class'), "redbox")
     });
-}, { browsers: [Browser.CHROME] });
\ No newline at end of file
+
+    it('explicit', async function () {
+        await driver.get('https://www.selenium.dev/selenium/web/dynamic.html');
+        let revealed = await driver.findElement(By.id("revealed"));
+        await driver.findElement(By.id("reveal")).click();
+        await driver.wait(until.elementIsVisible(revealed), 2000);
+        await revealed.sendKeys("Displayed");
+        assert.equal(await revealed.getAttribute("value"), "Displayed")
+    })
+});
\ No newline at end of file
diff --git a/examples/kotlin/pom.xml b/examples/kotlin/pom.xml
index 3a3dbf1060df..ad818be75cbc 100644
--- a/examples/kotlin/pom.xml
+++ b/examples/kotlin/pom.xml
@@ -9,18 +9,17 @@
     <version>1.0.0</version>
 
     <properties>
-        <kotlin.version>1.7.10</kotlin.version>
+        <kotlin.version>2.2.10</kotlin.version>
 
-        <slf4j.version>1.7.36</slf4j.version>
-        <logback.version>1.2.11</logback.version>
+        <slf4j.version>2.0.17</slf4j.version>
+        <logback.version>1.5.18</logback.version>
 
-        <junit5.version>5.9.0</junit5.version>
-        <wdm.version>5.2.3</wdm.version>
+        <junit5.version>5.13.4</junit5.version>
 
-        <maven-surefire-plugin.version>3.0.0-M7</maven-surefire-plugin.version>
+        <maven-surefire-plugin.version>3.5.3</maven-surefire-plugin.version>
 
-        <java.version>1.8</java.version>
-        <selenium.version>4.15.0</selenium.version>
+        <java.version>11</java.version>
+        <selenium.version>4.35.0</selenium.version>
 
         <maven.compiler.target>${java.version}</maven.compiler.target>
         <maven.compiler.source>${java.version}</maven.compiler.source>
diff --git a/examples/kotlin/src/test/kotlin/dev/selenium/BaseTest.kt b/examples/kotlin/src/test/kotlin/dev/selenium/BaseTest.kt
index dfe1bcef70a5..feea0654aade 100644
--- a/examples/kotlin/src/test/kotlin/dev/selenium/BaseTest.kt
+++ b/examples/kotlin/src/test/kotlin/dev/selenium/BaseTest.kt
@@ -1,7 +1,6 @@
 package dev.selenium;
 
 import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.chrome.ChromeDriver;
diff --git a/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/ActionsTest.kt b/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/ActionsTest.kt
index 4ba3d47e178b..8ac7972e5af0 100644
--- a/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/ActionsTest.kt
+++ b/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/ActionsTest.kt
@@ -5,7 +5,6 @@ import org.junit.jupiter.api.Assertions
 import org.junit.jupiter.api.Test
 import org.openqa.selenium.By
 import org.openqa.selenium.Keys
-import org.openqa.selenium.WebElement
 import org.openqa.selenium.interactions.Actions
 import org.openqa.selenium.remote.RemoteWebDriver
 
@@ -47,7 +46,7 @@ class ActionsTest : BaseTest() {
         (driver as RemoteWebDriver).resetInputState()
 
         actions.sendKeys("a").perform()
-        Assertions.assertEquals("A", clickable.getAttribute("value").get(0).toString())
-        Assertions.assertEquals("a", clickable.getAttribute("value").get(1).toString())
+        Assertions.assertEquals("A", clickable.getAttribute("value")!!.get(0).toString())
+        Assertions.assertEquals("a", clickable.getAttribute("value")!!.get(1).toString())
     }
 }
diff --git a/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt b/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt
index ebc0c5046d77..519e29215141 100644
--- a/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt
+++ b/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt
@@ -7,7 +7,6 @@ import org.openqa.selenium.By
 import org.openqa.selenium.HasCapabilities
 import org.openqa.selenium.Keys
 import org.openqa.selenium.Platform
-import org.openqa.selenium.WebElement
 import org.openqa.selenium.interactions.Actions
 
 class KeysTest : BaseTest() {
diff --git a/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt b/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt
index 8281943430d8..36c929335712 100644
--- a/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt
+++ b/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt
@@ -4,8 +4,6 @@ import dev.selenium.BaseTest
 import org.junit.jupiter.api.Assertions
 import org.junit.jupiter.api.Test
 import org.openqa.selenium.By
-import org.openqa.selenium.Rectangle
-import org.openqa.selenium.WebElement
 import org.openqa.selenium.interactions.Actions
 import org.openqa.selenium.interactions.PointerInput
 import org.openqa.selenium.interactions.Sequence
@@ -37,7 +35,7 @@ class MouseTest : BaseTest() {
                 .click(clickable)
                 .perform()
 
-        Assertions.assertTrue(driver.getCurrentUrl().contains("resultPage.html"))
+        Assertions.assertTrue(driver.getCurrentUrl()!!.contains("resultPage.html"))
     }
   
     @Test
diff --git a/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/PenTest.kt b/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/PenTest.kt
index 00278b62b3d5..4b537d19768d 100644
--- a/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/PenTest.kt
+++ b/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/PenTest.kt
@@ -4,7 +4,6 @@ import dev.selenium.BaseTest
 import org.junit.jupiter.api.Assertions
 import org.junit.jupiter.api.Test
 import org.openqa.selenium.By
-import org.openqa.selenium.Rectangle
 import org.openqa.selenium.WebElement
 import org.openqa.selenium.interactions.Actions
 import org.openqa.selenium.interactions.PointerInput
diff --git a/examples/kotlin/src/test/kotlin/dev/selenium/virtualauthenticator/VirtualAuthenticatorTest.kt b/examples/kotlin/src/test/kotlin/dev/selenium/virtualauthenticator/VirtualAuthenticatorTest.kt
index 91af23d0733e..f26e62c58e4c 100644
--- a/examples/kotlin/src/test/kotlin/dev/selenium/virtualauthenticator/VirtualAuthenticatorTest.kt
+++ b/examples/kotlin/src/test/kotlin/dev/selenium/virtualauthenticator/VirtualAuthenticatorTest.kt
@@ -4,6 +4,7 @@ import org.junit.jupiter.api.AfterEach
 import org.junit.jupiter.api.Assertions
 import org.junit.jupiter.api.BeforeEach
 import org.junit.jupiter.api.Test
+import org.junit.jupiter.api.Disabled
 import org.openqa.selenium.InvalidArgumentException
 import org.openqa.selenium.WebDriver
 import org.openqa.selenium.chrome.ChromeDriver
@@ -208,4 +209,4 @@ class VirtualAuthenticatorTest {
             )
         )
     }
-}
\ No newline at end of file
+}
diff --git a/examples/python/README.md b/examples/python/README.md
index 7b0abd2b0ba5..9650c07cbb5e 100644
--- a/examples/python/README.md
+++ b/examples/python/README.md
@@ -1,30 +1,61 @@
-# Running all tests from Selenium python example
+# Running tests from Selenium Python examples
 
-Follow these steps to run all test example from selenium python
-
-1. Clone this repository
+#### 1. Clone this repository
 
 ```
 git clone https://github.com/SeleniumHQ/seleniumhq.github.io.git
 ```
 
-2. Navigate to `python` directory
+#### 2. Navigate to `python` directory
 
 ```
 cd seleniumhq.github.io/examples/python
 ```
 
-3. Install dependencies using pip
+#### 3. Create a virtual environment
+
+- On Windows:
+
+```
+py -m venv venv
+venv\Scripts\activate
+```
+
+- On Linux/Mac:
+
+```
+python3 -m venv venv
+source venv/bin/activate
+```
+
+#### 4. Install dependencies:
 
 ```
 pip install -r requirements.txt
 ```
-> if you are on a different python version, for example python3.x you may have to replace `pip` with `pip3`
 
-4. Run all all tests
+> for help, see: https://packaging.python.org/en/latest/tutorials/installing-packages
+
+#### 5. Run tests
+
+- Run all tests with the default Python interpreter:
 
 ```
 pytest
 ```
 
-> Please keep some patience - If you are doing it for the first time, it will take a little while to verify and download the browser drivers
+- Run all tests with every installed/supported Python interpreter:
+
+```
+tox
+```
+
+> Please have some patience - If you are doing it for the first time, it will take a little while to download the browser drivers
+
+- Run a specific example:
+
+```
+pytest path/to/test_script.py
+```
+
+> Make sure to replace `path/to/test_script.py` with the path and name of the example you want to run
diff --git a/examples/python/requirements.txt b/examples/python/requirements.txt
index f17a9587cecc..5c86f3ef5814 100644
--- a/examples/python/requirements.txt
+++ b/examples/python/requirements.txt
@@ -1,5 +1,9 @@
-selenium==4.15.2
-pytest
-trio
-pytest-trio
-flake8
+selenium==4.35.0
+pytest==8.4.1
+trio==0.30.0
+pytest-trio==0.8.0
+pytest-rerunfailures==15.1
+flake8==7.3.0
+requests==2.32.4
+tox==4.28.4
+pytest-xdist==3.8.0
diff --git a/examples/python/tests/actions_api/test_mouse.py b/examples/python/tests/actions_api/test_mouse.py
index cc114389ccf4..9df04fd599f7 100644
--- a/examples/python/tests/actions_api/test_mouse.py
+++ b/examples/python/tests/actions_api/test_mouse.py
@@ -1,17 +1,19 @@
+import pytest
 from time import sleep
-
 from selenium.webdriver import ActionChains
 from selenium.webdriver.common.actions.action_builder import ActionBuilder
 from selenium.webdriver.common.actions.mouse_button import MouseButton
 from selenium.webdriver.common.by import By
+from selenium.webdriver.support.ui import WebDriverWait
+from selenium.webdriver.support import expected_conditions as EC
 
 
 def test_click_and_hold(driver):
     driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
 
     clickable = driver.find_element(By.ID, "clickable")
-    ActionChains(driver)\
-        .click_and_hold(clickable)\
+    ActionChains(driver) \
+        .click_and_hold(clickable) \
         .perform()
 
     sleep(0.5)
@@ -22,8 +24,8 @@ def test_click_and_release(driver):
     driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
 
     clickable = driver.find_element(By.ID, "click")
-    ActionChains(driver)\
-        .click(clickable)\
+    ActionChains(driver) \
+        .click(clickable) \
         .perform()
 
     assert "resultPage.html" in driver.current_url
@@ -33,8 +35,8 @@ def test_right_click(driver):
     driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
 
     clickable = driver.find_element(By.ID, "clickable")
-    ActionChains(driver)\
-        .context_click(clickable)\
+    ActionChains(driver) \
+        .context_click(clickable) \
         .perform()
 
     sleep(0.5)
@@ -72,8 +74,8 @@ def test_double_click(driver):
     driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
 
     clickable = driver.find_element(By.ID, "clickable")
-    ActionChains(driver)\
-        .double_click(clickable)\
+    ActionChains(driver) \
+        .double_click(clickable) \
         .perform()
 
     assert driver.find_element(By.ID, "click-status").text == "double-clicked"
@@ -83,8 +85,8 @@ def test_hover(driver):
     driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
 
     hoverable = driver.find_element(By.ID, "hover")
-    ActionChains(driver)\
-        .move_to_element(hoverable)\
+    ActionChains(driver) \
+        .move_to_element(hoverable) \
         .perform()
 
     assert driver.find_element(By.ID, "move-status").text == "hovered"
@@ -94,8 +96,8 @@ def test_move_by_offset_from_element(driver):
     driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
 
     mouse_tracker = driver.find_element(By.ID, "mouse-tracker")
-    ActionChains(driver)\
-        .move_to_element_with_offset(mouse_tracker, 8, 0)\
+    ActionChains(driver) \
+        .move_to_element_with_offset(mouse_tracker, 8, 0) \
         .perform()
 
     coordinates = driver.find_element(By.ID, "relative-location").text.split(", ")
@@ -104,7 +106,7 @@ def test_move_by_offset_from_element(driver):
 
 def test_move_by_offset_from_viewport_origin_ab(driver):
     driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
-
+    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "absolute-location")))
     action = ActionBuilder(driver)
     action.pointer_action.move_to_location(8, 0)
     action.perform()
@@ -121,8 +123,8 @@ def test_move_by_offset_from_current_pointer_ab(driver):
     action.pointer_action.move_to_location(6, 3)
     action.perform()
 
-    ActionChains(driver)\
-        .move_by_offset( 13, 15)\
+    ActionChains(driver) \
+        .move_by_offset(13, 15) \
         .perform()
 
     coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
@@ -136,8 +138,8 @@ def test_drag_and_drop_onto_element(driver):
 
     draggable = driver.find_element(By.ID, "draggable")
     droppable = driver.find_element(By.ID, "droppable")
-    ActionChains(driver)\
-        .drag_and_drop(draggable, droppable)\
+    ActionChains(driver) \
+        .drag_and_drop(draggable, droppable) \
         .perform()
 
     assert driver.find_element(By.ID, "drop-status").text == "dropped"
@@ -149,15 +151,8 @@ def test_drag_and_drop_by_offset(driver):
     draggable = driver.find_element(By.ID, "draggable")
     start = draggable.location
     finish = driver.find_element(By.ID, "droppable").location
-    ActionChains(driver)\
-        .drag_and_drop_by_offset(draggable, finish['x'] - start['x'], finish['y'] - start['y'])\
+    ActionChains(driver) \
+        .drag_and_drop_by_offset(draggable, finish['x'] - start['x'], finish['y'] - start['y']) \
         .perform()
 
     assert driver.find_element(By.ID, "drop-status").text == "dropped"
-
-
-
-
-
-
-
diff --git a/examples/python/tests/bidi/cdp/test_cdp.py b/examples/python/tests/bidi/cdp/test_cdp.py
new file mode 100644
index 000000000000..97664812f8fd
--- /dev/null
+++ b/examples/python/tests/bidi/cdp/test_cdp.py
@@ -0,0 +1,12 @@
+def test_set_cookie(driver):
+    cookie = {'name': 'cheese',
+              'value': 'gouda',
+              'domain': 'www.selenium.dev',
+              'secure': True}
+
+    driver.execute_cdp_cmd('Network.setCookie', cookie)
+
+    driver.get('https://www.selenium.dev')
+    cheese = driver.get_cookie(cookie['name'])
+
+    assert cheese['value'] == 'gouda'
diff --git a/examples/python/tests/bidirectional/chrome_devtools/test_bidi_api.py b/examples/python/tests/bidi/cdp/test_logs.py
similarity index 58%
rename from examples/python/tests/bidirectional/chrome_devtools/test_bidi_api.py
rename to examples/python/tests/bidi/cdp/test_logs.py
index b7e7a89b728a..573ead1e578a 100644
--- a/examples/python/tests/bidirectional/chrome_devtools/test_bidi_api.py
+++ b/examples/python/tests/bidi/cdp/test_logs.py
@@ -4,26 +4,12 @@
 from selenium.webdriver.common.log import Log
 
 
-@pytest.mark.trio
-async def test_mutation(driver):
-    async with driver.bidi_connection() as session:
-        log = Log(driver, session)
-
-        async with log.mutation_events() as event:
-            driver.get('https://www.selenium.dev/selenium/web/dynamic.html')
-            driver.find_element(By.ID, "reveal").click()
-
-    assert event["element"] == driver.find_element(By.ID, "revealed")
-
-
 @pytest.mark.trio
 async def test_console_log(driver):
     driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
 
     async with driver.bidi_connection() as session:
-        log = Log(driver, session)
-
-        async with log.add_listener(Console.ALL) as messages:
+        async with Log(driver, session).add_listener(Console.ALL) as messages:
             driver.find_element(by=By.ID, value='consoleLog').click()
 
         assert messages["message"] == "Hello, world!"
@@ -34,9 +20,7 @@ async def test_js_error(driver):
     driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
 
     async with driver.bidi_connection() as session:
-        log = Log(driver, session)
-
-        async with log.add_js_error_listener() as messages:
+        async with Log(driver, session).add_js_error_listener() as messages:
             driver.find_element(by=By.ID, value='jsException').click()
 
         assert "Error: Not working" in messages.exception_details.exception.description
diff --git a/examples/python/tests/bidirectional/chrome_devtools/test_cdp_api.py b/examples/python/tests/bidi/cdp/test_network.py
similarity index 96%
rename from examples/python/tests/bidirectional/chrome_devtools/test_cdp_api.py
rename to examples/python/tests/bidi/cdp/test_network.py
index ff8a639b78d1..7cddde13be21 100644
--- a/examples/python/tests/bidirectional/chrome_devtools/test_cdp_api.py
+++ b/examples/python/tests/bidi/cdp/test_network.py
@@ -2,26 +2,22 @@
 
 import pytest
 from selenium.webdriver.common.by import By
-from selenium.webdriver.common.devtools.v118.network import Headers
+from selenium.webdriver.common.devtools.v137.network import Headers
 
 
 @pytest.mark.trio
-async def test_set_cookie(driver):
+async def test_basic_auth(driver):
     async with driver.bidi_connection() as connection:
-        execution = connection.devtools.network.set_cookie(
-            name="cheese",
-            value="gouda",
-            domain="www.selenium.dev",
-            secure=True
-        )
-
-        await connection.session.execute(execution)
+        await connection.session.execute(connection.devtools.network.enable())
 
-    driver.get("https://www.selenium.dev")
-    cheese = driver.get_cookie("cheese")
+        credentials = base64.b64encode("admin:admin".encode()).decode()
+        auth = {'authorization': 'Basic ' + credentials}
+        await connection.session.execute(connection.devtools.network.set_extra_http_headers(Headers(auth)))
 
-    assert cheese["value"] == "gouda"
+        driver.get('https://the-internet.herokuapp.com/basic_auth')
 
+    success = driver.find_element(by=By.TAG_NAME, value='p')
+    assert success.text == 'Congratulations! You must have the proper credentials.'
 
 @pytest.mark.trio
 async def test_performance(driver):
@@ -29,7 +25,6 @@ async def test_performance(driver):
 
     async with driver.bidi_connection() as connection:
         await connection.session.execute(connection.devtools.performance.enable())
-
         metric_list = await connection.session.execute(connection.devtools.performance.get_metrics())
 
     metrics = {metric.name: metric.value for metric in metric_list}
@@ -37,18 +32,18 @@ async def test_performance(driver):
     assert metrics["DevToolsCommandDuration"] > 0
     assert metrics["Frames"] == 12
 
-
 @pytest.mark.trio
-async def test_basic_auth(driver):
+async def test_set_cookie(driver):
     async with driver.bidi_connection() as connection:
-        await connection.session.execute(connection.devtools.network.enable())
-
-        credentials = base64.b64encode("admin:admin".encode()).decode()
-        auth = {'authorization': 'Basic ' + credentials}
-
-        await connection.session.execute(connection.devtools.network.set_extra_http_headers(Headers(auth)))
+        execution = connection.devtools.network.set_cookie(
+            name="cheese",
+            value="gouda",
+            domain="www.selenium.dev",
+            secure=True
+        )
+        await connection.session.execute(execution)
 
-        driver.get('https://the-internet.herokuapp.com/basic_auth')
+    driver.get("https://www.selenium.dev")
+    cheese = driver.get_cookie("cheese")
 
-    success = driver.find_element(by=By.TAG_NAME, value='p')
-    assert success.text == 'Congratulations! You must have the proper credentials.'
+    assert cheese["value"] == "gouda"
diff --git a/examples/python/tests/bidi/cdp/test_script.py b/examples/python/tests/bidi/cdp/test_script.py
new file mode 100644
index 000000000000..9c837c75e227
--- /dev/null
+++ b/examples/python/tests/bidi/cdp/test_script.py
@@ -0,0 +1,16 @@
+import pytest
+import trio
+from selenium.webdriver.common.by import By
+from selenium.webdriver.common.log import Log
+from selenium.webdriver.support.ui import WebDriverWait
+from selenium.webdriver.support import expected_conditions as EC
+
+@pytest.mark.trio
+async def test_mutation(driver):
+    async with driver.bidi_connection() as session:
+        async with Log(driver, session).mutation_events() as event:
+            await trio.to_thread.run_sync(lambda: driver.get('https://www.selenium.dev/selenium/web/dynamic.html'))
+            await trio.to_thread.run_sync(lambda: WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "reveal"))))
+            await trio.to_thread.run_sync(lambda: driver.find_element(By.ID, "reveal").click())
+
+    assert event["element"] == driver.find_element(By.ID, "revealed")
diff --git a/examples/python/tests/bidi/test_bidi_logging.py b/examples/python/tests/bidi/test_bidi_logging.py
new file mode 100644
index 000000000000..c2269ba28379
--- /dev/null
+++ b/examples/python/tests/bidi/test_bidi_logging.py
@@ -0,0 +1,51 @@
+import pytest
+from selenium.webdriver.common.by import By
+from selenium.webdriver.support.wait import WebDriverWait
+
+
+@pytest.mark.driver_type("bidi")
+def test_add_console_log_handler(driver):
+    driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
+    log_entries = []
+
+    driver.script.add_console_message_handler(log_entries.append)
+
+    driver.find_element(By.ID, "consoleLog").click()
+    WebDriverWait(driver, 5).until(lambda _: log_entries)
+    assert log_entries[0].text == "Hello, world!"
+
+
+@pytest.mark.driver_type("bidi")
+def test_remove_console_log_handler(driver):
+    driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
+    log_entries = []
+
+    id = driver.script.add_console_message_handler(log_entries.append)
+    driver.script.remove_console_message_handler(id)
+
+    driver.find_element(By.ID, "consoleLog").click()
+    assert len(log_entries) == 0
+
+
+@pytest.mark.driver_type("bidi")
+def test_add_js_exception_handler(driver):
+    driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
+    log_entries = []
+
+    driver.script.add_javascript_error_handler(log_entries.append)
+
+    driver.find_element(By.ID, "jsException").click()
+    WebDriverWait(driver, 5).until(lambda _: log_entries)
+    assert log_entries[0].text == "Error: Not working"
+
+
+@pytest.mark.driver_type("bidi")
+def test_remove_js_exception_handler(driver):
+    driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
+    log_entries = []
+
+    id = driver.script.add_javascript_error_handler(log_entries.append)
+    driver.script.remove_javascript_error_handler(id)
+
+    driver.find_element(By.ID, "consoleLog").click()
+    assert len(log_entries) == 0
diff --git a/examples/python/tests/bidirectional/chrome_devtools/test_cdp_endpoint.py b/examples/python/tests/bidirectional/chrome_devtools/test_cdp_endpoint.py
deleted file mode 100644
index 85f3b295d439..000000000000
--- a/examples/python/tests/bidirectional/chrome_devtools/test_cdp_endpoint.py
+++ /dev/null
@@ -1,44 +0,0 @@
-import base64
-
-from selenium.webdriver.common.by import By
-
-
-def test_set_cookie(driver):
-    cookie = {'name': 'cheese',
-              'value': 'gouda',
-              'domain': 'www.selenium.dev',
-              'secure': True}
-
-    driver.execute_cdp_cmd('Network.setCookie', cookie)
-
-    driver.get('https://www.selenium.dev')
-    cheese = driver.get_cookie(cookie['name'])
-
-    assert cheese['value'] == 'gouda'
-
-
-def test_performance(driver):
-    driver.get('https://www.selenium.dev/selenium/web/frameset.html')
-
-    driver.execute_cdp_cmd('Performance.enable', {})
-
-    metric_list = driver.execute_cdp_cmd('Performance.getMetrics', {})["metrics"]
-
-    metrics = {metric["name"]: metric["value"] for metric in metric_list}
-
-    assert metrics["DevToolsCommandDuration"] > 0
-    assert metrics["Frames"] == 12
-
-
-def test_basic_auth(driver):
-    driver.execute_cdp_cmd("Network.enable", {})
-
-    credentials = base64.b64encode("admin:admin".encode()).decode()
-    headers = {'headers': {'authorization': 'Basic ' + credentials}}
-
-    driver.execute_cdp_cmd('Network.setExtraHTTPHeaders', headers)
-
-    driver.get('https://the-internet.herokuapp.com/basic_auth')
-
-    success = driver.find_element(by=By.TAG_NAME, value='p')
-    assert success.text == 'Congratulations! You must have the proper credentials.'
diff --git a/examples/python/tests/bidirectional/webdriver_bidi/test_browsing_context.py b/examples/python/tests/bidirectional/webdriver_bidi/test_browsing_context.py
deleted file mode 100644
index 53b695b6fc83..000000000000
--- a/examples/python/tests/bidirectional/webdriver_bidi/test_browsing_context.py
+++ /dev/null
@@ -1,2 +0,0 @@
-from selenium import webdriver
-
diff --git a/examples/python/tests/bidirectional/webdriver_bidi/test_log.py b/examples/python/tests/bidirectional/webdriver_bidi/test_log.py
deleted file mode 100644
index 53b695b6fc83..000000000000
--- a/examples/python/tests/bidirectional/webdriver_bidi/test_log.py
+++ /dev/null
@@ -1,2 +0,0 @@
-from selenium import webdriver
-
diff --git a/examples/python/tests/browsers/test_chrome.py b/examples/python/tests/browsers/test_chrome.py
index 5bf81e3fca26..05ed61e44d3d 100644
--- a/examples/python/tests/browsers/test_chrome.py
+++ b/examples/python/tests/browsers/test_chrome.py
@@ -1,19 +1,19 @@
 import os
 import re
 import subprocess
-
+import pytest
 from selenium import webdriver
-
+from selenium.webdriver.common.by import By
 
 def test_basic_options():
-    options = webdriver.ChromeOptions()
+    options = get_default_chrome_options()
     driver = webdriver.Chrome(options=options)
 
     driver.quit()
 
 
 def test_args():
-    options = webdriver.ChromeOptions()
+    options = get_default_chrome_options()
 
     options.add_argument("--start-maximized")
 
@@ -24,7 +24,7 @@ def test_args():
 
 
 def test_set_browser_location(chrome_bin):
-    options = webdriver.ChromeOptions()
+    options = get_default_chrome_options()
 
     options.binary_location = chrome_bin
 
@@ -34,7 +34,7 @@ def test_set_browser_location(chrome_bin):
 
 
 def test_add_extension():
-    options = webdriver.ChromeOptions()
+    options = get_default_chrome_options()
     extension_file_path = os.path.abspath("tests/extensions/webextensions-selenium-example.crx")
 
     options.add_extension(extension_file_path)
@@ -46,7 +46,7 @@ def test_add_extension():
 
 
 def test_keep_browser_open():
-    options = webdriver.ChromeOptions()
+    options = get_default_chrome_options()
 
     options.add_experimental_option("detach", True)
 
@@ -57,7 +57,7 @@ def test_keep_browser_open():
 
 
 def test_exclude_switches():
-    options = webdriver.ChromeOptions()
+    options = get_default_chrome_options()
 
     options.add_experimental_option('excludeSwitches', ['disable-popup-blocking'])
 
@@ -121,3 +121,75 @@ def test_build_checks(capfd):
     assert expected in err
 
     driver.quit()
+
+
+def test_set_network_conditions():
+    driver = webdriver.Chrome()
+
+    network_conditions = {
+        "offline": False,
+        "latency": 20,  # 20 ms of latency
+        "download_throughput": 2000 * 1024 / 8,  # 2000 kbps
+        "upload_throughput": 2000 * 1024 / 8,    # 2000 kbps
+    }
+    driver.set_network_conditions(**network_conditions)
+
+    driver.get("https://www.selenium.dev")
+
+    # check whether the network conditions are set
+    assert driver.get_network_conditions() == network_conditions
+
+    driver.quit()
+
+
+def test_set_permissions():
+    driver = webdriver.Chrome()
+    driver.get('https://www.selenium.dev')
+
+    driver.set_permissions('camera', 'denied')
+
+    assert get_permission_state(driver, 'camera') == 'denied'
+    driver.quit()
+
+
+def get_permission_state(driver, name):
+    """Helper function to query the permission state."""
+    script = """
+    const callback = arguments[arguments.length - 1];
+    navigator.permissions.query({name: arguments[0]}).then(permissionStatus => {
+        callback(permissionStatus.state);
+    });
+    """
+    return driver.execute_async_script(script, name)
+
+
+def test_cast_features():
+    driver = webdriver.Chrome()
+
+    try:
+        sinks = driver.get_sinks()
+        if sinks:
+            sink_name = sinks[0]['name']
+            driver.start_tab_mirroring(sink_name)
+            driver.stop_casting(sink_name)
+        else:
+            pytest.skip("No available Cast sinks to test with.")
+    finally:
+        driver.quit()
+
+
+def test_get_browser_logs():
+    driver = webdriver.Chrome()
+    driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html")
+    driver.find_element(By.ID, "consoleError").click()
+
+    logs = driver.get_log("browser")
+
+    # Assert that at least one log contains the expected message
+    assert any("I am console error" in log['message'] for log in logs), "No matching log message found."
+    driver.quit()
+
+def get_default_chrome_options():
+    options = webdriver.ChromeOptions()
+    options.add_argument("--no-sandbox")
+    return options
diff --git a/examples/python/tests/browsers/test_edge.py b/examples/python/tests/browsers/test_edge.py
index ac0224ebd66c..457742ca4163 100644
--- a/examples/python/tests/browsers/test_edge.py
+++ b/examples/python/tests/browsers/test_edge.py
@@ -1,19 +1,19 @@
 import os
 import re
 import subprocess
-
+import pytest
 from selenium import webdriver
-
+from selenium.webdriver.common.by import By
 
 def test_basic_options():
-    options = webdriver.EdgeOptions()
+    options = get_default_edge_options()
     driver = webdriver.Edge(options=options)
 
     driver.quit()
 
 
 def test_args():
-    options = webdriver.EdgeOptions()
+    options = get_default_edge_options()
 
     options.add_argument("--start-maximized")
 
@@ -24,7 +24,7 @@ def test_args():
 
 
 def test_set_browser_location(edge_bin):
-    options = webdriver.EdgeOptions()
+    options = get_default_edge_options()
 
     options.binary_location = edge_bin
 
@@ -34,7 +34,7 @@ def test_set_browser_location(edge_bin):
 
 
 def test_add_extension():
-    options = webdriver.EdgeOptions()
+    options = get_default_edge_options()
     extension_file_path = os.path.abspath("tests/extensions/webextensions-selenium-example.crx")
 
     options.add_extension(extension_file_path)
@@ -46,7 +46,7 @@ def test_add_extension():
 
 
 def test_keep_browser_open():
-    options = webdriver.EdgeOptions()
+    options = get_default_edge_options()
 
     options.add_experimental_option("detach", True)
 
@@ -57,7 +57,7 @@ def test_keep_browser_open():
 
 
 def test_exclude_switches():
-    options = webdriver.EdgeOptions()
+    options = get_default_edge_options()
 
     options.add_experimental_option('excludeSwitches', ['disable-popup-blocking'])
 
@@ -122,3 +122,74 @@ def test_build_checks(log_path):
 
     driver.quit()
 
+
+def test_set_network_conditions():
+    driver = webdriver.Edge()
+
+    network_conditions = {
+        "offline": False,
+        "latency": 20,  # 20 ms of latency
+        "download_throughput": 2000 * 1024 / 8,  # 2000 kbps
+        "upload_throughput": 2000 * 1024 / 8,    # 2000 kbps
+    }
+    driver.set_network_conditions(**network_conditions)
+
+    driver.get("https://www.selenium.dev")
+
+    # check whether the network conditions are set
+    assert driver.get_network_conditions() == network_conditions
+
+    driver.quit()
+
+
+def test_set_permissions():
+    driver = webdriver.Edge()
+    driver.get('https://www.selenium.dev')
+
+    driver.set_permissions('camera', 'denied')
+
+    assert get_permission_state(driver, 'camera') == 'denied'
+    driver.quit()
+
+
+def get_permission_state(driver, name):
+    """Helper function to query the permission state."""
+    script = """
+    const callback = arguments[arguments.length - 1];
+    navigator.permissions.query({name: arguments[0]}).then(permissionStatus => {
+        callback(permissionStatus.state);
+    });
+    """
+    return driver.execute_async_script(script, name)
+
+
+def test_cast_features():
+    driver = webdriver.Edge()
+
+    try:
+        sinks = driver.get_sinks()
+        if sinks:
+            sink_name = sinks[0]['name']
+            driver.start_tab_mirroring(sink_name)
+            driver.stop_casting(sink_name)
+        else:
+            pytest.skip("No available Cast sinks to test with.")
+    finally:
+        driver.quit()
+
+
+def test_get_browser_logs():
+    driver = webdriver.Edge()
+    driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html")
+    driver.find_element(By.ID, "consoleError").click()
+
+    logs = driver.get_log("browser")
+
+    # Assert that at least one log contains the expected message
+    assert any("I am console error" in log['message'] for log in logs), "No matching log message found."
+    driver.quit()
+
+def get_default_edge_options():
+    options = webdriver.EdgeOptions()
+    options.add_argument("--no-sandbox")
+    return options
diff --git a/examples/python/tests/browsers/test_firefox.py b/examples/python/tests/browsers/test_firefox.py
index 925bd5e457fb..20ff9beecec9 100644
--- a/examples/python/tests/browsers/test_firefox.py
+++ b/examples/python/tests/browsers/test_firefox.py
@@ -88,10 +88,10 @@ def test_profile_location(temp_dir):
     driver.quit()
 
 
-def test_install_addon(firefox_driver, addon_path):
+def test_install_addon(firefox_driver, addon_path_xpi):
     driver = firefox_driver
 
-    driver.install_addon(addon_path)
+    driver.install_addon(addon_path_xpi)
 
     driver.get("https://www.selenium.dev/selenium/web/blank.html")
     injected = driver.find_element(webdriver.common.by.By.ID, "webextensions-selenium-example")
@@ -99,22 +99,72 @@ def test_install_addon(firefox_driver, addon_path):
     assert injected.text == "Content injected by webextensions-selenium-example"
 
 
-def test_uninstall_addon(firefox_driver, addon_path):
+def test_uninstall_addon(firefox_driver, addon_path_xpi):
     driver = firefox_driver
 
-    id = driver.install_addon(addon_path)
+    id = driver.install_addon(addon_path_xpi)
     driver.uninstall_addon(id)
 
     driver.get("https://www.selenium.dev/selenium/web/blank.html")
     assert len(driver.find_elements(webdriver.common.by.By.ID, "webextensions-selenium-example")) == 0
 
 
-def test_install_unsigned_addon_directory(firefox_driver, addon_path):
+def test_install_unsigned_addon_directory(firefox_driver, addon_path_dir):
     driver = firefox_driver
 
-    driver.install_addon(addon_path, temporary=True)
+    driver.install_addon(addon_path_dir, temporary=True)
 
     driver.get("https://www.selenium.dev/selenium/web/blank.html")
     injected = driver.find_element(webdriver.common.by.By.ID, "webextensions-selenium-example")
 
     assert injected.text == "Content injected by webextensions-selenium-example"
+
+
+def test_install_unsigned_addon_directory_slash(firefox_driver, addon_path_dir_slash):
+    driver = firefox_driver
+
+    driver.install_addon(addon_path_dir_slash, temporary=True)
+
+    driver.get("https://www.selenium.dev/selenium/web/blank.html")
+    injected = driver.find_element(webdriver.common.by.By.ID, "webextensions-selenium-example")
+
+    assert injected.text == "Content injected by webextensions-selenium-example"
+
+
+def test_full_page_screenshot(firefox_driver):
+    driver = firefox_driver
+
+    driver.get("https://www.selenium.dev")
+
+    driver.save_full_page_screenshot("full_page_screenshot.png")
+
+    assert os.path.exists("full_page_screenshot.png")
+
+    driver.quit()
+
+
+def test_set_context():
+    options = webdriver.FirefoxOptions()
+    options.add_argument("-remote-allow-system-access")
+    driver = webdriver.Firefox(options=options)
+
+    with driver.context(driver.CONTEXT_CHROME):
+        driver.execute_script("console.log('Inside Chrome context');")
+
+    # Check if the context is back to content
+    assert driver.execute("GET_CONTEXT")["value"] == "content"
+    driver.quit()
+
+
+def test_firefox_profile():
+    from selenium.webdriver.firefox.options import Options
+    from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
+
+    options = Options()
+    firefox_profile = FirefoxProfile()
+    firefox_profile.set_preference("javascript.enabled", False)
+    options.profile = firefox_profile
+
+    driver = webdriver.Firefox(options=options)
+
+    driver.quit()
diff --git a/examples/python/tests/browsers/test_internet_explorer.py b/examples/python/tests/browsers/test_internet_explorer.py
index c3efd343cdf6..617222e4ab30 100644
--- a/examples/python/tests/browsers/test_internet_explorer.py
+++ b/examples/python/tests/browsers/test_internet_explorer.py
@@ -23,14 +23,82 @@ def test_basic_options_win11():
 
     driver.quit()
 
+@pytest.mark.skipif(sys.platform != "win32", reason="requires Windows")
+def test_file_upload_timeout():
+    options = webdriver.IeOptions()
+    options.file_upload_timeout = 2000
+
+    driver = webdriver.Ie(options=options)
+
+    driver.quit()
+
+
+@pytest.mark.skipif(sys.platform != "win32", reason="requires Windows")
+def test_ensure_clean_session():
+    options = webdriver.IeOptions()
+    options.ensure_clean_session = True
+
+    driver = webdriver.Ie(options=options)
+
+    driver.quit()
+
+
+@pytest.mark.skipif(sys.platform != "win32", reason="requires Windows")
+def test_ignore_zoom_level():
+    options = webdriver.IeOptions()
+    options.ignore_zoom_level = True
+
+    driver = webdriver.Ie(options=options)
+
+    driver.quit()
+
+
+@pytest.mark.skipif(sys.platform != "win32", reason="requires Windows")
+def test_ignore_protected_mode_settings():
+    options = webdriver.IeOptions()
+    options.ignore_protected_mode_settings = True
+
+    driver = webdriver.Ie(options=options)
+
+    driver.quit()
+
+
+@pytest.mark.skipif(sys.platform != "win32", reason="requires Windows")
+def test_silent():
+    service = webdriver.IeService(service_args=["--silent"])
+    driver = webdriver.Ie(service=service)
+
+    driver.quit()
+
+
+@pytest.mark.skipif(sys.platform != "win32", reason="requires Windows")
+def test_cmd_options():
+    options = webdriver.IeOptions()
+    options.add_argument("-private")
+
+    driver = webdriver.Ie(options=options)
+
+    driver.quit()
+
+# Skipping this as it fails on Windows because the value of registry setting in 
+# HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\TabProcGrowth must be '0' 
+@pytest.mark.skip
+def test_force_create_process_api():
+    options = webdriver.IeOptions()
+    options.force_create_process_api = True
+
+    driver = webdriver.Ie(options=options)
+
+    driver.quit()
+
 
 @pytest.mark.skipif(sys.platform != "win32", reason="requires Windows")
 def test_log_to_file(log_path):
-    service = webdriver.IeService(log_output=log_path, log_level='INFO')
+    service = webdriver.IeService(log_output=log_path, log_level="INFO")
 
     driver = webdriver.Ie(service=service)
 
-    with open(log_path, 'r') as fp:
+    with open(log_path, "r") as fp:
         assert "Starting WebDriver server" in fp.readline()
 
     driver.quit()
@@ -50,19 +118,19 @@ def test_log_to_stdout(capfd):
 
 @pytest.mark.skipif(sys.platform != "win32", reason="requires Windows")
 def test_log_level(log_path):
-    service = webdriver.IeService(log_output=log_path, log_level='WARN')
+    service = webdriver.IeService(log_output=log_path, log_level="WARN")
 
     driver = webdriver.Ie(service=service)
 
-    with open(log_path, 'r') as fp:
-        assert 'Started InternetExplorerDriver server (32-bit)' in fp.readline()
+    with open(log_path, "r") as fp:
+        assert "Started InternetExplorerDriver server (32-bit)" in fp.readline()
 
     driver.quit()
 
 
 @pytest.mark.skipif(sys.platform != "win32", reason="requires Windows")
 def test_supporting_files(temp_dir):
-    service = webdriver.IeService(service_args=["–extract-path="+temp_dir])
+    service = webdriver.IeService(service_args=["–extract-path=" + temp_dir])
 
     driver = webdriver.Ie(service=service)
 
diff --git a/examples/python/tests/browsers/test_safari.py b/examples/python/tests/browsers/test_safari.py
index ba2677ef0daf..9ad01bcf30f1 100644
--- a/examples/python/tests/browsers/test_safari.py
+++ b/examples/python/tests/browsers/test_safari.py
@@ -14,7 +14,7 @@ def test_basic_options():
 
 @pytest.mark.skipif(sys.platform != "darwin", reason="requires Mac")
 def test_enable_logging():
-    service = webdriver.SafariService(service_args=["--diagnose"])
+    service = webdriver.SafariService(enable_logging=True)
 
     driver = webdriver.Safari(service=service)
 
diff --git a/examples/python/tests/conftest.py b/examples/python/tests/conftest.py
index 94b05f4ae67e..9ad90dc24a02 100644
--- a/examples/python/tests/conftest.py
+++ b/examples/python/tests/conftest.py
@@ -7,14 +7,32 @@
 from selenium.webdriver.common.utils import free_port
 from datetime import datetime
 from urllib.request import urlopen
+import requests
+from requests.auth import HTTPBasicAuth
 
 import pytest
 from selenium import webdriver
 
 
+def pytest_configure(config):
+    config.addinivalue_line(
+        "markers", "driver_type(type): marks tests to use driver type ('bidi', 'firefox', etc)"
+    )
+
+
 @pytest.fixture(scope='function')
-def driver():
-    driver = webdriver.Chrome()
+def driver(request):
+    marker = request.node.get_closest_marker("driver_type")
+    driver_type = marker.args[0] if marker else None
+
+    if driver_type == "bidi":
+        options = get_default_chrome_options()
+        options.enable_bidi = True
+        driver = webdriver.Chrome(options=options)
+    elif driver_type == "firefox":
+        driver = webdriver.Firefox()
+    else:
+        driver = webdriver.Chrome()
 
     yield driver
 
@@ -23,37 +41,34 @@ def driver():
 
 @pytest.fixture(scope='function')
 def chromedriver_bin():
-    service = webdriver.chrome.service.Service()
-    options = webdriver.ChromeOptions()
+    service = webdriver.ChromeService()
+    options = get_default_chrome_options()
     options.browser_version = 'stable'
-    yield webdriver.common.driver_finder.DriverFinder().get_path(service=service, options=options)
+    yield webdriver.common.driver_finder.DriverFinder(service=service, options=options).get_driver_path()
 
 
 @pytest.fixture(scope='function')
 def chrome_bin():
-    service = webdriver.chrome.service.Service()
-    options = webdriver.ChromeOptions()
+    service = webdriver.ChromeService()
+    options = get_default_chrome_options()
     options.browser_version = 'stable'
-    webdriver.common.driver_finder.DriverFinder().get_path(service=service, options=options)
-    yield options.binary_location
+    yield webdriver.common.driver_finder.DriverFinder(service=service, options=options).get_browser_path()
 
 
 @pytest.fixture(scope='function')
 def edge_bin():
-    service = webdriver.edge.service.Service()
-    options = webdriver.EdgeOptions()
+    service = webdriver.EdgeService()
+    options = get_default_edge_options()
     options.browser_version = 'stable'
-    webdriver.common.driver_finder.DriverFinder().get_path(service=service, options=options)
-    yield options.binary_location
+    yield webdriver.common.driver_finder.DriverFinder(service=service, options=options).get_browser_path()
 
 
 @pytest.fixture(scope='function')
 def firefox_bin():
-    service = webdriver.firefox.service.Service()
+    service = webdriver.FirefoxService()
     options = webdriver.FirefoxOptions()
     options.browser_version = 'stable'
-    webdriver.common.driver_finder.DriverFinder().get_path(service=service, options=options)
-    yield options.binary_location
+    yield webdriver.common.driver_finder.DriverFinder(service=service, options=options).get_browser_path()
 
 
 @pytest.fixture(scope='function')
@@ -72,6 +87,12 @@ def firefox_driver():
     driver.quit()
 
 
+@pytest.fixture(scope='function')
+def log():
+    logging.basicConfig(level=logging.WARN)
+    logging.getLogger('selenium').setLevel(logging.DEBUG)
+
+
 @pytest.fixture(scope='function')
 def log_path():
     suffix = datetime.now().strftime("%y%m%d_%H%M%S")
@@ -88,7 +109,7 @@ def log_path():
 
 
 @pytest.fixture(scope='function')
-def addon_path():
+def addon_path_xpi():
     if os.path.abspath("").endswith("tests"):
         path = os.path.abspath("extensions/webextensions-selenium-example.xpi")
     else:
@@ -97,6 +118,26 @@ def addon_path():
     yield path
 
 
+@pytest.fixture(scope='function')
+def addon_path_dir():
+    if os.path.abspath("").endswith("tests"):
+        path = os.path.abspath("extensions/webextensions-selenium-example")
+    else:
+        path = os.path.abspath("tests/extensions/webextensions-selenium-example")
+
+    yield path
+
+
+@pytest.fixture(scope='function')
+def addon_path_dir_slash():
+    if os.path.abspath("").endswith("tests"):
+        path = os.path.abspath("extensions/webextensions-selenium-example/")
+    else:
+        path = os.path.abspath("tests/extensions/webextensions-selenium-example/")
+
+    yield path
+
+
 @pytest.fixture(scope="function")
 def server_old(request):
     _host = "localhost"
@@ -107,7 +148,7 @@ def server_old(request):
                 os.path.abspath(__file__)
             )
         ),
-        "selenium-server-4.15.0.jar",
+        "selenium-server-4.35.0.jar",
     )
 
     def wait_for_server(url, timeout):
@@ -165,7 +206,7 @@ def server():
                 )
             )
         ),
-        "selenium-server-4.15.0.jar",
+        "selenium-server-4.35.0.jar",
     )
 
     args = [
@@ -183,7 +224,7 @@ def server():
 
     process = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 
-    def wait_for_server(url, timeout=20):
+    def wait_for_server(url, timeout=60):
         start = time.time()
         while time.time() - start < timeout:
             try:
@@ -203,3 +244,98 @@ def wait_for_server(url, timeout=20):
         process.wait(timeout=10)
     except subprocess.TimeoutExpired:
         process.kill()
+
+
+def _get_resource_path(file_name: str):
+    if os.path.abspath("").endswith("tests"):
+        path = os.path.abspath(f"resources/{file_name}")
+    else:
+        path = os.path.join(
+                os.path.dirname(
+                    os.path.dirname(
+                        os.path.abspath(__file__)
+                    )
+            ),
+            f"tests/resources/{file_name}",
+        )
+    return path
+
+
+@pytest.fixture(scope="function")
+def grid_server():
+    _host = "localhost"
+    _port = free_port()
+    _username = "admin"
+    _password = "myStrongPassword"
+    _path_cert = _get_resource_path("tls.crt")
+    _path_key = _get_resource_path("tls.key")
+    _path_jks = _get_resource_path("server.jks")
+    _truststore_pass = "seleniumkeystore"
+    _path = os.path.join(
+        os.path.dirname(
+            os.path.dirname(
+                os.path.dirname(
+                    os.path.abspath(__file__)
+                )
+            )
+        ),
+        "selenium-server-4.35.0.jar",
+    )
+
+    args = [
+        "java",
+        f"-Djavax.net.ssl.trustStore={_path_jks}",
+        f"-Djavax.net.ssl.trustStorePassword={_truststore_pass}",
+        "-Djdk.internal.httpclient.disableHostnameVerification=true",
+        "-jar",
+        _path,
+        "standalone",
+        "--port",
+        str(_port),
+        "--selenium-manager",
+        "true",
+        "--enable-managed-downloads",
+        "true",
+        "--username",
+        _username,
+        "--password",
+        _password,
+        "--https-certificate",
+        _path_cert,
+        "--https-private-key",
+        _path_key,
+    ]
+
+    process = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+
+    def wait_for_server(url, timeout=60):
+        start = time.time()
+        while time.time() - start < timeout:
+            try:
+                requests.get(url, verify=_path_cert, auth=HTTPBasicAuth(_username, _password))
+                return True
+            except OSError as e:
+                print(e)
+                time.sleep(0.2)
+        return False
+
+    if not wait_for_server(f"https://{_host}:{_port}/status"):
+        raise RuntimeError(f"Selenium server did not start within the allotted time.")
+
+    yield f"https://{_host}:{_port}"
+
+    process.terminate()
+    try:
+        process.wait(timeout=10)
+    except subprocess.TimeoutExpired:
+        process.kill()
+
+def get_default_chrome_options():
+    options = webdriver.ChromeOptions()
+    options.add_argument("--no-sandbox")
+    return options
+
+def get_default_edge_options():
+    options = webdriver.EdgeOptions()
+    options.add_argument("--no-sandbox")
+    return options
diff --git a/examples/python/tests/design_strategy/using_best_practice.py b/examples/python/tests/design_strategy/using_best_practice.py
new file mode 100644
index 000000000000..29063b8f6a90
--- /dev/null
+++ b/examples/python/tests/design_strategy/using_best_practice.py
@@ -0,0 +1,266 @@
+"""
+An example of `python + pytest + selenium` 
+which implemented "**Action Bot**, **Loadable Component** and **Page Object**".
+"""
+
+import pytest
+from selenium import webdriver
+from selenium.common import (
+    ElementNotInteractableException,
+    NoSuchElementException,
+    StaleElementReferenceException,
+)
+from selenium.webdriver import ActionChains
+from selenium.webdriver.common.by import By
+from selenium.webdriver.remote.webelement import WebElement
+from selenium.webdriver.support import expected_conditions as EC
+from selenium.webdriver.support.ui import WebDriverWait
+
+
+@pytest.fixture(scope="function")
+def chrome_driver():
+    with webdriver.Chrome() as driver:
+        driver.set_window_size(1024, 768)
+        driver.implicitly_wait(0.5)
+        yield driver
+
+
+class ActionBot:
+    def __init__(self, driver) -> None:
+        self.driver = driver
+        self.wait = WebDriverWait(
+            driver,
+            timeout=10,
+            poll_frequency=2,
+            ignored_exceptions=[
+                NoSuchElementException,
+                StaleElementReferenceException,
+                ElementNotInteractableException,
+            ],
+        )
+
+    def element(self, locator: tuple) -> WebElement:
+        self.wait.until(lambda driver: driver.find_element(*locator))
+        return self.driver.find_element(*locator)
+
+    def elements(self, locator: tuple) -> list[WebElement]:
+        return self.driver.find_elements(*locator)
+
+    def hover(self, locator: tuple) -> None:
+        element = self.element(locator)
+        ActionChains(self.driver).move_to_element(element).perform()
+
+    def click(self, locator: tuple) -> None:
+        element = self.element(locator)
+        element.click()
+
+    def type(self, locator: tuple, value: str) -> None:
+        element = self.element(locator)
+        element.clear()
+        element.send_keys(value)
+
+    def text(self, locator: tuple) -> str:
+        element = self.element(locator)
+        return element.text
+
+
+class LoadableComponent:
+    def load(self):
+        raise NotImplementedError("Subclasses must implement this method")
+
+    def is_loaded(self):
+        raise NotImplementedError("Subclasses must implement this method")
+
+    def get(self):
+        if not self.is_loaded():
+            self.load()
+        if not self.is_loaded():
+            raise Exception("Page not loaded properly.")
+        return self
+
+
+class TodoPage(LoadableComponent):
+    url = "https://todomvc.com/examples/react/dist/"
+
+    new_todo_by = (By.CSS_SELECTOR, "input.new-todo")
+    count_todo_left_by = (By.CSS_SELECTOR, "span.todo-count")
+    todo_items_by = (By.CSS_SELECTOR, "ul.todo-list>li")
+
+    view_all_by = (By.LINK_TEXT, "All")
+    view_active_by = (By.LINK_TEXT, "Active")
+    view_completed_by = (By.LINK_TEXT, "Completed")
+
+    toggle_all_by = (By.CSS_SELECTOR, "input.toggle-all")
+    clear_completed_by = (By.CSS_SELECTOR, "button.clear-completed")
+
+    @staticmethod
+    def build_todo_by(s: str) -> tuple:
+        p = f"//li[.//label[contains(text(), '{s}')]]"
+        return By.XPATH, p
+
+    @staticmethod
+    def build_todo_item_label_by(s: str) -> tuple:
+        p = f"//label[contains(text(), '{s}')]"
+        return By.XPATH, p
+
+    @staticmethod
+    def build_todo_item_toggle_by(s: str) -> tuple:
+        by, using = TodoPage.build_todo_item_label_by(s)
+        p = f"{using}/../input[@class='toggle']"
+        return by, p
+
+    @staticmethod
+    def build_todo_item_delete_by(s: str) -> tuple:
+        by, using = TodoPage.build_todo_item_label_by(s)
+        p = f"{using}/../button[@class='destroy']"
+        return by, p
+
+    def build_count_todo_left(self, count: int) -> str:
+        if count == 1:
+            return "1 item left!"
+        else:
+            return f"{count} items left!"
+
+    def __init__(self, driver):
+        self.driver = driver
+        self.bot = ActionBot(driver)
+
+    def load(self):
+        self.driver.get(self.url)
+
+    def is_loaded(self):
+        try:
+            WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(self.new_todo_by))
+            return True
+        except:
+            return False
+
+    # business domain below
+    def count_todo_items_left(self) -> str:
+        return self.bot.text(self.count_todo_left_by)
+
+    def todo_count(self) -> int:
+        return len(self.bot.elements(self.todo_items_by))
+
+    def new_todo(self, s: str):
+        self.bot.type(self.new_todo_by, s + "\n")
+
+    def toggle_todo(self, s: str):
+        self.bot.click(self.build_todo_item_toggle_by(s))
+
+    def hover_todo(self, s: str) -> None:
+        self.bot.hover(self.build_todo_by(s))
+
+    def delete_todo(self, s: str):
+        self.hover_todo(s)
+        self.bot.click(self.build_todo_item_delete_by(s))
+
+    def clear_completed_todo(self):
+        self.bot.click(self.clear_completed_by)
+
+    def toggle_all_todo(self):
+        self.bot.click(self.toggle_all_by)
+
+    def view_all_todo(self):
+        self.bot.click(self.view_all_by)
+
+    def view_active_todo(self):
+        self.bot.click(self.view_active_by)
+
+    def view_completed_todo(self):
+        self.bot.click(self.view_completed_by)
+
+
+@pytest.fixture
+def page(chrome_driver) -> TodoPage:
+    driver = chrome_driver
+    return TodoPage(driver).get()
+
+
+class TestTodoPage:
+    def test_new_todo(self, page: TodoPage):
+        assert page.todo_count() == 0
+        page.new_todo("aaa")
+        assert page.count_todo_items_left() == page.build_count_todo_left(1)
+
+    def test_todo_toggle(self, page: TodoPage):
+        s = "aaa"
+        page.new_todo(s)
+        assert page.count_todo_items_left() == page.build_count_todo_left(1)
+
+        page.toggle_todo(s)
+        assert page.count_todo_items_left() == page.build_count_todo_left(0)
+
+        page.toggle_todo(s)
+        assert page.count_todo_items_left() == page.build_count_todo_left(1)
+
+    def test_todo_delete(self, page: TodoPage):
+        s1 = "aaa"
+        s2 = "bbb"
+        page.new_todo(s1)
+        page.new_todo(s2)
+        assert page.count_todo_items_left() == page.build_count_todo_left(2)
+
+        page.delete_todo(s1)
+        assert page.count_todo_items_left() == page.build_count_todo_left(1)
+
+        page.delete_todo(s2)
+        assert page.todo_count() == 0
+
+    def test_new_100_todo(self, page: TodoPage):
+        for i in range(100):
+            s = f"ToDo{i}"
+            page.new_todo(s)
+        assert page.count_todo_items_left() == page.build_count_todo_left(100)
+
+    def test_toggle_all_todo(self, page: TodoPage):
+        for i in range(10):
+            s = f"ToDo{i}"
+            page.new_todo(s)
+        assert page.count_todo_items_left() == page.build_count_todo_left(10)
+        assert page.todo_count() == 10
+
+        page.toggle_all_todo()
+        assert page.count_todo_items_left() == page.build_count_todo_left(0)
+        assert page.todo_count() == 10
+
+        page.toggle_all_todo()
+        assert page.count_todo_items_left() == page.build_count_todo_left(10)
+        assert page.todo_count() == 10
+
+    def test_clear_completed_todo(self, page: TodoPage):
+        for i in range(10):
+            s = f"ToDo{i}"
+            page.new_todo(s)
+        assert page.count_todo_items_left() == page.build_count_todo_left(10)
+        assert page.todo_count() == 10
+
+        for i in range(5):
+            s = f"ToDo{i}"
+            page.toggle_todo(s)
+        assert page.count_todo_items_left() == page.build_count_todo_left(5)
+        assert page.todo_count() == 10
+
+        page.clear_completed_todo()
+        assert page.count_todo_items_left() == page.build_count_todo_left(5)
+        assert page.todo_count() == 5
+
+    def test_view_todo(self, page: TodoPage):
+        for i in range(10):
+            s = f"ToDo{i}"
+            page.new_todo(s)
+        for i in range(4):
+            s = f"ToDo{i}"
+            page.toggle_todo(s)
+
+        page.view_all_todo()
+        assert page.count_todo_items_left() == page.build_count_todo_left(6)
+        assert page.todo_count() == 10
+
+        page.view_active_todo()
+        assert page.count_todo_items_left() == page.build_count_todo_left(6)
+        assert page.todo_count() == 6
+
+        page.view_completed_todo()
+        assert page.count_todo_items_left() == page.build_count_todo_left(6)
+        assert page.todo_count() == 4
diff --git a/examples/python/tests/drivers/test_http_client.py b/examples/python/tests/drivers/test_http_client.py
index 53b695b6fc83..2a86dd725147 100644
--- a/examples/python/tests/drivers/test_http_client.py
+++ b/examples/python/tests/drivers/test_http_client.py
@@ -1,2 +1,52 @@
+import os
+import pytest
+import sys
+from urllib3.util import Retry, Timeout
 from selenium import webdriver
+from selenium.webdriver.common.proxy import Proxy
+from selenium.webdriver.common.proxy import ProxyType
+from selenium.webdriver.remote.client_config import ClientConfig
 
+
+@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
+def test_start_remote_with_client_config(grid_server):
+    proxy = Proxy({"proxyType": ProxyType.AUTODETECT})
+    retries = Retry(connect=2, read=2, redirect=2)
+    timeout = Timeout(connect=300, read=3600)
+    client_config = ClientConfig(remote_server_addr=grid_server,
+                                 proxy=proxy,
+                                 init_args_for_pool_manager={
+                                     "init_args_for_pool_manager": {"retries": retries, "timeout": timeout}},
+                                 ca_certs=_get_resource_path("tls.crt"),
+                                 username="admin", password="myStrongPassword")
+    options = get_default_chrome_options()
+    driver = webdriver.Remote(command_executor=grid_server, options=options, client_config=client_config)
+    driver.get("https://www.selenium.dev")
+    driver.quit()
+
+
+@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
+def test_start_remote_ignore_certs(grid_server):
+    proxy = Proxy({"proxyType": ProxyType.AUTODETECT})
+    client_config = ClientConfig(remote_server_addr=grid_server,
+                                 proxy=proxy,
+                                 timeout=3600,
+                                 ignore_certificates=True,
+                                 username="admin", password="myStrongPassword")
+    options = get_default_chrome_options()
+    driver = webdriver.Remote(command_executor=grid_server, options=options, client_config=client_config)
+    driver.get("https://www.selenium.dev")
+    driver.quit()
+
+
+def _get_resource_path(file_name: str):
+    if os.path.abspath("").endswith("tests"):
+        path = os.path.abspath(f"resources/{file_name}")
+    else:
+        path = os.path.abspath(f"tests/resources/{file_name}")
+    return path
+
+def get_default_chrome_options():
+    options = webdriver.ChromeOptions()
+    options.add_argument("--no-sandbox")
+    return options
diff --git a/examples/python/tests/drivers/test_options.py b/examples/python/tests/drivers/test_options.py
index 53b695b6fc83..5501fe6f17c4 100644
--- a/examples/python/tests/drivers/test_options.py
+++ b/examples/python/tests/drivers/test_options.py
@@ -1,2 +1,110 @@
 from selenium import webdriver
+from selenium.webdriver.common.proxy import Proxy
+from selenium.webdriver.common.proxy import ProxyType
 
+
+def test_page_load_strategy_normal():
+    options = get_default_chrome_options()
+    options.page_load_strategy = 'normal'
+    driver = webdriver.Chrome(options=options)
+    driver.get("https://www.selenium.dev/")
+    driver.quit()
+
+
+def test_page_load_strategy_eager():
+    options = get_default_chrome_options()
+    options.page_load_strategy = 'eager'
+    driver = webdriver.Chrome(options=options)
+    driver.get("https://www.selenium.dev/")
+    driver.quit()
+
+
+def test_page_load_strategy_none():
+    options = get_default_chrome_options()
+    options.page_load_strategy = 'none'
+    driver = webdriver.Chrome(options=options)
+    driver.get("https://www.selenium.dev/")
+    driver.quit()
+
+def test_timeouts_script():
+    options = get_default_chrome_options()
+    options.timeouts = { 'script': 5000 }
+    driver = webdriver.Chrome(options=options)
+    driver.get("https://www.selenium.dev/")
+    driver.quit()
+
+def test_timeouts_page_load():
+    options = get_default_chrome_options()
+    options.timeouts = { 'pageLoad': 5000 }
+    driver = webdriver.Chrome(options=options)
+    driver.get("https://www.selenium.dev/")
+    driver.quit()
+
+def test_timeouts_implicit_wait():
+    options = get_default_chrome_options()
+    options.timeouts = { 'implicit': 5000 }
+    driver = webdriver.Chrome(options=options)
+    driver.get("https://www.selenium.dev/")
+    driver.quit()
+
+def test_unhandled_prompt():
+    options = get_default_chrome_options()
+    options.unhandled_prompt_behavior = 'accept'
+    driver = webdriver.Chrome(options=options)
+    driver.get("https://www.selenium.dev/")
+    driver.quit()
+
+def test_set_window_rect():
+    options = webdriver.FirefoxOptions()
+    options.set_window_rect = True # Full support in Firefox
+    driver = webdriver.Firefox(options=options)
+    driver.get("https://www.selenium.dev/")
+    driver.quit()
+
+def test_strict_file_interactability():
+    options = get_default_chrome_options()
+    options.strict_file_interactability = True
+    driver = webdriver.Chrome(options=options)
+    driver.get("https://www.selenium.dev/")
+    driver.quit()
+
+def test_proxy():
+    options = get_default_chrome_options()
+    options.proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy' : 'http.proxy:1234'})
+    driver = webdriver.Chrome(options=options)
+    driver.get("https://www.selenium.dev/")
+    driver.quit()
+    
+def test_set_browser_name():
+    options = get_default_chrome_options()
+    assert options.capabilities['browserName'] == 'chrome'
+    driver = webdriver.Chrome(options=options)
+    driver.get("https://www.selenium.dev/")
+    driver.quit()
+    
+def test_set_browser_version():
+    options = get_default_chrome_options()
+    options.browser_version = 'stable'
+    assert options.capabilities['browserVersion'] == 'stable'
+    driver = webdriver.Chrome(options=options)
+    driver.get("https://www.selenium.dev/")
+    driver.quit()
+    
+def test_platform_name():
+    options = get_default_chrome_options()
+    options.platform_name = 'any'
+    driver = webdriver.Chrome(options=options)
+    driver.get("https://www.selenium.dev/")
+    driver.quit()
+    
+def test_accept_insecure_certs():
+    options = get_default_chrome_options()
+    options.accept_insecure_certs = True
+    driver = webdriver.Chrome(options=options)
+    driver.get("https://www.selenium.dev/")
+    driver.quit()
+
+def get_default_chrome_options():
+    options = webdriver.ChromeOptions()
+    options.add_argument("--no-sandbox")
+    return options
diff --git a/examples/python/tests/drivers/test_remote_webdriver.py b/examples/python/tests/drivers/test_remote_webdriver.py
index 927278a40bb8..036c2a223f0f 100644
--- a/examples/python/tests/drivers/test_remote_webdriver.py
+++ b/examples/python/tests/drivers/test_remote_webdriver.py
@@ -1,21 +1,25 @@
 import os
+import sys
 
+import pytest
 from selenium import webdriver
 from selenium.webdriver.common.by import By
 from selenium.webdriver.remote.file_detector import LocalFileDetector
 from selenium.webdriver.support.wait import WebDriverWait
 
 
+@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
 def test_start_remote(server):
-    options = webdriver.ChromeOptions()
+    options = get_default_chrome_options()
     driver = webdriver.Remote(command_executor=server, options=options)
 
-    assert "localhost" in driver.command_executor._url
+    assert "localhost" in driver.command_executor._client_config.remote_server_addr
     driver.quit()
 
 
+@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
 def test_uploads(server):
-    options = webdriver.ChromeOptions()
+    options = get_default_chrome_options()
     driver = webdriver.Remote(command_executor=server, options=options)
 
     driver.get("https://the-internet.herokuapp.com/upload")
@@ -33,8 +37,9 @@ def test_uploads(server):
     assert file_name == "selenium-snapshot.png"
 
 
+@pytest.mark.skipif(sys.platform == "win32", reason="Gets stuck on Windows, passes locally")
 def test_downloads(server, temp_dir):
-    options = webdriver.ChromeOptions()
+    options = get_default_chrome_options()
     options.enable_downloads = True
     driver = webdriver.Remote(command_executor=server, options=options)
 
@@ -46,8 +51,8 @@ def test_downloads(server, temp_dir):
 
     files = driver.get_downloadable_files()
 
-    assert files == file_names
-    downloadable_file = files[0]
+    assert sorted(files) == sorted(file_names)
+    downloadable_file = file_names[0]
     target_directory = temp_dir
 
     driver.download_file(downloadable_file, target_directory)
@@ -59,3 +64,8 @@ def test_downloads(server, temp_dir):
     driver.delete_downloadable_files()
 
     assert not driver.get_downloadable_files()
+
+def get_default_chrome_options():
+    options = webdriver.ChromeOptions()
+    options.add_argument("--no-sandbox")
+    return options
diff --git a/examples/python/tests/drivers/test_service.py b/examples/python/tests/drivers/test_service.py
index 1152d21789a2..98cfe0e2c9be 100644
--- a/examples/python/tests/drivers/test_service.py
+++ b/examples/python/tests/drivers/test_service.py
@@ -9,7 +9,7 @@ def test_basic_service():
 
 
 def test_driver_location(chromedriver_bin, chrome_bin):
-    options = webdriver.ChromeOptions()
+    options = get_default_chrome_options()
     options.binary_location = chrome_bin
 
     service = webdriver.ChromeService(executable_path=chromedriver_bin)
@@ -25,3 +25,8 @@ def test_driver_port():
     driver = webdriver.Chrome(service=service)
 
     driver.quit()
+
+def get_default_chrome_options():
+    options = webdriver.ChromeOptions()
+    options.add_argument("--no-sandbox")
+    return options
diff --git a/examples/python/tests/elements/test_information.py b/examples/python/tests/elements/test_information.py
index 53b695b6fc83..a2d5d030af81 100644
--- a/examples/python/tests/elements/test_information.py
+++ b/examples/python/tests/elements/test_information.py
@@ -1,2 +1,47 @@
 from selenium import webdriver
+from selenium.webdriver.common.by import By
 
+import pytest
+
+
+def test_informarion():
+    # Initialize WebDriver
+    driver = webdriver.Chrome()
+    driver.implicitly_wait(0.5)
+
+    driver.get("https://www.selenium.dev/selenium/web/inputs.html")
+
+    # isDisplayed
+    is_email_visible = driver.find_element(By.NAME, "email_input").is_displayed()
+    assert is_email_visible == True
+
+    # isEnabled
+    is_enabled_button = driver.find_element(By.NAME, "button_input").is_enabled()
+    assert is_enabled_button == True
+
+    # isSelected
+    is_selected_check = driver.find_element(By.NAME, "checkbox_input").is_selected()
+    assert is_selected_check == True
+
+    # TagName
+    tag_name_inp = driver.find_element(By.NAME, "email_input").tag_name
+    assert tag_name_inp == "input"
+
+    # GetRect
+    rect = driver.find_element(By.NAME, "range_input").rect
+    assert rect["x"] == 10
+
+    # CSS Value
+    css_value = driver.find_element(By.NAME, "color_input").value_of_css_property(
+        "font-size"
+    )
+    assert css_value == "13.3333px"
+
+    # GetText
+    text = driver.find_element(By.TAG_NAME, "h1").text
+    assert text == "Testing Inputs"
+
+    # FetchAttributes
+    email_txt = driver.find_element(By.NAME, "email_input")
+    value_info = email_txt.get_attribute("value")
+    assert value_info == "admin@localhost"
diff --git a/examples/python/tests/elements/test_interaction.py b/examples/python/tests/elements/test_interaction.py
index 53b695b6fc83..eb05f7d928a1 100644
--- a/examples/python/tests/elements/test_interaction.py
+++ b/examples/python/tests/elements/test_interaction.py
@@ -1,2 +1,39 @@
 from selenium import webdriver
+from selenium.webdriver.common.by import By
 
+import pytest
+
+
+def test_interactions():
+    # Initialize WebDriver
+    driver = webdriver.Chrome()
+    driver.implicitly_wait(0.5)
+
+    # Navigate to URL
+    driver.get("https://www.selenium.dev/selenium/web/inputs.html")
+
+    # Click on the checkbox
+    check_input = driver.find_element(By.NAME, "checkbox_input")
+    check_input.click()
+
+    is_checked = check_input.is_selected()
+    assert is_checked == False
+
+    # Handle the email input field
+    email_input = driver.find_element(By.NAME, "email_input")
+    email_input.clear()  # Clear field
+    
+    email = "admin@localhost.dev"
+    email_input.send_keys(email)  # Enter text
+
+    # Verify input
+    data = email_input.get_attribute("value")
+    assert data == email
+
+    # Clear the email input field again
+    email_input.clear()
+    data = email_input.get_attribute("value")
+    assert data == ""
+
+    # Quit the driver
+    driver.quit()
diff --git a/examples/python/tests/elements/test_locators.py b/examples/python/tests/elements/test_locators.py
index 53b695b6fc83..3622b70d97f2 100644
--- a/examples/python/tests/elements/test_locators.py
+++ b/examples/python/tests/elements/test_locators.py
@@ -1,2 +1,84 @@
+import pytest
 from selenium import webdriver
+from selenium.webdriver.common.by import By
 
+
+def test_class_name():
+    driver = webdriver.Chrome()
+    driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+    element = driver.find_element(By.CLASS_NAME, "information")
+
+    assert element is not None
+    assert element.tag_name == "input"
+
+    driver.quit()
+
+def test_css_selector(driver):
+    driver = webdriver.Chrome()
+    driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+    element = driver.find_element(By.CSS_SELECTOR, "#fname")
+
+    assert element is not None
+    assert element.get_attribute("value") == "Jane"
+
+    driver.quit()
+
+def test_id(driver):
+    driver = webdriver.Chrome()
+    driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+    element = driver.find_element(By.ID, "lname")
+
+    assert element is not None
+    assert element.get_attribute("value") == "Doe"
+
+    driver.quit()
+
+def test_name(driver):
+    driver = webdriver.Chrome()
+    driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+    element = driver.find_element(By.NAME, "newsletter")
+
+    assert element is not None
+    assert element.tag_name == "input"
+
+    driver.quit()
+
+def test_link_text(driver):
+    driver = webdriver.Chrome()
+    driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+    element = driver.find_element(By.LINK_TEXT, "Selenium Official Page")
+
+    assert element is not None
+    assert element.get_attribute("href") == "https://www.selenium.dev/"
+
+    driver.quit()
+
+def test_partial_link_text(driver):
+    driver = webdriver.Chrome()
+    driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+    element = driver.find_element(By.PARTIAL_LINK_TEXT, "Official Page")
+
+    assert element is not None
+    assert element.get_attribute("href") == "https://www.selenium.dev/"
+
+    driver.quit()
+
+def test_tag_name(driver):
+    driver = webdriver.Chrome()
+    driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+    element = driver.find_element(By.TAG_NAME, "a")
+
+    assert element is not None
+    assert element.get_attribute("href") == "https://www.selenium.dev/"
+
+    driver.quit()
+
+def test_xpath(driver):
+    driver = webdriver.Chrome()
+    driver.get("https://www.selenium.dev/selenium/web/locators_tests/locators.html")
+    element = driver.find_element(By.XPATH, "//input[@value='f']")
+
+    assert element is not None
+    assert element.get_attribute("type") == "radio"
+
+    driver.quit()
diff --git a/examples/python/tests/extensions/webextensions-selenium-example.xpi b/examples/python/tests/extensions/webextensions-selenium-example.xpi
index 34b0ae3913f7..dca8e2e12312 100644
Binary files a/examples/python/tests/extensions/webextensions-selenium-example.xpi and b/examples/python/tests/extensions/webextensions-selenium-example.xpi differ
diff --git a/examples/python/tests/extensions/webextensions-selenium-example/manifest.json b/examples/python/tests/extensions/webextensions-selenium-example/manifest.json
index e938974a20b1..a8b4fec6e60f 100644
--- a/examples/python/tests/extensions/webextensions-selenium-example/manifest.json
+++ b/examples/python/tests/extensions/webextensions-selenium-example/manifest.json
@@ -1,17 +1,22 @@
 {
-  "manifest_version": 2,
+  "manifest_version": 3,
   "name": "webextensions-selenium-example",
-  "description": "Inject a div with id webextensions-selenium-example to verify that WebExtensions work in Firefox/Selenium" ,
+  "description": "Inject a div with id webextensions-selenium-example to verify that WebExtensions work in Firefox/Selenium",
   "version": "0.1",
   "content_scripts": [
     {
-      "matches": ["https://*/*","http://*/*"],
-      "js": ["inject.js"]
+      "matches": [
+        "https://*/*",
+        "http://*/*"
+      ],
+      "js": [
+        "inject.js"
+      ]
     }
   ],
-  "applications": {
-   "gecko": {
-     "id": "webextensions-selenium-example@example.com"
-   }
- }
-}
+  "browser_specific_settings": {
+    "gecko": {
+      "id": "webextensions-selenium-example-v3@example.com"
+    }
+  }
+}
\ No newline at end of file
diff --git a/examples/python/tests/getting_started/using_selenium_tests.py b/examples/python/tests/getting_started/using_selenium_tests.py
index 8af0a1deeb20..efac8c0cfc3d 100644
--- a/examples/python/tests/getting_started/using_selenium_tests.py
+++ b/examples/python/tests/getting_started/using_selenium_tests.py
@@ -3,9 +3,7 @@
 
 
 def test_eight_components():
-    driver = webdriver.Chrome()
-
-    driver.get("https://www.selenium.dev/selenium/web/web-form.html")
+    driver = setup()
 
     title = driver.title
     assert title == "Web form"
@@ -22,4 +20,12 @@ def test_eight_components():
     value = message.text
     assert value == "Received!"
 
+    teardown(driver)
+
+def setup():
+    driver = webdriver.Chrome()
+    driver.get("https://www.selenium.dev/selenium/web/web-form.html")
+    return driver
+
+def teardown(driver):
     driver.quit()
diff --git a/examples/python/tests/interactions/test_alerts.py b/examples/python/tests/interactions/test_alerts.py
index 53b695b6fc83..59b2cb15698c 100644
--- a/examples/python/tests/interactions/test_alerts.py
+++ b/examples/python/tests/interactions/test_alerts.py
@@ -1,2 +1,50 @@
 from selenium import webdriver
+from selenium.webdriver.common.by import By
+from selenium.webdriver.support.ui import WebDriverWait
 
+global url
+url = "https://www.selenium.dev/documentation/webdriver/interactions/alerts/"
+
+
+def test_alert_popup():
+    driver = webdriver.Chrome()
+    driver.get(url)
+    element = driver.find_element(By.LINK_TEXT, "See an example alert")
+    element.click()
+
+    wait = WebDriverWait(driver, timeout=2)
+    alert = wait.until(lambda d : d.switch_to.alert)
+    text = alert.text
+    alert.accept()
+    assert text == "Sample alert"
+
+    driver.quit()
+
+def test_confirm_popup():
+    driver = webdriver.Chrome()
+    driver.get(url)
+    element = driver.find_element(By.LINK_TEXT, "See a sample confirm")
+    driver.execute_script("arguments[0].click();", element)
+
+    wait = WebDriverWait(driver, timeout=2)
+    alert = wait.until(lambda d : d.switch_to.alert)
+    text = alert.text
+    alert.dismiss()
+    assert text == "Are you sure?"
+
+    driver.quit()
+
+def test_prompt_popup():
+    driver = webdriver.Chrome()
+    driver.get(url)
+    element = driver.find_element(By.LINK_TEXT, "See a sample prompt")
+    driver.execute_script("arguments[0].click();", element)
+
+    wait = WebDriverWait(driver, timeout=2)
+    alert = wait.until(lambda d : d.switch_to.alert)
+    alert.send_keys("Selenium")
+    text = alert.text
+    alert.accept()
+    assert text == "What is your tool of choice?"
+    
+    driver.quit()
\ No newline at end of file
diff --git a/examples/python/tests/interactions/test_cookies.py b/examples/python/tests/interactions/test_cookies.py
index 53b695b6fc83..0b40e9045172 100644
--- a/examples/python/tests/interactions/test_cookies.py
+++ b/examples/python/tests/interactions/test_cookies.py
@@ -1,2 +1,71 @@
 from selenium import webdriver
 
+
+def test_add_cookie():
+    driver = webdriver.Chrome()
+    driver.get("http://www.example.com")
+
+    # Adds the cookie into current browser context
+    driver.add_cookie({"name": "key", "value": "value"})
+
+
+def test_get_named_cookie():
+    driver = webdriver.Chrome()
+    driver.get("http://www.example.com")
+
+    # Adds the cookie into current browser context
+    driver.add_cookie({"name": "foo", "value": "bar"})
+
+    # Get cookie details with named cookie 'foo'
+    print(driver.get_cookie("foo"))
+
+
+def test_get_all_cookies():
+    driver = webdriver.Chrome()
+
+    driver.get("http://www.example.com")
+
+    driver.add_cookie({"name": "test1", "value": "cookie1"})
+    driver.add_cookie({"name": "test2", "value": "cookie2"})
+
+    # Get all available cookies
+    print(driver.get_cookies())
+
+def test_delete_cookie():
+    driver = webdriver.Chrome()
+
+    driver.get("http://www.example.com")
+
+    driver.add_cookie({"name": "test1", "value": "cookie1"})
+    driver.add_cookie({"name": "test2", "value": "cookie2"})
+
+    # Delete cookie with name 'test1'
+    driver.delete_cookie("test1")
+
+
+def test_delete_all_cookies():
+    driver = webdriver.Chrome()
+
+    driver.get("http://www.example.com")
+
+    driver.add_cookie({"name": "test1", "value": "cookie1"})
+    driver.add_cookie({"name": "test2", "value": "cookie2"})
+
+    # Delete all cookies
+    driver.delete_all_cookies()
+
+
+def test_same_side_cookie_attr():
+    driver = webdriver.Chrome()
+
+    driver.get("http://www.example.com")
+
+    # Adds the cookie into current browser context with sameSite 'Strict' (or) 'Lax'
+    driver.add_cookie({"name": "foo", "value": "value", "sameSite": "Strict"})
+    driver.add_cookie({"name": "foo1", "value": "value", "sameSite": "Lax"})
+
+    cookie1 = driver.get_cookie("foo")
+    cookie2 = driver.get_cookie("foo1")
+
+    print(cookie1)
+    print(cookie2)
diff --git a/examples/python/tests/interactions/test_frames.py b/examples/python/tests/interactions/test_frames.py
index 53b695b6fc83..3ce9d1a31923 100644
--- a/examples/python/tests/interactions/test_frames.py
+++ b/examples/python/tests/interactions/test_frames.py
@@ -1,2 +1,55 @@
+# Licensed to the Software Freedom Conservancy (SFC) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The SFC licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
 from selenium import webdriver
+from selenium.webdriver.common.by import By
+
+#set chrome and launch web page
+driver = webdriver.Chrome()
+driver.get("https://www.selenium.dev/selenium/web/iframes.html")
+
+# --- Switch to iframe using WebElement ---
+iframe = driver.find_element(By.ID, "iframe1")
+driver.switch_to.frame(iframe)
+assert "We Leave From Here" in driver.page_source
+
+email_element = driver.find_element(By.ID, "email")
+email_element.send_keys("admin@selenium.dev")
+email_element.clear()
+driver.switch_to.default_content()
+
+# --- Switch to iframe using name or ID ---
+iframe1=driver.find_element(By.NAME, "iframe1-name")  # (This line doesn't switch, just locates)
+driver.switch_to.frame(iframe1)
+assert "We Leave From Here" in driver.page_source
+
+email = driver.find_element(By.ID, "email")
+email.send_keys("admin@selenium.dev")
+email.clear()
+driver.switch_to.default_content()
+
+# --- Switch to iframe using index ---
+driver.switch_to.frame(0)
+assert "We Leave From Here" in driver.page_source
+
+# --- Final page content check ---
+driver.switch_to.default_content()
+assert "This page has iframes" in driver.page_source
+
+#quit the driver
+driver.quit()
 
+#demo code for conference
diff --git a/examples/python/tests/interactions/test_interactions.py b/examples/python/tests/interactions/test_interactions.py
new file mode 100644
index 000000000000..7bf82b6b9f5a
--- /dev/null
+++ b/examples/python/tests/interactions/test_interactions.py
@@ -0,0 +1,13 @@
+from selenium import webdriver
+
+driver = webdriver.Chrome()
+
+driver.get("https://www.selenium.dev")
+
+title = driver.title
+assert title == "Selenium"
+
+url = driver.current_url
+assert url == "https://www.selenium.dev/"
+
+driver.quit()
diff --git a/examples/python/tests/interactions/test_navigation.py b/examples/python/tests/interactions/test_navigation.py
index 53b695b6fc83..819e760a598a 100644
--- a/examples/python/tests/interactions/test_navigation.py
+++ b/examples/python/tests/interactions/test_navigation.py
@@ -1,2 +1,23 @@
 from selenium import webdriver
 
+driver = webdriver.Chrome()
+
+driver.get("https://www.selenium.dev")
+driver.get("https://www.selenium.dev/selenium/web/index.html")
+
+title = driver.title
+assert title == "Index of Available Pages"
+
+driver.back()
+title = driver.title
+assert title == "Selenium"
+
+driver.forward()
+title = driver.title
+assert title == "Index of Available Pages"
+
+driver.refresh()
+title = driver.title
+assert title == "Index of Available Pages"
+
+driver.quit()
diff --git a/examples/python/tests/interactions/test_print_options.py b/examples/python/tests/interactions/test_print_options.py
new file mode 100644
index 000000000000..5d40f4d43ecf
--- /dev/null
+++ b/examples/python/tests/interactions/test_print_options.py
@@ -0,0 +1,58 @@
+import pytest
+from selenium import webdriver
+from selenium.webdriver.common.print_page_options import PrintOptions
+
+@pytest.fixture()
+def driver():
+    driver = webdriver.Chrome()
+    yield driver
+    driver.quit()
+
+def test_orientation(driver):
+    driver.get("https://www.selenium.dev/")
+    print_options = PrintOptions()
+    print_options.orientation = "landscape" ## landscape or portrait
+    assert print_options.orientation == "landscape"
+
+def test_range(driver):
+    driver.get("https://www.selenium.dev/")
+    print_options = PrintOptions()
+    print_options.page_ranges = ["1, 2, 3"] ## ["1", "2", "3"] or ["1-3"]
+    assert print_options.page_ranges == ["1, 2, 3"]
+
+def test_size(driver):
+    driver.get("https://www.selenium.dev/")
+    print_options = PrintOptions()
+    print_options.page_height = 27.94  # Use page_width to assign width
+    assert print_options.page_height == 27.94
+
+def test_margin(driver):
+    driver.get("https://www.selenium.dev/")
+    print_options = PrintOptions()
+    print_options.margin_top = 10
+    print_options.margin_bottom = 10
+    print_options.margin_left = 10
+    print_options.margin_right = 10
+    assert print_options.margin_top == 10
+    assert print_options.margin_bottom == 10
+    assert print_options.margin_left == 10
+    assert print_options.margin_right == 10
+
+def test_scale(driver):
+    driver.get("https://www.selenium.dev/")
+    print_options = PrintOptions()
+    print_options.scale = 0.5 ## 0.1 to 2.0
+    current_scale = print_options.scale
+    assert current_scale == 0.5
+
+def test_background(driver):
+    driver.get("https://www.selenium.dev/")
+    print_options = PrintOptions()
+    print_options.background = True ## True or False
+    assert print_options.background is True
+
+def test_shrink_to_fit(driver):
+    driver.get("https://www.selenium.dev/")
+    print_options = PrintOptions()
+    print_options.shrink_to_fit = True ## True or False
+    assert print_options.shrink_to_fit is True
diff --git a/examples/python/tests/interactions/test_prints_page.py b/examples/python/tests/interactions/test_prints_page.py
new file mode 100644
index 000000000000..2735e4228fc2
--- /dev/null
+++ b/examples/python/tests/interactions/test_prints_page.py
@@ -0,0 +1,15 @@
+import pytest
+from selenium import webdriver
+from selenium.webdriver.common.print_page_options import PrintOptions
+
+pytest.fixture()
+def driver():
+    driver = webdriver.Chrome()
+    yield driver
+    driver.quit()
+
+def test_prints_page(driver):
+    driver.get("https://www.selenium.dev/")
+    print_options = PrintOptions()
+    pdf = driver.print_page(print_options)
+    assert len(pdf) > 0
\ No newline at end of file
diff --git a/examples/python/tests/interactions/test_virtual_authenticator.py b/examples/python/tests/interactions/test_virtual_authenticator.py
index 25a235635223..a40576b91bfa 100644
--- a/examples/python/tests/interactions/test_virtual_authenticator.py
+++ b/examples/python/tests/interactions/test_virtual_authenticator.py
@@ -48,7 +48,7 @@ def test_virtual_authenticator_options():
     assert len(options.to_dict()) == 6
 
 
-def test_create_authenticator(driver):
+def test_add_authenticator(driver):
     # Create virtual authenticator options
     options = VirtualAuthenticatorOptions()
     options.protocol = VirtualAuthenticatorOptions.Protocol.U2F
@@ -93,7 +93,7 @@ def test_create_and_add_resident_key(driver):
     privatekey = urlsafe_b64decode(BASE64__ENCODED_PK)
     sign_count = 0
 
-    # create a  resident credential using above parameters
+    # create a resident credential using above parameters
     resident_credential = Credential.create_resident_credential(credential_id, rp_id, user_handle, privatekey, sign_count)
 
     # add the credential created to virtual authenticator
diff --git a/examples/python/tests/resources/server.jks b/examples/python/tests/resources/server.jks
new file mode 100644
index 000000000000..76579e1776c1
Binary files /dev/null and b/examples/python/tests/resources/server.jks differ
diff --git a/examples/python/tests/resources/tls.crt b/examples/python/tests/resources/tls.crt
new file mode 100644
index 000000000000..58a511093dde
--- /dev/null
+++ b/examples/python/tests/resources/tls.crt
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIIEAzCCAuugAwIBAgIIPgWI/2ppJPowDQYJKoZIhvcNAQELBQAwgYcxEDAOBgNV
+BAYTB1Vua25vd24xEDAOBgNVBAgTB1Vua25vd24xEDAOBgNVBAcTB1Vua25vd24x
+EzARBgNVBAoTClNlbGVuaXVtSFExJTAjBgNVBAsTHFNvZnR3YXJlIEZyZWVkb20g
+Q29uc2VydmFuY3kxEzARBgNVBAMTClNlbGVuaXVtSFEwHhcNMjQxMTAzMDkwMDUz
+WhcNMzQxMTAxMDkwMDUzWjCBhzEQMA4GA1UEBhMHVW5rbm93bjEQMA4GA1UECBMH
+VW5rbm93bjEQMA4GA1UEBxMHVW5rbm93bjETMBEGA1UEChMKU2VsZW5pdW1IUTEl
+MCMGA1UECxMcU29mdHdhcmUgRnJlZWRvbSBDb25zZXJ2YW5jeTETMBEGA1UEAxMK
+U2VsZW5pdW1IUTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKVTx0e5
+6/75QgE5E6rTYPlTkIxDjZylOMT2YBNuB8vIFZkSaCtLEqto0XTVV6dQc8Ge41QV
+rkt7DID1oN40rvWZdla9/2bVhCsWsRiXlvrKDbjoUi5kiLcfKJW+erUWs28xnLOw
+bvGNLLAjEUitKKGpR1vsSMOuvMN9VnsSkn9smAHLT2y41CjKpvdkq+OCUdnqfYju
+vV6OthRPXFMsDb1fYqZfE7fZhLc806Rg31qLssNVPwxt6VeNYi1/e5cWYeKIJQoj
+sFkqIdvu7xHtR7Qu1tNdeQoiDhMS7VLdZDsnAAtQLHvyAVEBicBX95VrGnOTlKdk
++UDwyOP6djCISzUCAwEAAaNxMG8wHQYDVR0OBBYEFNrLCgZ7d2vfurWaJ4wa8O/T
+PfXPME4GA1UdEQEB/wREMEKCCWxvY2FsaG9zdIITc2VsZW5pdW0tZ3JpZC5sb2Nh
+bIISc2VsZW5pdW0tZ3JpZC5wcm9kggxzZWxlbml1bS5kZXYwDQYJKoZIhvcNAQEL
+BQADggEBABtxoPrVrPO5ELzUuSXbvYKHQG9YEuoAisXsiOWmldXRRvT/yTr3nzJn
+bC4dJywMW5unPdq1NoMxza0AF0KBFp1GzLDW5/KcA26R4IQi2xfQKVyRzb4vu0CY
+BDbnzF7Bisj50sSI4WThtF4xLEHVmzJ2GWNp6SgAScIrdGeB320aTqUIDO8YHH+y
+oeSu6qQfEcDiBWh3KD85vCIx0+L4AM3WKkP5nDq2FL6nwCdxqV7bo5/BZJEODMiW
+xv/hw0r1OBn2T2Z6o3pRI92zu9sjj6PzPP80DUPl7+fqAaRlLFglXd8b+Qxojm9o
+B0QN+gEM717L6WqmJGr1VC6HWQCvcCc=
+-----END CERTIFICATE-----
diff --git a/examples/python/tests/resources/tls.key b/examples/python/tests/resources/tls.key
new file mode 100644
index 000000000000..d97038cd2ef8
--- /dev/null
+++ b/examples/python/tests/resources/tls.key
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQClU8dHuev++UIB
+OROq02D5U5CMQ42cpTjE9mATbgfLyBWZEmgrSxKraNF01VenUHPBnuNUFa5LewyA
+9aDeNK71mXZWvf9m1YQrFrEYl5b6yg246FIuZIi3HyiVvnq1FrNvMZyzsG7xjSyw
+IxFIrSihqUdb7EjDrrzDfVZ7EpJ/bJgBy09suNQoyqb3ZKvjglHZ6n2I7r1ejrYU
+T1xTLA29X2KmXxO32YS3PNOkYN9ai7LDVT8MbelXjWItf3uXFmHiiCUKI7BZKiHb
+7u8R7Ue0LtbTXXkKIg4TEu1S3WQ7JwALUCx78gFRAYnAV/eVaxpzk5SnZPlA8Mjj
++nYwiEs1AgMBAAECggEAA2D+tT3SGlmG9Tube2CLaRUW4shSVDBWmcSXn+teBUFv
+MDwdfRMGoZJdw4eaXWz0wgaItV7QZjJbMKXfK44ZQaOTtP/4QLuzkjuKE4tXloO7
+e5BjS5eaPrSIPGU9S0cDPvjH2oP22dYi4sJYt6ry+2ODC0Mn6o3p8Dc3Ja1HvrXA
+SNImimok7YemXVMbdPyaqbu2eXjPvWAA8W9/OW2L1n4U4neM0S5Nt3tVl5sMELj5
+iFC7Z+M3ZLon/54137h3xPmHYQMiPIX+PulaRLOJYSbR0dtMHhPMyWtR7GwEK4Aw
+EgtDLKfa6qMv5BYsI2E0bPHRDaj39UXGeWX5/2xzyQKBgQDcMUL3sEbRmeBKhYlT
+xv5ea2P4P247DDWObTDw5jLhwfmOycFcJVlaiXICpGR6hqWY8wI7kKxbQQVKFob6
+JVpIHmkkRqsV8JfXVAcaH1thlKAS4NVZsOJIVBHO3JdPaCUFq7HHbBA3436aJLtC
+HiINkuiNXd2dDMuDwOsfhsRFzQKBgQDANnK1P7sZSP7dJHinA2sPSbGAK8ZTbYWD
+8oe/lYlLkw6qM9i8vIKCfTpfi4vh4qfjQUczdy1w2zFbxriC2+uxhEqDN2tud3/P
+0CYrO0SGQKYCROrYUh0Pl1MswBeu8yT5AdrIBK3t92wfYqTWK7VUZQaUQ7YJWfXS
+usbz5qIzCQKBgH8ICHt+/gxUOtqjWYu0pPFyATWp2n1EWO13PyHrnHU0BDaFXQE9
+JuSdoOG3V6R8Y7Lul14n49etllCc2Hgd7ozmxn/AKVm5+M+oUYSXjI+qQANEJLHe
+410Y60EtcDnGen1gBWtog57KpzJkeIf3fGvaUkGkYoMFa6/yL3N7u2YNAoGADH29
+WKAKpasDvRVYrenf9D9ixKSTn+pXKesB/WZXZMzqwA7cf+90P8yplXn5HjXfmTot
+yV9uWY41F/TDGuX13DRvrzVTyvsDGFs7j8WrP1pGL5GQ/XvgnZnE8vyMzXbJqVEA
+ic0cDIHuyd9cPPrcLt7d3ZbE5ris7APtV/5d/hkCgYAMFCYoKcCh+9/2HOgwQ1b6
+16CS71TvDBCx7+D1V3WXrIOWkNzW2SIZtnhQwglU9L7PFw6ViJAY4sB2p9hDDtcZ
+e7Lotmnbrb75QQpWUyaoZMsw8l23MOGPzHKPqNiT57uOorjcFrePi9EOdERSG9+4
+lRKqCFhaNBUwQ4idzO0rWA==
+-----END PRIVATE KEY-----
diff --git a/examples/python/tests/selenium_manager/example_se-config.toml b/examples/python/tests/selenium_manager/example_se-config.toml
new file mode 100644
index 000000000000..78eef8c2f6e7
--- /dev/null
+++ b/examples/python/tests/selenium_manager/example_se-config.toml
@@ -0,0 +1,21 @@
+browser = "chrome"                 # --browser BROWSER
+driver = "chromedriver"             # --driver DRIVER
+browser-version = "106"             # --browser-version BROWSER_VERSION
+driver-version = "106.0.5249.61"    # --driver-version DRIVER_VERSION
+browser-path = "/usr/bin/google-chrome"  # --browser-path BROWSER_PATH
+driver-mirror-url = "https://custom-driver-mirror.com"  # --driver-mirror-url DRIVER_MIRROR_URL
+browser-mirror-url = "https://custom-browser-mirror.com"  # --browser-mirror-url BROWSER_MIRROR_URL
+output = "LOGGER"                   # --output OUTPUT
+os = "linux"                        # --os OS
+arch = "x64"                        # --arch ARCH
+proxy = "myproxy:8080"              # --proxy PROXY
+timeout = 300                       # --timeout TIMEOUT
+offline = true                      # --offline
+force-browser-download = true       # --force-browser-download
+avoid-browser-download = false      # --avoid-browser-download
+debug = true                        # --debug
+trace = true                        # --trace
+cache-path = "/custom/cache/path"    # --cache-path CACHE_PATH
+ttl = 3600                          # --ttl TTL
+language-binding = "Python"         # --language-binding LANGUAGE
+avoid-stats = true                  # --avoid-stats
\ No newline at end of file
diff --git a/examples/python/tests/selenium_manager/usage.py b/examples/python/tests/selenium_manager/usage.py
new file mode 100644
index 000000000000..c9e93ca542b0
--- /dev/null
+++ b/examples/python/tests/selenium_manager/usage.py
@@ -0,0 +1,12 @@
+from selenium import webdriver
+from selenium.webdriver.common.by import By
+from selenium.webdriver.chrome.service import Service
+
+def setup_without_selenium_manager():
+    chrome_service = Service(executable_path='path/to/chrome.exe')
+    driver = webdriver.Chrome(chrome_service)
+    return driver
+    
+def setup_with_selenium_manager():
+    driver = webdriver.Chrome()
+    return driver
\ No newline at end of file
diff --git a/examples/python/tests/support/test_expected_conditions.py b/examples/python/tests/support/test_expected_conditions.py
index 53b695b6fc83..fb93f26b79cd 100644
--- a/examples/python/tests/support/test_expected_conditions.py
+++ b/examples/python/tests/support/test_expected_conditions.py
@@ -1,2 +1,18 @@
-from selenium import webdriver
+from selenium.webdriver.common.by import By
+from selenium.webdriver.support import expected_conditions as EC
+from selenium.webdriver.support.wait import WebDriverWait
 
+# Expected Conditions API Documentation:
+# https://www.selenium.dev/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.expected_conditions.html
+
+
+def test_expected_condition(driver):
+    driver.get("https://www.selenium.dev/selenium/web/dynamic.html")
+    revealed = driver.find_element(By.ID, "revealed")
+    driver.find_element(By.ID, "reveal").click()
+
+    wait = WebDriverWait(driver, timeout=2)
+    wait.until(EC.visibility_of_element_located((By.ID, "revealed")))
+
+    revealed.send_keys("Displayed")
+    assert revealed.get_property("value") == "Displayed"
diff --git a/examples/python/tests/waits/test_waits.py b/examples/python/tests/waits/test_waits.py
index b496a8bff6cd..aa3d773a6018 100644
--- a/examples/python/tests/waits/test_waits.py
+++ b/examples/python/tests/waits/test_waits.py
@@ -39,7 +39,7 @@ def test_explicit(driver):
     driver.find_element(By.ID, "reveal").click()
 
     wait = WebDriverWait(driver, timeout=2)
-    wait.until(lambda d : revealed.is_displayed())
+    wait.until(lambda _ : revealed.is_displayed())
 
     revealed.send_keys("Displayed")
     assert revealed.get_property("value") == "Displayed"
@@ -52,6 +52,6 @@ def test_explicit_options(driver):
 
     errors = [NoSuchElementException, ElementNotInteractableException]
     wait = WebDriverWait(driver, timeout=2, poll_frequency=.2, ignored_exceptions=errors)
-    wait.until(lambda d : revealed.send_keys("Displayed") or True)
+    wait.until(lambda _ : revealed.send_keys("Displayed") or True)
 
     assert revealed.get_property("value") == "Displayed"
diff --git a/examples/python/tox.ini b/examples/python/tox.ini
new file mode 100644
index 000000000000..49c6f636bb75
--- /dev/null
+++ b/examples/python/tox.ini
@@ -0,0 +1,30 @@
+# Tox (https://tox.wiki/) is a tool for running tests in multiple
+# virtualenvs. This configuration file will run the test suite on all
+# supported python versions. To use it, run "tox" from this directory.
+#
+# For a specific environment, run: "tox -e <env>" (i.e.: "tox -e py313")
+#
+# This tox configuration will skip any Python interpreters that can't be found.
+# To manage multiple Python interpreters for covering all versions, you can use
+# pyenv: https://github.com/pyenv/pyenv
+
+
+[tox]
+env_list =
+    py39
+    py310
+    py311
+    py312
+    py313
+skip_missing_interpreters = True
+
+[testenv]
+description = run tests
+passenv = *
+deps =
+    -r requirements.txt
+commands =
+    # "-vv" means extra verbose
+    # "-r fEsxXp" means show extra test summary info as specified by:
+    #   (f)ailed, (E)rror, (s)kipped, (x)failed, (X)passed, (p)assed
+    pytest -vv -r fEsxXp {posargs:.}
diff --git a/examples/ruby/.rubocop.yml b/examples/ruby/.rubocop.yml
index b88b233a689b..492720f45e42 100644
--- a/examples/ruby/.rubocop.yml
+++ b/examples/ruby/.rubocop.yml
@@ -1,9 +1,10 @@
 inherit_from: .rubocop_todo.yml
 
-require: rubocop-rspec
+plugins:
+  - rubocop-rspec
 
 AllCops:
-  TargetRubyVersion: 3.0
+  TargetRubyVersion: 3.1
   NewCops: enable
   SuggestExtensions:
     rubocop-rake: false
diff --git a/examples/ruby/Gemfile b/examples/ruby/Gemfile
index aeb5588d936b..7bc7e7bf0d5b 100644
--- a/examples/ruby/Gemfile
+++ b/examples/ruby/Gemfile
@@ -6,14 +6,6 @@ gem 'ffi', '~> 1.15', '>= 1.15.5' if Gem.win_platform? # Windows only
 gem 'rake', '~> 13.0'
 gem 'rspec', '~> 3.0'
 gem 'rubocop', '~> 1.35'
-gem 'rubocop-rspec', '~> 2.12'
-gem 'selenium-devtools', '~> 0.119'
-
-if ENV['SE_NIGHTLY']
-  source 'https://rubygems.pkg.github.com/seleniumhq' do
-    selenium = 'selenium-webdriver'
-    gem selenium, '~> 4.16.0.nightly'
-  end
-else
-  gem 'selenium-webdriver', '= 4.15.0'
-end
+gem 'rubocop-rspec', '~> 3.0'
+gem 'selenium-devtools', '= 0.139.0'
+gem 'selenium-webdriver', '= 4.35.0'
diff --git a/examples/ruby/Gemfile.lock b/examples/ruby/Gemfile.lock
index e91804e231e4..e3692fd86e83 100644
--- a/examples/ruby/Gemfile.lock
+++ b/examples/ruby/Gemfile.lock
@@ -1,68 +1,72 @@
 GEM
   remote: https://rubygems.org/
   specs:
-    ast (2.4.2)
-    base64 (0.1.1)
-    diff-lcs (1.5.0)
-    json (2.6.3)
-    language_server-protocol (3.17.0.3)
-    parallel (1.23.0)
-    parser (3.2.2.3)
+    ast (2.4.3)
+    base64 (0.3.0)
+    diff-lcs (1.5.1)
+    json (2.13.2)
+    language_server-protocol (3.17.0.5)
+    lint_roller (1.1.0)
+    logger (1.7.0)
+    parallel (1.27.0)
+    parser (3.3.9.0)
       ast (~> 2.4.1)
       racc
-    racc (1.7.1)
+    prism (1.4.0)
+    racc (1.8.1)
     rainbow (3.1.1)
-    rake (13.0.6)
-    regexp_parser (2.8.1)
-    rexml (3.2.6)
-    rspec (3.12.0)
-      rspec-core (~> 3.12.0)
-      rspec-expectations (~> 3.12.0)
-      rspec-mocks (~> 3.12.0)
-    rspec-core (3.12.2)
-      rspec-support (~> 3.12.0)
-    rspec-expectations (3.12.3)
+    rake (13.3.0)
+    regexp_parser (2.11.2)
+    rexml (3.4.1)
+    rspec (3.13.1)
+      rspec-core (~> 3.13.0)
+      rspec-expectations (~> 3.13.0)
+      rspec-mocks (~> 3.13.0)
+    rspec-core (3.13.4)
+      rspec-support (~> 3.13.0)
+    rspec-expectations (3.13.5)
       diff-lcs (>= 1.2.0, < 2.0)
-      rspec-support (~> 3.12.0)
-    rspec-mocks (3.12.6)
+      rspec-support (~> 3.13.0)
+    rspec-mocks (3.13.5)
       diff-lcs (>= 1.2.0, < 2.0)
-      rspec-support (~> 3.12.0)
-    rspec-support (3.12.1)
-    rubocop (1.56.3)
-      base64 (~> 0.1.1)
+      rspec-support (~> 3.13.0)
+    rspec-support (3.13.4)
+    rubocop (1.79.2)
       json (~> 2.3)
-      language_server-protocol (>= 3.17.0)
+      language_server-protocol (~> 3.17.0.2)
+      lint_roller (~> 1.1.0)
       parallel (~> 1.10)
-      parser (>= 3.2.2.3)
+      parser (>= 3.3.0.2)
       rainbow (>= 2.2.2, < 4.0)
-      regexp_parser (>= 1.8, < 3.0)
-      rexml (>= 3.2.5, < 4.0)
-      rubocop-ast (>= 1.28.1, < 2.0)
+      regexp_parser (>= 2.9.3, < 3.0)
+      rubocop-ast (>= 1.46.0, < 2.0)
       ruby-progressbar (~> 1.7)
-      unicode-display_width (>= 2.4.0, < 3.0)
-    rubocop-ast (1.29.0)
-      parser (>= 3.2.1.0)
-    rubocop-capybara (2.19.0)
-      rubocop (~> 1.41)
-    rubocop-factory_bot (2.24.0)
-      rubocop (~> 1.33)
-    rubocop-rspec (2.24.1)
-      rubocop (~> 1.33)
-      rubocop-capybara (~> 2.17)
-      rubocop-factory_bot (~> 2.22)
+      unicode-display_width (>= 2.4.0, < 4.0)
+    rubocop-ast (1.46.0)
+      parser (>= 3.3.7.2)
+      prism (~> 1.4)
+    rubocop-rspec (3.6.0)
+      lint_roller (~> 1.1)
+      rubocop (~> 1.72, >= 1.72.1)
     ruby-progressbar (1.13.0)
-    rubyzip (2.3.2)
-    selenium-devtools (0.119.0)
+    rubyzip (2.4.1)
+    selenium-devtools (0.139.0)
       selenium-webdriver (~> 4.2)
-    selenium-webdriver (4.15.0)
+    selenium-webdriver (4.35.0)
+      base64 (~> 0.2)
+      logger (~> 1.4)
       rexml (~> 3.2, >= 3.2.5)
-      rubyzip (>= 1.2.2, < 3.0)
+      rubyzip (>= 1.2.2, < 4.0)
       websocket (~> 1.0)
-    unicode-display_width (2.4.2)
-    websocket (1.2.10)
+    unicode-display_width (2.6.0)
+    websocket (1.2.11)
 
 PLATFORMS
   arm64-darwin-21
+  arm64-darwin-22
+  arm64-darwin-23
+  arm64-darwin-24
+  ruby
   x86_64-darwin-19
   x86_64-darwin-20
   x86_64-darwin-22
@@ -72,9 +76,9 @@ DEPENDENCIES
   rake (~> 13.0)
   rspec (~> 3.0)
   rubocop (~> 1.35)
-  rubocop-rspec (~> 2.12)
-  selenium-devtools (~> 0.119)
-  selenium-webdriver (= 4.15.0)
+  rubocop-rspec (~> 3.0)
+  selenium-devtools (= 0.139.0)
+  selenium-webdriver (= 4.35.0)
 
 BUNDLED WITH
-   2.3.11
+   2.5.6
diff --git a/examples/ruby/README.md b/examples/ruby/README.md
index 7f46d8a2511c..ad44bc2fdee8 100755
--- a/examples/ruby/README.md
+++ b/examples/ruby/README.md
@@ -20,10 +20,18 @@ cd seleniumhq.github.io/examples/ruby
 bundler install
 ```
 
-4. Run all all tests
+4. Run all tests
 
 ```
 bundle exec rspec
 ```
 
-> Please keep some patience - If you are doing it for the first time, it will take a little while to verify and download the browser drivers
\ No newline at end of file
+> Please keep some patience - If you are doing it for the first time, it will take a little while to verify and download the browser drivers
+
+# Execute a ruby script
+
+Use this command to run a ruby script and follow the first script example
+
+```
+ruby example_script.rb
+```
\ No newline at end of file
diff --git a/examples/ruby/spec/actions_api/keys_spec.rb b/examples/ruby/spec/actions_api/keys_spec.rb
index 62acfb00e650..c6b97e41a4f1 100644
--- a/examples/ruby/spec/actions_api/keys_spec.rb
+++ b/examples/ruby/spec/actions_api/keys_spec.rb
@@ -56,8 +56,7 @@
     expect(text_field.attribute('value')).to eq 'Selenium!'
   end
 
-  it 'copy and paste', except: {browser: :chrome,
-                                reason: 'https://bugs.chromium.org/p/chromedriver/issues/detail?id=4264'} do
+  it 'copy and paste' do
     driver.get 'https://www.selenium.dev/selenium/web/single_text_input.html'
     wait.until { driver.find_element(id: 'textInput').attribute('autofocus') }
 
diff --git a/examples/ruby/spec/actions_api/mouse_spec.rb b/examples/ruby/spec/actions_api/mouse_spec.rb
index 38b2811db0ad..3e3e0b838455 100644
--- a/examples/ruby/spec/actions_api/mouse_spec.rb
+++ b/examples/ruby/spec/actions_api/mouse_spec.rb
@@ -108,7 +108,7 @@
       expect(y_coord).to be_within(1).of(center_y + 11)
     end
 
-    it 'offset from viewport' do
+    it 'offset from viewport', {platforn: :linux, reason: 'it only fails on the linux pipeline'} do
       driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
 
       driver.action
diff --git a/examples/ruby/spec/bidi/cdp/cdp_spec.rb b/examples/ruby/spec/bidi/cdp/cdp_spec.rb
new file mode 100644
index 000000000000..fa2d82f14767
--- /dev/null
+++ b/examples/ruby/spec/bidi/cdp/cdp_spec.rb
@@ -0,0 +1,20 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'Logging' do
+  let(:driver) { start_session }
+
+  it 'sets cookie' do
+    driver.execute_cdp('Network.setCookie',
+                       name: 'cheese',
+                       value: 'gouda',
+                       domain: 'www.selenium.dev',
+                       secure: true)
+
+    driver.get('https://www.selenium.dev')
+    cheese = driver.manage.cookie_named('cheese')
+
+    expect(cheese[:value]).to eq 'gouda'
+  end
+end
diff --git a/examples/ruby/spec/bidi/cdp/logging_spec.rb b/examples/ruby/spec/bidi/cdp/logging_spec.rb
new file mode 100644
index 000000000000..c92f924faccf
--- /dev/null
+++ b/examples/ruby/spec/bidi/cdp/logging_spec.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'Logging' do
+  let(:driver) { start_session }
+
+  it 'listens for console logs' do
+    driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
+
+    logs = []
+    driver.on_log_event(:console) { |log| logs << log.args.first }
+
+    driver.find_element(id: 'consoleLog').click
+    driver.find_element(id: 'consoleError').click
+
+    Selenium::WebDriver::Wait.new.until { logs.size > 1 }
+    expect(logs).to include 'Hello, world!'
+    expect(logs).to include 'I am console error'
+  end
+
+  it 'listens for js exception' do
+    driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
+
+    exceptions = []
+    driver.on_log_event(:exception) { |exception| exceptions << exception }
+
+    driver.find_element(id: 'jsException').click
+
+    Selenium::WebDriver::Wait.new.until { exceptions.any? }
+    expect(exceptions.first&.description).to include 'Error: Not working'
+  end
+end
diff --git a/examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb b/examples/ruby/spec/bidi/cdp/network_spec.rb
similarity index 57%
rename from examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb
rename to examples/ruby/spec/bidi/cdp/network_spec.rb
index 3974cd0ae0fa..c9a818917702 100644
--- a/examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb
+++ b/examples/ruby/spec/bidi/cdp/network_spec.rb
@@ -2,26 +2,58 @@
 
 require 'spec_helper'
 
-RSpec.describe 'Chrome DevTools' do
+RSpec.describe 'Network' do
   let(:driver) { start_session }
 
-  it 'sets cookie' do
-    driver.devtools.network.set_cookie(name: 'cheese',
-                                       value: 'gouda',
-                                       domain: 'www.selenium.dev',
-                                       secure: true)
+  it 'does basic authentication' do
+    driver.register(username: 'admin',
+                    password: 'admin',
+                    uri: /herokuapp/)
 
-    driver.get('https://www.selenium.dev')
-    cheese = driver.manage.cookie_named('cheese')
+    driver.get('https://the-internet.herokuapp.com/basic_auth')
 
-    expect(cheese[:value]).to eq 'gouda'
+    expect(driver.find_element(tag_name: 'p').text).to eq('Congratulations! You must have the proper credentials.')
+  end
+
+  it 'records network response' do
+    content_type = []
+    driver.intercept do |request, &continue|
+      continue.call(request) do |response|
+        content_type << response.headers['content-type']
+      end
+    end
+
+    driver.get('https://www.selenium.dev/selenium/web/blank.html')
+    expect(content_type.first).to eq('text/html; charset=utf-8')
+  end
+
+  it 'transforms network response' do
+    driver.intercept do |request, &continue|
+      continue.call(request) do |response|
+        response.body = 'Creamy, delicious cheese!' if request.url.include?('blank')
+      end
+    end
+
+    driver.get('https://www.selenium.dev/selenium/web/blank.html')
+    expect(driver.find_element(tag_name: 'body').text).to eq('Creamy, delicious cheese!')
+  end
+
+  it 'intercepts network request' do
+    driver.intercept do |request, &continue|
+      uri = URI(request.url)
+      request.url = uri.to_s.gsub('one', 'two') if uri.path&.end_with?('one.js')
+      continue.call(request)
+    end
+
+    driver.get('https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html')
+    driver.find_element(tag_name: 'button').click
+    expect(driver.find_element(id: 'result').text).to eq('two')
   end
 
   it 'gets performance metrics' do
     driver.get('https://www.selenium.dev/selenium/web/frameset.html')
 
     driver.devtools.performance.enable
-
     metric_list = driver.devtools.performance.get_metrics.dig('result', 'metrics')
 
     metrics = metric_list.each_with_object({}) do |metric, hash|
@@ -32,32 +64,16 @@
     expect(metrics['Frames']).to eq 12
   end
 
-  it 'does basic authentication' do
-    driver.devtools.network.enable
-
-    credentials = Base64.strict_encode64('admin:admin')
-
-    driver.devtools.network.set_extra_http_headers(headers: {authorization: "Basic #{credentials}"})
-
-    driver.get('https://the-internet.herokuapp.com/basic_auth')
-
-    expect(driver.find_element(tag_name: 'p').text).to eq('Congratulations! You must have the proper credentials.')
-  end
-
-  it 'listens for console logs' do
-    driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
-
-    driver.devtools.runtime.enable
-
-    logs = []
-    driver.devtools.runtime.on(:console_api_called) do |params|
-      logs << params['args'].first['value']
-    end
+  it 'sets cookie' do
+    driver.devtools.network.set_cookie(name: 'cheese',
+                                       value: 'gouda',
+                                       domain: 'www.selenium.dev',
+                                       secure: true)
 
-    driver.find_element(id: 'consoleLog').click
+    driver.get('https://www.selenium.dev')
+    cheese = driver.manage.cookie_named('cheese')
 
-    Selenium::WebDriver::Wait.new.until { logs.any? }
-    expect(logs).to include 'Hello, world!'
+    expect(cheese[:value]).to eq 'gouda'
   end
 
   it 'waits for downloads', except: {platform: :windows} do
diff --git a/examples/ruby/spec/bidi/cdp/script_spec.rb b/examples/ruby/spec/bidi/cdp/script_spec.rb
new file mode 100644
index 000000000000..77575404cd6e
--- /dev/null
+++ b/examples/ruby/spec/bidi/cdp/script_spec.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'Script' do
+  let(:driver) { start_session }
+
+  it 'pins script' do
+    driver.get('https://www.selenium.dev/selenium/web/xhtmlTest.html')
+    element = driver.find_element(id: 'id1')
+
+    key = driver.pin_script('return arguments;')
+    arguments = driver.execute_script(key, 1, true, element)
+
+    expect(arguments).to eq([1, true, element])
+  end
+
+  it 'gets mutated elements' do
+    driver.get 'https://www.selenium.dev/selenium/web/dynamic.html'
+
+    mutations = []
+    driver.on_log_event(:mutation) { |mutation| mutations << mutation.element }
+
+    driver.find_element(id: 'reveal').click
+    Selenium::WebDriver::Wait.new(timeout: 30).until { mutations.any? }
+
+    expect(mutations).to include(driver.find_element(id: 'revealed'))
+  end
+end
diff --git a/examples/ruby/spec/bidi/logging_spec.rb b/examples/ruby/spec/bidi/logging_spec.rb
new file mode 100644
index 000000000000..df010daae8e3
--- /dev/null
+++ b/examples/ruby/spec/bidi/logging_spec.rb
@@ -0,0 +1,52 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'Logging' do
+  let(:driver) { start_bidi_session }
+  let(:wait) { Selenium::WebDriver::Wait.new(timeout: 2) }
+
+  it 'adds console message handler' do
+    driver.navigate.to 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
+    log_entries = []
+
+    driver.script.add_console_message_handler { |log| log_entries << log }
+
+    driver.find_element(id: 'consoleLog').click
+    wait.until { log_entries.any? }
+    expect(log_entries.first&.text).to eq 'Hello, world!'
+  end
+
+  it 'removes console message handler' do
+    driver.navigate.to 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
+    log_entries = []
+
+    id = driver.script.add_console_message_handler { |log| log_entries << log }
+    driver.script.remove_console_message_handler(id)
+
+    driver.find_element(id: 'consoleLog').click
+    expect(log_entries).to be_empty
+  end
+
+  it 'adds JavaScript error handler' do
+    driver.navigate.to 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
+    log_entries = []
+
+    driver.script.add_javascript_error_handler { |error| log_entries << error }
+
+    driver.find_element(id: 'jsException').click
+    wait.until { log_entries.any? }
+    expect(log_entries.first&.text).to eq 'Error: Not working'
+  end
+
+  it 'removes JavaScript error handler' do
+    driver.navigate.to 'https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html'
+    log_entries = []
+
+    id = driver.script.add_javascript_error_handler { |error| log_entries << error }
+    driver.script.remove_javascript_error_handler(id)
+
+    driver.find_element(id: 'jsException').click
+    expect(log_entries).to be_empty
+  end
+end
diff --git a/examples/ruby/spec/bidi/network_spec.rb b/examples/ruby/spec/bidi/network_spec.rb
new file mode 100644
index 000000000000..3f5c52e03035
--- /dev/null
+++ b/examples/ruby/spec/bidi/network_spec.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'Network', exclusive: {bidi: true, reason: 'only executed when bidi is enabled'},
+                          only: {browser: %i[chrome edge firefox]} do
+  let(:driver) { start_bidi_session }
+  let(:wait) { Selenium::WebDriver::Wait.new(timeout: 2) }
+
+  it 'adds an auth handler', skip: 'Do not execute BiDi test' do
+    driver.network.add_authentication_handler('test', 'test')
+    driver.navigate.to url_for('basicAuth')
+    expect(driver.find_element(tag_name: 'h1').text).to eq('authorized')
+  end
+end
diff --git a/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb b/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb
deleted file mode 100644
index 68bc6b29ad8e..000000000000
--- a/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb
+++ /dev/null
@@ -1,100 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe 'BiDi API' do
-  let(:driver) { start_session }
-
-  it 'does basic authentication' do
-    driver.register(username: 'admin',
-                    password: 'admin',
-                    uri: /herokuapp/)
-
-    driver.get('https://the-internet.herokuapp.com/basic_auth')
-
-    expect(driver.find_element(tag_name: 'p').text).to eq('Congratulations! You must have the proper credentials.')
-  end
-
-  it 'pins script' do
-    driver.get('https://www.selenium.dev/selenium/web/xhtmlTest.html')
-    element = driver.find_element(id: 'id1')
-
-    key = driver.pin_script('return arguments;')
-    arguments = driver.execute_script(key, 1, true, element)
-
-    expect(arguments).to eq([1, true, element])
-  end
-
-  it 'gets mutated elements' do
-    driver.get 'https://www.selenium.dev/selenium/web/dynamic.html'
-
-    mutations = []
-    driver.on_log_event(:mutation) { |mutation| mutations << mutation.element }
-
-    driver.find_element(id: 'reveal').click
-    Selenium::WebDriver::Wait.new(timeout: 30).until { mutations.any? }
-
-    expect(mutations).to include(driver.find_element(id: 'revealed'))
-  end
-
-  it 'listens for console logs' do
-    driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
-
-    logs = []
-    driver.on_log_event(:console) { |log| logs << log.args.first }
-
-    driver.find_element(id: 'consoleLog').click
-    driver.find_element(id: 'consoleError').click
-
-    Selenium::WebDriver::Wait.new.until { logs.size > 1 }
-    expect(logs).to include 'Hello, world!'
-    expect(logs).to include 'I am console error'
-  end
-
-  it 'listens for js exception' do
-    driver.get('https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html')
-
-    exceptions = []
-    driver.on_log_event(:exception) { |exception| exceptions << exception }
-
-    driver.find_element(id: 'jsException').click
-
-    Selenium::WebDriver::Wait.new.until { exceptions.any? }
-    expect(exceptions.first&.description).to include 'Error: Not working'
-  end
-
-  it 'records network response' do
-    content_type = []
-    driver.intercept do |request, &continue|
-      continue.call(request) do |response|
-        content_type << response.headers['content-type']
-      end
-    end
-
-    driver.get('https://www.selenium.dev/selenium/web/blank.html')
-    expect(content_type.first).to eq('text/html; charset=utf-8')
-  end
-
-  it 'transforms network response' do
-    driver.intercept do |request, &continue|
-      continue.call(request) do |response|
-        response.body = 'Creamy, delicious cheese!' if request.url.include?('blank')
-      end
-    end
-
-    driver.get('https://www.selenium.dev/selenium/web/blank.html')
-    expect(driver.find_element(tag_name: 'body').text).to eq('Creamy, delicious cheese!')
-  end
-
-  it 'intercepts network request' do
-    driver.intercept do |request, &continue|
-      uri = URI(request.url)
-      request.url = uri.to_s.gsub('one', 'two') if uri.path&.end_with?('one.js')
-      continue.call(request)
-    end
-
-    driver.get('https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html')
-    driver.find_element(tag_name: 'button').click
-    expect(driver.find_element(id: 'result').text).to eq('two')
-  end
-end
diff --git a/examples/ruby/spec/bidirectional/chrome_devtools/cdp_endpoint_spec.rb b/examples/ruby/spec/bidirectional/chrome_devtools/cdp_endpoint_spec.rb
deleted file mode 100644
index 543f8c81fe43..000000000000
--- a/examples/ruby/spec/bidirectional/chrome_devtools/cdp_endpoint_spec.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe 'Execute CDP' do
-  let(:driver) { start_session }
-
-  it 'sets cookie' do
-    cookie = {name: 'cheese',
-              value: 'gouda',
-              domain: 'www.selenium.dev',
-              secure: true}
-
-    driver.execute_cdp('Network.setCookie', **cookie)
-
-    driver.get('https://www.selenium.dev')
-    cheese = driver.manage.cookie_named(cookie[:name])
-
-    expect(cheese[:value]).to eq 'gouda'
-  end
-
-  it 'gets performance metrics' do
-    driver.get('https://www.selenium.dev/selenium/web/frameset.html')
-
-    driver.execute_cdp('Performance.enable')
-
-    metric_list = driver.execute_cdp('Performance.getMetrics')['metrics']
-
-    metrics = metric_list.each_with_object({}) do |metric, hash|
-      hash[metric['name']] = metric['value']
-    end
-
-    expect(metrics['DevToolsCommandDuration']).to be > 0
-    expect(metrics['Frames']).to eq 12
-  end
-
-  it 'sets basic authentication' do
-    driver.execute_cdp('Network.enable')
-
-    credentials = Base64.strict_encode64('admin:admin')
-    headers = {authorization: "Basic #{credentials}"}
-
-    driver.execute_cdp('Network.setExtraHTTPHeaders', headers: headers)
-
-    driver.get('https://the-internet.herokuapp.com/basic_auth')
-
-    expect(driver.find_element(tag_name: 'p').text).to eq('Congratulations! You must have the proper credentials.')
-  end
-end
diff --git a/examples/ruby/spec/bidirectional/webdriver_bidi/browsing_context_spec.rb b/examples/ruby/spec/bidirectional/webdriver_bidi/browsing_context_spec.rb
deleted file mode 100644
index 17500df33484..000000000000
--- a/examples/ruby/spec/bidirectional/webdriver_bidi/browsing_context_spec.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe 'Browsing Context' do
-  it 'opens a window without browsing context'
-  it 'opens a window with browsing context'
-  it 'opens a tab without browsing context'
-  it 'opens a tab with browsing context'
-  it 'uses existing window'
-  it 'navigates to url with readiness state'
-  it 'navigates to url without readiness state'
-  it 'gets browsing context tree with depth'
-  it 'gets browsing context tree without depth'
-  it 'gets all browsing contexts'
-  it 'closes a tab'
-  it 'closes a window'
-end
diff --git a/examples/ruby/spec/bidirectional/webdriver_bidi/log_spec.rb b/examples/ruby/spec/bidirectional/webdriver_bidi/log_spec.rb
deleted file mode 100644
index cde9854b1e4e..000000000000
--- a/examples/ruby/spec/bidirectional/webdriver_bidi/log_spec.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe 'Log Inspector' do
-  it 'listens to console log'
-  it 'gets JS exceptions'
-  it 'gets JS logs'
-end
diff --git a/examples/ruby/spec/browsers/chrome_spec.rb b/examples/ruby/spec/browsers/chrome_spec.rb
index 36f2639f3fa4..85312ea53d6f 100644
--- a/examples/ruby/spec/browsers/chrome_spec.rb
+++ b/examples/ruby/spec/browsers/chrome_spec.rb
@@ -20,7 +20,11 @@
     end
 
     it 'sets location of binary' do
+      user_data_dir = Dir.mktmpdir('chrome-profile-')
       options = Selenium::WebDriver::Options.chrome
+      options.add_argument("--user-data-dir=#{user_data_dir}")
+      options.add_argument('--no-sandbox')
+      options.add_argument('--disable-dev-shm-usage')
 
       options.binary = chrome_location
 
@@ -32,6 +36,7 @@
       options = Selenium::WebDriver::Options.chrome
 
       options.add_extension(extension_file_path)
+      options.add_argument('--disable-features=DisableLoadExtensionCommandLineSwitch')
 
       @driver = Selenium::WebDriver.for :chrome, options: options
       @driver.get('https://www.selenium.dev/selenium/web/blank.html')
@@ -113,9 +118,58 @@
     end
   end
 
+  describe 'Special Features' do
+    it 'casts' do
+      @driver = Selenium::WebDriver.for :chrome
+      sinks = @driver.cast_sinks
+      unless sinks.empty?
+        device_name = sinks.first['name']
+        @driver.start_cast_tab_mirroring(device_name)
+        expect { @driver.stop_casting(device_name) }.not_to raise_exception
+      end
+    end
+
+    it 'gets and sets network conditions' do
+      @driver = Selenium::WebDriver.for :chrome
+      @driver.network_conditions = {offline: false, latency: 100, throughput: 200}
+      expect(@driver.network_conditions).to eq(
+        'offline' => false,
+        'latency' => 100,
+        'download_throughput' => 200,
+        'upload_throughput' => 200
+      )
+    end
+
+    it 'gets the browser logs' do
+      @driver = Selenium::WebDriver.for :chrome
+      @driver.navigate.to 'https://www.selenium.dev/selenium/web/'
+      sleep 1
+      logs = @driver.logs.get(:browser)
+
+      expect(logs.first.message).to include 'Failed to load resource'
+    end
+
+    it 'sets permissions' do
+      @driver = Selenium::WebDriver.for :chrome
+      @driver.navigate.to 'https://www.selenium.dev/selenium/web/'
+      @driver.add_permission('camera', 'denied')
+      @driver.add_permissions('clipboard-read' => 'denied', 'clipboard-write' => 'prompt')
+      expect(permission('camera')).to eq('denied')
+      expect(permission('clipboard-read')).to eq('denied')
+      expect(permission('clipboard-write')).to eq('prompt')
+    end
+  end
+
   def driver_finder
     options = Selenium::WebDriver::Options.chrome(browser_version: 'stable')
-    ENV['CHROMEDRIVER_BIN'] = Selenium::WebDriver::DriverFinder.path(options, Selenium::WebDriver::Chrome::Service)
-    ENV['CHROME_BIN'] = options.binary
+    service = Selenium::WebDriver::Service.chrome
+    finder = Selenium::WebDriver::DriverFinder.new(options, service)
+    ENV['CHROMEDRIVER_BIN'] = finder.driver_path
+    ENV['CHROME_BIN'] = finder.browser_path
+  end
+
+  def permission(name)
+    @driver.execute_async_script('callback = arguments[arguments.length - 1];' \
+                                 'callback(navigator.permissions.query({name: arguments[0]}));', name)['state']
   end
 end
diff --git a/examples/ruby/spec/browsers/edge_spec.rb b/examples/ruby/spec/browsers/edge_spec.rb
index aeb8bcd5184a..5820fab3e799 100644
--- a/examples/ruby/spec/browsers/edge_spec.rb
+++ b/examples/ruby/spec/browsers/edge_spec.rb
@@ -29,11 +29,11 @@
 
     it 'add extensions' do
       extension_file_path = File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx', __dir__)
-      options = Selenium::WebDriver::Options.chrome
+      options = Selenium::WebDriver::Options.edge
 
       options.add_extension(extension_file_path)
 
-      @driver = Selenium::WebDriver.for :chrome, options: options
+      @driver = Selenium::WebDriver.for :edge, options: options
       @driver.get('https://www.selenium.dev/selenium/web/blank.html')
       injected = @driver.find_element(:id, 'webextensions-selenium-example')
       expect(injected.text).to eq 'Content injected by webextensions-selenium-example'
@@ -113,9 +113,58 @@
     end
   end
 
+  describe 'Special Features' do
+    it 'casts' do
+      @driver = Selenium::WebDriver.for :edge
+      sinks = @driver.cast_sinks
+      unless sinks.empty?
+        device_name = sinks.first['name']
+        @driver.start_cast_tab_mirroring(device_name)
+        expect { @driver.stop_casting(device_name) }.not_to raise_exception
+      end
+    end
+
+    it 'gets and sets network conditions' do
+      @driver = Selenium::WebDriver.for :edge
+      @driver.network_conditions = {offline: false, latency: 100, throughput: 200}
+      expect(@driver.network_conditions).to eq(
+        'offline' => false,
+        'latency' => 100,
+        'download_throughput' => 200,
+        'upload_throughput' => 200
+      )
+    end
+
+    it 'gets the browser logs' do
+      @driver = Selenium::WebDriver.for :edge
+      @driver.navigate.to 'https://www.selenium.dev/selenium/web/'
+      sleep 1
+      logs = @driver.logs.get(:browser)
+
+      expect(logs.first.message).to include 'Failed to load resource'
+    end
+
+    it 'sets permissions' do
+      @driver = Selenium::WebDriver.for :edge
+      @driver.navigate.to 'https://www.selenium.dev/selenium/web/'
+      @driver.add_permission('camera', 'denied')
+      @driver.add_permissions('clipboard-read' => 'denied', 'clipboard-write' => 'prompt')
+      expect(permission('camera')).to eq('denied')
+      expect(permission('clipboard-read')).to eq('denied')
+      expect(permission('clipboard-write')).to eq('prompt')
+    end
+  end
+
   def driver_finder
     options = Selenium::WebDriver::Options.edge(browser_version: 'stable')
-    ENV['EDGEDRIVER_BIN'] = Selenium::WebDriver::DriverFinder.path(options, Selenium::WebDriver::Edge::Service)
-    ENV['EDGE_BIN'] = options.binary
+    service = Selenium::WebDriver::Service.edge
+    finder = Selenium::WebDriver::DriverFinder.new(options, service)
+    ENV['EDGEDRIVER_BIN'] = finder.driver_path
+    ENV['EDGE_BIN'] = finder.browser_path
+  end
+
+  def permission(name)
+    @driver.execute_async_script('callback = arguments[arguments.length - 1];' \
+                                 'callback(navigator.permissions.query({name: arguments[0]}));', name)['state']
   end
 end
diff --git a/examples/ruby/spec/browsers/firefox_spec.rb b/examples/ruby/spec/browsers/firefox_spec.rb
index b67d1dee72f4..7a56053e4838 100644
--- a/examples/ruby/spec/browsers/firefox_spec.rb
+++ b/examples/ruby/spec/browsers/firefox_spec.rb
@@ -118,11 +118,36 @@
       injected = driver.find_element(id: 'webextensions-selenium-example')
       expect(injected.text).to eq 'Content injected by webextensions-selenium-example'
     end
+
+    it 'takes full page screenshot' do
+      driver.navigate.to 'https://www.selenium.dev/selenium/web/blank.html'
+      Dir.mktmpdir('screenshot_test') do |dir|
+        screenshot = driver.save_full_page_screenshot(File.join(dir, 'screenshot.png'))
+
+        expect(screenshot).to be_a File
+      end
+    end
+
+    it 'sets the context' do
+      driver.context = 'content'
+      expect(driver.context).to eq 'content'
+    end
+  end
+
+  describe 'Profile' do
+    it 'creates a new profile' do
+      profile = Selenium::WebDriver::Firefox::Profile.new
+      profile['browser.download.dir'] = '/tmp/webdriver-downloads'
+      options = Selenium::WebDriver::Firefox::Options.new(profile: profile)
+      expect(options.profile).to eq(profile)
+    end
   end
 
   def driver_finder
     options = Selenium::WebDriver::Options.firefox(browser_version: 'stable')
-    ENV['GECKODRIVER_BIN'] = Selenium::WebDriver::DriverFinder.path(options, Selenium::WebDriver::Firefox::Service)
-    ENV['FIREFOX_BIN'] = options.binary
+    service = Selenium::WebDriver::Service.firefox
+    finder = Selenium::WebDriver::DriverFinder.new(options, service)
+    ENV['GECKODRIVER_BIN'] = finder.driver_path
+    ENV['FIREFOX_BIN'] = finder.browser_path
   end
 end
diff --git a/examples/ruby/spec/browsers/internet_explorer_spec.rb b/examples/ruby/spec/browsers/internet_explorer_spec.rb
index f3c2d32a25e9..458c5c726873 100644
--- a/examples/ruby/spec/browsers/internet_explorer_spec.rb
+++ b/examples/ruby/spec/browsers/internet_explorer_spec.rb
@@ -2,12 +2,19 @@
 
 require 'spec_helper'
 
-RSpec.describe 'Internet Explorer', exclusive: {platform: :windows} do
+RSpec.describe 'Internet Explorer', skip: 'the connection fails on the windows pipeline' do
   describe 'Options' do
     let(:edge_location) { ENV.fetch('EDGE_BIN', nil) }
+    let(:url) { 'https://www.selenium.dev/selenium/web/' }
+
+    before do
+      @options = Selenium::WebDriver::IE::Options.new
+      @options.attach_to_edge_chrome = true
+      @options.edge_executable_path = edge_location
+    end
 
     it 'basic options Win10' do
-      options = Selenium::WebDriver::Options.ie
+      options = Selenium::WebDriver::IE::Options.new
       options.attach_to_edge_chrome = true
       options.edge_executable_path = edge_location
       @driver = Selenium::WebDriver.for :ie, options: options
@@ -17,6 +24,47 @@
       options = Selenium::WebDriver::Options.ie
       @driver = Selenium::WebDriver.for :ie, options: options
     end
+
+    it 'sets the file upload dialog timeout' do
+      @options.file_upload_dialog_timeout = 2000
+      driver = Selenium::WebDriver.for(:ie, options: @options)
+      driver.quit
+    end
+
+    it 'ensures a clean session' do
+      @options.ensure_clean_session = true
+      driver = Selenium::WebDriver.for(:ie, options: @options)
+      driver.quit
+    end
+
+    it 'ignores the zoom setting' do
+      @options.ignore_zoom_level = true
+      driver = Selenium::WebDriver.for(:ie, options: @options)
+      driver.quit
+    end
+
+    it 'ignores the protected mode settings' do
+      @options.ignore_protected_mode_settings = true
+      driver = Selenium::WebDriver.for(:ie, options: @options)
+      driver.quit
+    end
+
+    it 'adds the silent option' do
+      @options.silent = true
+      expect(@options.silent).to be_truthy
+    end
+
+    it 'sets the command line options' do
+      @options.add_argument('-k')
+      Selenium::WebDriver.for(:ie, options: @options)
+    end
+
+    it 'launches ie with the create process api' do
+      @options.force_create_process_api = true
+      Selenium::WebDriver.for(:ie, options: @options)
+      expect(@options.instance_variable_get(:@options)['force_create_process_api'])
+        .to eq({force_create_process_api: true})
+    end
   end
 
   describe 'Service' do
diff --git a/examples/ruby/spec/browsers/safari_spec.rb b/examples/ruby/spec/browsers/safari_spec.rb
index 09a8bb8d8181..64e89ee22926 100644
--- a/examples/ruby/spec/browsers/safari_spec.rb
+++ b/examples/ruby/spec/browsers/safari_spec.rb
@@ -2,6 +2,7 @@
 
 require 'spec_helper'
 
+# rubocop:disable RSpec/MultipleDescribes
 RSpec.describe 'Safari', exclusive: {platform: :macosx} do
   describe 'Options' do
     it 'basic options' do
@@ -13,7 +14,7 @@
   describe 'Service' do
     let(:directory) { "#{Dir.home}/Library/Logs/com.apple.WebDriver/*" }
 
-    it 'enable logs' do
+    it 'enables logs' do
       original_count = Dir[directory].length
       service = Selenium::WebDriver::Service.safari
 
@@ -32,3 +33,13 @@
     end
   end
 end
+
+RSpec.describe 'Safari Technology Preview', skip: 'This test is being skipped as GitHub Actions ' \
+                                                  'have no support for Safari Technology Preview' do
+  it 'sets the technology preview' do
+    Selenium::WebDriver::Safari.technology_preview!
+    local_driver = Selenium::WebDriver.for :safari
+    expect(local_driver.capabilities.browser_name).to eq 'Safari Technology Preview'
+  end
+end
+# rubocop:enable RSpec/MultipleDescribes
diff --git a/examples/ruby/spec/drivers/http_client_spec.rb b/examples/ruby/spec/drivers/http_client_spec.rb
index fd0c169763d3..b8fdc6e9a675 100644
--- a/examples/ruby/spec/drivers/http_client_spec.rb
+++ b/examples/ruby/spec/drivers/http_client_spec.rb
@@ -3,4 +3,17 @@
 require 'spec_helper'
 
 RSpec.describe 'HTTP Client' do
+  let(:url) { 'https://www.selenium.dev/selenium/web/' }
+
+  it 'sets client configuration' do
+    client = Selenium::WebDriver::Remote::Http::Default.new(open_timeout: 30, read_timeout: 30)
+    expect(client.open_timeout).to eq 30
+  end
+
+  it 'uses the custom http client' do
+    client = Selenium::WebDriver::Remote::Http::Default.new
+    driver = Selenium::WebDriver.for :chrome, http_client: client
+    driver.get(url)
+    driver.quit
+  end
 end
diff --git a/examples/ruby/spec/drivers/options_spec.rb b/examples/ruby/spec/drivers/options_spec.rb
index dcf6194c9cd6..0f3171050c53 100644
--- a/examples/ruby/spec/drivers/options_spec.rb
+++ b/examples/ruby/spec/drivers/options_spec.rb
@@ -2,5 +2,132 @@
 
 require 'spec_helper'
 
-RSpec.describe 'Options' do
+RSpec.describe 'Chrome' do
+  describe 'Driver Options' do
+    let(:chrome_location) { driver_finder && ENV.fetch('CHROME_BIN', nil) }
+    let(:url) { 'https://www.selenium.dev/selenium/web/' }
+
+    it 'page load strategy normal' do
+      options = Selenium::WebDriver::Options.chrome
+      options.page_load_strategy = :normal
+
+      driver = Selenium::WebDriver.for :chrome, options: options
+      driver.get(url)
+      driver.quit
+    end
+
+    it 'page load strategy eager' do
+      options = Selenium::WebDriver::Options.chrome
+      options.page_load_strategy = :eager
+
+      driver = Selenium::WebDriver.for :chrome, options: options
+      driver.get(url)
+      driver.quit
+    end
+
+    it 'page load strategy none' do
+      options = Selenium::WebDriver::Options.chrome
+      options.page_load_strategy = :none
+
+      driver = Selenium::WebDriver.for :chrome, options: options
+      driver.get(url)
+      driver.quit
+    end
+
+    it 'sets remote capabilities', skip: 'this is example code that will not execute' do
+      options = Selenium::WebDriver::Options.firefox
+      options.platform_name = 'Windows 10'
+      options.browser_version = 'latest'
+      cloud_options = {}
+      cloud_options[:build] = my_test_build
+      cloud_options[:name] = my_test_name
+      options.add_option('cloud:options', cloud_options)
+      driver = Selenium::WebDriver.for :remote, capabilities: options
+      driver.get(url)
+      driver.quit
+    end
+
+    it 'accepts untrusted certificates' do
+      options = Selenium::WebDriver::Options.chrome
+      options.accept_insecure_certs = true
+
+      driver = Selenium::WebDriver.for :chrome, options: options
+      driver.get(url)
+      driver.quit
+    end
+
+    it 'sets unhandled prompt behavior' do
+      options = Selenium::WebDriver::Options.chrome
+      options.unhandled_prompt_behavior = :accept
+
+      driver = Selenium::WebDriver.for :chrome, options: options
+      driver.get(url)
+      driver.quit
+    end
+
+    it 'sets window rect' do
+      options = Selenium::WebDriver::Options.firefox
+      options.set_window_rect = true
+
+      driver = Selenium::WebDriver.for :firefox, options: options
+      driver.get(url)
+      driver.quit
+    end
+
+    it 'sets strict file interactability' do
+      options = Selenium::WebDriver::Options.chrome
+      options.strict_file_interactability = true
+
+      driver = Selenium::WebDriver.for :chrome, options: options
+      driver.get(url)
+      driver.quit
+    end
+
+    it 'sets the proxy' do
+      options = Selenium::WebDriver::Options.chrome
+      options.proxy = Selenium::WebDriver::Proxy.new(http: 'myproxy.com:8080')
+
+      driver = Selenium::WebDriver.for :chrome, options: options
+      driver.get(url)
+      driver.quit
+    end
+
+    it 'sets the implicit timeout' do
+      options = Selenium::WebDriver::Options.chrome
+      options.timeouts = {implicit: 1}
+
+      driver = Selenium::WebDriver.for :chrome, options: options
+      driver.get(url)
+      driver.quit
+    end
+
+    it 'sets the page load timeout' do
+      options = Selenium::WebDriver::Options.chrome
+      options.timeouts = {page_load: 400_000}
+
+      driver = Selenium::WebDriver.for :chrome, options: options
+      driver.get(url)
+      driver.quit
+    end
+
+    it 'sets the script timeout' do
+      options = Selenium::WebDriver::Options.chrome
+      options.timeouts = {script: 40_000}
+
+      driver = Selenium::WebDriver.for :chrome, options: options
+      driver.get(url)
+      driver.quit
+    end
+
+    it 'sets capabilities in the pre-selenium 4 way', skip: 'this is example code that will not execute' do
+      caps = Selenium::WebDriver::Remote::Capabilities.firefox
+      caps[:platform] = 'Windows 10'
+      caps[:version] = '92'
+      caps[:build] = my_test_build
+      caps[:name] = my_test_name
+      driver = Selenium::WebDriver.for :remote, url: cloud_url, desired_capabilities: caps
+      driver.get(url)
+      driver.quit
+    end
+  end
 end
diff --git a/examples/ruby/spec/drivers/remote_webdriver_spec.rb b/examples/ruby/spec/drivers/remote_webdriver_spec.rb
index e2673c89e349..d2d9c43e73d7 100644
--- a/examples/ruby/spec/drivers/remote_webdriver_spec.rb
+++ b/examples/ruby/spec/drivers/remote_webdriver_spec.rb
@@ -7,7 +7,7 @@
   let(:target_directory) { File.join(Dir.tmpdir, SecureRandom.uuid) }
   let(:wait) { Selenium::WebDriver::Wait.new(timeout: 2) }
   let(:server) do
-    Selenium::Server.get(:latest,
+    Selenium::Server.new(File.expand_path(File.join('..', '..', '..', 'selenium-server-4.35.0.jar'), __dir__),
                          background: true,
                          args: %w[--selenium-manager true --enable-managed-downloads true])
   end
@@ -35,8 +35,8 @@
     file_input.send_keys(upload_file)
     driver.find_element(id: 'file-submit').click
 
-    file_name = driver.find_element(id: 'uploaded-files')
-    expect(file_name.text).to eq 'selenium-snapshot.png'
+    wait.until { driver.find_element(id: 'uploaded-files') }
+    expect(driver.find_element(id: 'uploaded-files').text).to eq 'selenium-snapshot.png'
   end
 
   it 'downloads' do
@@ -47,12 +47,12 @@
     driver.get('https://www.selenium.dev/selenium/web/downloads/download.html')
     driver.find_element(id: 'file-1').click
     driver.find_element(id: 'file-2').click
-    wait.until { driver.downloadable_files.include? 'file_2.jpg' }
+    wait.until { driver.downloadable_files.include?('file_2.jpg') && driver.downloadable_files.include?('file_1.txt') }
 
     files = driver.downloadable_files
 
-    expect(files).to eq file_names
-    downloadable_file = files.first
+    expect(files.sort).to eq file_names.sort
+    downloadable_file = 'file_1.txt'
 
     driver.download_file(downloadable_file, target_directory)
 
diff --git a/examples/ruby/spec/drivers/service_spec.rb b/examples/ruby/spec/drivers/service_spec.rb
index c08b27157584..2187a8319e1b 100644
--- a/examples/ruby/spec/drivers/service_spec.rb
+++ b/examples/ruby/spec/drivers/service_spec.rb
@@ -16,7 +16,11 @@
   end
 
   it 'specifies driver location' do
+    user_data_dir = Dir.mktmpdir('chrome-profile-')
     options = Selenium::WebDriver::Options.chrome(binary: browser_path)
+    options.add_argument("--user-data-dir=#{user_data_dir}")
+    options.add_argument('--no-sandbox')
+    options.add_argument('--disable-dev-shm-usage')
     service = Selenium::WebDriver::Service.chrome
 
     service.executable_path = driver_path
@@ -33,7 +37,9 @@
 
   def driver_finder
     options = Selenium::WebDriver::Options.chrome(browser_version: 'stable')
-    ENV['CHROMEDRIVER_BIN'] = Selenium::WebDriver::DriverFinder.path(options, Selenium::WebDriver::Chrome::Service)
-    ENV['CHROME_BIN'] = options.binary
+    service = Selenium::WebDriver::Service.chrome
+    finder = Selenium::WebDriver::DriverFinder.new(options, service)
+    ENV['CHROMEDRIVER_BIN'] = finder.driver_path
+    ENV['CHROME_BIN'] = finder.browser_path
   end
 end
diff --git a/examples/ruby/spec/elements/finders_spec.rb b/examples/ruby/spec/elements/finders_spec.rb
index 9918bb1d4b1b..5c6aa67dc841 100644
--- a/examples/ruby/spec/elements/finders_spec.rb
+++ b/examples/ruby/spec/elements/finders_spec.rb
@@ -4,4 +4,39 @@
 
 RSpec.describe 'Element Finders' do
   let(:driver) { start_session }
+
+  context 'without executing finders', skip: 'these are just examples, not actual tests' do
+    it 'finds the first matching element' do
+      driver.find_element(class: 'tomatoes')
+    end
+
+    it 'uses a subset of the dom to find an element' do
+      fruits = driver.find_element(id: 'fruits')
+      fruits.find_element(class: 'tomatoes')
+    end
+
+    it 'uses an optimized locator' do
+      driver.find_element(css: '#fruits .tomatoes')
+    end
+
+    it 'finds all matching elements' do
+      driver.find_elements(tag_name: 'li')
+    end
+
+    it 'gets an element from a collection' do
+      elements = driver.find_elements(:tag_name, 'p')
+      elements.each { |e| puts e.text }
+    end
+
+    it 'finds element from element' do
+      element = driver.find_element(:tag_name, 'div')
+      elements = element.find_elements(:tag_name, 'p')
+      elements.each { |e| puts e.text }
+    end
+
+    it 'find active element' do
+      driver.find_element(css: '[name="q"]').send_keys('webElement')
+      driver.switch_to.active_element.attribute('title')
+    end
+  end
 end
diff --git a/examples/ruby/spec/elements/information_spec.rb b/examples/ruby/spec/elements/information_spec.rb
index 69b06716a2b0..b3e159d3e06e 100644
--- a/examples/ruby/spec/elements/information_spec.rb
+++ b/examples/ruby/spec/elements/information_spec.rb
@@ -4,4 +4,48 @@
 
 RSpec.describe 'Element Information' do
   let(:driver) { start_session }
+  let(:url) { 'https://www.selenium.dev/selenium/web/inputs.html' }
+
+  before { driver.get(url) }
+
+  it 'checks if an element is displayed' do
+    displayed_value = driver.find_element(name: 'email_input').displayed?
+    expect(displayed_value).to be_truthy
+  end
+
+  it 'checks if an element is enabled' do
+    enabled_value = driver.find_element(name: 'email_input').enabled?
+    expect(enabled_value).to be_truthy
+  end
+
+  it 'checks if an element is selected' do
+    selected_value = driver.find_element(name: 'email_input').selected?
+    expect(selected_value).to be_falsey
+  end
+
+  it 'gets the tag name of an element' do
+    tag_name = driver.find_element(name: 'email_input').tag_name
+    expect(tag_name).not_to be_empty
+  end
+
+  it 'gets the size and position of an element' do
+    size = driver.find_element(name: 'email_input').size
+    expect(size.width).to be_positive
+    expect(size.height).to be_positive
+  end
+
+  it 'gets the css value of an element' do
+    css_value = driver.find_element(name: 'email_input').css_value('background-color')
+    expect(css_value).not_to be_empty
+  end
+
+  it 'gets the text of an element' do
+    text = driver.find_element(xpath: '//h1').text
+    expect(text).to eq('Testing Inputs')
+  end
+
+  it 'gets the attribute value of an element' do
+    attribute_value = driver.find_element(name: 'number_input').attribute('value')
+    expect(attribute_value).not_to be_empty
+  end
 end
diff --git a/examples/ruby/spec/elements/interaction_spec.rb b/examples/ruby/spec/elements/interaction_spec.rb
index 31711d6cee9a..b0355a77ae69 100644
--- a/examples/ruby/spec/elements/interaction_spec.rb
+++ b/examples/ruby/spec/elements/interaction_spec.rb
@@ -4,4 +4,15 @@
 
 RSpec.describe 'Element Interaction' do
   let(:driver) { start_session }
+
+  before { driver.get 'https://www.selenium.dev/selenium/web/inputs.html' }
+
+  it 'clicks an element' do
+    driver.find_element(name: 'color_input').click
+  end
+
+  it 'clears and send keys to an element' do
+    driver.find_element(name: 'email_input').clear
+    driver.find_element(name: 'email_input').send_keys 'admin@localhost.dev'
+  end
 end
diff --git a/examples/ruby/spec/elements/locators_spec.rb b/examples/ruby/spec/elements/locators_spec.rb
index 2882d196f988..99e1544d1a60 100644
--- a/examples/ruby/spec/elements/locators_spec.rb
+++ b/examples/ruby/spec/elements/locators_spec.rb
@@ -2,6 +2,62 @@
 
 require 'spec_helper'
 
-RSpec.describe 'Element Locators' do
-  let(:driver) { start_session }
+RSpec.describe 'Element Locators', skip: 'These are reference following the documentation example' do
+  it 'finds element by class name' do
+    driver.find_element(class: 'information')
+  end
+
+  it 'finds element by css selector' do
+    driver.find_element(css: '#fname')
+  end
+
+  it 'finds element by id' do
+    driver.find_element(id: 'lname')
+  end
+
+  it 'find element by name' do
+    driver.find_element(name: 'newsletter')
+  end
+
+  it 'finds element by link text' do
+    driver.find_element(link_text: 'Selenium Official Page')
+  end
+
+  it 'finds element by partial link text' do
+    driver.find_element(partial_link_text: 'Official Page')
+  end
+
+  it 'finds element by tag name' do
+    driver.find_element(tag_name: 'a')
+  end
+
+  it 'finds element by xpath' do
+    driver.find_element(xpath: "//input[@value='f']")
+  end
+
+  context 'with relative locators' do
+    it 'finds element above' do
+      driver.find_element({relative: {tag_name: 'input', above: {id: 'password'}}})
+    end
+
+    it 'finds element below' do
+      driver.find_element({relative: {tag_name: 'input', below: {id: 'email'}}})
+    end
+
+    it 'finds element to the left' do
+      driver.find_element({relative: {tag_name: 'button', left: {id: 'submit'}}})
+    end
+
+    it 'finds element to the right' do
+      driver.find_element({relative: {tag_name: 'button', right: {id: 'cancel'}}})
+    end
+
+    it 'finds near element' do
+      driver.find_element({relative: {tag_name: 'input', near: {id: 'lbl-email'}}})
+    end
+
+    it 'chains relative locators' do
+      driver.find_element({relative: {tag_name: 'button', below: {id: 'email'}, right: {id: 'cancel'}}})
+    end
+  end
 end
diff --git a/examples/ruby/spec/getting_started/using_selenium_spec.rb b/examples/ruby/spec/getting_started/using_selenium_spec.rb
index e371cf3699bc..f972389fca0b 100644
--- a/examples/ruby/spec/getting_started/using_selenium_spec.rb
+++ b/examples/ruby/spec/getting_started/using_selenium_spec.rb
@@ -1,28 +1,29 @@
 # frozen_string_literal: true
 
 require 'spec_helper'
+require 'selenium-webdriver'
 
 RSpec.describe 'Using Selenium' do
-  it 'uses eight components' do
-    driver = Selenium::WebDriver.for :chrome
+  before do
+    @driver = Selenium::WebDriver.for :chrome
+  end
 
-    driver.get('https://www.selenium.dev/selenium/web/web-form.html')
+  it 'uses eight components' do
+    @driver.get('https://www.selenium.dev/selenium/web/web-form.html')
 
-    title = driver.title
+    title = @driver.title
     expect(title).to eq('Web form')
 
-    driver.manage.timeouts.implicit_wait = 500
+    @driver.manage.timeouts.implicit_wait = 500
 
-    text_box = driver.find_element(name: 'my-text')
-    submit_button = driver.find_element(tag_name: 'button')
+    text_box = @driver.find_element(name: 'my-text')
+    submit_button = @driver.find_element(tag_name: 'button')
 
     text_box.send_keys('Selenium')
     submit_button.click
 
-    message = driver.find_element(id: 'message')
+    message = @driver.find_element(id: 'message')
     value = message.text
     expect(value).to eq('Received!')
-
-    driver.quit
   end
 end
diff --git a/examples/ruby/spec/hello/hello_selenium_spec.rb b/examples/ruby/spec/hello/hello_selenium.rb
similarity index 79%
rename from examples/ruby/spec/hello/hello_selenium_spec.rb
rename to examples/ruby/spec/hello/hello_selenium.rb
index c8078fe08a64..52b2d69d81f8 100644
--- a/examples/ruby/spec/hello/hello_selenium_spec.rb
+++ b/examples/ruby/spec/hello/hello_selenium.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'selenium-webdriver'
 
 driver = Selenium::WebDriver.for :chrome
diff --git a/examples/ruby/spec/interactions/alerts_spec.rb b/examples/ruby/spec/interactions/alerts_spec.rb
index b2dd8ca218e0..b8337db2fcdc 100644
--- a/examples/ruby/spec/interactions/alerts_spec.rb
+++ b/examples/ruby/spec/interactions/alerts_spec.rb
@@ -4,4 +4,47 @@
 
 RSpec.describe 'Alerts' do
   let(:driver) { start_session }
+
+  before do
+    driver.navigate.to 'https://selenium.dev'
+  end
+
+  it 'interacts with an alert' do
+    driver.execute_script 'alert("Hello, World!")'
+
+    # Store the alert reference in a variable
+    alert = driver.switch_to.alert
+
+    # Get the text of the alert
+    alert.text
+
+    # Press on Cancel button
+    alert.dismiss
+  end
+
+  it 'interacts with a confirm' do
+    driver.execute_script 'confirm("Are you sure?")'
+
+    # Store the alert reference in a variable
+    alert = driver.switch_to.alert
+
+    # Get the text of the alert
+    alert.text
+
+    # Press on Cancel button
+    alert.dismiss
+  end
+
+  it 'interacts with a prompt' do
+    driver.execute_script 'prompt("What is your name?")'
+
+    # Store the alert reference in a variable
+    alert = driver.switch_to.alert
+
+    # Type a message
+    alert.send_keys('selenium')
+
+    # Press on Ok button
+    alert.accept
+  end
 end
diff --git a/examples/ruby/spec/interactions/browser_spec.rb b/examples/ruby/spec/interactions/browser_spec.rb
new file mode 100644
index 000000000000..f404a6d9eee4
--- /dev/null
+++ b/examples/ruby/spec/interactions/browser_spec.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'Browser' do
+  let(:driver) { start_session }
+
+  it 'gets the current title' do
+    driver.navigate.to 'https://www.selenium.dev/'
+    current_title = driver.title
+    expect(current_title).to eq 'Selenium'
+  end
+
+  it 'gets the current url' do
+    driver.navigate.to 'https://www.selenium.dev/'
+    current_url = driver.current_url
+    expect(current_url).to eq 'https://www.selenium.dev/'
+  end
+end
diff --git a/examples/ruby/spec/interactions/cookies_spec.rb b/examples/ruby/spec/interactions/cookies_spec.rb
index fe5b3dfc4235..b679a720ba20 100644
--- a/examples/ruby/spec/interactions/cookies_spec.rb
+++ b/examples/ruby/spec/interactions/cookies_spec.rb
@@ -4,4 +4,55 @@
 
 RSpec.describe 'Cookies' do
   let(:driver) { start_session }
+
+  it 'adds a cookie' do
+    driver.navigate.to 'https://www.selenium.dev/selenium/web/blank.html'
+    # Add cookie into current browser context
+    driver.manage.add_cookie(name: 'key', value: 'value')
+    # Verify cookie was added
+    expect(driver.manage.cookie_named('key')[:value]).to eq('value')
+  end
+
+  it 'gets a named cookie' do
+    driver.navigate.to 'https://www.selenium.dev/selenium/web/blank.html'
+    # Add cookie into current browser context
+    driver.manage.add_cookie(name: 'foo', value: 'bar')
+    # Get cookie details with named cookie 'foo'
+    cookie = driver.manage.cookie_named('foo')
+    expect(cookie[:value]).to eq('bar')
+  end
+
+  it 'gets all cookies' do
+    driver.navigate.to 'https://www.selenium.dev/selenium/web/blank.html'
+    # Add cookies into current browser context
+    driver.manage.add_cookie(name: 'test1', value: 'cookie1')
+    driver.manage.add_cookie(name: 'test2', value: 'cookie2')
+    # Get cookies
+    cookies = driver.manage.all_cookies
+    # Verify both cookies exist with correct values
+    test1_cookie = cookies.find { |c| c[:name] == 'test1' }
+    test2_cookie = cookies.find { |c| c[:name] == 'test2' }
+    expect(test1_cookie[:value]).to eq('cookie1')
+    expect(test2_cookie[:value]).to eq('cookie2')
+  end
+
+  it 'deletes a cookie by name' do
+    driver.navigate.to 'https://www.selenium.dev/selenium/web/blank.html'
+    driver.manage.add_cookie(name: 'test1', value: 'cookie1')
+    # Delete cookie named
+    driver.manage.delete_cookie('test1')
+    # Verify cookie is deleted
+    expect { driver.manage.cookie_named('test1') }.to raise_error(Selenium::WebDriver::Error::NoSuchCookieError)
+  end
+
+  it 'deletes all cookies' do
+    driver.navigate.to 'https://www.selenium.dev/selenium/web/blank.html'
+    # Add cookies into current browser context
+    driver.manage.add_cookie(name: 'test1', value: 'cookie1')
+    driver.manage.add_cookie(name: 'test2', value: 'cookie2')
+    # Delete All cookies
+    driver.manage.delete_all_cookies
+    # Verify all cookies are deleted
+    expect(driver.manage.all_cookies.size).to eq(0)
+  end
 end
diff --git a/examples/ruby/spec/interactions/frames_spec.rb b/examples/ruby/spec/interactions/frames_spec.rb
index d7b27b174044..d8b3b0c3b3dc 100644
--- a/examples/ruby/spec/interactions/frames_spec.rb
+++ b/examples/ruby/spec/interactions/frames_spec.rb
@@ -1,7 +1,52 @@
+# Licensed to the Software Freedom Conservancy (SFC) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The SFC licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
 # frozen_string_literal: true
 
 require 'spec_helper'
 
 RSpec.describe 'Frames' do
   let(:driver) { start_session }
+
+  it 'performs iframe switching operations' do
+    driver.navigate.to 'https://www.selenium.dev/selenium/web/iframes.html'
+    # --- Switch to iframe using WebElement ---
+    iframe = driver.find_element(:id, 'iframe1')
+    driver.switch_to.frame(iframe)
+    expect(driver.page_source).to include('We Leave From Here')
+
+    email_element = driver.find_element(:id, 'email')
+    email_element.send_keys('admin@selenium.dev')
+    email_element.clear
+    driver.switch_to.default_content
+
+    # --- Switch to iframe using name or ID ---
+    iframe1 = driver.find_element(:name, 'iframe1-name')
+    driver.switch_to.frame(iframe1)
+    expect(driver.page_source).to include('We Leave From Here')
+
+    email = driver.find_element(:id, 'email')
+    email.send_keys('admin@selenium.dev')
+    email.clear
+    driver.switch_to.default_content
+
+    # --- Switch to iframe using index ---
+    driver.switch_to.frame(0)
+    expect(driver.page_source).to include('We Leave From Here')
+    # --- Final page content check ---
+    driver.switch_to.default_content
+    expect(driver.page_source).to include('This page has iframes')
+  end
 end
diff --git a/examples/ruby/spec/interactions/navigation_spec.rb b/examples/ruby/spec/interactions/navigation_spec.rb
index d4a16a415b52..badebb5bc0b6 100644
--- a/examples/ruby/spec/interactions/navigation_spec.rb
+++ b/examples/ruby/spec/interactions/navigation_spec.rb
@@ -2,6 +2,33 @@
 
 require 'spec_helper'
 
-RSpec.describe 'Navigation' do
+RSpec.describe 'Browser' do
   let(:driver) { start_session }
+
+  it 'navigates to a page' do
+    driver.navigate.to 'https://www.selenium.dev/'
+    driver.get 'https://www.selenium.dev/'
+    expect(driver.current_url).to eq 'https://www.selenium.dev/'
+  end
+
+  it 'navigates back' do
+    driver.navigate.to 'https://www.selenium.dev/'
+    driver.navigate.to 'https://www.selenium.dev/selenium/web/inputs.html'
+    driver.navigate.back
+    expect(driver.current_url).to eq 'https://www.selenium.dev/'
+  end
+
+  it 'navigates forward' do
+    driver.navigate.to 'https://www.selenium.dev/'
+    driver.navigate.to 'https://www.selenium.dev/selenium/web/inputs.html'
+    driver.navigate.back
+    driver.navigate.forward
+    expect(driver.current_url).to eq 'https://www.selenium.dev/selenium/web/inputs.html'
+  end
+
+  it 'refreshes the page' do
+    driver.navigate.to 'https://www.selenium.dev/'
+    driver.navigate.refresh
+    expect(driver.current_url).to eq 'https://www.selenium.dev/'
+  end
 end
diff --git a/examples/ruby/spec/interactions/windows_spec.rb b/examples/ruby/spec/interactions/windows_spec.rb
index e7dec85fe82a..a20c7a77c507 100644
--- a/examples/ruby/spec/interactions/windows_spec.rb
+++ b/examples/ruby/spec/interactions/windows_spec.rb
@@ -4,4 +4,16 @@
 
 RSpec.describe 'Windows' do
   let(:driver) { start_session }
+
+  it 'opens new tab' do
+    driver.switch_to.new_window(:tab)
+
+    expect(driver.window_handles.size).to eq 2
+  end
+
+  it 'opens new window' do
+    driver.switch_to.new_window(:window)
+
+    expect(driver.window_handles.size).to eq 2
+  end
 end
diff --git a/examples/ruby/spec/selenium_manager/usage.rb b/examples/ruby/spec/selenium_manager/usage.rb
new file mode 100644
index 000000000000..bff0161ef79f
--- /dev/null
+++ b/examples/ruby/spec/selenium_manager/usage.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+require 'selenium-webdriver'
+
+def setup_without_selenium_manager
+  service = Selenium::WebDriver::Chrome::Service.new(path: '/path/to/chromedriver')
+  driver = Selenium::WebDriver.for(:chrome, service: service)
+  driver.get('https://www.selenium.dev/documentation/selenium_manager/')
+  driver.quit
+end
+
+def setup_with_selenium_manager
+  driver = Selenium::WebDriver.for(:chrome) # Selenium Manager handles the driver automatically
+  driver.get('https://www.selenium.dev/documentation/selenium_manager/')
+  driver.quit
+end
diff --git a/examples/ruby/spec/spec_helper.rb b/examples/ruby/spec/spec_helper.rb
index 902e708d8c6c..a68a4526f0be 100644
--- a/examples/ruby/spec/spec_helper.rb
+++ b/examples/ruby/spec/spec_helper.rb
@@ -9,13 +9,15 @@
 
   # Disable RSpec exposing methods globally on `Module` and `main`
   config.disable_monkey_patching!
+  Dir.mktmpdir('tmp')
+  config.example_status_persistence_file_path = 'tmp/examples.txt'
 
   config.expect_with :rspec do |c|
     c.syntax = :expect
   end
 
   config.before do |example|
-    bug_tracker = 'https://gigithub.com/SeleniumHQ/seleniumhq.github.io/issues'
+    bug_tracker = 'https://github.com/SeleniumHQ/seleniumhq.github.io/issues'
     guards = Selenium::WebDriver::Support::Guards.new(example,
                                                       bug_tracker: bug_tracker)
     guards.add_condition(:platform, Selenium::WebDriver::Platform.os)
@@ -28,7 +30,15 @@
   config.after { @driver&.quit }
 
   def start_session
-    @driver = Selenium::WebDriver.for :chrome
+    options = Selenium::WebDriver::Chrome::Options.new
+    options.add_argument('disable-search-engine-choice-screen')
+    options.add_argument('--no-sandbox')
+    @driver = Selenium::WebDriver.for(:chrome, options: options)
+  end
+
+  def start_bidi_session
+    options = Selenium::WebDriver::Chrome::Options.new(web_socket_url: true)
+    @driver = Selenium::WebDriver.for :chrome, options: options
   end
 
   def start_firefox
diff --git a/examples/ruby/spec/spec_support/extensions/webextensions-selenium-example.crx b/examples/ruby/spec/spec_support/extensions/webextensions-selenium-example.crx
index 38b38003b7ec..941114eb446e 100644
Binary files a/examples/ruby/spec/spec_support/extensions/webextensions-selenium-example.crx and b/examples/ruby/spec/spec_support/extensions/webextensions-selenium-example.crx differ
diff --git a/examples/ruby/spec/spec_support/extensions/webextensions-selenium-example.xpi b/examples/ruby/spec/spec_support/extensions/webextensions-selenium-example.xpi
index 34b0ae3913f7..dca8e2e12312 100644
Binary files a/examples/ruby/spec/spec_support/extensions/webextensions-selenium-example.xpi and b/examples/ruby/spec/spec_support/extensions/webextensions-selenium-example.xpi differ
diff --git a/examples/ruby/spec/spec_support/extensions/webextensions-selenium-example/manifest.json b/examples/ruby/spec/spec_support/extensions/webextensions-selenium-example/manifest.json
index e938974a20b1..69e480dc60dd 100644
--- a/examples/ruby/spec/spec_support/extensions/webextensions-selenium-example/manifest.json
+++ b/examples/ruby/spec/spec_support/extensions/webextensions-selenium-example/manifest.json
@@ -1,17 +1,30 @@
 {
-  "manifest_version": 2,
+  "manifest_version": 3,
   "name": "webextensions-selenium-example",
-  "description": "Inject a div with id webextensions-selenium-example to verify that WebExtensions work in Firefox/Selenium" ,
+  "description": "Inject a div with id webextensions-selenium-example to verify that WebExtensions work in Firefox/Selenium",
   "version": "0.1",
   "content_scripts": [
     {
-      "matches": ["https://*/*","http://*/*"],
-      "js": ["inject.js"]
+      "matches": [
+        "https://*/*",
+        "http://*/*"
+      ],
+      "js": [
+        "inject.js"
+      ]
     }
   ],
-  "applications": {
-   "gecko": {
-     "id": "webextensions-selenium-example@example.com"
-   }
- }
+  "permissions": [
+    "storage",
+    "scripting"
+  ],
+  "host_permissions": [
+    "https://*/*",
+    "http://*/*"
+  ],
+  "browser_specific_settings": {
+    "gecko": {
+      "id": "webextensions-selenium-example-v3@example.com"
+    }
+  }
 }
diff --git a/examples/selenium-server-4.15.0.jar b/examples/selenium-server-4.35.0.jar
similarity index 73%
rename from examples/selenium-server-4.15.0.jar
rename to examples/selenium-server-4.35.0.jar
index b555dceaa6d4..1d1700049d13 100644
Binary files a/examples/selenium-server-4.15.0.jar and b/examples/selenium-server-4.35.0.jar differ
diff --git a/favicon.ico b/favicon.ico
index cf9d9dda1ffe..80bf7ae9a9ac 100755
Binary files a/favicon.ico and b/favicon.ico differ
diff --git a/netlify.toml b/netlify.toml
index 2c3646f185d9..9134e4bc7067 100644
--- a/netlify.toml
+++ b/netlify.toml
@@ -3,8 +3,8 @@ publish = "website_and_docs/public"
 command = "chmod +x build-site.sh && ./build-site.sh"
 
 [context.production.environment]
-NODE_VERSION = "18.14.1"
-HUGO_VERSION = "0.110.0"
+NODE_VERSION = "22.13.0"
+HUGO_VERSION = "0.125.4"
 GO_VERSION = "1.20.1"
 HUGO_ENV = "production"
 
@@ -12,14 +12,14 @@ HUGO_ENV = "production"
 command = "chmod +x build-site.sh && ./build-site.sh"
 
 [context.deploy-preview.environment]
-NODE_VERSION = "18.14.1"
-HUGO_VERSION = "0.110.0"
+NODE_VERSION = "22.13.0"
+HUGO_VERSION = "0.125.4"
 GO_VERSION = "1.20.1"
 
 [context.branch-deploy]
 command = "chmod +x build-site.sh && ./build-site.sh"
 
 [context.branch-deploy.environment]
-NODE_VERSION = "18.14.1"
-HUGO_VERSION = "0.110.0"
+NODE_VERSION = "22.13.0"
+HUGO_VERSION = "0.125.4"
 GO_VERSION = "1.20.1"
diff --git a/renovate.json b/renovate.json
new file mode 100644
index 000000000000..17ef8d85f042
--- /dev/null
+++ b/renovate.json
@@ -0,0 +1,11 @@
+{
+  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
+  "extends": [
+    "config:recommended"    
+  ],
+  "ignorePaths": [
+    "**/node_modules/**",
+    "**/bower_components/**",
+    "**/vendor/**"
+  ]  
+}
diff --git a/scripts/latest-nightly-version.py b/scripts/latest-nightly-version.py
new file mode 100755
index 000000000000..cd51ba10cebf
--- /dev/null
+++ b/scripts/latest-nightly-version.py
@@ -0,0 +1,31 @@
+import subprocess
+import json
+import argparse
+
+def get_latest_nightly_version(package_type, package_name):
+    path_packages_api = f"orgs/seleniumhq/packages/{package_type}/{package_name}/versions"
+    accept_header = "Accept: application/vnd.github+json"
+    version_header = "X-GitHub-Api-Version: 2022-11-28"
+
+    gh_api_command = [
+        "gh", "api", "-H", accept_header, "-H", version_header, path_packages_api
+    ]
+
+    result = subprocess.run(gh_api_command, capture_output=True, text=True)
+    if result.returncode != 0:
+        raise Exception(f"Error executing gh api command: {result.stderr}")
+
+    versions = json.loads(result.stdout)
+    latest_version = versions[0]['name']
+    return latest_version
+
+if __name__ == "__main__":
+    parser = argparse.ArgumentParser(description='Get the latest nightly version of a package.')
+    parser.add_argument('package_type', type=str, help='The type of the package')
+    parser.add_argument('package_name', type=str, help='The name of the package')
+
+    args = parser.parse_args()
+    package_type = args.package_type
+    package_name = args.package_name
+
+    print(get_latest_nightly_version(package_type, package_name))
\ No newline at end of file
diff --git a/scripts/latest-python-nightly-version.py b/scripts/latest-python-nightly-version.py
new file mode 100755
index 000000000000..fb1f18e812fa
--- /dev/null
+++ b/scripts/latest-python-nightly-version.py
@@ -0,0 +1,12 @@
+import requests
+import json
+
+response = requests.get("https://test.pypi.org/pypi/selenium/json")
+data = response.json()
+
+# Extract versions and their upload times
+versions = data['releases']
+sorted_versions = sorted(versions.items(), key=lambda item: item[1][0]['upload_time'], reverse=True)
+latest_version = sorted_versions[0][0]
+
+print(latest_version)
\ No newline at end of file
diff --git a/scripts/release-updates.sh b/scripts/release-updates.sh
new file mode 100755
index 000000000000..aa6fd79079e1
--- /dev/null
+++ b/scripts/release-updates.sh
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+VERSION_STR="$1"
+NEW_VERSION=$(echo "$VERSION_STR" | cut -d. -f2)
+OLD_VERSION=$((NEW_VERSION - 1))
+
+FILES=(
+    "website_and_docs/layouts/partials/selenium-clients-and-webdriver-bindings.html"
+    "website_and_docs/layouts/downloads/list.html"
+)
+
+for FILE_PATH in "${FILES[@]}"; do
+    sed -i '' -E "s/4\.$OLD_VERSION\.[0-9]+/4.$NEW_VERSION.0/g" "$FILE_PATH"
+done
+
+OLD_BLOG="website_and_docs/content/blog/2025/selenium-4-$OLD_VERSION-released.md"
+NEW_BLOG="website_and_docs/content/blog/2025/selenium-4-$NEW_VERSION-released.md"
+cp "$OLD_BLOG" "$NEW_BLOG"
+git add "$NEW_BLOG"
+
+sed -i '' "s/4\.$OLD_VERSION/4\.$NEW_VERSION/g" "$NEW_BLOG"
+
+SINCE_COMMIT_DATE=$(gh api repos/seleniumhq/selenium/commits/selenium-4.${OLD_VERSION}.0 --jq '.commit.committer.date')
+UNTIL_COMMIT_DATE=$(gh api repos/seleniumhq/selenium/commits/selenium-4.${NEW_VERSION}.0 --jq '.commit.committer.date')
+
+echo "Selenium Contributors"
+gh api --method GET /repos/seleniumhq/selenium/commits -f since="$SINCE_COMMIT_DATE" -f until="$UNTIL_COMMIT_DATE" -f per_page=1000 \
+--jq 'map(.author.login) | unique | sort | map("{{< gh-user \"https://api.github.com/users/" + . + "\" >}}") | .[]'
+
+echo
+echo "Docs Contributors"
+gh api --method GET /repos/seleniumhq/seleniumhq.github.io/commits -f since="$SINCE_COMMIT_DATE" -f until="$UNTIL_COMMIT_DATE" -f per_page=1000 \
+--jq 'map(.author.login) | unique | sort | map("{{< gh-user \"https://api.github.com/users/" + . + "\" >}}") | .[]'
+
+echo
+echo "Docker Contributors"
+gh api --method GET /repos/seleniumhq/docker-selenium/commits -f since="$SINCE_COMMIT_DATE" -f until="$UNTIL_COMMIT_DATE" -f per_page=1000 \
+--jq 'map(.author.login) | unique | sort | map("{{< gh-user \"https://api.github.com/users/" + . + "\" >}}") | .[]'
diff --git a/scripts/requirements.txt b/scripts/requirements.txt
new file mode 100644
index 000000000000..663bd1f6a2ae
--- /dev/null
+++ b/scripts/requirements.txt
@@ -0,0 +1 @@
+requests
\ No newline at end of file
diff --git a/scripts/update-versions.sh b/scripts/update-versions.sh
index ad94cdde9924..735d053c2252 100755
--- a/scripts/update-versions.sh
+++ b/scripts/update-versions.sh
@@ -6,8 +6,6 @@ OLD_VERSION=$((NEW_VERSION - 1))
 NEXT_VERSION=$((NEW_VERSION + 1))
 
 FILES=(
-    "website_and_docs/layouts/partials/selenium-clients-and-webdriver-bindings.html"
-    "website_and_docs/layouts/downloads/list.html"
     "examples/java/build.gradle"
     "examples/dotnet/SeleniumDocs/SeleniumDocs.csproj"
     "examples/python/requirements.txt"
diff --git a/website_and_docs/assets/scss/_links.scss b/website_and_docs/assets/scss/_links.scss
index 522402ab7947..c0555d8f57f1 100644
--- a/website_and_docs/assets/scss/_links.scss
+++ b/website_and_docs/assets/scss/_links.scss
@@ -1,6 +1,5 @@
 .selenium-link {
   color: $primary;
-  border-bottom: 2px solid;
   transition: 0.3s;
 }
 
@@ -8,13 +7,12 @@
   color: $selenium-cyan-color;
 }
 
-p > a, main a {
+p > a, main a, div > a {
   color: $primary !important;
-  border-bottom: 2px solid;
   transition: 0.3s;
 }
 
-p > a:hover, main a:hover {
+p > a:hover, main a:hover, div > a:hover {
   color: $selenium-cyan-color !important;
 }
 
diff --git a/website_and_docs/assets/scss/_styles_project.scss b/website_and_docs/assets/scss/_styles_project.scss
index 884e084ab1c4..9f0878022493 100644
--- a/website_and_docs/assets/scss/_styles_project.scss
+++ b/website_and_docs/assets/scss/_styles_project.scss
@@ -10,3 +10,5 @@
 @import "logo";
 @import "screen";
 @import "tabs";
+
+.td-page-meta--project-issue { display: none !important; }
diff --git a/website_and_docs/content/about/_index.html b/website_and_docs/content/about/_index.html
index 0c2ad4659d1b..fb4918c700e7 100644
--- a/website_and_docs/content/about/_index.html
+++ b/website_and_docs/content/about/_index.html
@@ -104,7 +104,7 @@ <h2 class="card-title text-center">Get involved</h2>
       </div>
       <div class="card-footer bg-transparent border-0">
         <div class="selenium-button-container">
-          <a href="/sponsors" class="selenium-button selenium-white-cyan text-uppercase fw-bold">
+          <a href="/getinvolved" class="selenium-button selenium-white-cyan text-uppercase fw-bold">
             Contribute
             <i class="ps-3 fas fa-caret-right"></i>
           </a>
diff --git a/website_and_docs/content/blog/2010/going-atomic-how.md b/website_and_docs/content/blog/2010/going-atomic-how.md
index 82783052cc48..e6b978eb28ed 100644
--- a/website_and_docs/content/blog/2010/going-atomic-how.md
+++ b/website_and_docs/content/blog/2010/going-atomic-how.md
@@ -13,13 +13,13 @@ This is the second of my technical posts. Again, if you’re interested in the i
 
 We left our intrepid heroes in a tight spot: they’d decided to write a shared library of code, to be used by the various webdriver implementations and selenium core, but the requirements for doing this seemed to be at odds with it actually happening.
 
-Fortunately, at about the same time we started down this path, Google Open Sourced the [Closure compiler](closure-compiler.googlecode.com). This is a Javascript compiler that takes as input a set of Javascript files, and which outputs Javascript. It can be configured to either pass the code through untouched into a single file, or it can compile a script aggressively, removing unused code-paths and minifying the output as much as possible. The Closure compiler is used on a lot of Google products, so we know that it’s reliable and consistent.
+Fortunately, at about the same time we started down this path, Google Open Sourced the [Closure compiler](https://developers.google.com/closure/compiler). This is a Javascript compiler that takes as input a set of Javascript files, and which outputs Javascript. It can be configured to either pass the code through untouched into a single file, or it can compile a script aggressively, removing unused code-paths and minifying the output as much as possible. The Closure compiler is used on a lot of Google products, so we know that it’s reliable and consistent.
 
-In order to get the best out of the Closure compiler, we’re writing the atoms using the [Closure library](closure-library.googlecode.com). This isn’t as well known as some of the other JS libraries out there, but it’s solid, well tested and is being actively developed. It also features an easy-to-use extension of JsUnit, which makes writing tests a far simpler task than might otherwise be the case, and it has an easy to use mechanism for modularizing code.
+In order to get the best out of the Closure compiler, we’re writing the atoms using the [Closure library](https://github.com/google/closure-library). This isn’t as well known as some of the other JS libraries out there, but it’s solid, well tested and is being actively developed. It also features an easy-to-use extension of JsUnit, which makes writing tests a far simpler task than might otherwise be the case, and it has an easy to use mechanism for modularizing code.
 
 So, given that we could compile a single Javascript function (and it’s dependencies) into a minified fragment of JS, we were all set, right? Not quite.
 
-The problem is that the atoms are being extracted from two frameworks that have a different way of viewing the world. As an example, Selenium 1’s “[getAttribute](http://selenium.googlecode.com/svn/trunk/docs/api/java/com/thoughtworks/selenium/Selenium.html#getAttribute(java.lang.String))” method only returns the value of a particular attribute, whereas WebDriver’s “[getAttribute](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html#getAttribute(java.lang.String))” method will return the value of either a property or an attribute (because sometimes it’s hard to remember whether something is an attribute or a property of an element)
+The problem is that the atoms are being extracted from two frameworks that have a different way of viewing the world. As an example, Selenium 1’s getAttribute (`http://selenium.googlecode.com/svn/trunk/docs/api/java/com/thoughtworks/selenium/Selenium.html#getAttribute(java.lang.String)`) method only returns the value of a particular attribute, whereas WebDriver’s getAttribute (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html#getAttribute(java.lang.String`)) method will return the value of either a property or an attribute (because sometimes it’s hard to remember whether something is an attribute or a property of an element)
 
 As with all problems in computer science, an extra level of indirection is used to solve this issue.
 
diff --git a/website_and_docs/content/blog/2010/going-atomic-why.md b/website_and_docs/content/blog/2010/going-atomic-why.md
index 605040a969e8..258650cb4f0d 100644
--- a/website_and_docs/content/blog/2010/going-atomic-why.md
+++ b/website_and_docs/content/blog/2010/going-atomic-why.md
@@ -25,7 +25,7 @@ So, we decided to use Javascript.
 
 Because this shared code was to be composed of the smallest useful fragments of functionality required for browser automation we decided to refer to them as “Browser Automation Atoms”, or “atoms” for short. Rather than write them from scratch, the easiest thing to do was to extract them from the existing code — this is stuff that’s been battle-tested, so we know it’s robust.
 
-There was one very obvious fly in the ointment: not every driver is written in Javascript. Although we have a [mechanism available](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/JavascriptExecutor.html) in every browser for executing JS, it’s wildly inefficient to dump an enormous lump of code on to the JS engine of the browser whenever you want to query the DOM. After all, most of the code would not be needed, and not all JS engines have been created equal. Some are blazingly fast. Others, not so much.
+There was one very obvious fly in the ointment: not every driver is written in Javascript. Although we have a mechanism available (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/JavascriptExecutor.html`) in every browser for executing JS, it’s wildly inefficient to dump an enormous lump of code on to the JS engine of the browser whenever you want to query the DOM. After all, most of the code would not be needed, and not all JS engines have been created equal. Some are blazingly fast. Others, not so much.
 
 It would also be nice to break the code up into manageably-sized modules, rather than being in a single, monolithic file, which implies some clever “module loading” capability. Except this code isn’t always going to be executing inside an environment where writing “script” tags to load additional scripts is possible. You can’t do that in the guts of a firefox extension, though you can load files other ways. However we tie modules together will need to cope with that.
 
diff --git a/website_and_docs/content/blog/2010/selenium-1-0-2-release-firefox-3-6-and-snow-leopard-support.md b/website_and_docs/content/blog/2010/selenium-1-0-2-release-firefox-3-6-and-snow-leopard-support.md
index 7b696ceaee3f..09b5845bade6 100644
--- a/website_and_docs/content/blog/2010/selenium-1-0-2-release-firefox-3-6-and-snow-leopard-support.md
+++ b/website_and_docs/content/blog/2010/selenium-1-0-2-release-firefox-3-6-and-snow-leopard-support.md
@@ -14,6 +14,6 @@ of our efforts are on Selenium 2.0, we understand that there are millions of Sel
 still need the 1.x line supported. That’s why we’ve said from the start that our goal is make 2.x 
 100% backwards compatible with 1.x. And that’s why we’re releasing a new version of Selenium RC today.
 
-[Download it here](http://selenium.googlecode.com/files/selenium-remote-control-1.0.2.zip).
+Download it here (`http://selenium.googlecode.com/files/selenium-remote-control-1.0.2.zip`).
 
 In addition to many bug fixes, the biggest improvements in this version are support for both **Firefox 3.6 and OS X Snow Leopard**.
\ No newline at end of file
diff --git a/website_and_docs/content/blog/2010/selenium-1-0-3-released.md b/website_and_docs/content/blog/2010/selenium-1-0-3-released.md
index 7b56fbadf772..a44907df41f4 100644
--- a/website_and_docs/content/blog/2010/selenium-1-0-3-released.md
+++ b/website_and_docs/content/blog/2010/selenium-1-0-3-released.md
@@ -10,8 +10,8 @@ description: >
 ---
 
 
-Hot off the heals of [1.0.2](/blog/2010/selenium-1.0.2-released-firefox-3.6-and-snow-leopard-support/), 
-we’re releasing Selenium Remote Control 1.0.3. You can [download it now](http://selenium.googlecode.com/files/selenium-remote-control-1.0.3.zip).
+Hot off the heals of [1.0.2](../selenium-1-0-2-release-firefox-3-6-and-snow-leopard-support/), 
+we’re releasing Selenium Remote Control 1.0.3. You can download it now (`http://selenium.googlecode.com/files/selenium-remote-control-1.0.3.zip`).
 
 There is no functional difference between this version and 1.0.2, other than it is packaged up a little nicer and we’ve clarified the relationship between selenium-server and the client drivers. That is: we are **not** releasing new client drivers with future 1.x releases. The reason is that we locked down the API in version 1.0.1 and so there is no need to push out the same code each time. As such, when you download 1.0.3, you’ll see all the client drivers are labeled version 1.0.1, which is expected.
 
diff --git a/website_and_docs/content/blog/2010/selenium-2-0-beta-1-release.md b/website_and_docs/content/blog/2010/selenium-2-0-beta-1-release.md
index a60d08892385..9d04de34a195 100644
--- a/website_and_docs/content/blog/2010/selenium-2-0-beta-1-release.md
+++ b/website_and_docs/content/blog/2010/selenium-2-0-beta-1-release.md
@@ -12,12 +12,12 @@ description: >
 We recently released the first of the betas for Selenium 2. It’s available for Java, C# and Ruby. If you’ve been holding off trying Selenium 2 because of the alpha label, then the biggest improvement you’ll see is with the new WebDriver APIs, but there’s a lot more!
 
 *   A promise of relatively stable APIs
-*   For Firefox only right now, an API for dealing with [alerts, prompts and confirms](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriver.TargetLocator.html#alert()).
+*   For Firefox only right now, an API for dealing with alerts, prompts and confirms (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriver.TargetLocator.html#alert()`).
 *   A brand new IE driver.
-*   Better [selenium emulation](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriverBackedSelenium.html) when using webdriver
-*   And a better implementation of webdriver’s API backed by the [traditional Selenium technology](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/SeleneseCommandExecutor.html).
+*   Better selenium emulation (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriverBackedSelenium.html`) when using webdriver
+*   And a better implementation of webdriver’s API backed by the traditional Selenium technology (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/SeleneseCommandExecutor.html`).
 *   Ubiquitous use of [Sizzle](http://sizzlejs.com/) for emulating CSS selectors where native CSS selectors aren’t supported
-*   The [advanced user interactions](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/interactions/package-frame.html) API
+*   The advanced user interactions (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/interactions/package-frame.html`) API
 *   An update to the AndroidDriver’s Android app.
 
 Of course, we’d love this release to be completely bug free, but this is, after all, a beta, so there are some known issues:
@@ -30,7 +30,7 @@ You can download it from here:
 
 [http://code.google.com/p/selenium/downloads/list](http://code.google.com/p/selenium/downloads/list)
 
-You can read the [javadocs](http://selenium.googlecode.com/svn/trunk/docs/api/java/index.html) and the [ruby docs](http://selenium.googlecode.com/svn/trunk/docs/api/rb/index.html).
+You can read the javadocs (`http://selenium.googlecode.com/svn/trunk/docs/api/java/index.html`) and the ruby docs (`http://selenium.googlecode.com/svn/trunk/docs/api/rb/index.html`).
 
 An obvious question is “When will the beta end?” The short answer is when we’ve implemented the alerts and prompts and advanced user interactions APIs in all supported browsers. We expect there to be some flex in some APIs (removing deprecated methods, and within the advanced user interactions API) but what you have here is basically what you’re going to get when we hit 2.0 final. I have no idea how long this will take, but if you’re interested in helping out, [let us know!](http://groups.google.com/group/selenium-developers)
 
diff --git a/website_and_docs/content/blog/2010/selenium-2-0a5-released.md b/website_and_docs/content/blog/2010/selenium-2-0a5-released.md
index 40c12ec47370..5f14b00e3ae2 100644
--- a/website_and_docs/content/blog/2010/selenium-2-0a5-released.md
+++ b/website_and_docs/content/blog/2010/selenium-2-0a5-released.md
@@ -11,8 +11,8 @@ description: >
 
 I’m pleased to announce the release of Selenium 2.0a5, available for [immediate download](http://code.google.com/p/selenium/downloads/list). This release brings a host of changes under the hood, and represents the efforts of many contributors. Highlights include:
 
-*   New [interfaces](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/html5/package-frame.html) for dealing with HTML 5 elements.
-*   An API for “[implicit waits](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriver.Timeouts.html)“: quietly waiting until an element is present before continuing with a test. You can use them like this: `driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS)`
+*   New interfaces (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/html5/package-frame.html`) for dealing with HTML 5 elements.
+*   An API for implicit waits (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriver.Timeouts.html`): quietly waiting until an element is present before continuing with a test. You can use them like this: `driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS)`
 *   A revamped Firefox driver.
 *   More shared code between Selenium and WebDriver.
 *   You can now pass firefox profiles to the remote webdriver (this includes extensions and proxy settings!)
diff --git a/website_and_docs/content/blog/2010/selenium-2-0a6-released.md b/website_and_docs/content/blog/2010/selenium-2-0a6-released.md
index 882cf6bcd4aa..680b9e675ea0 100644
--- a/website_and_docs/content/blog/2010/selenium-2-0a6-released.md
+++ b/website_and_docs/content/blog/2010/selenium-2-0a6-released.md
@@ -16,12 +16,12 @@ You’ll be pleased to hear that the Selenium 1.0 APIs have remained constant, s
 *   Android support: you can now [download the APK](http://code.google.com/p/selenium/downloads/detail?name=android-server-2.0a6.apk) and run webdriver tests using Android 1.6 to 2.2.
 *   Firefox 4 support.
 *   Experimental IE9 support
-*   New APIs for dealing with [HTML5 elements](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/html5/package-summary.html) (best implemented, for now, by the mobile webdrivers)
+*   New APIs for dealing with HTML5 elements (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/html5/package-summary.html`) (best implemented, for now, by the mobile webdrivers)
 *   A richer .Net API
 *   A move to [Sizzle](http://sizzlejs.com/) for locating elements using CSS in browsers that don’t have a native API for that.
 *   Far better support for running your existing Selenium RC tests using WebDriver, helping you make a managed migration to the newer APIs.
 
-There are also lots of nice touches for the more technically inclined, including the ability to re-use instances of [FirefoxProfiles](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/firefox/FirefoxProfile.html), better configurability when requesting a remote webdriver instance, better resource management and more shared code between the Selenium and WebDriver implementations.
+There are also lots of nice touches for the more technically inclined, including the ability to re-use instances of FirefoxProfiles (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/firefox/FirefoxProfile.html`), better configurability when requesting a remote webdriver instance, better resource management and more shared code between the Selenium and WebDriver implementations.
 
 Thank you to everyone who has taken the time to report a bug on our [issue tracker](http://code.google.com/p/selenium/issues/list), or raised problems on one of our [mailing](https://groups.google.com/group/webdriver) [lists](http://www.google.com/url?q=http://groups.google.com/group/selenium-users), or shown up for some of the banter on the IRC channel: without your involvement, the project wouldn’t be half as much fun, and wouldn’t be as capable as it is. Thanks are also due to the development team, who have poured an enormous amount of work into this release (538 revisions in under 90 days, or about 6 check-ins each and every day)
 
diff --git a/website_and_docs/content/blog/2011/bug-bash.md b/website_and_docs/content/blog/2011/bug-bash.md
index 5324401313d1..916d8df7103b 100644
--- a/website_and_docs/content/blog/2011/bug-bash.md
+++ b/website_and_docs/content/blog/2011/bug-bash.md
@@ -9,7 +9,7 @@ description: >
   When the Selenium and WebDriver projects merged, all those moons ago, we moved the infrastructure from something we hosted to Google Code.
 ---
 
-When the [Selenium](http://selenium.googlecode.com/) and WebDriver projects merged, all those moons ago, we moved the infrastructure from something we hosted to Google Code. One reason for doing this was to make it easier for people to file bugs and feature requests. And it looks like people have been filing a _lot_ of bugs and feature requests.
+When the Selenium (`http://selenium.googlecode.com/`) and WebDriver projects merged, all those moons ago, we moved the infrastructure from something we hosted to Google Code. One reason for doing this was to make it easier for people to file bugs and feature requests. And it looks like people have been filing a _lot_ of bugs and feature requests.
 
 In the run up for the 2.0b2 release, we’ll be running a Bug Bash. This will run from the 24th January all the way to the end of the 30th January. The aim will be to focus on clearing our bug list as much as possible, so that beta2 will be the best release of Selenium yet. We will, of course, be recognizing people who squash the most bugs here on the blog, and we’re hunting out goodies to mail to the top bug bashers once the week is over.
 
diff --git a/website_and_docs/content/blog/2011/selenium-2-0b2-released.md b/website_and_docs/content/blog/2011/selenium-2-0b2-released.md
index 61c20e93710d..1c49e497a1ab 100644
--- a/website_and_docs/content/blog/2011/selenium-2-0b2-released.md
+++ b/website_and_docs/content/blog/2011/selenium-2-0b2-released.md
@@ -16,10 +16,10 @@ Between beta 1 and beta 2, we held a week-long Bug Bash, during which we closed
 *   A more stable, capable iPhone driver.
 *   Updated [Android driver](http://code.google.com/p/selenium/downloads/detail?name=selenium-server-2.0b2.zip&can=2&q=).
 *   Improved python bindings for Selenium WebDriver. The namespace is now “selenium.webdriver”
-*   Added “[Selenium.getCssCount](http://selenium.googlecode.com/svn/trunk/docs/api/java/com/thoughtworks/selenium/Selenium.html#getCssCount(java.lang.String))” to mirror “Selenium.getXpathCount”
-*   “[WebElement.getText()](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html#getText())” performs more consistently across different browsers.
+*   Added Selenium.getCssCount (`http://selenium.googlecode.com/svn/trunk/docs/api/java/com/thoughtworks/selenium/Selenium.html#getCssCount(java.lang.String)`) to mirror “Selenium.getXpathCount”
+*   WebElement.getText() (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html#getText()`) performs more consistently across different browsers.
 *   Mono users can use the .Net bindings
-*   Continued to improve the [WebDriverBackedSelenium](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriverBackedSelenium.html). If you’re looking to migrate from Selenium 1 to Selenium 2, and want to take your time, this is a useful stepping stone.
+*   Continued to improve the WebDriverBackedSelenium (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriverBackedSelenium.html`). If you’re looking to migrate from Selenium 1 to Selenium 2, and want to take your time, this is a useful stepping stone.
 *   Reworked the Advanced User Interactions APIs. The big change is that the WebDriver APIs no longer rely on classes from the AWT.
 *   .Net users now have more support classes, to make writing tests less tiresome.
 *   The remote webdriver makes better use of sockets, which improves stability and scalability on Windows.
diff --git a/website_and_docs/content/blog/2011/selenium-2-0b3-the-next-gen-browser-release.md b/website_and_docs/content/blog/2011/selenium-2-0b3-the-next-gen-browser-release.md
index a6d9093d17f5..461f1a4c147f 100644
--- a/website_and_docs/content/blog/2011/selenium-2-0b3-the-next-gen-browser-release.md
+++ b/website_and_docs/content/blog/2011/selenium-2-0b3-the-next-gen-browser-release.md
@@ -20,7 +20,7 @@ It’s been about 5 weeks since the release of beta 2, so we’re very pleased t
     *   IOptions.Speed
 *   Even more improvements to the Java webdriver-backed selenium
     *   We’ll document the migration path before 2.0b4 is out!
-*   A significantly faster [Android Driver](http://selenium.googlecode.com/files/android-server-2.0b3.apk)
+*   A significantly faster Android Driver (`http://selenium.googlecode.com/files/android-server-2.0b3.apk`)
 
 As well as these changes, there’s also the regular clutch of bug fixes and tweaks. For the number crunchers, there were a total of [331 changes](http://code.google.com/p/selenium/source/list?num=331&start=11749) that landed in the 5 weeks since the last release, with the 5 most active contributors working on each of the different languages supported by Selenium.
 
diff --git a/website_and_docs/content/blog/2011/selenium-2-0rc1-the-grid-release.md b/website_and_docs/content/blog/2011/selenium-2-0rc1-the-grid-release.md
index 224c6d078dd2..648f4f87383b 100644
--- a/website_and_docs/content/blog/2011/selenium-2-0rc1-the-grid-release.md
+++ b/website_and_docs/content/blog/2011/selenium-2-0rc1-the-grid-release.md
@@ -18,9 +18,9 @@ Highlights:
 *   New [ChromeDriver](http://code.google.com/p/selenium/wiki/ChromeDriver): Following a complete rewrite of the ChromeDriver, Selenium 2 is now supported natively by the Chrome browser itself. In order to use this, you must download the [chromedriver executable](http://code.google.com/p/selenium/downloads/list) from the Selenium project site.
 *   [OperaDriver](http://www.opera.com/developer/tools/operadriver/) support: We’ve bundled the most excellent OperaDriver into the release to make it easy to get started testing with [Opera](http://www.opera.com/browser/).
 *   Support for native events in Firefox 4.
-*   [Advanced User Interactions](http://code.google.com/p/selenium/wiki/AdvancedUserInteractions): An API that allows you to model complex user interactions, such as clicking on an element, holding the shift key, clicking on three more, and then dragging the four elements to a final destination. The entry point to this API is the [Actions](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/interactions/Actions.html) class.
+*   [Advanced User Interactions](http://code.google.com/p/selenium/wiki/AdvancedUserInteractions): An API that allows you to model complex user interactions, such as clicking on an element, holding the shift key, clicking on three more, and then dragging the four elements to a final destination. The entry point to this API is the Actions (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/interactions/Actions.html`) class.
 
-We’ve also deleted all methods that were deprecated in 2.0b3 and have marked a number of methods and classes (notably [RenderedWebElement](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/RenderedWebElement.html) and [WebElement.getValue](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html#getValue())) deprecated. These will be deleted in the next release.
+We’ve also deleted all methods that were deprecated in 2.0b3 and have marked a number of methods and classes (notably RenderedWebElement (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/RenderedWebElement.html`) and WebElement.getValue (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html#getValue()`)) deprecated. These will be deleted in the next release.
 
 Known issues:
 
diff --git a/website_and_docs/content/blog/2011/selenium-2-0rc3-the-next-ones-the-big-one-release.md b/website_and_docs/content/blog/2011/selenium-2-0rc3-the-next-ones-the-big-one-release.md
index fb5e19ea84a5..d6fee45b6d48 100644
--- a/website_and_docs/content/blog/2011/selenium-2-0rc3-the-next-ones-the-big-one-release.md
+++ b/website_and_docs/content/blog/2011/selenium-2-0rc3-the-next-ones-the-big-one-release.md
@@ -13,9 +13,9 @@ When we pushed the 2.0rc1 live, we really hoped that the next release would be 2
 
 We think we’ve addressed many of the common issues, added some polish and added a host of bug fixes and minor changes, and we hope to hear your feedback! The following headline changes have been made in Selenium 2rc3:
 
-*   The deprecated RenderedWebElement interface has now been removed. Most of the functionality has been moved to either [WebElement](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html) or to the [Actions](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/interactions/Actions.html) class.
-*   The deprecated WebElement.getValue() method has been removed. Use [WebElement.getAttribute(“value”)](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html#getAttribute(java.lang.String)) instead.
-*   After some debate in the team, “[WebElement.setSelected](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html#setSelected())” and “[WebElement.toggle](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html#toggle())” have been deprecated. They will be removed in the final release.
+*   The deprecated RenderedWebElement interface has now been removed. Most of the functionality has been moved to either WebElement (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html`) or to the Actions (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/interactions/Actions.html`) class.
+*   The deprecated WebElement.getValue() method has been removed. Use WebElement.getAttribute(“value”) (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html#getAttribute(java.lang.String)`) instead.
+*   After some debate in the team, WebElement.setSelected (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html#setSelected()`) and “[WebElement.toggle](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html#toggle())” have been deprecated. They will be removed in the final release.
 *   Thanks to the hard work of Mozilla engineers, we now offer Firefox 5 support.
 *   The [Opera driver](http://www.opera.com/developer/tools/operadriver/), developed by the lovely chaps at Opera Software, is bundled with this release.
 *   Improvements in the way that mouse interactions are simulated, particularly when elements are outside the visible area of the page.
diff --git a/website_and_docs/content/blog/2011/selenium-2-1-released.md b/website_and_docs/content/blog/2011/selenium-2-1-released.md
index 8ecb219dbe2a..bfc5d81aa922 100644
--- a/website_and_docs/content/blog/2011/selenium-2-1-released.md
+++ b/website_and_docs/content/blog/2011/selenium-2-1-released.md
@@ -13,4 +13,4 @@ Now that Selenium 2 has [been released](http://seleniumhq.wordpress.com/2011/07/
 
 [Selenium 2.1](http://seleniumhq.org/download/) is largely focused on improving Grid with a host of minor improvements including better tracking of “orphaned” browser instances. There are also some bug fixes in the Firefox and IE WebDrivers, particularly when dealing with elements that are _just_ off screen, and in making the Selenium RC emulation in the Java bindings more robust when confronted with pages that haven’t started loading.
 
-As you can see, this is a “bite size” release, but we’d love to know: would you prefer these small, swift releases or larger ones? Please answer in the comments, or on the [mailing list](groups.google.com/group/selenium-users)!
\ No newline at end of file
+As you can see, this is a “bite size” release, but we’d love to know: would you prefer these small, swift releases or larger ones? Please answer in the comments, or on the [mailing list](https://groups.google.com/group/selenium-users)!
\ No newline at end of file
diff --git a/website_and_docs/content/blog/2011/selenium-2-2-released.md b/website_and_docs/content/blog/2011/selenium-2-2-released.md
index ecc6f93716d5..47a682570442 100644
--- a/website_and_docs/content/blog/2011/selenium-2-2-released.md
+++ b/website_and_docs/content/blog/2011/selenium-2-2-released.md
@@ -12,6 +12,6 @@ description: >
 
 The feedback from the last release was heard loud and clear: little and often it is!
 
-We’re proud to announce the release of [Selenium 2.2](http://seleniumhq.org/download/). What’s new this time? For many users, this is simply a bug fix release as there are no new major features. One thing you might appreciate is [better exceptions](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/IllegalLocatorException.html) being thrown when xpath searches return something other than a web element when using the WebDriver APIs, and we’re continuing to tweak the emulation of user events.
+We’re proud to announce the release of [Selenium 2.2](http://seleniumhq.org/download/). What’s new this time? For many users, this is simply a bug fix release as there are no new major features. One thing you might appreciate is better exceptions (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/IllegalLocatorException.html`) being thrown when xpath searches return something other than a web element when using the WebDriver APIs, and we’re continuing to tweak the emulation of user events.
 
 If you’re a .Net user, there is now an official [NuGet package](http://nuget.org/List/Packages/Selenium.WebDriver), and if you’re a maven user then rest assured the release is heading to the central repo as quickly as we can manage.
diff --git a/website_and_docs/content/blog/2011/selenium-2-3-released.md b/website_and_docs/content/blog/2011/selenium-2-3-released.md
index cd72378f3010..ce303846e9ed 100644
--- a/website_and_docs/content/blog/2011/selenium-2-3-released.md
+++ b/website_and_docs/content/blog/2011/selenium-2-3-released.md
@@ -14,6 +14,6 @@ Continuing our new tradition of weekly releases, we’re very pleased to announc
 *   Better detection of clickable areas in Firefox.
 *   Merge of Google-contributed code into the underlying javascript libraries used by the drivers.
 
-We’ve also fixed bugs, one of which was being a nuisance for users of IBM’s JRE. The complete changelog can be found in the zipped downloads or in [our source tree](http://selenium.googlecode.com/svn/trunk/java/CHANGELOG).
+We’ve also fixed bugs, one of which was being a nuisance for users of IBM’s JRE. The complete changelog can be found in the zipped downloads or in our source tree (`http://selenium.googlecode.com/svn/trunk/java/CHANGELOG`).
 
 If you’re a Chrome user, then it’s a great idea to head over to the [Chromium project’s download page](http://code.google.com/p/chromium/downloads/list) to pick up the executable used by the ChromeDriver. It’s recently been updated, and now includes support for handling alerts and prompts! Thanks, Google!
\ No newline at end of file
diff --git a/website_and_docs/content/blog/2011/selenium-2-6-released.md b/website_and_docs/content/blog/2011/selenium-2-6-released.md
index a53d87df55d2..042efb92ffcb 100644
--- a/website_and_docs/content/blog/2011/selenium-2-6-released.md
+++ b/website_and_docs/content/blog/2011/selenium-2-6-released.md
@@ -13,8 +13,8 @@ If you’ve been watching this blog carefully you’ll have noticed that the las
 
 Selenium 2.6 introduces a raft of improvements and stability fixes. Kristian Rosenvold has been working wonders on [Grid 2.0](http://code.google.com/p/selenium/wiki/Grid2), addressing many reported issues and cleaning up the implementation. In the [finest tradition of the project](http://code.google.com/p/selenium/issues/detail?id=14), I now [owe him a dinner](http://code.google.com/p/selenium/issues/detail?id=2475) for his hard work. Thank you, Kristian!
 
-For those of you not using Grid, as well as the normal suite of bug fixes, Selenium 2.6 now supports all versions of Firefox from 3.0 up to 7. For those of you using Java, there is an [ExpectedConditions](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html) class that supplies many useful criteria when using the [Wait](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/support/ui/Wait.html) and [WebDriverWait](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/support/ui/WebDriverWait.html) classes. The packaged version of the [OperaDriver](http://www.opera.com/developer/tools/operadriver/) has also been bumped to 0.7.2, which works hand-in-hand with Opera 11.5 and above.
+For those of you not using Grid, as well as the normal suite of bug fixes, Selenium 2.6 now supports all versions of Firefox from 3.0 up to 7. For those of you using Java, there is an ExpectedConditions (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html) class that supplies many useful criteria when using the [Wait](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/support/ui/Wait.html`) and WebDriverWait (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/support/ui/WebDriverWait.html`) classes. The packaged version of the [OperaDriver](http://www.opera.com/developer/tools/operadriver/) has also been bumped to 0.7.2, which works hand-in-hand with Opera 11.5 and above.
 
-We’ve also spent a considerable amount of time and effort working out the kinks in the [Advanced User Interactions API](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/interactions/package-frame.html). We’d love to hear how you’re using it, and what the gaps are that you can see. For more details about what’s changed, have a look at the [release notes](http://code.google.com/p/selenium/source/browse/trunk/java/CHANGELOG).
+We’ve also spent a considerable amount of time and effort working out the kinks in the Advanced User Interactions API (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/interactions/package-frame.html`). We’d love to hear how you’re using it, and what the gaps are that you can see. For more details about what’s changed, have a look at the [release notes](http://code.google.com/p/selenium/source/browse/trunk/java/CHANGELOG).
 
 The release frequency has dropped recently, but we’re planning to head back to weekly releases from here on in. 2.7 is just around the corner!
\ No newline at end of file
diff --git a/website_and_docs/content/blog/2011/selenium-2-8-released.md b/website_and_docs/content/blog/2011/selenium-2-8-released.md
index b88ad39df2c1..e4f6142da655 100644
--- a/website_and_docs/content/blog/2011/selenium-2-8-released.md
+++ b/website_and_docs/content/blog/2011/selenium-2-8-released.md
@@ -10,7 +10,7 @@ description: >
 ---
 
 
-In keeping with our (roughly) weekly releases, Selenium 2.8 was [released today](http://seleniumhq.org/download/) (and on Maven too), [with a \*huge\* list of bug-fixes](https://code.google.com/p/selenium/source/browse/trunk/java/CHANGELOG)!  As well as improved stability, if you’re using the Java API, this release adds the ability to upload files to a RemoteWebDriver server (see [RemoteWebDriver.setFileDetector](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/remote/RemoteWebDriver.html#setFileDetector(org.openqa.selenium.remote.FileDetector))).
+In keeping with our (roughly) weekly releases, Selenium 2.8 was [released today](http://seleniumhq.org/download/) (and on Maven too), [with a \*huge\* list of bug-fixes](https://code.google.com/p/selenium/source/browse/trunk/java/CHANGELOG)!  As well as improved stability, if you’re using the Java API, this release adds the ability to upload files to a RemoteWebDriver server (see  RemoteWebDriver.setFileDetector (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/remote/RemoteWebDriver.html#setFileDetector(org.openqa.selenium.remote.FileDetector)`)).
 
 Particular thanks have to go out to our two newest committers, Alexei Barancev and Ajay Kemparaj, for the copious bug-fixes they’ve contributed!
 
diff --git a/website_and_docs/content/blog/2011/selenium-joins-the-software-freedom-conservancy.md b/website_and_docs/content/blog/2011/selenium-joins-the-software-freedom-conservancy.md
index a4089bed6fbc..d8b59654ba50 100644
--- a/website_and_docs/content/blog/2011/selenium-joins-the-software-freedom-conservancy.md
+++ b/website_and_docs/content/blog/2011/selenium-joins-the-software-freedom-conservancy.md
@@ -11,6 +11,6 @@ description: >
 
 It doesn’t seem that long ago that we announced on the mailing list that the Selenium project planned to join the [Software Freedom Conservancy](http://sfconservancy.org/). I’m very pleased to announce that as of Friday, 21st January, our application was approved. We’re now under the aegis of the SFC.
 
-From most people’s perspective, this won’t make much difference: you’ll still be able to view the documentation and download the latest versions of Selenium from [Selenium HQ](http://seleniumhq.org). Development will continue to use [Google Code’s](http://selenium.googlecode.com/) code hosting and issue tracking. We are now, however, part of a formal non-profit organization, which means that a number of issues, such as how to handle revenues from adverts on our sites, become clearer and more transparent.
+From most people’s perspective, this won’t make much difference: you’ll still be able to view the documentation and download the latest versions of Selenium from [Selenium HQ](http://seleniumhq.org). Development will continue to use Google Code’s (`http://selenium.googlecode.com/`) code hosting and issue tracking. We are now, however, part of a formal non-profit organization, which means that a number of issues, such as how to handle revenues from adverts on our sites, become clearer and more transparent.
 
 There are more details about what this means in the [SFC’s announcement](http://sfconservancy.org/news/2011/feb/02/selenium-joins/ "Selenium Joins the Software Freedom Conservancy") and their list of [membership benefits](http://sfconservancy.org/members/services/ "SFC Member Project Services"). The bottom line is that this is a major milestone in Selenium’s growth and ensures that as we continue to grow our user base and introduce new features and projects, we’ll have strong support and backing from a well-respected Open Source organization.
\ No newline at end of file
diff --git a/website_and_docs/content/blog/2012/a-smattering-of-selenium-90.md b/website_and_docs/content/blog/2012/a-smattering-of-selenium-90.md
index 552e4ac626da..d39040547465 100644
--- a/website_and_docs/content/blog/2012/a-smattering-of-selenium-90.md
+++ b/website_and_docs/content/blog/2012/a-smattering-of-selenium-90.md
@@ -12,7 +12,7 @@ description: >
 Eventually I’ll get back on the once-a-week schedule. But not today!
 
 *   [Falsehoods Programmers believe about Time](http://news.ycombinator.com/item?id=4128208). Time is hard; let’s go shopping!
-*   Speaking of hard. [Concurrency is not Parallelism (it’s better)](http://concur.rspace.googlecode.com/hg/talk/concur.html) — also has gophers
+*   Speaking of hard. Concurrency is not Parallelism (it’s better) (`http://concur.rspace.googlecode.com/hg/talk/concur.html`) — also has gophers
 *   Did Netflix actually [Open Source Army of Cloud Monkeys](http://www.wired.com/wiredenterprise/2012/04/netflix_monkeys/all/1)? I don’t see anything on their [github](https://github.com/netflix) account (and that is the trendy place to release stuff these days)
 *   ![](https://i0.wp.com/cdn.memegenerator.net/instances/400x/18503305.jpg)Need I say more?
 *   I’ve used this trick a couple times [Python introspection – how to check current module / line of call from within function](http://stackoverflow.com/questions/5326539/python-introspection-how-to-check-current-module-line-of-call-from-within-fu)
diff --git a/website_and_docs/content/blog/2012/selenium-2-16-released-welcome-to-2012.md b/website_and_docs/content/blog/2012/selenium-2-16-released-welcome-to-2012.md
index df3beb6fe06d..3c8750a0f001 100644
--- a/website_and_docs/content/blog/2012/selenium-2-16-released-welcome-to-2012.md
+++ b/website_and_docs/content/blog/2012/selenium-2-16-released-welcome-to-2012.md
@@ -12,6 +12,6 @@ description: >
 
 It’s been a while since we last blogged about a Selenium release. Since the release of 2.0, we’ve been attempting to give you a fresh and shiny Selenium release every week (though, in reality, we’re managing to get you one every 10 days on average). This allows you to pick the version that’s most suitable for you and your teams, but provides a route for quick feedback on how we’re doing. I think we’ve now ironed out a lot of the initial problems and bumps we ran into, so we are extremely proud to announce the [release of Selenium 2.16](http://seleniumhq.org/download/).
 
-If you’re unsure about what’s been happening since the last time we announced a release here, the best place to look is our [changelog](http://selenium.googlecode.com/svn/trunk/java/CHANGELOG). The most notable feature in 2.16 is better support for Firefox 9, but if it’s been a while since you’ve last updated, we’ve been beavering away on bug fixes and making existing features work as flawlessly as possible. Now’s a great time to update!
+If you’re unsure about what’s been happening since the last time we announced a release here, the best place to look is our changelog (`http://selenium.googlecode.com/svn/trunk/java/CHANGELOG`). The most notable feature in 2.16 is better support for Firefox 9, but if it’s been a while since you’ve last updated, we’ve been beavering away on bug fixes and making existing features work as flawlessly as possible. Now’s a great time to update!
 
 One of the key tools we use for assessing whether it’s okay to push a release is our continuous build. This watches for each and every change made to the project’s source code, and runs an increasingly vast suite of tests to verify that nothing has broken. Our friends at [Sauce Labs](http://saucelabs.com/) have been extremely generous in providing support for this, and have worked closely with us to make the build as stable and quick as possible. Special kudos and thanks to them!
diff --git a/website_and_docs/content/blog/2013/selenium-hangout-2-recap.md b/website_and_docs/content/blog/2013/selenium-hangout-2-recap.md
index 0aa507accd18..912a809b8964 100644
--- a/website_and_docs/content/blog/2013/selenium-hangout-2-recap.md
+++ b/website_and_docs/content/blog/2013/selenium-hangout-2-recap.md
@@ -10,7 +10,7 @@ description: >
 ---
 
 
-This is a recap from the most recent Selenium Hangout (a.k.a. [The World’s Best Selenium Meetup](seleniumhq.wordpress.com/2013/08/09/the-worlds-best-selenium-meetup/)). For info on future meetups, [follow them on Twitter](https://twitter.com/SeleniumHangout).
+This is a recap from the most recent Selenium Hangout (a.k.a. [The World’s Best Selenium Meetup](../the-worlds-best-selenium-meetup/)). For info on future meetups, [follow them on Twitter](https://twitter.com/SeleniumHangout).
 
 Thanks to all who attended and tuned into the last Selenium Hangout where we talked about Selenium 3! Below is a write-up of the meetup, the video, and relevant links we mentioned. And to access all meetup videos you can go [here](http://bit.ly/sehovideos).
 
diff --git a/website_and_docs/content/blog/2013/source-control.md b/website_and_docs/content/blog/2013/source-control.md
index aafda2e8376b..8544eef09c37 100644
--- a/website_and_docs/content/blog/2013/source-control.md
+++ b/website_and_docs/content/blog/2013/source-control.md
@@ -14,5 +14,5 @@ This short technical note is to announce that the Selenium project is now using
 
 The move has been a long time in the making, and it’s largely thanks to the efforts of [Kristian Rosenvold](https://twitter.com/krosenvold) that we’ve been able to do the migration and retain the project history. The project owes him a huge thank you! We’re in the process of migrating the last bits and pieces (none of which are user facing), so there may be some last minute turbulence as we settle everything down.
 
-Although the canonical source will be on [Google Code](http://selenium.googlecode.com/), we’re working on setting up a github mirror. We’ll announce the location of that once it’s set up.
+Although the canonical source will be on Google Code (`http://selenium.googlecode.com/`), we’re working on setting up a github mirror. We’ll announce the location of that once it’s set up.
 
diff --git a/website_and_docs/content/blog/2021/announcing-selenium-4.md b/website_and_docs/content/blog/2021/announcing-selenium-4.md
index 6bb10756b353..9747b6f3f9ef 100644
--- a/website_and_docs/content/blog/2021/announcing-selenium-4.md
+++ b/website_and_docs/content/blog/2021/announcing-selenium-4.md
@@ -98,7 +98,7 @@ our users.
 **We hope you enjoy Selenium 4, and we can’t wait to see what you do
 with it!**
 
-[auth]: /documentation/webdriver/bidirectional/bidi_api/#register-basic-auth
+[auth]: /documentation/webdriver/bidi/cdp/network/#basic-authentication
 [browserstack]: https://www.browserstack.com/
 [chromium]: https://www.chromium.org/Home
 [docker]: https://hub.docker.com/u/selenium
@@ -106,8 +106,8 @@ with it!**
 [firefox]: https://www.mozilla.org/en-GB/firefox/new/
 [github]: https://github.com/SeleniumHQ/selenium/releases/tag/selenium-4.0.0
 [grid]: /documentation/grid/
-[js errors]: /documentation/webdriver/bidirectional/bidi_api/#listen-to-js-exceptions
-[mutation]: /documentation/webdriver/bidirectional/bidi_api/#mutation-observation
+[js errors]: /documentation/webdriver/bidi/cdp/bidi_api/#javascript-exceptions
+[mutation]: /documentation/webdriver/bidi/cdp/bidi_api/#mutation-observation
 [otel]: https://opentelemetry.io
 [pr]: https://github.com/SeleniumHQ/selenium/pulls
 [relative locators]: /documentation/webdriver/locating_elements/#relative-locators
diff --git a/website_and_docs/content/blog/2021/selenium-4-beta-1.md b/website_and_docs/content/blog/2021/selenium-4-beta-1.md
index 70352bf67f0e..32f5bba08b16 100644
--- a/website_and_docs/content/blog/2021/selenium-4-beta-1.md
+++ b/website_and_docs/content/blog/2021/selenium-4-beta-1.md
@@ -72,4 +72,4 @@ directly from the [Selenium site][download].
 [graphql]: https://github.com/SeleniumHQ/selenium/blob/selenium-4.0.0-beta-1/java/server/src/org/openqa/selenium/grid/graphql/selenium-grid-schema.graphqls
 [OpenTelemetry]: https://opentelemetry.io
 [se4]: /blog/2020/what-is-coming-in-selenium-4-new-tricks/
-[tlc]: /structure/#tlc
+[tlc]: /project/structure/#tlc
diff --git a/website_and_docs/content/blog/2022/legacy-protocol-support.md b/website_and_docs/content/blog/2022/legacy-protocol-support.md
index debc2fed2af8..83f8fcbc4b0b 100644
--- a/website_and_docs/content/blog/2022/legacy-protocol-support.md
+++ b/website_and_docs/content/blog/2022/legacy-protocol-support.md
@@ -6,7 +6,7 @@ tags: ["webdriver", "java", "grid"]
 categories: ["general"]
 author: Titus Fortner ([@titusfortner](https://twitter.com/titusfortner))
 description: >
-  Selenium 4.3 will only support W3C compliant WebDriver syntax
+  Selenium 4.9 will only support W3C compliant WebDriver syntax
 ---
 
 The Selenium team prides itself on how seriously it takes backwards compatibility. 
@@ -17,13 +17,13 @@ and we need to be able to properly meet the needs of the vast majority of our us
 
 TL/DR:
 * Support for the legacy [JSON Wire Protocol](https://www.selenium.dev/documentation/legacy/json_wire_protocol/) 
-will be removed from Java Selenium 4.3 (other languages have already removed this support)
-* Protocol conversions will stop in Selenium 4.3 Grid
+will be removed from Java Selenium 4.9 (other languages have already removed this support)
+* Protocol conversions will stop in Selenium 4.9 Grid
 * You can ensure your sessions are W3C compliant by using 
 [Browser Options classes](https://www.selenium.dev/documentation/webdriver/getting_started/upgrade_to_selenium_4/#after) 
 instead of the deprecated Desired Capabilities classes (and avoid using "set capability" methods directly)
 * If you rely on the current protocol conversion functionality, and it works for you, 
-you can continue to use it with Selenium Grid 4.2
+you can continue to use it with Selenium Grid 4.8
 
 By far the biggest challenge in the past seven years of Selenium development has been 
 transitioning the underlying implementation from the legacy [JSON Wire Protocol](https://www.selenium.dev/documentation/legacy/json_wire_protocol/) 
@@ -46,7 +46,7 @@ Because the code must make some assumptions and guesses for this to work, there
 
 For Selenium 4.0, the Ruby, JavaScript, and .NET bindings, each removed the handshake code, 
 so no legacy commands are used. Due to some issues that couldn't be resolved before freezing the 3.x code, 
-Python is waiting until Selenium 4.3 to remove its handshake code. 
+Python is waiting until Selenium 4.9 to remove its handshake code. 
 The Selenium team intended to continue to support both protocols in the 
 Grid and Java bindings throughout the 4.x releases, but running test suites written for Selenium 2 
 on the Selenium 4 Grid resulted in a larger than expected number of failures. 
diff --git a/website_and_docs/content/blog/2022/scaling-grid-with-keda.md b/website_and_docs/content/blog/2022/scaling-grid-with-keda.md
index 5a825b14e82f..ee3b20eef140 100644
--- a/website_and_docs/content/blog/2022/scaling-grid-with-keda.md
+++ b/website_and_docs/content/blog/2022/scaling-grid-with-keda.md
@@ -49,6 +49,7 @@ triggers:
     metadata:
       url: 'http://selenium-grid-url-or-ip:4444/graphql'
       browserName: 'chrome'
+      platformName: 'Linux'
 ```
 
 All of this gets saved as a Scaled-Object like so:
@@ -69,8 +70,17 @@ spec:
   triggers:
     - type: selenium-grid
       metadata:
-        url: 'https://selenium-grid-url-or-ip:4444/graphql'
+        url: 'http://selenium-grid-url-or-ip:4444/graphql'
         browserName: 'chrome'
+        platformName: 'Linux'
+```
+
+Send the request to Grid, for example in Python client:
+
+```python
+options = ChromeOptions()
+options.set_capability('platformName', 'Linux')
+driver = webdriver.Remote(options=options, command_executor='http://selenium-grid-url-or-ip:4444/wd/hub')
 ```
 
 As an added bonus KEDA allows us to scale our deployments down to 
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 13edf91e21d7..4e43a9f46a56 100644
--- a/website_and_docs/content/blog/2022/using-java11-httpclient.md
+++ b/website_and_docs/content/blog/2022/using-java11-httpclient.md
@@ -36,6 +36,13 @@ of modern Java releases.
 
 So as a first step towards this move, the Java 11+ HTTP client from Selenium 4.5.0 and above.
 
+{{% alert title="Attention!" color="warning" %}}
+If you are using Selenium 4.14 or higher, the 
+Java 11 HTTP client is used by default. You do not
+need to make any changes to your setup. Feel free
+to skip the following section.
+{{% /alert %}}
+
 ### Using Java 11+ HTTP Client in Selenium
 
 #### Prerequisites: 
diff --git a/website_and_docs/content/blog/2023/java-removal-of-deprecated-events-classes.md b/website_and_docs/content/blog/2023/java-removal-of-deprecated-events-classes.md
new file mode 100644
index 000000000000..ce2805d6f7fc
--- /dev/null
+++ b/website_and_docs/content/blog/2023/java-removal-of-deprecated-events-classes.md
@@ -0,0 +1,164 @@
+---
+title: Removal of AbstractEventListener + EventFiringWebDriver + WebDriverEventListener
+date: 2023-12-08
+tags: [java, events, webdriver]
+categories: [general]
+author: Oscar Devora ([@oscardevora](https://twitter.com/Yo_Oscarr))
+description: >
+  This blog will go over some examples on how to transition code that uses the aforementioned classes.
+---
+
+### Upgrading to WebDriverListener and EventFiringDecorator
+Decorating the webdriver
+
+```java
+new EventFiringWebDriver(driver); // Old approach
+new EventFiringDecorator().decorate(driver); // New approach
+```
+### Implementing method wrappers
+One may find the need to have their own custom implementations be used for underlying decorated method calls. An example may be wanting to use your own findElement implementation to store metadata from web elements. One can go down a deep rabbit hole of decorators ( extending WebDriverDecorator and such ), so to keep things simple we will extend EventFiringDecorator since we want a single decorator to handle all our listener events.
+
+```java
+public class WebDriverWrapper implements WebDriver {
+    private final WebDriver driver;
+    WebDriverWrapper(WebDriver driver) {
+        this.driver = driver;
+    }
+    // custom implementation goes here
+    @Override
+    public WebElement findElement(final By by) {
+        // custom implementation goes here
+        return driver.findElement(by);
+    }
+}
+
+public class testDecorator extends EventFiringDecorator<WebDriver> {
+
+    @Override
+    public Object call(Decorated<?> target, Method method, Object[] args) throws Throwable {
+        String methodName = method.getName();
+        if ("findElement".equals(methodName)) {
+            WebDriverWrapper newDriver = new WebDriverWrapper((WebDriver) target.getOriginal());
+            return newDriver.findElement((By) args[0]);
+        }
+        return super.call(target, method, args);
+    }
+}
+```
+Some notes about the above example, we are only overriding the ‘general’ call method and checking the method name against every call made. 
+Without going too deep decorators one can also override calls made by class instances to offer a more targeted approach. 
+Just to expose some more functionality, let's modify our example. 
+We can modify WebElement context since we might care about child elements and elements found by WebDriver ( WebDriver and WebElement both extend the SearchContext ).
+
+```java
+public class WebElementWrapper implements WebElement {
+    private final WebElement element;
+    WebElementWrapper(WebElement element) {
+        this.element = element;
+    }
+    @Override
+    public WebElement findElement(final By by) {
+        // custom implementation goes here
+        return element.findElement(by);
+    }
+}
+
+public class WebElementDecorator extends EventFiringDecorator<WebDriver> {
+    @Override
+    public Decorated<WebElement> createDecorated(WebElement original) {
+        return new DefaultDecorated<>(original, this) {
+            @Override
+            public Object call(Method method, Object[] args) throws Throwable {
+                String methodName = method.getName();
+                if ("findElement".equals(methodName)) {
+                    // custom implementation goes here
+                    WebElementWrapper element = new WebElementWrapper(getOriginal());
+                    return element.findElement((By) args[0]);
+                }
+                return super.call(method, args);
+            }
+        };
+    }
+}
+```
+In the sample above, we are still doing a very similar approach of overriding the call method but now we are also targeting WebElement instances.
+### Registering Listeners
+
+```java
+new EventFiringWebDriver(driver).register(listener1).register(listener2); // Old approach
+new EventFiringDecorator(listener1, listener2); // New approach
+```
+### Listening to Events
+A quality of life change that is featured in WebDriverListener class is the use of ‘default’. 
+In Java, the `default` keyword, when used in the context of an interface method, indicates that the method has a default implementation. 
+If a class implementing the interface chooses not to override the method, it will inherit the default implementation. 
+This change allows for splitting up listeners without needing to implement the unnecessary methods you don't need or care about.
+
+#### Listening to specific events using before/after methods call
+```java
+// Old approach
+public class AlertListener implements WebDriverEventListener {
+    @Override
+    public void beforeAlertAccept(final WebDriver driver) {
+        // custom implementation goes here
+    }
+// implement every method in interface
+}
+
+// New approach
+public class AlertListener implements WebDriverListener {
+    @Override
+    public void beforeAccept(Alert alert) {
+        // custom implementation goes here
+    }
+// does not need to implement every method in interface
+}
+```
+#### Listening to Generic Events
+A change that was brought on is the ability to listen to generic events. 
+One use case is logging information in a parallelized test suite.
+Rather than create a listener and override every method to add a simple log statement, there is now a simpler alternative of overriding one method call. 
+Below I override beforeAnyCall, but afterAnyCall exists as well which also has the results of the call to the decorated method.
+
+```java
+public class Listener implements WebDriverEventListener {
+    private static final Logger LOGGER = Logger.getLogger(Listener.class.getName());
+
+    @Override
+    public void beforeAnyCall(Object target, Method method, Object[] args) {
+        logger.debug("Thread: " + Thread.currentThread().getName() +
+                " | Method Name: " + method.getName() +
+                " | Method Args: " + Arrays.toString(args));
+    }
+}
+```
+
+There also was an addition listening to more specific generic events. 
+Going back to the logging example, beforeAnyCall is a good method for debugging information or tracking the actions of a thread but might generate too much noise. 
+In the same use case we might only care about WebDriver or WebElement calls. 
+One can override instances of WebDriver and derived objects( WebElement, Alert, etc.) for before/after events.
+
+```java
+public class Listener implements WebDriverEventListener {
+    private static final Logger LOGGER = Logger.getLogger(Listener.class.getName());
+
+    @Override
+    public void beforeAnyWebDriverCall(WebDriver driver, Method method, Object[] args) {
+        logger.debug("Thread: " + Thread.currentThread().getName() +
+                " | Method Name: " + method.getName() +
+                " | Method Args: " + Arrays.toString(args));
+    }
+
+    @Override
+    public void beforeAnyWebElementCall(WebElement element, Method method, Object[] args) {
+        logger.debug("Thread: " + Thread.currentThread().getName() +
+                " | Method Name: " + method.getName() +
+                " | Method Args: " + Arrays.toString(args));
+    }
+}
+```
+
+So that's some general examples on how to transition your code!
+Happy testing!
+
+
diff --git a/website_and_docs/content/blog/2023/selenium-4-11-0-released.md b/website_and_docs/content/blog/2023/selenium-4-11-0-released.md
index f4387b882010..99843cb278f3 100644
--- a/website_and_docs/content/blog/2023/selenium-4-11-0-released.md
+++ b/website_and_docs/content/blog/2023/selenium-4-11-0-released.md
@@ -68,7 +68,6 @@ Links to everything can be found on our [downloads page][downloads].
 <div class="d-flex justify-content-center">
   <div class="col-11 p-4 bg-transparent">
     <div class="row justify-content-center">
-{{< gh-user "https://api.github.com/users/RevealOscar" >}}
 {{< gh-user "https://api.github.com/users/mdmintz" >}}
 {{< gh-user "https://api.github.com/users/nvborisenko" >}} 
 {{< gh-user "https://api.github.com/users/sandeepsuryaprasad" >}}
@@ -76,7 +75,6 @@ Links to everything can be found on our [downloads page][downloads].
 {{< gh-user "https://api.github.com/users/bastimeyer" >}} 
 {{< gh-user "https://api.github.com/users/djbrown" >}} 
 {{< gh-user "https://api.github.com/users/vedanthvdev" >}}
-{{< gh-user "https://api.github.com/users/Hyphenhypen" >}}
 {{< gh-user "https://api.github.com/users/baflQA" >}} 
 {{< gh-user "https://api.github.com/users/AdamPDotty" >}} 
 {{< gh-user "https://api.github.com/users/jlucartc" >}}
diff --git a/website_and_docs/content/blog/2023/selenium-4-13-0-released.md b/website_and_docs/content/blog/2023/selenium-4-13-0-released.md
index c4de6287e5bf..5b62b37f80f9 100644
--- a/website_and_docs/content/blog/2023/selenium-4-13-0-released.md
+++ b/website_and_docs/content/blog/2023/selenium-4-13-0-released.md
@@ -73,9 +73,7 @@ Please upgrade to at least Java 11.
 <div class="d-flex justify-content-center">
   <div class="col-11 p-4 bg-transparent">
     <div class="row justify-content-center">
-{{< gh-user "https://api.github.com/users/JefferyVin" >}} 
 {{< gh-user "https://api.github.com/users/KrishnaSuravarapu" >}}
-{{< gh-user "https://api.github.com/users/RevealOscar" >}}
 {{< gh-user "https://api.github.com/users/Sean-Gomez" >}}
 {{< gh-user "https://api.github.com/users/manuelsblanco" >}}
 {{< gh-user "https://api.github.com/users/mdmintz" >}}
diff --git a/website_and_docs/content/blog/2023/selenium-4-16-released.md b/website_and_docs/content/blog/2023/selenium-4-16-released.md
new file mode 100644
index 000000000000..362bdbe5b6e8
--- /dev/null
+++ b/website_and_docs/content/blog/2023/selenium-4-16-released.md
@@ -0,0 +1,146 @@
+---
+title: "Selenium 4.16 Released!"
+linkTitle: "Selenium 4.16 Released!"
+date: 2023-12-06
+tags: ["selenium"]
+categories: ["releases"]
+author: Titus Fortner [@titusfortner](https://titusfortner.com)
+description: >
+  Today we're happy to announce that Selenium 4.16 has been released!
+---
+
+We're very happy to announce the release of Selenium 4.16.0 for 
+Javascript, Ruby, Python, and Selenium 4.16.1 for .NET, Java and the Grid.
+Links to everything can be found on our [downloads page][downloads].
+
+### Highlights
+
+  * Chrome DevTools support is now: v118, v119, and v120 (Firefox still uses v85 for all versions)
+  * Users may now opt in to Selenium Manager by specifying a `browserVersion` that is different from what is found on the System 
+  * All bindings now [log Selenium information](https://www.selenium.dev/documentation/webdriver/troubleshooting/logging/)
+
+#### Noteworthy changes per language
+
+  * Java 
+    * Improve Grid usage of Selenium Manager by always allowing browser version of "stable"
+    * Implement CDP script pinning for Chrome-based browsers
+    * Allow reusing devtools instance with JDK 11 client
+    * Moved org.openqa.selenium.remote.http.jdk to selenium-http
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG)
+
+  <br>
+  
+  * JavaScript
+    * Fix logging levels in http.js and webdriver.js
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md)
+  
+  <br>
+  
+  * .NET
+    * Allow overriding default Actions duration
+    * Remove System.Drawing.Common as package dependency
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG)
+  
+  <br>
+  
+  * Python
+    * Remove deprecated Safari parameters for reuse_service and quiet
+    * Fix bug to allow Remote WebDriver to use custom Chrome-based commands
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES)
+
+<br>
+  
+  * Ruby
+    * Added initial typing support with rbs files
+    * Fix bug preventing Selenium Manager from working with Unix and Cygwin
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)
+
+<br>
+
+  * Rust
+    * Use online mapping to discover proper geckodriver version
+    * Fix webview2 support when browser path is set
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/rust/CHANGELOG.md)
+
+
+### Contributors
+
+**Special shout-out to everyone who helped the Selenium Team get this release out!**
+
+#### [Selenium](https://github.com/SeleniumHQ/selenium)
+
+<div class="d-flex justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/EdwinVanVliet" >}}
+{{< gh-user "https://api.github.com/users/aguspe" >}}
+{{< gh-user "https://api.github.com/users/asottile" >}}
+{{< gh-user "https://api.github.com/users/centic9" >}}
+{{< gh-user "https://api.github.com/users/jnhyperion" >}}
+{{< gh-user "https://api.github.com/users/manuelsblanco" >}}
+{{< gh-user "https://api.github.com/users/matt-kemp-m2x" >}}
+{{< gh-user "https://api.github.com/users/nikhlagrwl" >}}
+{{< gh-user "https://api.github.com/users/purkhusid" >}}
+{{< gh-user "https://api.github.com/users/vietnd96" >}}
+{{< gh-user "https://api.github.com/users/whimboo" >}}
+    </div>
+  </div>
+</div>
+
+#### [Selenium Docs & Website](https://github.com/SeleniumHQ/seleniumhq.github.io)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/SparshKesari" >}}
+{{< gh-user "https://api.github.com/users/emanlove" >}}
+{{< gh-user "https://api.github.com/users/ronPy" >}}
+{{< gh-user "https://api.github.com/users/utamas" >}}
+    </div>
+  </div>
+</div>
+
+#### [Docker Selenium](https://github.com/SeleniumHQ/docker-selenium)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/Thab310" >}}
+{{< gh-user "https://api.github.com/users/amardeep2006" >}}
+{{< gh-user "https://api.github.com/users/mtcolman" >}}
+{{< gh-user "https://api.github.com/users/vietnd96" >}}
+    </div>
+  </div>
+</div>
+
+#### [Selenium Team Members][team]
+
+**Thanks as well to all the team members who contributed to this release:**
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/alaahong" >}}
+{{< gh-user "https://api.github.com/users/bonigarcia" >}}
+{{< gh-user "https://api.github.com/users/diemol" >}}
+{{< gh-user "https://api.github.com/users/harsha509" >}}
+{{< gh-user "https://api.github.com/users/joerg1985" >}}
+{{< gh-user "https://api.github.com/users/luisfcorreia" >}}
+{{< gh-user "https://api.github.com/users/nvborisenko" >}}
+{{< gh-user "https://api.github.com/users/p0deje" >}}
+{{< gh-user "https://api.github.com/users/pujagani" >}}
+{{< gh-user "https://api.github.com/users/shs96c" >}}
+{{< gh-user "https://api.github.com/users/titusfortner" >}}
+    </div>
+  </div>
+</div>
+
+Stay tuned for updates by following [SeleniumHQ](https://twitter.com/seleniumhq)!
+
+Happy testing!
+
+[downloads]: /downloads
+[bindings]: /downloads#bindings
+[team]: /project/structure
+[BiDi]: https://github.com/w3c/webdriver-bidi
+
diff --git a/website_and_docs/content/blog/2023/selenium-4-9-0-released.md b/website_and_docs/content/blog/2023/selenium-4-9-0-released.md
index 3a5470773e86..279a3595e9f8 100644
--- a/website_and_docs/content/blog/2023/selenium-4-9-0-released.md
+++ b/website_and_docs/content/blog/2023/selenium-4-9-0-released.md
@@ -33,8 +33,7 @@ Links to everything can be found on our [downloads page][downloads].
   <div class="col-11 p-4 bg-transparent">
     <div class="row justify-content-center">
 {{< gh-user "https://api.github.com/users/atrnh" >}} 
-{{< gh-user "https://api.github.com/users/nvborisenko" >}} 
-{{< gh-user "https://api.github.com/users/dev-ardi" >}}
+{{< gh-user "https://api.github.com/users/nvborisenko" >}}
 {{< gh-user "https://api.github.com/users/arnonax-tr" >}}
 {{< gh-user "https://api.github.com/users/robotdana" >}}
 {{< gh-user "https://api.github.com/users/iampopovich" >}}
diff --git a/website_and_docs/content/blog/2024/_index.md b/website_and_docs/content/blog/2024/_index.md
new file mode 100644
index 000000000000..9c2032b98304
--- /dev/null
+++ b/website_and_docs/content/blog/2024/_index.md
@@ -0,0 +1,5 @@
+---
+title: "Blog Posts - 2024"
+linkTitle: "2024"
+weight: 86
+---
diff --git a/website_and_docs/content/blog/2024/bidi-java-breaking-change.md b/website_and_docs/content/blog/2024/bidi-java-breaking-change.md
new file mode 100644
index 000000000000..aa6971edb673
--- /dev/null
+++ b/website_and_docs/content/blog/2024/bidi-java-breaking-change.md
@@ -0,0 +1,56 @@
+---
+title: "Update imports to use BiDi Java"
+linkTitle: "Update imports to use BiDi Java"
+date: 2024-03-14
+tags: ["selenium"]
+categories: ["general"]
+author: Puja Jagani [@pujagani](https://www.linkedin.com/in/pujajagani/)
+description: >
+   This blog post discusses the rationale behind the breaking change in Java BiDi implementation and the changes users will have to make.
+---
+
+## What part of the code base is impacted?
+Selenium WebDriver BiDi APIs in Java bindings are impacted.
+
+## What is impacted by the breaking change?
+The WebDriver BiDi APIs stay as they are, so you can continue to use them. However, the import statements need to be updated. 
+
+## What is the breaking change?
+The import statements need to be updated when using the BiDi APIs.
+
+### Before Selenium 4.19:
+
+{{< tabpane langEqualsHeader=true >}}
+{{< tab header="Java" >}}
+import org.openqa.selenium.bidi.LogInspector;
+import org.openqa.selenium.bidi.BrowsingContextInspector;
+import org.openqa.selenium.bidi.Input;
+import org.openqa.selenium.bidi.Script;
+import org.openqa.selenium.bidi.Network;
+{{< /tab >}}
+{{< /tabpane >}}
+
+### After Selenium 4.19 and above:
+
+{{< tabpane langEqualsHeader=true >}}
+{{< tab header="Java" >}}
+import org.openqa.selenium.bidi.module.LogInspector;
+import org.openqa.selenium.bidi.module.BrowsingContextInspector;
+import org.openqa.selenium.bidi.module.Input;
+import org.openqa.selenium.bidi.module.Script;
+import org.openqa.selenium.bidi.module.Network;
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Why the breaking change?
+Selenium is actively working to implement the [W3C BiDi](https://w3c.github.io/webdriver-bidi). The long-term goal of W3C BiDi is to port all W3C WebDriver Classic APIs to use the WebDriver BiDi APIs under the hood.
+When [browsingContext.locateNodes](https://w3c.github.io/webdriver-bidi/#command-browsingContext-locateNodes) command, which is the BiDi counterpart of [findElements](https://www.w3.org/TR/webdriver2/#find-elements) command, was introduced, the major goal was to ensure that the 'locateNodes' command returns a [WebElement](https://github.com/SeleniumHQ/selenium/blob/trunk/java/src/org/openqa/selenium/WebElement.java). This would be make the porting smoother in the future and allows users to continue calling APIs of the WebElement.
+
+During the implementation, a circular dependency was encountered in the underlying build tool [Bazel](https://bazel.build/about/intro).
+The solution to this was to follow the [best practices of Bazel](https://bazel.build/configure/best-practices#packages).
+
+So, the W3C BiDi related classes of a module were grouped into Bazel [package](https://bazel.build/concepts/build-ref#packages). The classes that themselves call commands or events were all grouped under a package named 'module'.
+Thus, following the recommended practice and avoiding Bazel's circular dependency proved to be a win-win solution.
+
+## Summary
+The W3C BiDi protocol is in under development, and parallelly browsers and clients are working to add the complementary APIs. While Selenium works on implementing it, the protocol is constantly changing, with new modules or APIs being added or existing ones being updated. While the team strives to avoid breaking changes and deprecate APIs for at least 2 versions before removal, it can be challenging to adhere to this for some changes, such as the one described in this blog post.
\ No newline at end of file
diff --git a/website_and_docs/content/blog/2024/browserstack-selenium-partnership.md b/website_and_docs/content/blog/2024/browserstack-selenium-partnership.md
new file mode 100644
index 000000000000..717ccd133137
--- /dev/null
+++ b/website_and_docs/content/blog/2024/browserstack-selenium-partnership.md
@@ -0,0 +1,22 @@
+---
+title: "Celebrating a Milestone: BrowserStack Becomes Selenium's Development Partner"
+linkTitle: "Celebrating a Milestone: BrowserStack Becomes Selenium's Development Partner"
+date: 2024-07-01
+tags: ["selenium"]
+categories: ["general"]
+author: David Burns [@automatedtester](https://www.linkedin.com/in/theautomatedtester/)
+description: >
+   Selenium is proud to annouce that we have created a new tier to show the appreciation of the companies that support us.
+---
+
+It has been a great year for the Selenium community as it continues to grow. The popularity of Selenium’s Python Bindings is evident from the discussions at the Selenium Conference and on LinkedIn, while the Java bindings have impressively surpassed 100 million downloads.
+
+This project, having reached 20 years old this year, would not be possible without the amazing contributions from our volunteer contributors and the Open Source Program Offices of companies like BrowserStack that allow us to work on this project as part of our day jobs.
+
+**About BrowserStack**
+They have over 50,000 organizations and 6M users using their end-to-end testing platform. BrowserStack has been one of the Selenium project's biggest supporters for years and currently employs several of Selenium's core maintainers, donating a significant portion of their time towards the development, maintenance, support, and leadership of open-source Selenium repos.
+
+This dedicated support has allowed us to continue work on the client bindings, especially the work going into WebDriver BiDi, support our community, continuously improve our documentation, and maintain all the extra projects we oversee, ensuring Selenium can continue to thrive for the next 20 years.
+We are also thrilled to highlight the collaborative efforts between the BrowserStack team, the Google Chrome team, Microsoft, Apple, SauceLabs, and the Firefox team, who have come together to build Selenium WebDriver BiDi, the next generation of Selenium. This collaborative spirit embodies our dedication to enhancing the testing experience for the Selenium user community.
+With this in mind, the Selenium Project now shows our appreciation to BrowserStack for their years of continued support by creating a new sponsorship tier called the Development Partner.
+We are deeply indebted to BrowserStack for all their support and are proud to recognize them as our first official Development Partner. This work has allowed us to continue progress on the client bindings, especially the work going into WebDriver BiDi, support our community, continuously improve our documentation, and maintain all the extra projects we oversee, so Selenium can continue to be around for the next 20 years!
diff --git a/website_and_docs/content/blog/2024/chrome-browser-woes.md b/website_and_docs/content/blog/2024/chrome-browser-woes.md
new file mode 100644
index 000000000000..96ee7aabebd5
--- /dev/null
+++ b/website_and_docs/content/blog/2024/chrome-browser-woes.md
@@ -0,0 +1,42 @@
+---
+title: "Two Chrome features you should disable"
+linkTitle: "Two Chrome features you should disable"
+date: 2024-08-18
+tags: ["chrome"]
+categories: ["general"]
+author: Marek Andreansky [@skyhirider](https://www.linkedin.com/in/marekandreansky/)
+images:
+  - "/images/blog/2024/chrome-woes.jpeg"
+description: This blog post lists two problematic Chrome features that can affect your automation as well as a quick way to disable them.
+---
+
+## Search engine selection screen
+
+Starting with version 127 of Chrome, the browser [now asks which search engine you would like to use](https://www.google.com/chrome/choicescreen/), 
+which is great for regular users.
+
+But for automation, it does so every single time.
+
+To bypass this, use the argument below when specifying the browser options.
+
+```
+--disable-search-engine-choice-screen
+```
+
+## Chrome wastes over 60MB of your bandwidth downloading language plugins
+
+The second feature is something that has been with Chrome for quite a while now.
+
+Every time you launch Chrome, 
+[it will query and download several .crx files](https://www.reddit.com/r/chrome/comments/u78vd0/chrome_has_constantly_been_downloading_something/).
+
+These files can even be left over on your disk's download folder if you create and close drivers faster than these can be processed.
+
+To disable this feature, use the browser option below.
+
+```
+--disable-features=OptimizationGuideModelDownloading,OptimizationHintsFetching,OptimizationTargetPrediction,OptimizationHints
+```
+
+
+_This is a guest blog post by [Marek Andreansky](https://www.linkedin.com/in/marekandreansky/)_
diff --git a/website_and_docs/content/blog/2024/htmlunit-remote-for-selenium-4-grid.md b/website_and_docs/content/blog/2024/htmlunit-remote-for-selenium-4-grid.md
new file mode 100644
index 000000000000..feed9fa4388f
--- /dev/null
+++ b/website_and_docs/content/blog/2024/htmlunit-remote-for-selenium-4-grid.md
@@ -0,0 +1,86 @@
+---
+title: "HtmlUnit Remote: Acquiring Remote HtmlUnitDriver Session in Selenium 4 Grid"
+linkTitle: "HtmlUnit Remote: Acquiring Remote HtmlUnitDriver Session in Selenium 4 Grid"
+date: 2024-08-19
+tags: ["Grid", "HtmlUnitDriver"]
+categories: ["Grid"]
+author: Scott Babcock [@sbabcoc](https://www.github.com/sbabcoc)
+images:
+  - "/images/blog/2024/html-unit-remote.jpg"
+description: >
+   This post describes 'HtmlUnit Remote', a wrapper for HtmlUnitDriver that enables Selenium 4 Grid to manage remote instances of this "headless" browser.
+---
+
+# HTMLUNIT REMOTE
+[![Maven Central](https://img.shields.io/maven-central/v/com.nordstrom.ui-tools/htmlunit-remote.svg)](https://central.sonatype.com/search?q=com.nordstrom.ui-tools+htmlunit-remote&core=gav)
+
+The [HtmlUnit Remote](https://github.com/seleniumhq-community/htmlunit-remote) project implements a [W3C WebDriver protocol](https://www.w3.org/TR/webdriver2) wrapper for [HtmlUnitDriver](https://github.com/SeleniumHQ/htmlunit-driver), which enables **Selenium 4 Grid** to supply remote sessions of this headless browser.
+
+### Background
+
+To eliminate behavioral differences between local and remote configurations, the [Selenium Foundation](https://github.com/sbabcoc/Selenium-Foundation) framework always acquires browser sessions from a **Grid** instance, managing its own local grid instance when not configured to use an existing grid. **Selenium 3 Grid** could be configured to supply **HtmlUnitDriver** sessions, supported by special-case handling within the Node server itself. This handling was not carried over into **Selenium 4 Grid**, which was completely re-engineered with new architecture and vastly expanded capabilities.
+
+The lack of **HtmlUnitDriver** support in **Selenium 4 Grid** necessitated reconfiguring the **Selenium Foundation** project unit tests from using this Java-only managed artifact to using a standard browser like Chrome, an external dependency that requires additional resources and imposes additional risks of failure.
+
+The driver service implemented by **HtmlUnit Remote** enables **Selenium 4 Grid** to supply **HtmlUnitDriver** sessions.
+
+### Project Rationale
+
+My initial objective for creating **HtmlUnit Remote** was to retain feature parity in **Selenium Foundation** for the set of browsers supported with **Selenium 3** and **Selenium 4**. Although I could configure my unit tests to target a conventional browser, I also wanted to avoid additional external dependencies with associated risks.
+
+Once I began investigating the features and functionality I would need to enable **Selenium 4 Grid** to supply **HtmlUnitDriver** sessions, I recognized an additional benefit this project could provide - comprehensive standardized configurability.
+
+### HtmlUnitDriver Configuration
+
+All remote drivers are configured via a standard **Selenium** feature - the [Capabilities](https://github.com/SeleniumHQ/selenium/blob/trunk/java/src/org/openqa/selenium/Capabilities.java) object. Prior to the **HtmlUnit Remote** project, many of the options of [HtmlUnit](https://www.htmlunit.org/) could not be accessed or modified via the **Capabilities** API. These were only available via custom **HtmlUnitDriver** methods, and the way that non-standard capabilities had been added to the **Capabilities** object didn't conform to the **W3C** specification.
+
+This meant that the initial phase of the **HtmlUnit Remote** project was to implement a comprehensive W3C-compliant configuration object - the **HtmlUnitDriverOptions** class. This class extends [AbstractDriverOptions](https://github.com/SeleniumHQ/selenium/blob/trunk/java/src/org/openqa/selenium/remote/AbstractDriverOptions.java), adding driver-specific capabilities under an extension named `garg:htmlunitOptions`. Support for this class provides full configurability of all **HtmlUnitDriver** options through the standard **Capabilities** API.
+
+This standardized configuration API has been incorporated directly into **HtmlUnitDriver**, providing the core implementation for manipulating every driver setting. To maintain backward compatibility, all of the existing constructors and configuration methods have been retained, reimplemented to use this new core API.
+
+### W3C Remote Protocol Wrapper
+
+With full standardized configurability in place, the next step was to create a server that implements the [W3C WebDriver protocol](https://www.w3.org/TR/webdriver2). The **HtmlUnitDriverServer** functions as a remote protocol wrapper around one or more **HtmlUnitDriver** sessions, performing the following tasks:
+* Create and manage driver sessions
+* Route driver commands to specified driver sessions
+* Package driver method results into HTTP responses
+
+### HtmlUnit Remote Packaging
+
+Rather than bulk up the existing driver with remote-specific features, **HtmlUnitDriverServer** and associated facilities are packaged in a companion `htmlunit-remote` artifact. In addition to the server, this artifact defines a driver information provider (**HtmlUnitDriverInfo**), a driver service (**HtmlUnitDriverService**), and a custom slot matcher (**HtmlUnitSlotMatcher**).
+
+### Connecting to the Grid
+
+Next up is **HtmlUnitDriverInfo**, which specifies the basic characteristics of the driver and provides a method that creates a driver session with specified capabilities. This class implements the standard [WebDriverInfo](https://github.com/SeleniumHQ/selenium/blob/trunk/java/src/org/openqa/selenium/WebDriverInfo.java) interface.
+
+With availability of **HtmlUnitDriver** advertised by this information provider, **Selenium 4 Grid** nodes can be configured to provide driver sessions:
+
+##### htmlunit.toml
+```
+[node]
+detect-drivers = false
+[[node.driver-configuration]]
+display-name = "HtmlUnit"
+stereotype = "{\"browserName\": \"htmlunit\"}"
+
+[distributor]
+slot-matcher = "org.openqa.selenium.htmlunit.remote.HtmlUnitSlotMatcher"
+```
+The `selenium-server` JAR doesn't include the **HtmlUnitDriver** artifacts; these need to be specified as extensions to the grid class path via the `--ext` option:
+
+```
+java -jar selenium-server-<version>.jar --ext htmlunit-remote-<version>-grid-extension.jar standalone --config htmlunit.toml
+```
+The `grid-extension` artifact provides all of the specifications and service providers required to enable **Selenium 4 Grid** to supply remote sessions of **HtmlUnitDriver**. This artifact combines `htmlunit-remote` with `htmlunit3-driver`, `htmlunit`, and all of their unique dependencies.
+
+### Implementation Details
+
+**HtmlUnit Remote** provides the following elements:
+* **HtmlUnitDriverInfo** - This class informs **Selenium 4 Grid** that **HtmlUnitDriver** is available and provides a method to create new driver instances.
+* **HtmlUnitSlotMatcher** - This custom slot matcher extends **DefaultSlotMatcher**, indicating a match if both the slot stereotype and requested browser capabilities specify `htmlunit` as the browser name.
+* **HtmlUnitDriverService** - This class manages a server that hosts instances of **HtmlUnitDriver**.
+* **HtmlUnitDriverServer** - This is the server class that hosts **HtmlUnitDriver** instances, enabling remote operation via the [W3C WebDriver protocol](https://www.w3.org/TR/webdriver2).
+
+In operation, **HtmlUnitDriverService** is instantiated by **Selenium 4 Grid** node servers that are configured to support **HtmlUnitDriver**. Unlike other driver services, which launch a new process for each created driver session, **HtmlUnitDriverService** starts a single in-process server that hosts all of the driver sessions it creates.
+
+_This is a guest blog post by [Scott Babcock](https://www.github.com/sbabcoc)_
diff --git a/website_and_docs/content/blog/2024/multi-arch-images-via-docker-selenium.md b/website_and_docs/content/blog/2024/multi-arch-images-via-docker-selenium.md
new file mode 100644
index 000000000000..56f7912362ae
--- /dev/null
+++ b/website_and_docs/content/blog/2024/multi-arch-images-via-docker-selenium.md
@@ -0,0 +1,97 @@
+---
+title: "Multi-Arch Images via Docker Selenium"
+linkTitle: "Multi-Arch Images via Docker Selenium"
+date: 2024-05-23
+tags: [ "Grid", "Docker", "Kubernetes" ]
+categories: [ "Docker" ]
+author: Viet Nguyen Duc [@VietND96](https://github.com/VietND96)
+images:
+  - "/images/blog/2024/multi-arch-docker-selenium.jpeg"
+description: >
+  This blog post announces the availability of Multi-Arch Images for Selenium Grid Server on the official Selenium Docker Hub registry.
+---
+
+We're very happy to announce the landing of Multi-Arch Images for Selenium Grid Server on
+the [Selenium](https://hub.docker.com/r/selenium/) Docker Hub registry!
+
+### Motivation
+
+For experimental Docker container images that are able to run on platforms such as the Apple M-series or Raspberry Pi,
+the community-driven repository initiative hosted
+at [SeleniumHQ-Community/docker-seleniarm](https://github.com/seleniumhq-community/docker-seleniarm). These images are
+built for separate architectures: linux/arm64 (aarch64), linux/arm/v7 (armhf), and linux/amd64 and published
+on [Seleniarm](https://hub.docker.com/u/seleniarm) Docker Hub registry.
+
+In order to bring more awareness to the existence of the Multi-Arch Docker container images, provide more insight and
+transparency on how the container images are built, as well as overcome challenges in building and maintaining them. We
+have decided to merge the fork into the main project [Docker Selenium](https://github.com/SeleniumHQ/docker-selenium)
+and
+published multi-arch images on [Selenium](https://hub.docker.com/r/selenium/) Docker Hub registry.
+
+### Overview
+
+From image tag [releases](https://github.com/SeleniumHQ/docker-selenium/releases) `4.21.0` onwards, the architectures
+supported by Docker Selenium as below
+
+|       Architecture        | Operating System | Available |
+|:-------------------------:|------------------|:---------:|
+|    x86_64 (aka amd64)     | Ubuntu LTS       |     ✅     |
+| aarch64 (aka arm64/armv8) | Ubuntu LTS       |     ✅     |
+| armhf (aka arm32/armv7l)  | N/A              |     ❌     |
+
+Based on the architecture of the host machine, Docker will automatically pull the correct image for the platform.
+
+### Browser Binaries
+
+Let's take a moment to look at the browser binaries which are available for various architectures
+
+Google does not build Chrome (google-chrome) for Linux/ARM platforms. Hence, the Chrome (node and standalone) images are
+only available for AMD64. Similarly, Microsoft does not build Edge (microsoft-edge) for Linux/ARM platforms.
+
+Instead, the open source Chromium browser is used in place of Chrome and Edge. The `standalone-chromium`
+and `node-chromium`
+
+```bash
+$ docker run --rm -it -p 4444:4444 -p 5900:5900 -p 7900:7900 --shm-size 2g selenium/standalone-chromium:latest
+```
+
+Mozilla Firefox now is available for Linux/ARM64
+via [Nightly](https://blog.nightly.mozilla.org/2024/04/19/firefox-nightly-now-available-for-linux-on-arm64/) channel.
+The Firefox version in the ARM64 image will be different from the AMD64 version until the stable release is available.
+
+| Image Name          | Operating System | amd64 | arm64 |
+|---------------------|------------------|-------|-------|
+| standalone-chromium | Ubuntu LTS       | ✅     | ✅     |
+| node-chromium       | Ubuntu LTS       | ✅     | ✅     |
+| standalone-firefox  | Ubuntu LTS       | ✅     | ✅     |
+| node-firefox        | Ubuntu LTS       | ✅     | ✅     |
+| standalone-edge     | Ubuntu LTS       | ✅     | ❌     |
+| node-edge           | Ubuntu LTS       | ✅     | ❌     |
+| standalone-chrome   | Ubuntu LTS       | ✅     | ❌     |
+| node-chrome         | Ubuntu LTS       | ✅     | ❌     |
+
+### Build, test, and distribute multi-arch images
+
+We would also like to share what has been done to ensure that the multi-arch images can be built, tested, and
+distributed seamlessly.
+
+- Utilize Bash scripts and Makefile to wrap the tasks as much as possible. It provides the transparency on how the
+  container images are built and proceed by single command.
+
+- Utilize Arm VM's support on [CircleCI](https://app.circleci.com/pipelines/github/SeleniumHQ/docker-selenium) to build,
+  test, and deploy ARM64 images. Once GitHub Actions officially supports Arm-based hosted runners, those workflows can
+  easily be moved back to the same place. All the tests done for AMD64 images (including Docker, Docker Compose, and
+  deploy to Kubernetes) are used to verify ARM64 images.
+
+- Utilize experimental feature [containerd image store](https://docs.docker.com/storage/containerd/) in Docker Engine to
+  build and distribute multi-arch images in a simple way.
+
+Hopefully, this will make it easy for the community to find and use multi-arch images to simplify Selenium Grid Server
+deployment on various platforms.
+
+---
+
+Stay tuned for updates by following SeleniumHQ on [X (Formerly Twitter)](https://twitter.com/seleniumhq)
+or [LinkedIn](https://www.linkedin.com/company/selenium/)!
+
+Happy testing!
diff --git a/website_and_docs/content/blog/2024/protecting-unsecured-selenium-grid.md b/website_and_docs/content/blog/2024/protecting-unsecured-selenium-grid.md
new file mode 100644
index 000000000000..1e29ab5f6160
--- /dev/null
+++ b/website_and_docs/content/blog/2024/protecting-unsecured-selenium-grid.md
@@ -0,0 +1,28 @@
+---
+title: "Protecting unsecured Selenium Grids against SeleniumGreed"
+linkTitle: "Protecting unsecured Selenium Grids"
+date: 2024-07-31
+tags: ["selenium"]
+categories: ["general"]
+author: David Burns [@automatedtester](https://www.linkedin.com/in/theautomatedtester/)
+description: >
+   With an ongoing attack, called SeleniumGreed, on Selenium Grids, we recommend you keep your grid secure.
+---
+
+Over the last week there have been stories going around about crypto miners abusing unsecured Selenium Grids by
+injecting code in the session create to download and start up crypto miners. This came out thanks to the work from
+Wiz about an attack they have called [SeleniumGreed](https://www.wiz.io/blog/seleniumgreed-cryptomining-exploit-attack-flow-remediation-steps).
+This issue can be abused on most versions of Selenium but there appears to be a lot of effort going into abusing
+Selenium Grid 3.14. Please upgrade as some of the security items have been added since then.
+
+Selenium Grid by default doesn't have any authentication as the assumption has always been that we want you to put
+this behind a secure network to prevent people from abusing your resources. There are ways that you can secure the grid,
+and we have documentation available on how to do this in our [help section](https://www.selenium.dev/documentation/grid/configuration/help/#security). You can see more details if you run
+
+```
+java -jar selenium-server-<version>.jar info security
+```
+
+Another way to combat this is to use a cloud provider to run your Selenium Grid. We have numerous vendors that sponsor us
+so have a look at our [sponsors](https://www.selenium.dev/sponsors/) page. If you need help, after reading the [help section](https://www.selenium.dev/documentation/grid/configuration/help/#security)
+please come into our [chat rooms](https://www.selenium.dev/support/#ChatRoom) and we will try guide you through making your grid more secure.
diff --git a/website_and_docs/content/blog/2024/saucelabs-selenium-partnership.md b/website_and_docs/content/blog/2024/saucelabs-selenium-partnership.md
new file mode 100644
index 000000000000..6058422c22f3
--- /dev/null
+++ b/website_and_docs/content/blog/2024/saucelabs-selenium-partnership.md
@@ -0,0 +1,70 @@
+---
+title: "Sauce Labs: A New Milestone with Selenium"
+linkTitle: "Sauce Labs & Selenium Partnership"
+date: 2024-07-02
+tags: ["selenium"]
+categories: ["general"]
+author: David Burns [@automatedtester](https://www.linkedin.com/in/theautomatedtester/)
+images:
+  - "/images/blog/2024/saucelabs-selenium-partnership.jpeg"
+description: >
+    Announcing a new Development partnership tier with Sauce Labs, celebrating our supporters!
+---
+
+Selenium has witnessed an exceptional year filled with expansion and progress. The rising 
+popularity of Selenium's Python Bindings is prominently showcased through the engaging 
+discussions at the Selenium Conference and on LinkedIn. Concurrently, the Java bindings have 
+reached a significant landmark, surpassing 100 million downloads. In addition to this, 
+the community has managed to garner over [2.5 million active](https://plausible.io/manager.selenium.dev) 
+Selenium users monthly.
+
+We could not have achieved Selenium's 20th anniversary without the collective efforts of numerous 
+volunteers and the invaluable assistance of a company like [Sauce Labs](https://saucelabs.com/resources/topic-hub/selenium?utm_source=selenium&utm_medium=website&utm_campaign=selenium-sponsorship-fy25).
+
+In 2008, Jason Huggins, Selenium's creator, established Sauce Labs, a company that has since 
+played a crucial role in Selenium's expansion.
+
+Sauce Labs has provided a platform for the Selenium Project to display its accomplishments, 
+including various keynotes at SauceCon. Here, figures like Simon Stewart and Jim Evans have been 
+able to share their visions for the future of Selenium.
+
+Financially, Sauce Labs has substantially supported the Selenium Project, sponsoring both the 
+project itself and the Selenium Conference over many years. This backing has been instrumental 
+in allowing the project to flourish.
+
+Selenium thrives on collaboration, and Sauce Labs has been a vital facilitator. They have 
+enabled the Selenium Project to host in-person events like the Test Automation Summit in Berlin 
+in 2022. These gatherings have provided opportunities for members of the Selenium Project to 
+engage with creators of different testing frameworks, fostering discussions on ecosystem 
+improvements. Sauce Labs has also hosted Selenium Dev Summits, where the project's future has 
+been a central topic.
+
+Sauce Labs contributions extend beyond financial support. They have significantly contributed 
+to the technical and organizational well-being of the Selenium Project. Boni Garcia developed 
+the first version of Selenium Manager while at Sauce Labs. Furthermore, several Sauce Labs 
+employees, including Marcus Merrell, Diego Molina, and Titus Fortner, continue contributing 
+to the Selenium project, driven by their passion. This passion is shared by Sauce Labs, 
+enabling these contributions to be part of their daily work.
+
+This unwavering support has nurtured a project governed openly, not by a single entity, but 
+by the community. This model has welcomed diverse contributors, including Google Chrome, 
+Microsoft, Apple, LambdaTest, Applitools, BrowserStack, and Mozilla Firefox teams. Together, they 
+have developed WebDriver BiDi, the next generation of WebDriver.
+
+The project's open governance and collaborative nature have allowed continuous work on client 
+bindings, particularly WebDriver BiDi, community support, documentation improvements, and 
+maintenance of additional projects.
+
+Sauce Labs has been an unnamed development partner for the Selenium Project for many years. 
+With this in mind, the Selenium Project now shows its appreciation to Sauce Labs for their 
+years of continued support by creating a new sponsorship tier called the Development Partner 
+and naming Sauce Labs the first and official Development Partner.
+
+Sauce Labs has Selenium in its DNA, and Selenium has Sauce Labs in its DNA. This partnership 
+celebrates their shared history and future. We are excited to see what the future holds for 
+both Selenium and Sauce Labs, and we are excited to continue to work together for the next 
+twenty years.
+
+If you want to learn more about this partnership and win a limited edition t-shirt, check 
+[How Did Sauce Labs Get Its Name? A Selenium Story](https://saucelabs.com/resources/blog/selenium-and-sauce-labs).
+
diff --git a/website_and_docs/content/blog/2024/selenium-4-17-released.md b/website_and_docs/content/blog/2024/selenium-4-17-released.md
new file mode 100644
index 000000000000..88afc3d5120c
--- /dev/null
+++ b/website_and_docs/content/blog/2024/selenium-4-17-released.md
@@ -0,0 +1,144 @@
+---
+title: "Selenium 4.17 Released!"
+linkTitle: "Selenium 4.17 Released!"
+date: 2024-01-23
+tags: ["selenium"]
+categories: ["releases"]
+author: Titus Fortner [@titusfortner](https://titusfortner.com)
+description: >
+  Today we're happy to announce that Selenium 4.17 has been released!
+---
+
+We're very happy to announce the release of Selenium 4.17.0 for 
+Javascript, Ruby, Python, .NET, Java and the Grid!
+Links to everything can be found on our [downloads page][downloads].
+
+### Highlights
+
+  * Chrome DevTools support is now: v119, v120, and v121 (Firefox still uses v85 for all versions)
+  * Selenium Manager [records usage](https://plausible.io/manager.selenium.dev) set 
+environment variable [`SE_AVOID_STATS` to `"true"`](/documentation/selenium_manager/#data-collection) to avoid sending information.
+  * Chrome headless changed the name of the browser to reflect that it is not actually chrome; Selenium now handles this seamlessly,
+but you should still switch to `--headless=new` (see: [Headless is going away](/blog/2023/headless-is-going-away/))
+
+#### Noteworthy changes per language
+
+  * Java 
+    * Remove deprecated event listener classes; update to EventFiringDecorator and WebDriverListener classes
+    * Allow disabling Grid UI
+    * Deprecated FirefoxBinary class and legacy Error Codes
+    * Deprecated HTML5 features for offline storage, location, and network connection
+    * No longer accepting session requests with desiredCapabilities keyword
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG)
+
+  <br>
+  
+  * JavaScript
+    * Remove deprecated headless methods and associated references
+    * Implemented remote file downloading
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md)
+  
+  <br>
+  
+  * .NET
+    * Improvements to the new logging implementation
+    * Removed previously deprecated code  
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG)
+  
+  <br>
+  
+  * Python
+    * Updated WPEWebKit support
+    * Removed previously deprecated code
+    * Deprecated FirefoxBinary and several outdated FirefoxProfile methods
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES)
+
+<br>
+  
+  * Ruby
+    * Logger defaults output to stderr instead of stdout
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)
+
+<br>
+
+  * Rust
+    * Use latest browser from cache when browser path is not discovered
+    * Throw a descriptive message when error parsing JSON from response
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/rust/CHANGELOG.md)
+
+
+### Contributors
+
+**Special shout-out to everyone who helped the Selenium Team get this release out!**
+
+#### [Selenium](https://github.com/SeleniumHQ/selenium)
+
+<div class="d-flex justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/Earlopain" >}}
+{{< gh-user "https://api.github.com/users/EdwinVanVliet" >}}
+{{< gh-user "https://api.github.com/users/asolntsev" >}}
+{{< gh-user "https://api.github.com/users/jamesbraza" >}}
+{{< gh-user "https://api.github.com/users/lauromoura" >}}
+{{< gh-user "https://api.github.com/users/middlingphys" >}}
+{{< gh-user "https://api.github.com/users/take0x" >}}
+{{< gh-user "https://api.github.com/users/valfirst" >}}
+{{< gh-user "https://api.github.com/users/vietnd96" >}}
+{{< gh-user "https://api.github.com/users/whimboo" >}}
+    </div>
+  </div>
+</div>
+
+
+#### [Selenium Docs & Website](https://github.com/SeleniumHQ/seleniumhq.github.io)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/YevgeniyShunevych" >}}
+    </div>
+  </div>
+</div>
+
+#### [Docker Selenium](https://github.com/SeleniumHQ/docker-selenium)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/Auto81" >}}
+{{< gh-user "https://api.github.com/users/Earlopain" >}}
+{{< gh-user "https://api.github.com/users/amardeep2006" >}}
+{{< gh-user "https://api.github.com/users/vietnd96" >}}
+    </div>
+  </div>
+</div>
+
+#### [Selenium Team Members][team]
+
+**Thanks as well to all the team members who contributed to this release:**
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/AutomatedTester" >}}
+{{< gh-user "https://api.github.com/users/bonigarcia" >}}
+{{< gh-user "https://api.github.com/users/diemol" >}}
+{{< gh-user "https://api.github.com/users/harsha509" >}}
+{{< gh-user "https://api.github.com/users/joerg1985" >}}
+{{< gh-user "https://api.github.com/users/nvborisenko" >}}
+{{< gh-user "https://api.github.com/users/p0deje" >}}
+{{< gh-user "https://api.github.com/users/pujagani" >}}
+{{< gh-user "https://api.github.com/users/titusfortner" >}}
+ </div>
+  </div>
+</div>
+
+Stay tuned for updates by following [SeleniumHQ](https://twitter.com/seleniumhq)!
+
+Happy testing!
+
+[downloads]: /downloads
+[bindings]: /downloads#bindings
+[team]: /project/structure
+[BiDi]: https://github.com/w3c/webdriver-bidi
diff --git a/website_and_docs/content/blog/2024/selenium-4-18-released.md b/website_and_docs/content/blog/2024/selenium-4-18-released.md
new file mode 100644
index 000000000000..808ab861c006
--- /dev/null
+++ b/website_and_docs/content/blog/2024/selenium-4-18-released.md
@@ -0,0 +1,147 @@
+---
+title: "Selenium 4.18 Released!"
+linkTitle: "Selenium 4.18 Released!"
+date: 2024-02-19
+tags: ["selenium"]
+categories: ["releases"]
+author: Diego Molina [@diemol](https://diemol.com)
+description: >
+  Today we're happy to announce that Selenium 4.18 has been released!
+---
+
+We're very happy to announce the release of Selenium 4.18.0 and 4.18.1 for 
+Javascript, Ruby, Python, .NET, Java and the Grid!
+Links to everything can be found on our [downloads page][downloads].
+
+### Highlights
+
+  * Chrome DevTools support is now: v120, v121, and v122 (Firefox still uses v85 for all versions)
+  * Selenium Manager [records usage](https://plausible.io/manager.selenium.dev) has been decreased to reduce impact on users.
+  * Chrome headless changed the name of the browser to reflect that it is not actually chrome; Selenium now handles this seamlessly,
+but you should still switch to `--headless=new` (see: [Headless is going away](/blog/2023/headless-is-going-away/))
+
+#### Noteworthy changes per language
+
+  * Java 
+    * Enabling Grid to use self-signed certificate for debugging
+    * Added explicit target locator events to the listener support classes in `WebDriverListener`.
+    * Add missing event handlers for TargetLocator interface in `WebDriverListener`.
+    * Several [BiDi] additions: Browsing context destroyed event, Network intercept commands, command `continuewithAuth`, between others.
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG)
+
+
+  <br>
+  
+  * JavaScript
+    * Several [BiDi] additions: Browsing context destroyed event, realm destroyed event, command `continuewithAuth`, between others.
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md)
+  
+  <br>
+  
+  * .NET
+    * Fix protocol cdp version for `RemoteWebDriver`.
+    * Fix network response data encoding.
+    * Explicitly support passing the full path to driver in Service constructor  
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG)
+
+  <br>
+  
+  * Python
+    * Python for [nightly releases](https://test.pypi.org/project/selenium/)
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES)
+
+  <br>
+  
+  * Ruby
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)
+
+
+  <br>
+
+  * Rust
+    * Add timestamps to Selenium Manager logs
+    * Selenium Manager decreases frequency of statistics reporting
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/rust/CHANGELOG.md)
+
+
+
+### Contributors
+
+**Special shout-out to everyone who helped the Selenium Team get this release out!**
+
+#### [Selenium](https://github.com/SeleniumHQ/selenium)
+
+<div class="d-flex justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/Trigtrig" >}}
+{{< gh-user "https://api.github.com/users/manuelsblanco" >}}
+{{< gh-user "https://api.github.com/users/mtrea" >}}
+{{< gh-user "https://api.github.com/users/oleg-rd" >}}
+{{< gh-user "https://api.github.com/users/semaperepelitsa" >}}
+{{< gh-user "https://api.github.com/users/symonk" >}}
+{{< gh-user "https://api.github.com/users/valfirst" >}}
+    </div>
+  </div>
+</div>
+
+
+#### [Selenium Docs & Website](https://github.com/SeleniumHQ/seleniumhq.github.io)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/BlazerYoo" >}}
+{{< gh-user "https://api.github.com/users/bhecquet" >}}
+{{< gh-user "https://api.github.com/users/geekmister" >}}
+{{< gh-user "https://api.github.com/users/justnpT" >}}
+{{< gh-user "https://api.github.com/users/mmonfared" >}}
+{{< gh-user "https://api.github.com/users/netassa" >}}
+{{< gh-user "https://api.github.com/users/nvborisenko" >}}
+{{< gh-user "https://api.github.com/users/pallavigitwork" >}}
+    </div>
+  </div>
+</div>
+
+#### [Docker Selenium](https://github.com/SeleniumHQ/docker-selenium)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/0xC4N1" >}}
+{{< gh-user "https://api.github.com/users/Doofus100500" >}}
+{{< gh-user "https://api.github.com/users/Opvolger" >}}
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+    </div>
+  </div>
+</div>
+
+#### [Selenium Team Members][team]
+
+**Thanks as well to all the team members who contributed to this release:**
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/AutomatedTester" >}}
+{{< gh-user "https://api.github.com/users/bonigarcia" >}}
+{{< gh-user "https://api.github.com/users/diemol" >}}
+{{< gh-user "https://api.github.com/users/harsha509" >}}
+{{< gh-user "https://api.github.com/users/joerg1985" >}}
+{{< gh-user "https://api.github.com/users/nvborisenko" >}}
+{{< gh-user "https://api.github.com/users/p0deje" >}}
+{{< gh-user "https://api.github.com/users/pujagani" >}}
+{{< gh-user "https://api.github.com/users/shs96c" >}}
+{{< gh-user "https://api.github.com/users/titusfortner" >}}
+ </div>
+  </div>
+</div>
+
+Stay tuned for updates by following [SeleniumHQ](https://twitter.com/seleniumhq)!
+
+Happy testing!
+
+[downloads]: /downloads
+[bindings]: /downloads#bindings
+[team]: /project/structure
+[BiDi]: https://github.com/w3c/webdriver-bidi
diff --git a/website_and_docs/content/blog/2024/selenium-4-19-released.md b/website_and_docs/content/blog/2024/selenium-4-19-released.md
new file mode 100644
index 000000000000..bbe08de0c5b9
--- /dev/null
+++ b/website_and_docs/content/blog/2024/selenium-4-19-released.md
@@ -0,0 +1,147 @@
+---
+title: "Selenium 4.19 Released!"
+linkTitle: "Selenium 4.19 Released!"
+date: 2024-03-27
+tags: ["selenium"]
+categories: ["releases"]
+author: Diego Molina [@diemol](https://diemol.com)
+images:
+  - "/images/blog/2024/selenium_4.19.png"
+description: >
+  Today we're happy to announce that Selenium 4.19 has been released!
+---
+
+We're very happy to announce the release of Selenium 4.19.0 for 
+Javascript, Ruby, Python, .NET, Java and the Grid!
+Links to everything can be found on our [downloads page][downloads].
+
+### Highlights
+
+  * Chrome DevTools support is now: v121, v122, and v123 (Firefox still uses v85 for all versions)
+  * Thanks to Selenium Manager's [records usage](https://plausible.io/manager.selenium.dev), we know Selenium has at least 1.8M active users in the last 30 days!
+  * Java and JavaScript keep adding more WebDriver [BiDi] features.
+  * The WebDriver [BiDi] features in Java have a new home, read it at Puja's [blog post](/blog/2024/bidi-java-breaking-change).
+
+
+#### Noteworthy changes per language
+
+  * Java 
+    * `se:bidi` was removed from the session response when starting a Grid session, as `webSocketUrl` is enough.
+    * Memory allocation and thread handling was improved in Grid.
+    * Add missing event handlers for TargetLocator interface in `WebDriverListener`.
+    * Several [BiDi] additions: adding `setFiles` command of the Input Module, between others. 
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG)
+
+
+  <br>
+  
+  * JavaScript
+    * Several [BiDi] additions: adding `setFiles` command of the Input Module, between others.
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md)
+  
+  <br>
+  
+  * .NET
+    * The `ChromiumDriverService.AllowedIPAddresses` name was corrected
+    * It is now possible to set timeouts via capabilities
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG)
+
+  <br>
+  
+  * Python
+    * More network interfaces were added to detect lan ip
+    * The `install_addon()` (Firefox extensions) was improved to take into account dir paths with trailing slashes
+    * Improvements for type parameters
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES)
+
+  <br>
+  
+  * Ruby
+    * Full RBS support was added (#13234)
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)
+
+
+  <br>
+
+  * Rust
+    * Improving how MS Edge is downloaded
+    * Fix how MS Edge is managed in RPM-based Linux
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/rust/CHANGELOG.md)
+
+
+
+### Contributors
+
+**Special shout-out to everyone who helped the Selenium Team get this release out!**
+
+#### [Selenium](https://github.com/SeleniumHQ/selenium)
+
+<div class="d-flex justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/adamtheturtle" >}}
+{{< gh-user "https://api.github.com/users/aguspe" >}}
+{{< gh-user "https://api.github.com/users/jkbzh" >}}
+{{< gh-user "https://api.github.com/users/sbabcoc" >}}
+{{< gh-user "https://api.github.com/users/zhani" >}}
+    </div>
+  </div>
+</div>
+
+
+#### [Selenium Docs & Website](https://github.com/SeleniumHQ/seleniumhq.github.io)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/AlphaWong" >}}
+{{< gh-user "https://api.github.com/users/amardeep2006" >}}
+{{< gh-user "https://api.github.com/users/jkbzh" >}}
+{{< gh-user "https://api.github.com/users/mmonfared" >}}
+{{< gh-user "https://api.github.com/users/rdinoff" >}}
+    </div>
+  </div>
+</div>
+
+#### [Docker Selenium](https://github.com/SeleniumHQ/docker-selenium)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+{{< gh-user "https://api.github.com/users/cedricroijakkers" >}}
+{{< gh-user "https://api.github.com/users/maxmanuylov" >}}
+{{< gh-user "https://api.github.com/users/msvticket" >}}
+    </div>
+  </div>
+</div>
+
+#### [Selenium Team Members][team]
+
+**Thanks as well to all the team members who contributed to this release:**
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/pujagani" >}}
+{{< gh-user "https://api.github.com/users/diemol" >}}
+{{< gh-user "https://api.github.com/users/bonigarcia" >}}
+{{< gh-user "https://api.github.com/users/harsha509" >}}
+{{< gh-user "https://api.github.com/users/joerg1985" >}}
+{{< gh-user "https://api.github.com/users/nvborisenko" >}}
+{{< gh-user "https://api.github.com/users/p0deje" >}}
+{{< gh-user "https://api.github.com/users/shs96c" >}}
+{{< gh-user "https://api.github.com/users/titusfortner" >}}
+{{< gh-user "https://api.github.com/users/AutomatedTester" >}}
+ </div>
+  </div>
+</div>
+
+Stay tuned for updates by following SeleniumHQ on [X (Formerly Twitter)](https://twitter.com/seleniumhq) or [LinkedIn](https://www.linkedin.com/company/selenium/)!
+
+Happy testing!
+
+[downloads]: /downloads
+[bindings]: /downloads#bindings
+[team]: /project/structure
+[BiDi]: https://github.com/w3c/webdriver-bidi
diff --git a/website_and_docs/content/blog/2024/selenium-4-20-released.md b/website_and_docs/content/blog/2024/selenium-4-20-released.md
new file mode 100644
index 000000000000..9f42faeafa34
--- /dev/null
+++ b/website_and_docs/content/blog/2024/selenium-4-20-released.md
@@ -0,0 +1,145 @@
+---
+title: "Selenium 4.20 Released!"
+linkTitle: "Selenium 4.20 Released!"
+date: 2024-04-25
+tags: ["selenium"]
+categories: ["releases"]
+author: Diego Molina [@diemol](https://diemol.com)
+images:
+  - "/images/blog/2024/selenium_4.20.png"
+description: >
+  Today we're happy to announce that Selenium 4.20 has been released!
+---
+
+We're very happy to announce the release of Selenium 4.20.0 for 
+Javascript, Ruby, Python, .NET, Java and the Grid!
+Links to everything can be found on our [downloads page][downloads].
+
+### Highlights
+
+  * Chrome DevTools support is now: v122, v123, and v124 (Firefox still uses v85 for all versions)
+  * Selenium has at least [2.3M active users](https://plausible.io/manager.selenium.dev) in the last 30 days. 500k more than last month!
+  * Java and JavaScript keep adding more WebDriver [BiDi] features.
+  * .NET C# and JavaScript now publish [nightly builds to GitHub packages](/downloads/#nightly).
+  * Nightly packages are tested daily with the examples from the Selenium [documentation](/documentation). 
+  * The code used to invoke Selenium Manager has been refactored in all languages, making it easier to maintain and improve. 
+    * The interface has changed and if users were invoking it, they might experience issues. 
+      Selenium Manager is still in beta and these type of changes are expected. 
+
+
+#### Noteworthy changes per language
+
+  * Java 
+    * Browser containers provisioned in Dynamic Grid will use the hostConfig
+    * Dynamic Grid re-fetches browser images if they were pruned during runtime
+    * Several [BiDi] additions: Update browsing context create method, between others. 
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG)
+
+
+  <br>
+  
+  * JavaScript
+    * Several [BiDi] additions: Update capture screenshot APIs to include all parameters and remove scroll parameter, between others
+    * Nightly JS builds are now pushed to GitHub packages
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md)
+  
+  <br>
+  
+  * .NET
+    * The correct devtools session id is now used after reinitialization
+    * Nightly .NET C# builds are now pushed to GitHub packages
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG)
+
+  <br>
+  
+  * Python
+    * Improvements for type hints in parameters
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES)
+
+  <br>
+  
+  * Ruby
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)
+
+
+  <br>
+
+  * Rust
+    * Use DEBUG level instead of WARN traces in offline mode
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/rust/CHANGELOG.md)
+
+
+
+### Contributors
+
+**Special shout-out to everyone who helped the Selenium Team get this release out!**
+
+#### [Selenium](https://github.com/SeleniumHQ/selenium)
+
+<div class="d-flex justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/Trigtrig" >}}
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+    </div>
+  </div>
+</div>
+
+
+#### [Selenium Docs & Website](https://github.com/SeleniumHQ/seleniumhq.github.io)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/Sakif-Al-Faruque" >}}
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+{{< gh-user "https://api.github.com/users/aguspe" >}}
+{{< gh-user "https://api.github.com/users/digitalvoice-nz" >}}
+{{< gh-user "https://api.github.com/users/harshitBhardwaj97" >}}
+{{< gh-user "https://api.github.com/users/pallavigitwork" >}}
+{{< gh-user "https://api.github.com/users/zipperer" >}}
+    </div>
+  </div>
+</div>
+
+#### [Docker Selenium](https://github.com/SeleniumHQ/docker-selenium)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/Earlopain" >}}
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+{{< gh-user "https://api.github.com/users/maxmanuylov" >}}
+    </div>
+  </div>
+</div>
+
+#### [Selenium Team Members][team]
+
+**Thanks as well to all the team members who contributed to this release:**
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/pujagani" >}}
+{{< gh-user "https://api.github.com/users/diemol" >}}
+{{< gh-user "https://api.github.com/users/bonigarcia" >}}
+{{< gh-user "https://api.github.com/users/harsha509" >}}
+{{< gh-user "https://api.github.com/users/joerg1985" >}}
+{{< gh-user "https://api.github.com/users/nvborisenko" >}}
+{{< gh-user "https://api.github.com/users/p0deje" >}}
+{{< gh-user "https://api.github.com/users/shs96c" >}}
+{{< gh-user "https://api.github.com/users/titusfortner" >}}
+{{< gh-user "https://api.github.com/users/AutomatedTester" >}}
+ </div>
+  </div>
+</div>
+
+Stay tuned for updates by following SeleniumHQ on [X (Formerly Twitter)](https://twitter.com/seleniumhq) or [LinkedIn](https://www.linkedin.com/company/selenium/)!
+
+Happy testing!
+
+[downloads]: /downloads
+[bindings]: /downloads#bindings
+[team]: /project/structure
+[BiDi]: https://github.com/w3c/webdriver-bidi
diff --git a/website_and_docs/content/blog/2024/selenium-4-21-released.md b/website_and_docs/content/blog/2024/selenium-4-21-released.md
new file mode 100644
index 000000000000..3b44c6299c37
--- /dev/null
+++ b/website_and_docs/content/blog/2024/selenium-4-21-released.md
@@ -0,0 +1,141 @@
+---
+title: "Selenium 4.21 Released!"
+linkTitle: "Selenium 4.21 Released!"
+date: 2024-05-16
+tags: ["selenium"]
+categories: ["releases"]
+author: Diego Molina [@diemol](https://diemol.com)
+images:
+  - "/images/blog/2024/selenium_4.21.png"
+description: >
+  Today we're happy to announce that Selenium 4.21 has been released!
+---
+
+We're very happy to announce the release of Selenium 4.21.0 for 
+Javascript, Ruby, Python, .NET, Java and the Grid!
+Links to everything can be found on our [downloads page][downloads].
+
+### Highlights
+
+  * Chrome DevTools support is now: v123, v124, and v125 (Firefox still uses v85 for all versions)
+  * Selenium has at least [2.4M active users](https://plausible.io/manager.selenium.dev) in the last 30 days. 100k more than last month!
+    * India and United States are the top countries with the most users.
+    * Python is the most used language from the last 5 releases.
+    * The most used operating system is Windows, with at least 1.9M users.
+  * Extensibility points started to be implemented to simplify the integration between Selenium and Appium. Ruby is the first language to implement it. 
+  * Java and JavaScript keep adding more WebDriver [BiDi] features.
+  * In Java, it is possible to set parameters for Selenium Manager via system properties.
+  * Nightly packages are tested daily with the examples from the Selenium [documentation](/documentation). 
+
+
+#### Noteworthy changes per language
+
+  * Java 
+    * Browser containers provisioned in Dynamic Grid will use the hostConfig
+    * Set test name to video file name in Dynamic Grid
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG)
+
+
+  <br>
+  
+  * JavaScript
+    * Ensure `selectVisibleByText` method is same as other languages
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md)
+  
+  <br>
+  
+  * .NET
+    * Overwrite internal log file if it already exists
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG)
+
+  <br>
+  
+  * Python
+    * Moving ignore_local_proxy_environment_variables to BaseOptions
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES)
+
+  <br>
+  
+  * Ruby
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)
+
+
+  <br>
+
+  * Rust
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/rust/CHANGELOG.md)
+
+
+
+### Contributors
+
+**Special shout-out to everyone who helped the Selenium Team get this release out!**
+
+#### [Selenium](https://github.com/SeleniumHQ/selenium)
+
+<div class="d-flex justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+{{< gh-user "https://api.github.com/users/iampopovich" >}}
+{{< gh-user "https://api.github.com/users/joebandenburg" >}}
+{{< gh-user "https://api.github.com/users/kool79" >}}
+{{< gh-user "https://api.github.com/users/sandeepsuryaprasad" >}}
+    </div>
+  </div>
+</div>
+
+
+#### [Selenium Docs & Website](https://github.com/SeleniumHQ/seleniumhq.github.io)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/Arpan3323" >}}
+{{< gh-user "https://api.github.com/users/aguspe" >}}
+{{< gh-user "https://api.github.com/users/chamiz" >}}
+{{< gh-user "https://api.github.com/users/pallavigitwork" >}}
+    </div>
+  </div>
+</div>
+
+#### [Docker Selenium](https://github.com/SeleniumHQ/docker-selenium)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+{{< gh-user "https://api.github.com/users/edhinard" >}}
+    </div>
+  </div>
+</div>
+
+#### [Selenium Team Members][team]
+
+**Thanks as well to all the team members who contributed to this release:**
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/pujagani" >}}
+{{< gh-user "https://api.github.com/users/diemol" >}}
+{{< gh-user "https://api.github.com/users/bonigarcia" >}}
+{{< gh-user "https://api.github.com/users/harsha509" >}}
+{{< gh-user "https://api.github.com/users/joerg1985" >}}
+{{< gh-user "https://api.github.com/users/nvborisenko" >}}
+{{< gh-user "https://api.github.com/users/p0deje" >}}
+{{< gh-user "https://api.github.com/users/shs96c" >}}
+{{< gh-user "https://api.github.com/users/titusfortner" >}}
+{{< gh-user "https://api.github.com/users/AutomatedTester" >}}
+ </div>
+  </div>
+</div>
+
+Stay tuned for updates by following SeleniumHQ on [X (Formerly Twitter)](https://twitter.com/seleniumhq) or [LinkedIn](https://www.linkedin.com/company/selenium/)!
+
+Happy testing!
+
+[downloads]: /downloads
+[bindings]: /downloads#bindings
+[team]: /project/structure
+[BiDi]: https://github.com/w3c/webdriver-bidi
diff --git a/website_and_docs/content/blog/2024/selenium-4-22-released.md b/website_and_docs/content/blog/2024/selenium-4-22-released.md
new file mode 100644
index 000000000000..bcaa36af21a4
--- /dev/null
+++ b/website_and_docs/content/blog/2024/selenium-4-22-released.md
@@ -0,0 +1,149 @@
+---
+title: "Selenium 4.22 Released!"
+linkTitle: "Selenium 4.22 Released!"
+date: 2024-06-21
+tags: ["selenium"]
+categories: ["releases"]
+author: Titus Fortner [@titusfortner](https://titusfortner.com)
+description: >
+  Today we're happy to announce that Selenium 4.22 has been released!
+---
+
+We're very happy to announce the release of Selenium 4.22.0 for 
+Javascript, Ruby, Python, .NET, Java and the Grid!
+Links to everything can be found on our [downloads page][downloads].
+
+### Highlights
+
+  * Selenium has at least [2.6 active users](https://plausible.io/manager.selenium.dev) in the last 30 days. 200k more than last month!
+    * All information we collect is publicly available.
+    * The numbers only represent users who have Selenium Manager enabled and are using Selenium v4.17 or greater.
+    * Python, Chrome and Windows all see the majority of use.
+* Chrome DevTools support is now: v124, v125, and v126 (Firefox still uses v85 for all versions)
+* The first implementations of the new [BiDi API](https://www.selenium.dev/documentation/webdriver/bidi/logging)
+have rolled out in Ruby, Python and JavaScript
+
+#### Noteworthy changes per language
+
+  * Java 
+    * Enabling BiDi can now be accomplished by calling `enableBiDi()` on an Options class instance.
+    * Video file name in Dynamic Grid can be set with `se:videoName` capability.
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG)
+
+  <br>
+  
+  * JavaScript
+    * BiDi API for console logging and JavaScript errors has been implemented. 
+    * Additional BiDi implementations.
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md)
+  
+  <br>
+  
+  * .NET
+    * The .NET bindings have started to roll out asynchronous methods.
+      * The synchronous methods will still be supported, but they will call the async methods "under the hood."
+      * This release adds asynchronous methods to the Navigation class.
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG)
+
+  <br>
+  
+  * Python
+    * This release implements a new way of working with Chrome Devtools Protocol
+      * The previous implementation requires async/await pattern, so it was not backwards compatible.
+      * The new implementation is backwards compatible and executes async code in separate threads.
+    * Updated the webkitgtk and wpewebkit driver implementations.
+    * Enabling BiDi can now be accomplished by setting the `enable_bidi()` property of an Options class instance to `True`.
+    * BiDi API for console logging and JavaScript errors has been implemented.
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES)
+
+  <br>
+  
+  * Ruby
+    * Implemented a toggle for BiDi and Classic implementations.
+    * BiDi API for console logging and JavaScript errors has been implemented.
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)
+
+
+  <br>
+
+  * Rust
+    * Added the ability to stream logging information to stdout instead of after execution complete.
+    * Improved binary location on Windows with native Rust methods.
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/rust/CHANGELOG.md)
+
+### Contributors
+
+**Special shout-out to everyone who helped the Selenium Team get this release out!**
+
+#### [Selenium](https://github.com/SeleniumHQ/selenium)
+
+<div class="d-flex justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/3dprogramin" >}}
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+{{< gh-user "https://api.github.com/users/aguspe" >}}
+{{< gh-user "https://api.github.com/users/bgermann" >}}
+{{< gh-user "https://api.github.com/users/Earlopain" >}}
+{{< gh-user "https://api.github.com/users/iampopovich" >}}
+{{< gh-user "https://api.github.com/users/millin" >}}
+{{< gh-user "https://api.github.com/users/sbabcoc" >}}
+{{< gh-user "https://api.github.com/users/vlad8x8" >}}
+{{< gh-user "https://api.github.com/users/yuzawa-san" >}}
+    </div>
+  </div>
+</div>
+
+
+#### [Selenium Docs & Website](https://github.com/SeleniumHQ/seleniumhq.github.io)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/alaahong" >}}
+{{< gh-user "https://api.github.com/users/aguspe" >}}
+{{< gh-user "https://api.github.com/users/digitalvoice-nz" >}}
+{{< gh-user "https://api.github.com/users/pallavigitwork" >}}
+{{< gh-user "https://api.github.com/users/sangcnguyen" >}}
+    </div>
+  </div>
+</div>
+
+#### [Docker Selenium](https://github.com/SeleniumHQ/docker-selenium)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+    </div>
+  </div>
+</div>
+
+#### [Selenium Team Members][team]
+
+**Thanks as well to all the team members who contributed to this release:**
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/AutomatedTester" >}}
+{{< gh-user "https://api.github.com/users/bonigarcia" >}}
+{{< gh-user "https://api.github.com/users/diemol" >}}
+{{< gh-user "https://api.github.com/users/harsha509" >}}
+{{< gh-user "https://api.github.com/users/joerg1985" >}}
+{{< gh-user "https://api.github.com/users/p0deje" >}}
+{{< gh-user "https://api.github.com/users/pujagani" >}}
+{{< gh-user "https://api.github.com/users/shs96c" >}}
+{{< gh-user "https://api.github.com/users/titusfortner" >}}
+    </div>
+  </div>
+</div>
+
+Stay tuned for updates by following SeleniumHQ on [X (Formerly Twitter)](https://twitter.com/seleniumhq) or [LinkedIn](https://www.linkedin.com/company/selenium/)!
+
+Happy automating!
+
+[downloads]: /downloads
+[bindings]: /downloads#bindings
+[team]: /project/structure
+[BiDi]: https://github.com/w3c/webdriver-bidi
diff --git a/website_and_docs/content/blog/2024/selenium-4-23-released.md b/website_and_docs/content/blog/2024/selenium-4-23-released.md
new file mode 100644
index 000000000000..e9cbb1a9e123
--- /dev/null
+++ b/website_and_docs/content/blog/2024/selenium-4-23-released.md
@@ -0,0 +1,123 @@
+---
+title: "Selenium 4.23 Released!"
+linkTitle: "Selenium 4.23 Released!"
+date: 2024-07-26
+tags: ["selenium"]
+categories: ["releases"]
+author: Puja Jagani [@pujagani](https://github.com/pujagani)
+description: >
+  Today we're happy to announce that Selenium 4.23 has been released!
+---
+
+We're very happy to announce the release of Selenium 4.23.0 for 
+Javascript, Ruby, Python, .NET, Java and the Grid!
+Links to everything can be found on our [downloads page][downloads].
+
+#### Noteworthy changes per language
+
+  * Java 
+    * Add custom duration for Actions constructor (#14085).
+    * Set session-request-timeout as client readTimeout in RemoteNewSessionQueue.
+    * Add high-level BiDi logging APIs.
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG)
+
+  <br>
+  
+  * JavaScript
+    * Add source type to BiDi log entry.
+    * Add high-level script pinning BiDi APIs.
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md)
+  
+  <br>
+  
+  * .NET
+    * Log http requests/responses via internal DiagnosticsHttpHandler.
+    * Return protected synchronous Execute method in WebDriver.
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG)
+
+  <br>
+  
+  * Python
+    * Allow RelativeBy to take 2 parameters.
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES)
+
+  <br>
+  
+  * Ruby
+    * Improved error messaging.
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)
+
+
+  <br>
+
+
+### Contributors
+
+**Special shout-out to everyone who helped the Selenium Team get this release out!**
+
+#### [Selenium](https://github.com/SeleniumHQ/selenium)
+
+<div class="d-flex justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+{{< gh-user "https://api.github.com/users/aguspe" >}}
+{{< gh-user "https://api.github.com/users/iampopovich" >}}
+    </div>
+  </div>
+</div>
+
+
+#### [Selenium Docs & Website](https://github.com/SeleniumHQ/seleniumhq.github.io)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/alaahong" >}}
+{{< gh-user "https://api.github.com/users/aguspe" >}}
+{{< gh-user "https://api.github.com/users/pallavigitwork" >}}
+    </div>
+  </div>
+</div>
+
+#### [Docker Selenium](https://github.com/SeleniumHQ/docker-selenium)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+{{< gh-user "https://api.github.com/users/slhck" >}}
+{{< gh-user "https://api.github.com/users/StegSchreck" >}}
+    </div>
+  </div>
+</div>
+
+#### [Selenium Team Members][team]
+
+**Thanks as well to all the team members who contributed to this release:**
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/AutomatedTester" >}}
+{{< gh-user "https://api.github.com/users/bonigarcia" >}}
+{{< gh-user "https://api.github.com/users/diemol" >}}
+{{< gh-user "https://api.github.com/users/harsha509" >}}
+{{< gh-user "https://api.github.com/users/joerg1985" >}}
+{{< gh-user "https://api.github.com/users/nvborisenko" >}}
+{{< gh-user "https://api.github.com/users/p0deje" >}}
+{{< gh-user "https://api.github.com/users/pujagani" >}}
+{{< gh-user "https://api.github.com/users/shs96c" >}}
+{{< gh-user "https://api.github.com/users/titusfortner" >}}
+    </div>
+  </div>
+</div>
+
+Stay tuned for updates by following SeleniumHQ on [X (Formerly Twitter)](https://twitter.com/seleniumhq) or [LinkedIn](https://www.linkedin.com/company/selenium/)!
+
+Happy automating!
+
+[downloads]: /downloads
+[bindings]: /downloads#bindings
+[team]: /project/structure
+[BiDi]: https://github.com/w3c/webdriver-bidi
diff --git a/website_and_docs/content/blog/2024/selenium-4-24-released.md b/website_and_docs/content/blog/2024/selenium-4-24-released.md
new file mode 100644
index 000000000000..24fc82308c67
--- /dev/null
+++ b/website_and_docs/content/blog/2024/selenium-4-24-released.md
@@ -0,0 +1,157 @@
+---
+title: "Selenium 4.24 Released!"
+linkTitle: "Selenium 4.24 Released!"
+date: 2024-08-28
+tags: ["selenium"]
+categories: ["releases"]
+author: Diego Molina [@diemol](https://www.diemol.com)
+images:
+  - "/images/blog/2024/selenium_4.24.png"
+description: >
+  Today we're happy to announce that Selenium 4.24 has been released!
+---
+
+We're very happy to announce the release of Selenium 4.24.0 for 
+Javascript, Ruby, Python, .NET, Java and the Grid!
+Links to everything can be found on our [downloads page][downloads].
+
+#### Noteworthy changes per language
+
+  * Java 
+    * **BiDi Prompt/Alert Test Fix**: Fixed prompt/alert related tests if BiDi is enabled.
+    * **Execute Script API**: Added execute script high-level API for BiDi.
+    * **JSpecify Annotations**: Added JSpecify annotations for WebDriver, WebElement, SearchContext, and other interfaces.
+    * **Dom Mutation Handler Support**: Added DOM mutation handler support for BiDi.
+    * **Close HttClient on Session Failure**: Ensured HttClient is closed if starting the session fails.
+    * **System Property to Disable Tracing**: Added a system property to disable tracing. ([c8676eff10](https://github.com/SeleniumHQ/selenium/commit/c8676eff107a7e5e617c6fc953baad45305cc680))
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG)
+
+  <br>
+  
+  * JavaScript
+    * **High-Level Script Command for BiDi**: Added a high-level script command for BiDi.
+    * **Authentication Handlers for BiDi**: Added authentication handlers for BiDi.
+    * **Expose Selenium Version for Node.js**: Exposed the Selenium version for Node.js.
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md)
+  
+  <br>
+  
+  * .NET
+    * **Migration to System.Text.Json**: Migrated from `Newtonsoft.Json` to `System.Text.Json` package.
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG)
+
+  <br>
+  
+  * Python
+    * **Unhandled Prompt Behavior**: Added unhandled prompt behavior to 'ignore' option if BiDi is enabled.
+    * **Mypy Error Fixes**: Fixed mypy errors for various modules.
+    * **Pytest Configuration Update**: Moved pytest configuration settings to `pyproject.toml`.
+    * **Global Default Timeout Override**: Allowed overriding `GLOBAL_DEFAULT_TIMEOUT`.
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES)
+
+  <br>
+  
+  * Ruby
+    * **Deprecate WebStorage JS Methods**: Deprecated WebStorage JavaScript methods.
+    * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)
+
+  <br>
+
+   * Rust
+     * **Skipping Drivers and Browsers in Path**: Included arguments for skipping drivers and browsers in the path. ([a056044d9c](https://github.com/SeleniumHQ/selenium/commit/a056044d9c20c174e5c04804eb30a446132be60a))
+     * **Use Debug Format Specifier**: Used the Debug format specifier to display error messages. ([d8a7172a2a](https://github.com/SeleniumHQ/selenium/commit/d8a7172a2a3a591af0852203449c81eb13aead2b))
+     * **Firefox Version Discovery**: Used Firefox history major releases endpoint for version discovery. ([02d6903006](https://github.com/SeleniumHQ/selenium/commit/02d6903006d884f57781f5625eb33a887f4369f5))
+     * [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/rust/CHANGELOG.md)
+
+
+### Contributors
+
+**Special shout-out to everyone who helped the Selenium Team get this release out!**
+
+#### [Selenium](https://github.com/SeleniumHQ/selenium)
+
+<div class="d-flex justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/MustafaAgamy" >}}
+{{< gh-user "https://api.github.com/users/aguspe" >}}
+{{< gh-user "https://api.github.com/users/angiejones" >}}
+{{< gh-user "https://api.github.com/users/cgossett" >}}
+{{< gh-user "https://api.github.com/users/diogoteles08" >}}
+{{< gh-user "https://api.github.com/users/dnwe" >}}
+{{< gh-user "https://api.github.com/users/iampopovich" >}}
+{{< gh-user "https://api.github.com/users/lauromoura" >}}
+{{< gh-user "https://api.github.com/users/manuelsblanco" >}}
+{{< gh-user "https://api.github.com/users/mdmintz" >}}
+{{< gh-user "https://api.github.com/users/mk868" >}}
+{{< gh-user "https://api.github.com/users/navin772" >}}
+{{< gh-user "https://api.github.com/users/paveloom" >}}
+{{< gh-user "https://api.github.com/users/sandeepsuryaprasad" >}}
+{{< gh-user "https://api.github.com/users/shbenzer" >}}
+    </div>
+  </div>
+</div>
+
+
+#### [Selenium Docs & Website](https://github.com/SeleniumHQ/seleniumhq.github.io)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/MustafaAgamy" >}}
+{{< gh-user "https://api.github.com/users/aguspe" >}}
+{{< gh-user "https://api.github.com/users/alaahong" >}}
+{{< gh-user "https://api.github.com/users/codespearhead" >}}
+{{< gh-user "https://api.github.com/users/innazh" >}}
+{{< gh-user "https://api.github.com/users/jochen-testingbot" >}}
+{{< gh-user "https://api.github.com/users/pallavigitwork" >}}
+{{< gh-user "https://api.github.com/users/pmartinez1" >}}
+{{< gh-user "https://api.github.com/users/sbabcoc" >}}
+{{< gh-user "https://api.github.com/users/shbenzer" >}}
+{{< gh-user "https://api.github.com/users/skyhirider" >}}
+    </div>
+  </div>
+</div>
+
+#### [Docker Selenium](https://github.com/SeleniumHQ/docker-selenium)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/DrFaust92" >}}
+{{< gh-user "https://api.github.com/users/Trigtrig" >}}
+{{< gh-user "https://api.github.com/users/nandorpal" >}}
+    </div>
+  </div>
+</div>
+
+#### [Selenium Team Members][team]
+
+**Thanks as well to all the team members who contributed to this release:**
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/AutomatedTester" >}}
+{{< gh-user "https://api.github.com/users/bonigarcia" >}}
+{{< gh-user "https://api.github.com/users/diemol" >}}
+{{< gh-user "https://api.github.com/users/harsha509" >}}
+{{< gh-user "https://api.github.com/users/joerg1985" >}}
+{{< gh-user "https://api.github.com/users/nvborisenko" >}}
+{{< gh-user "https://api.github.com/users/p0deje" >}}
+{{< gh-user "https://api.github.com/users/pujagani" >}}
+{{< gh-user "https://api.github.com/users/shs96c" >}}
+{{< gh-user "https://api.github.com/users/titusfortner" >}}
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+    </div>
+  </div>
+</div>
+
+Stay tuned for updates by following SeleniumHQ on [X (Formerly Twitter)](https://twitter.com/seleniumhq) or [LinkedIn](https://www.linkedin.com/company/selenium/)!
+
+Happy automating!
+
+[downloads]: /downloads
+[bindings]: /downloads#bindings
+[team]: /project/structure
+[BiDi]: https://github.com/w3c/webdriver-bidi
diff --git a/website_and_docs/content/blog/2024/selenium-4-25-released.md b/website_and_docs/content/blog/2024/selenium-4-25-released.md
new file mode 100644
index 000000000000..252fcacf99f1
--- /dev/null
+++ b/website_and_docs/content/blog/2024/selenium-4-25-released.md
@@ -0,0 +1,159 @@
+---
+title: "Selenium 4.25 Released!"
+linkTitle: "Selenium 4.25 Released!"
+date: 2024-09-20
+tags: ["selenium"]
+categories: ["releases"]
+author: Diego Molina [@diemol](https://www.diemol.com)
+images:
+  - "/images/blog/2024/selenium_4.25.jpg"
+description: >
+  Today we're happy to announce that Selenium 4.25 has been released!
+---
+
+We're very happy to announce the release of Selenium 4.25 for 
+Javascript, Ruby, Python, .NET, Java and the Grid!
+Links to everything can be found on our [downloads page][downloads].
+
+Selenium 4.25.0 introduces several important changes and improvements across multiple programming 
+languages and build systems. Below are the key highlights from this release.
+
+### General Updates
+- Chrome DevTools support is now: v129, v128, and v127 (Firefox still uses v85 for all versions)
+- Selenium has at least [4M active users](https://plausible.io/manager.selenium.dev) in the last 30 days. 1.5M more than 4 months ago! 
+- **First implementation of BiDi (Bidirectional WebDriver Protocol) for .NET**, providing advanced capabilities like inspecting browser contexts and receiving real-time events.
+  - We are looking for feedback on this feature, so please try it out and let us know what you think! Try `var bidi = await driver.AsBiDiAsync();` to get started.
+
+  <br>
+
+### Java
+- Escape cookie values when required for tests ([#14486](https://github.com/SeleniumHQ/selenium/commit/375e841c7acaf575133617968406e289ee04b459))
+- Warn about an upcoming change enforcing string quotes in TOML ([#14491](https://github.com/SeleniumHQ/selenium/commit/6b4c39c19e9ac3f63bbf8827cfd26aa782e77042))
+- [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG)
+
+  <br>
+
+### Python
+- Fixed type errors for `pointer_input.py`, `wheel_input.py`, and `firefox/options.py` ([#14476](https://github.com/SeleniumHQ/selenium/commit/05bce9b4c088d939d4a25a33e0d014d3f3a67473))
+- Fixed failing BiDi tests ([#14448](https://github.com/SeleniumHQ/selenium/commit/be40b5c85350b2f5cf83194cce4cb1ab23e13172))
+- Dropped support for Python 2.x in `firefox_profile.py` ([#14489](https://github.com/SeleniumHQ/selenium/commit/71a0629521b42263ad34874adba4e97cd8747fbd))
+- [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES)
+
+  <br>
+
+### JavaScript
+- Fixed flaky network event tests for BiDi ([#14512](https://github.com/SeleniumHQ/selenium/commit/2970ad30a75d798edb4abdbcfd04666a95f8ef8a))
+- Closed CDP websocket connection on `driver.quit` ([#14501](https://github.com/SeleniumHQ/selenium/commit/7c8b46dd4a4ce11ad6fd1c436416cdbd448c1b73))
+- [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md)
+
+  <br>
+
+### .NET
+- BiDi API updates, including renaming methods and simplifying context handling ([#14318](https://github.com/SeleniumHQ/selenium/commit/3e8b34cea24635e89aa42d09db8c37b6723a9005))
+- Exposed BiDi associated references in browsing context ([#14495](https://github.com/SeleniumHQ/selenium/commit/6c0df70463242ba1f7b182e11060fcf9a8e50a01))
+- [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG)
+
+  <br>
+
+### Ruby
+- Allowed driver path to be set using environment variables ([#14287](https://github.com/SeleniumHQ/selenium/commit/7602371488ebd14d2c6d8d980134bff42bbd17e9))
+- Fixed the `add_cause` method not being able to process an array of hashes ([#14433](https://github.com/SeleniumHQ/selenium/commit/247bc2bbced6502625786dc9fb56c602bc9786dc))
+- [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)
+
+  <br>
+
+### Rust
+- Fixed errors in Selenium Manager when the browser path is incorrect ([#14381](https://github.com/SeleniumHQ/selenium/commit/0d426741c9b609f0748e64cff6e63343215eebcf))
+- Reused driver mirror URLs to discover Firefox versions ([#14493](https://github.com/SeleniumHQ/selenium/commit/64590084bc4baa5a00c8b7709b80c75e77de818a))
+- [See all changes](https://github.com/SeleniumHQ/selenium/blob/trunk/rust/CHANGELOG.md)
+
+### Docker Selenium
+- KEDA Scaler in Kubernetes:
+  - Enhanced KEDA scaler behavior, addressing:
+    - Node with different platformName scaling: Fixed incorrect scaling behavior when both Linux and Windows node stereotypes are present ([#1925](https://github.com/SeleniumHQ/docker-selenium/issues/1925)).
+    - Excessive autoscaling: Resolved over-scaling of browser nodes ([#2160](https://github.com/SeleniumHQ/docker-selenium/issues/2160)).
+  - Added separate parameters for basic authentication (`username`, `password`) for the Grid GraphQL endpoint ([#2401](https://github.com/SeleniumHQ/docker-selenium/pull/2401)).
+  - Added support for `nodeMaxSessions` parameter to control maximum concurrent sessions per node, aligning with the node config `--max-sessions` ([#2402](https://github.com/SeleniumHQ/docker-selenium/pull/2402)).
+
+  > Note: The above KEDA scaler updates are available experimentally via our built images approach. Check out [this](https://github.com/SeleniumHQ/docker-selenium/blob/4.25.0-20240922/.keda/README.md) for more details.
+
+- Selenium Grid Helm Chart: Updated to support the new KEDA scaler enhancements.
+- [See all changes](https://github.com/SeleniumHQ/docker-selenium/releases/tag/4.25.0-20240922)
+
+## Contributors
+
+**Special shout-out to everyone who helped the Selenium Team get this release out!**
+
+### [Selenium](https://github.com/SeleniumHQ/selenium)
+
+<div class="d-flex justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/Delta456" >}}
+{{< gh-user "https://api.github.com/users/aguspe" >}}
+{{< gh-user "https://api.github.com/users/angiejones" >}}
+{{< gh-user "https://api.github.com/users/cgossett" >}}
+{{< gh-user "https://api.github.com/users/dnwe" >}}
+{{< gh-user "https://api.github.com/users/manuelsblanco" >}}
+{{< gh-user "https://api.github.com/users/mk868" >}}
+{{< gh-user "https://api.github.com/users/navin772" >}}
+{{< gh-user "https://api.github.com/users/sandeepsuryaprasad" >}}
+{{< gh-user "https://api.github.com/users/shbenzer" >}}
+    </div>
+  </div>
+</div>
+
+
+### [Selenium Docs & Website](https://github.com/SeleniumHQ/seleniumhq.github.io)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/KaranocaVe" >}}
+{{< gh-user "https://api.github.com/users/aguspe" >}}
+{{< gh-user "https://api.github.com/users/pallavigitwork" >}}
+{{< gh-user "https://api.github.com/users/shbenzer" >}}
+    </div>
+  </div>
+</div>
+
+### [Docker Selenium](https://github.com/SeleniumHQ/docker-selenium)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/Koeppchen" >}}
+    </div>
+  </div>
+</div>
+
+### [Selenium Team Members][team]
+
+**Thanks as well to all the team members who contributed to this release:**
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/AutomatedTester" >}}
+{{< gh-user "https://api.github.com/users/bonigarcia" >}}
+{{< gh-user "https://api.github.com/users/diemol" >}}
+{{< gh-user "https://api.github.com/users/harsha509" >}}
+{{< gh-user "https://api.github.com/users/joerg1985" >}}
+{{< gh-user "https://api.github.com/users/nvborisenko" >}}
+{{< gh-user "https://api.github.com/users/p0deje" >}}
+{{< gh-user "https://api.github.com/users/pujagani" >}}
+{{< gh-user "https://api.github.com/users/shs96c" >}}
+{{< gh-user "https://api.github.com/users/titusfortner" >}}
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+    </div>
+  </div>
+</div>
+
+Stay tuned for updates by following SeleniumHQ on [X (Formerly Twitter)](https://twitter.com/seleniumhq) or [LinkedIn](https://www.linkedin.com/company/selenium/)!
+
+Happy automating!
+
+[downloads]: /downloads
+[bindings]: /downloads#bindings
+[team]: /project/structure
+[BiDi]: https://github.com/w3c/webdriver-bidi
diff --git a/website_and_docs/content/blog/2024/selenium-4-26-released.md b/website_and_docs/content/blog/2024/selenium-4-26-released.md
new file mode 100644
index 000000000000..3008954f4a29
--- /dev/null
+++ b/website_and_docs/content/blog/2024/selenium-4-26-released.md
@@ -0,0 +1,187 @@
+---
+title: "Selenium 4.26 Released!"
+linkTitle: "Selenium 4.26 Released!"
+date: 2024-11-03
+tags: ["selenium"]
+categories: ["releases"]
+author: Diego Molina [@diemol](https://www.diemol.com)
+images:
+  - "/images/blog/2024/selenium_4.26.jpg"
+description: >
+  Today we're happy to announce that Selenium 4.26 has been released!
+---
+
+We're very happy to announce the release of Selenium 4.26 for 
+Javascript, Ruby, Python, .NET, Java and the Grid!
+Links to everything can be found on our [downloads page][downloads].
+
+Selenium 4.26.0 release introduces new features, key enhancements, and numerous bug fixes across 
+different languages and components. This version focuses on improving compatibility, updating 
+dependencies, enhancing internal logging, and providing broader WebDriver capabilities. Here are 
+the most important updates:
+
+## General Highlights
+- **Chrome DevTools support** is now: v130, v129, and v128 (Firefox still uses v85 for all versions)
+- **Selenium has at least** [4.8M active users](https://plausible.io/manager.selenium.dev) in the last 30 days. 800K more than 1 month ago!
+- **Selenium Manager Enhancements**: Added better handling for invalid browser versions and improved logging, helping to streamline browser management.
+- **Expanded BiDi (Bidirectional WebDriver Protocol) Support for .NET**: Continuing the work on BiDi for .NET, this release includes improved WebSocket communication, CDP DevTools integration, and expanded logging, advancing real-time and bidirectional interactions.
+- **Grid UI Enhancements**: New sorting options by Platform, Status, and ID, session timeout display, and WebSocket connection management for better performance and user experience.
+- **CI/CD Pipeline Improvements**: Numerous updates for CI workflows, such as artifact handling and new testing configurations, to boost stability and developer productivity.
+
+  <br>
+
+### .NET
+- Updated WebSocket communication and DevTools integration in the BiDi implementation, adding extensive internal logs to improve diagnostics ([#14566](https://github.com/SeleniumHQ/selenium/pull/14566), [#14558](https://github.com/SeleniumHQ/selenium/pull/14558)).
+- Added support for the `GetLog` command in the Remote WebDriver ([#14549](https://github.com/SeleniumHQ/selenium/pull/14549)).
+- Enhanced configuration for `PrintOptions`, allowing direct control over `PageDimensions` and `PageMargins` ([#14593](https://github.com/SeleniumHQ/selenium/pull/14593)).
+- Deprecated several old constructors for cleaner exception handling and improved compatibility with Ahead-of-Time (AOT) compilation ([#14574](https://github.com/SeleniumHQ/selenium/pull/14574)).
+
+  <br>
+
+### Java
+- Increased property scope for improved compatibility with Appium ([#14183](https://github.com/SeleniumHQ/selenium/pull/14183)).
+- Updated SpotBugs settings and fixed issues in `ChromiumDriver` and `PortProber` for cleaner code ([#14589](https://github.com/SeleniumHQ/selenium/pull/14589)).
+- Added PAC proxy URL support for Selenium Manager to expand proxy configuration capabilities ([#14506](https://github.com/SeleniumHQ/selenium/pull/14506)).
+
+  <br>
+
+### Python
+- Added more internal logging for CDP, and configured WebDriver HTTP client settings for enhanced performance ([#14668](https://github.com/SeleniumHQ/selenium/pull/14668), [#13286](https://github.com/SeleniumHQ/selenium/pull/13286)).
+  > Explore the various configuration parameters for the [WebDriver HTTP client](https://www.selenium.dev/documentation/webdriver/drivers/http_client/).
+- Removed deprecated EdgeService parameters and eliminated Python 2.x code from various test files ([#14563](https://github.com/SeleniumHQ/selenium/pull/14563), [#14502](https://github.com/SeleniumHQ/selenium/pull/14502)).
+- Set consistent polling for `WebDriverWait` methods to align behavior between Java and Python implementations ([#14626](https://github.com/SeleniumHQ/selenium/pull/14626)).
+- Improves binding extensibility for seamless integration of Selenium into Appium's Python client. ([#14587](https://github.com/SeleniumHQ/selenium/pull/14587)).
+
+  <br>
+
+### JavaScript
+- Closed BiDi WebSocket connection on session end, improving session management in BiDi ([#14507](https://github.com/SeleniumHQ/selenium/pull/14507)).
+- Fixed issues with `sendKeys` command, addressing errors in `FileDetector` handling ([#14663](https://github.com/SeleniumHQ/selenium/pull/14663)).
+
+  <br>
+
+### Ruby
+- Added RBS type support for BiDi-related classes, aligning with updates for Ruby BiDi compatibility ([#14611](https://github.com/SeleniumHQ/selenium/pull/14611)).
+- Updated BiDi script structures to match recent specifications for consistent implementation ([#14236](https://github.com/SeleniumHQ/selenium/pull/14236)).
+
+  <br>
+
+### Selenium Grid
+- New Grid UI features for sorting and WebSocket management, adding clarity and control to session management ([#14571](https://github.com/SeleniumHQ/selenium/pull/14571), [#14598](https://github.com/SeleniumHQ/selenium/pull/14598), [#14599](https://github.com/SeleniumHQ/selenium/pull/14599)).
+- Enabled async requests in `httpclient` to enhance request handling performance ([#14409](https://github.com/SeleniumHQ/selenium/pull/14409)).
+- Improved node handling for better scalability and stability ([#14628](https://github.com/SeleniumHQ/selenium/pull/14628)).
+
+  <br>
+
+### Docker Selenium
+- Updated FFmpeg v7.1 in video recorder ([#2439](https://github.com/SeleniumHQ/docker-selenium/pull/2439)).
+- Updated in Helm chart for Selenium Grid deployment to Kubernetes
+  - Add GraphQL metrics exporter for monitoring ([#2425](https://github.com/SeleniumHQ/docker-selenium/pull/2425)).
+  - Add templates for Relay node ([#2453](https://github.com/SeleniumHQ/docker-selenium/pull/2453)).
+  - Allow to overwrite config videoRecorder in each node ([#2445](https://github.com/SeleniumHQ/docker-selenium/pull/2445)).
+
+  <br>
+
+## Contributors
+
+**Special shout-out to everyone who helped the Selenium Team get this release out!**
+
+### [Selenium](https://github.com/SeleniumHQ/selenium)
+
+<div class="d-flex justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/BlitzDestroyer" >}}
+{{< gh-user "https://api.github.com/users/Delta456" >}}
+{{< gh-user "https://api.github.com/users/Mr0grog" >}}
+{{< gh-user "https://api.github.com/users/RenderMichael" >}}
+{{< gh-user "https://api.github.com/users/aguspe" >}}
+{{< gh-user "https://api.github.com/users/dbernhard-0x7CD" >}}
+{{< gh-user "https://api.github.com/users/garg3133" >}}
+{{< gh-user "https://api.github.com/users/iampopovich" >}}                                                                                                                                                                                                                                                                   
+{{< gh-user "https://api.github.com/users/mk868" >}}                                                                                                                                                                                                                                                                         
+{{< gh-user "https://api.github.com/users/navin772" >}}                                                                                                                                                                                                                                                                      
+{{< gh-user "https://api.github.com/users/shbenzer" >}}                                                                                                                                                                                                                                                                      
+    </div>
+  </div>
+</div>
+
+
+### [Selenium Docs & Website](https://github.com/SeleniumHQ/seleniumhq.github.io)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/Abdelrhman-Ellithy" >}}
+{{< gh-user "https://api.github.com/users/AishIngale" >}}
+{{< gh-user "https://api.github.com/users/Delta456" >}}
+{{< gh-user "https://api.github.com/users/alaahong" >}}
+{{< gh-user "https://api.github.com/users/harshitBhardwaj97" >}}
+{{< gh-user "https://api.github.com/users/pallavigitwork" >}}
+{{< gh-user "https://api.github.com/users/shbenzer" >}}
+{{< gh-user "https://api.github.com/users/zipperer" >}}
+    </div>
+  </div>
+</div>
+
+### [Docker Selenium](https://github.com/SeleniumHQ/docker-selenium)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/brunobritorj" >}}
+    </div>
+  </div>
+</div>
+
+### [Selenium Team Members][team]
+
+**Thanks as well to all the team members who contributed to this release:**
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/AutomatedTester" >}}
+{{< gh-user "https://api.github.com/users/bonigarcia" >}}
+{{< gh-user "https://api.github.com/users/diemol" >}}
+{{< gh-user "https://api.github.com/users/harsha509" >}}
+{{< gh-user "https://api.github.com/users/joerg1985" >}}
+{{< gh-user "https://api.github.com/users/nvborisenko" >}}
+{{< gh-user "https://api.github.com/users/p0deje" >}}
+{{< gh-user "https://api.github.com/users/pujagani" >}}
+{{< gh-user "https://api.github.com/users/shs96c" >}}
+{{< gh-user "https://api.github.com/users/titusfortner" >}}
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+    </div>
+  </div>
+</div>
+
+## Project Highlights
+
+This year marks a monumental milestone—20 years of Selenium transforming browser automation! 
+Since its inception as a modest open-source project, Selenium has grown into the world’s most 
+trusted tool for web automation, powering testing and development for countless users globally. 
+From revolutionizing open-source collaboration to shaping automation practices, Selenium has 
+impacted developers, testers, and organizations worldwide.
+
+To honor this journey, the Selenium team hosted a special webinar on October 28th, 2024, where 
+the leadership team shared insights on Selenium’s evolution, the latest advancements in WebDriver 
+BiDi, and exciting prospects for the future. If you’d like to learn more about Selenium’s 
+incredible journey and future plans, head to the official blog post 
+[here](https://www.selenium.dev/blog/2024/selenium-milestone-20yrs-blog/).
+
+Special thanks to the Selenium community for your continued support and contributions, to
+the entire Selenium team for their dedication and hard work, 
+and to [Pallavi Sharma](https://www.linkedin.com/in/pallavimuse/) and 
+[Maaret Pyhäjärvi](https://www.linkedin.com/in/maaret/) for organizing and leading this event.
+
+
+
+Stay tuned for updates by following SeleniumHQ on [X (Formerly Twitter)](https://twitter.com/seleniumhq) or [LinkedIn](https://www.linkedin.com/company/selenium/)!
+
+Happy automating!
+
+[downloads]: /downloads
+[bindings]: /downloads#bindings
+[team]: /project/structure
+[BiDi]: https://github.com/w3c/webdriver-bidi
diff --git a/website_and_docs/content/blog/2024/selenium-4-27-released.md b/website_and_docs/content/blog/2024/selenium-4-27-released.md
new file mode 100644
index 000000000000..5c25525cda3c
--- /dev/null
+++ b/website_and_docs/content/blog/2024/selenium-4-27-released.md
@@ -0,0 +1,186 @@
+---
+title: "Selenium 4.27 Released!"
+linkTitle: "Selenium 4.27 Released!"
+date: 2024-11-27
+tags: ["selenium"]
+categories: ["releases"]
+author: Diego Molina [@diemol](https://www.diemol.com)
+images:
+  - "/images/blog/2024/selenium_4.27.webp"
+description: >
+  Today we're happy to announce that Selenium 4.27 has been released!
+---
+We're very happy to announce the release of Selenium 4.27 for 
+Javascript, Ruby, Python, .NET, Java and the Grid!
+Links to everything can be found on our [downloads page][downloads].
+
+Here is the latest iteration of the world’s most popular browser automation tool! This release 
+brings significant updates across all supported languages, enhancing functionality, performance, 
+and compatibility. From new features like FedCM command support in Python and improved BiDi 
+handling in .NET to critical deprecations like CDP methods for Firefox. 
+
+## General Highlights
+
+- **Chrome DevTools support** is now: v131, v128, and v127 (Firefox still uses v85 for all versions)
+- **Selenium has over** [5.1M active users](https://plausible.io/manager.selenium.dev) in the last 30 days. 300K more than 1 month ago!
+- **Deprecation of CDP methods for Firefox** across several bindings to align with evolving automation standards.
+- **Enhanced Selenium Grid** with improved session handling, distributed retry logic, and faster server shutdown processes.
+- **Updates for .NET and Java** to modernize exception handling, improve BiDi support, and address compatibility warnings.
+- **Deprecation of `getAttribute`** in multiple languages as part of Selenium's evolution.
+
+
+<br>
+
+### Python
+- Deprecated CDP methods for Firefox. ([e2e9ac5f7e](https://github.com/SeleniumHQ/selenium/commit/e2e9ac5f7e5ca2a2326bea9d16425525ce43da57))
+- Replaced `imghdr` with `filetype` for better compatibility. ([b1828bf108](https://github.com/SeleniumHQ/selenium/commit/b1828bf1087d7d4acfd437d83ef6168617286191))
+- Moved project metadata from `setup.py` to `pyproject.toml`. ([673d2c78be](https://github.com/SeleniumHQ/selenium/commit/673d2c78be76f1ccbb2e1017e5240d52f428b400))
+- Added FedCM command support. ([d3d8070d50](https://github.com/SeleniumHQ/selenium/commit/d3d8070d50b481d2c6da98223322bc843cc25a01))
+- Introduced backward compatibility for `AppiumConnection`. ([3a3c46b3c1](https://github.com/SeleniumHQ/selenium/commit/3a3c46b3c144b0a350dea3598481edd2761f11c5))
+- Added user agent and extra headers via `ClientConfig`. ([e2023893c7](https://github.com/SeleniumHQ/selenium/commit/e2023893c7f37f69b2f7106a3907e0275bd9fbe1))
+- Addressed `DetachedShadowRoot` exception handling. ([7aabb8d1b4](https://github.com/SeleniumHQ/selenium/commit/7aabb8d1b48c1cae74ae97710009daea960dc9a3))
+
+<br>
+
+### Ruby
+- Deprecated CDP methods for Firefox. ([e9c09a200e](https://github.com/SeleniumHQ/selenium/commit/e9c09a200e374bba63acb0ef605175abb125e82e))
+- Resolved deprecation warnings for the `uri` gem. ([751bacb6bc](https://github.com/SeleniumHQ/selenium/commit/751bacb6bc934436ec9dec2416a022d8d577e30a))
+- Added BiDi navigation commands and support for network interception. ([573c8fe961](https://github.com/SeleniumHQ/selenium/commit/573c8fe9612c9c81406642e3e7a917cb5314eb3c))
+
+
+<br>
+
+### Java
+- Enhanced error messages for `NoSuchElementException`. ([4a0d05e50e](https://github.com/SeleniumHQ/selenium/commit/4a0d05e50ea1750482211e04ece8062436eb5c6b))
+- Deprecated `WebElement.getAttribute()`. ([cd7303c437](https://github.com/SeleniumHQ/selenium/commit/cd7303c437b0702d3a17c9ef43594375c11016eb))
+- Introduced methods for selecting options containing specific text. ([b4b8aaba2b](https://github.com/SeleniumHQ/selenium/commit/b4b8aaba2bd3df57cae31164c614aec5f377c443))
+- Added Firefox CDP deprecation warnings. ([19fc217985](https://github.com/SeleniumHQ/selenium/commit/19fc2179855d0f70b7241a6c4cfbd9152e023609))
+
+<br>
+
+### .NET
+- Added CDP deprecation warnings for Firefox. ([8f725b3a80](https://github.com/SeleniumHQ/selenium/commit/8f725b3a80c3f3d621821e94a87db346ea91a8b1))
+- Improved BiDi and async support across modules. ([9054e892cc](https://github.com/SeleniumHQ/selenium/commit/9054e892ccabfb470243e2bad585f0474901dd31))
+- Enabled nullability annotations for better type safety. ([d9149acc09](https://github.com/SeleniumHQ/selenium/commit/d9149acc097531d336e611bd92d897381a0316c6))
+- Introduced compatibility improvements for actions with clashing device names. ([a9ec9ca682](https://github.com/SeleniumHQ/selenium/commit/a9ec9ca6821fd466e8e9d6e966d0feb150b0a5a4))
+- **Deprecated `GetAttribute` method** for WebElements. ([ac523a5d0a](https://github.com/SeleniumHQ/selenium/commit/ac523a5d0aa5a980a71c5adda3f4dafb0a560409))
+
+
+<br>
+
+### JavaScript
+- Enabled BiDi tests for locating nodes with Chrome and Edge. ([339421538b](https://github.com/SeleniumHQ/selenium/commit/339421538b790c0ac2cf0a1a0aad62d0e76349eb))
+- Enhanced support for authentication handlers in BiDi commands. ([25551adfe8](https://github.com/SeleniumHQ/selenium/commit/25551adfe80f788453ec38fac7933c5369616d4f))
+- Updated dependencies to resolve security alerts. ([3906742748](https://github.com/SeleniumHQ/selenium/commit/3906742748d8b94b2eac074aeaf839eed20a95fa))
+
+<br>
+
+### Rust
+- Selenium Manager now honors full browser versions. ([fe5b1985e5](https://github.com/SeleniumHQ/selenium/commit/fe5b1985e570bae90bf757c23439d461ef0dda9c))
+- Updated logic to prioritize stable versions for Firefox management. ([0d2dda17b4](https://github.com/SeleniumHQ/selenium/commit/0d2dda17b4c4aba6ab0537f9d28910527c45a38b))
+
+<br>
+
+### Selenium Grid
+- Improved retry logic for session creation in distributed grids. ([e4ab299ea4](https://github.com/SeleniumHQ/selenium/commit/e4ab299ea4d16943c18e8c31e9db1f7738ed9493))
+- Improved session handling in Selenium Grid and reduced test flakiness. ([b0464e1adf](https://github.com/SeleniumHQ/selenium/commit/b0464e1adf8b4367dab9a98c26c800a7172cc0f8))
+- Enhanced server shutdown for faster termination. ([62aa0e551e](https://github.com/SeleniumHQ/selenium/commit/62aa0e551e79176f21e3e1658518bc40855f81ae))
+- Implemented graceful handling of stale sessions and client timeouts. ([b0464e1adf](https://github.com/SeleniumHQ/selenium/commit/b0464e1adf8b4367dab9a98c26c800a7172cc0f8))
+- Improved detection of unsupported HTTP methods during request handling. ([f56b3d07d9](https://github.com/SeleniumHQ/selenium/commit/f56b3d07d932f81bafc80b90d9b3cb059fba133e))
+
+  <br>
+
+### Docker Selenium
+- K8s: Allow multiple nodes of the same type in Helm configuration ([#2475](https://github.com/SeleniumHQ/docker-selenium/pull/2475))
+- [See all changes](https://github.com/SeleniumHQ/docker-selenium/releases/tag/4.27.0-20241127)
+
+  <br>
+
+## Contributors
+
+**Special shout-out to everyone who helped the Selenium Team get this release out!**
+
+### [Selenium](https://github.com/SeleniumHQ/selenium)
+
+<div class="d-flex justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/Delta456" >}}
+{{< gh-user "https://api.github.com/users/Earlopain" >}}
+{{< gh-user "https://api.github.com/users/RenderMichael" >}}
+{{< gh-user "https://api.github.com/users/andrew" >}}
+{{< gh-user "https://api.github.com/users/emanlove" >}}
+{{< gh-user "https://api.github.com/users/iampopovich" >}}
+{{< gh-user "https://api.github.com/users/josegomezr" >}}
+{{< gh-user "https://api.github.com/users/mk868" >}}
+{{< gh-user "https://api.github.com/users/navin772" >}}
+{{< gh-user "https://api.github.com/users/pnatashap" >}}
+{{< gh-user "https://api.github.com/users/sandeepsuryaprasad" >}}
+{{< gh-user "https://api.github.com/users/shbenzer" >}}
+{{< gh-user "https://api.github.com/users/syber911911" >}}
+    </div>
+  </div>
+</div>
+
+
+### [Selenium Docs & Website](https://github.com/SeleniumHQ/seleniumhq.github.io)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/AishIngale" >}}
+{{< gh-user "https://api.github.com/users/RenderMichael" >}}
+{{< gh-user "https://api.github.com/users/YevgeniyShunevych" >}}
+{{< gh-user "https://api.github.com/users/alaahong" >}}
+{{< gh-user "https://api.github.com/users/jasonren0403" >}}
+{{< gh-user "https://api.github.com/users/navin772" >}}
+{{< gh-user "https://api.github.com/users/pallavigitwork" >}}
+{{< gh-user "https://api.github.com/users/shbenzer" >}}
+{{< gh-user "https://api.github.com/users/zipperer" >}}
+    </div>
+  </div>
+</div>
+
+### [Docker Selenium](https://github.com/SeleniumHQ/docker-selenium)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+    </div>
+  </div>
+</div>
+
+### [Selenium Team Members][team]
+
+**Thanks as well to all the team members who contributed to this release:**
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/aguspe" >}}
+{{< gh-user "https://api.github.com/users/AutomatedTester" >}}
+{{< gh-user "https://api.github.com/users/bonigarcia" >}}
+{{< gh-user "https://api.github.com/users/diemol" >}}
+{{< gh-user "https://api.github.com/users/harsha509" >}}
+{{< gh-user "https://api.github.com/users/joerg1985" >}}
+{{< gh-user "https://api.github.com/users/nvborisenko" >}}
+{{< gh-user "https://api.github.com/users/p0deje" >}}
+{{< gh-user "https://api.github.com/users/pujagani" >}}
+{{< gh-user "https://api.github.com/users/shs96c" >}}
+{{< gh-user "https://api.github.com/users/titusfortner" >}}
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+    </div>
+  </div>
+</div>
+
+
+
+Stay tuned for updates by following SeleniumHQ on [X (Formerly Twitter)](https://twitter.com/seleniumhq) or [LinkedIn](https://www.linkedin.com/company/selenium/)!
+
+Happy automating!
+
+[downloads]: /downloads
+[bindings]: /downloads#bindings
+[team]: /project/structure
+[BiDi]: https://github.com/w3c/webdriver-bidi
diff --git a/website_and_docs/content/blog/2024/selenium-community-live-episode1.md b/website_and_docs/content/blog/2024/selenium-community-live-episode1.md
new file mode 100644
index 000000000000..7130d6924011
--- /dev/null
+++ b/website_and_docs/content/blog/2024/selenium-community-live-episode1.md
@@ -0,0 +1,49 @@
+---
+title: "Selenium Community Live - Episode 1"
+linkTitle: "Selenium Community Live - Episode 1"
+date: 2024-12-25
+tags: ["webinar", "meetup", "talks","community"]
+categories: ["webinar"]
+author: <a href="https://www.linkedin.com/in/musepallavi/" target="_blank">Pallavi Sharma</a>
+images:
+description: >
+  Selenium Community Live - Episode 1
+---
+
+At the eve of celebration of 20 years of Selenium, the current **<a href="https://www.selenium.dev/project/structure/#plc" target="_blank">Project Leadership Committee of Selenium</a>**  decided on starting Selenium Community Live event, an idea helmed by **<a href="https://www.linkedin.com/in/maaret/" target="_blank">Maaret Pyhäjärvi</a>** . 
+The first episode happened on Dec 18th, 2024: **<a href="https://www.youtube.com/watch?v=Y4tZOXGQGRQ" target="_blank">Selenium Community Live - Episode 1</a>**
+
+**Selenium Community Live - Episode 1**
+
+Collaboration, communication and community are the force behind the success of the Selenium Project in open source for last twenty years.
+Jason Huggins and Simon Stewart with their respective projects Selenium and WebDriver collaborated and brought together Selenium WebDriver.
+Eventually WebDriver became a W3C standard for browser automation, and Jim Evans and Manoj Kumar in the first episode of Selenium Community Live
+discuss all about Selenium, and making of the WebDriver standard. They shed light on the process and people behind building these specifications.
+They also spoke about various browser vendors and browser automation projects coming together to collaborate on making the next standard in browser automation
+WebDriver Bi-Di. The Selenium project extend thanks to both Jim and Manoj for commemorating the first episode for community. 
+
+**Meet the Speakers:**
+
+1. **<a href="https://www.linkedin.com/in/jimevansmusic/" target="_blank">Jim Evans</a>** 
+
+2. **<a href="https://www.linkedin.com/in/manoj9788/" target="_blank">Manoj Kumar</a>** 
+
+## Watch the Recording the first Episode of Selenium Community Live
+
+Couldn’t join us live? Watch the entire episode here -
+📹 Recording Link: [Watch the Event Recording on YouTube](https://www.youtube.com/watch?v=Y4tZOXGQGRQ)
+
+The links for the various projects which were discussed in the event - 
+
+A few links which you may wish to explore - 
+**<a href="https://www.w3.org/news-events/w3c-tpac/" target="_blank">TPAC</a>** 
+
+**<a href="https://www.w3.org/groups/wg/browser-tools-testing/" target="_blank">W3C Browser Testing Working Group</a>** 
+
+**<a href="https://github.com/w3c/webdriver/" target="_blank">WebDriver</a>** 
+
+**<a href="https://github.com/w3c/webdriver-bidi/" target="_blank">WebDriver Bi-Di</a>** 
+
+**<a href="https://github.com/webdriverbidi-net/webdriverbidi-net/" target="_blank">WebDriver Bi-Di .net implementation by Jim Evans </a>** 
+
+Stay tuned as we bring the next! **<a href="https://www.youtube.com/@SeleniumHQProject/" target="_blank">Subscribe here to the Selenium HQ Official YouTube Channel.</a>**  
\ No newline at end of file
diff --git a/website_and_docs/content/blog/2024/selenium-milestone-20yrs-blog.md b/website_and_docs/content/blog/2024/selenium-milestone-20yrs-blog.md
new file mode 100644
index 000000000000..7a17c5ce33a0
--- /dev/null
+++ b/website_and_docs/content/blog/2024/selenium-milestone-20yrs-blog.md
@@ -0,0 +1,55 @@
+---
+title: "Celebrating 20 Years of Selenium: A Journey of Innovation in Browser Automation"
+linkTitle: "Celebrating 20 Years of Selenium"
+date: 2024-10-18
+tags: ["webinar", "meetup", "talks"]
+categories: ["webinar"]
+author: <a href="https://www.linkedin.com/in/musepallavi/" target="_blank">Pallavi Sharma</a>
+images:
+  - "/images/blog/2024/20-selenium"
+description: >
+  Celebrating 20 Years of Selenium!
+---
+
+This year marks a monumental milestone—20 remarkable years of Selenium, the tool that 
+revolutionized browser automation! We’re thrilled to invite you to a special event to commemorate this 
+incredible journey: **<a href="https://www.linkedin.com/events/celebrating20yearsofselenium7244668243406192643/" target="_blank">Celebrating 20 Years of Selenium</a>**
+
+
+**Two Decades of Selenium: Revolutionizing Open Source Browser Automation and Testing**
+Over the past two decades, Selenium has reshaped the automation landscape, evolving from a simple tool into the backbone of browser automation across the globe. What began as a modest open-source project has grown into the most trusted tool for web automation, embraced by developers, testers, and businesses alike.
+As we celebrate Selenium’s 20th birthday on October 28th, we invite you to join a special webinar that honors the tool itself and the incredible community that has powered its success. Governed by the Software Freedom Conservancy, Selenium’s legacy is built on open-source collaboration and the passion of its contributors.
+The webinar begins at **11:30 AM GMT on October 28th, 2024**, and will be packed with two hours of insightful talks from the Selenium Leadership Team. We’ll explore the project’s current advancements, the cutting-edge work in the WebDriver BiDi space, and what lies ahead for the next decade of Selenium. Here’s what you can expect:
+
+**Meet the Speakers:**
+
+1. **<a href="https://www.linkedin.com/in/diemol/" target="_blank">Diego Molina</a>** – Selenium Project Leadership & Technical Leadership
+Topic: "Choosing the Right Framework: Exploring the Selenium Ecosystem for Testing"
+Diego will dive into a critical discussion on Selenium’s role in the broader testing ecosystem. He’ll explore whether Selenium remains the best option for web testing, considering the wide array of available frameworks. Expect valuable insights into Selenium’s advantages, limitations, and how to choose the right tool for your needs.
+
+2. **<a href="https://www.linkedin.com/in/pujajagani/" target="_blank">Puja Jagani</a>** – Selenium Technical Leadership
+Topic: "BiDi-powered Selenium: Shaping Tomorrow's Automation"
+Puja, a leading contributor to the WebDriver BiDi initiative, will give us a glimpse into the future of automation. Her talk will explore how the W3C BiDi protocol transforms browser automation with event-driven testing capabilities, offering improved performance and cutting-edge features that will redefine the automation landscape.
+
+3. Q and A - With Folks From **<a href="https://www.selenium.dev/project/structure/#plc" target="_blank">Selenium Project</a>**
+
+Why You Should Attend
+This webinar is more than just a celebration—it’s a chance to learn from the visionaries driving Selenium’s evolution. Whether you’re a seasoned professional or new to browser automation, this event offers invaluable insights into Selenium’s past, present, and future.
+💻 Event Registration: **<a href="https://www.linkedin.com/events/celebrating20yearsofselenium7244668243406192643/" target="_blank">Celebrating 20 Years of Selenium</a>**
+📅 Date & Time: October 28th, 2024, at 11:30 AM GMT
+
+Join Us in Celebrating Selenium’s Incredible Journey!
+For 20 years, Selenium has helped shape how we test, automate, and innovate on the web. This is your opportunity to celebrate that legacy and learn what the future holds for browser automation. We can’t wait to see you there!
+Event Organizers - **<a href="https://www.linkedin.com/in/maaret/" target="_blank">Maaret</a>**, **<a href="https://www.linkedin.com/in/diemol/" target="_blank">Diego</a>**, and **<a href="https://www.linkedin.com/in/musepallavi/" target="_blank">Pallavi</a>**. 
+
+## Watch the Recording of Our 20th Anniversary Event
+
+Couldn’t join us live? Watch the entire **"Celebrating 20 Years of Selenium"** 
+event on YouTube. Relive the milestone moments, hear directly from 
+the Selenium leadership team, and get insights into the future of browser automation.
+
+📹 Recording Link: [Watch the Event Recording on YouTube](https://www.youtube.com/watch?v=TO-ZCl2LZ50)
+
+This recording covers the highlights, including discussions on Selenium’s evolution, 
+its role in the testing ecosystem, and the exciting advancements in WebDriver BiDi.
+
diff --git a/website_and_docs/content/blog/2024/selenium-vs-blog-posts.md b/website_and_docs/content/blog/2024/selenium-vs-blog-posts.md
new file mode 100644
index 000000000000..d753c3e145df
--- /dev/null
+++ b/website_and_docs/content/blog/2024/selenium-vs-blog-posts.md
@@ -0,0 +1,38 @@
+---
+title: "Selenium Vs … blog posts"
+linkTitle: "Selenium Vs … blog posts"
+date: 2024-01-09
+tags: ["selenium"]
+categories: ["general"]
+author: David Burns ([@AutomatedTester](https://twitter.com/automatedtester))
+description: >
+   This blog post discusses the click bait posts out there comparing selenium, cypress, and playwright. How none of these are meaningful or helpful.
+---
+
+The easiest way to clickbait a blog post about automated testing is to compare Selenium against another tool in the space with a catchy title especially when it talks down about the incumbent.
+
+Unfortunately, this can lead to muddying the waters of which features are available in any of the products out there especially when we compare apples to apples.
+
+Selenium has always been a great tool for browser automation. Fortunately for the project, it has become the tool of choice for testing web applications for nearly 2 decades. The area this project has focused on is building out the hard parts of browser automation that are increasingly difficult. Stable APIs and scalability of the infrastructure to run Selenium has always been the priority of the project. It hasn’t focused on how people test with it because there are very good test frameworks out there and having to do it for 5 different languages is a non-trivial amount of engineering effort.
+
+However, some particular misconceptions regularly reappear across these blog posts.
+
+## It’s too hard to set up browsers and drivers compared to Playwright and Cypress
+
+This used to be true in the past as you had to download the drivers. This wasn’t too bad for GeckoDriver and SafariDriver as they could handle browser upgrades gracefully. On the other hand, you need to update the drivers for Chromium-based browser for every new release.
+
+For over a year now, Selenium handles this automatically. If it can’t find a ChromeDriver or EdgeDriver, it will download it using [Selenium Manager](https://www.selenium.dev/blog/2022/introducing-selenium-manager/). Since its first release it has improved a lot and it is now probably the best in class since the latest versions of Selenium will even download browsers if it can and use that. Compared to Playwright and Cypress you don’t need to update your dependency on Selenium to update browsers and drivers, you still use the same browsers as your customers, and switching versions becomes a breeze: you don’t also have to change the test framework you’re using. And, let's not forget that it uses the browser that [Google recommends you use for testing](https://developer.chrome.com/blog/chrome-for-testing/).
+
+## Setting up a test runner is hard work where Playwright and Cypress have it built in…
+
+Well… maybe? Setting up E2E test frameworks with Selenium isn’t as difficult as some might suggest. The hard part really is making sure that the driver is in the right place and we’ve solved that as discussed above. Once that’s done, Selenium’s approach allows you to use whichever test runner you’re most comfortable with. If you’d like a “batteries included” approach, with Selenium tightly integrated with the test runner, then one of the many projects that use Selenium, such as [SeleniumBase, Nightwatch, Serenity, and so on](https://www.selenium.dev/ecosystem/#frameworks), might be the right tool for you.
+
+One thing to note is that Playwright is the only multi-language browser automation framework like Selenium. However, if you don’t use TypeScript or JavaScript you will still need to do the setup of the test runner yourself. Some testing frameworks have plugins that automatically set up the fixtures you might need. In the JavaScript/TypeScript space if you really need a built-in test runner there are downstream projects like NightwatchJS and tangential projects like WebdriverIO. Downstream projects use our libraries and tangential projects have their own libraries but still follow the WebDriver standard.
+
+## Playwright and Cypress can do network interception and allow me to write event-driven code unlike Selenium
+
+Selenium has been able to offer this since Selenium 4 came out. It’s so good that even [Playwright suggest you use it for scaling your tests](https://playwright.dev/docs/selenium-grid). The Selenium Project won’t be removing this anytime soon as we are dependent on WebDriver BiDi specification being implemented for those features to replace them. Even then Selenium has a history of trying to make sure that upgrades don’t break anything without sufficient warning. It’s why each language provides high-level wrappers, such as the `NetworkInterceptor`, that isolate your tests from the underlying technology being used.
+
+## Summary
+
+As we have seen from the above Selenium is still as good as the products out there. One thing that is different for Selenium from Cypress or Playwright is that we’re a volunteer-driven project and not commercially backed. Want to help us out? Why not write a blog post about how you’re using the features above or post on social media how these features make your lives easier?
diff --git a/website_and_docs/content/blog/2024/seleniumconf-appiumconf-valencia-2025.md b/website_and_docs/content/blog/2024/seleniumconf-appiumconf-valencia-2025.md
new file mode 100644
index 000000000000..a4aa2f9bd9d9
--- /dev/null
+++ b/website_and_docs/content/blog/2024/seleniumconf-appiumconf-valencia-2025.md
@@ -0,0 +1,42 @@
+---
+title: "Announcing SeleniumConf & AppiumConf 2025"
+linkTitle: "Announcing SeleniumConf & AppiumConf 2025"
+date: 2024-10-11
+tags: ["conference", "meetup", "workshop"]
+categories: ["conference"]
+author: Diego Molina ([@diemol](https://diemol.com))
+images:
+  - "/images/blog/2024/seleniumconf-appiumconf-featured-img"
+description: >
+  SeleniumConf and AppiumConf are back in person!
+---
+
+We're thrilled to announce that **SeleniumConf & AppiumConf** is returning for 2025, bringing together browser and mobile automation enthusiasts from around the world. This
+must-attend event will take place from **March 26-28, 2025**, in the vibrant city of **Valencia, Spain**!
+
+This year, the conference will gather over **400 browser and mobile automation professionals, including developers, testers, quality managers, test architects**, and others, 
+to explore the latest trends in **browser and mobile automation**, including cutting-edge topics like **AI in automation, game testing, accessibility automation**, and much more. 
+Whether you're new to automation or an experienced professional, this conference is designed to offer **actionable insights and practical knowledge** that you can take back to your team.
+
+## Why Attend?
+
+- **Unparalleled Learning**: Get hands-on training and real-world insights from world-class experts in **Selenium**, **Appium**, and the broader **WebDriver ecosystem**. Learn 
+  how automation tools like **WebdriverIO, Puppeteer, Nightwatch**, and more are pushing the boundaries of testing.
+- **AI & Automation**: Discover how **AI** is reshaping browser and mobile automation and learn practical techniques integrating **AI** into your testing workflows.
+- **Workshops & Networking**: Full-day workshops on March 26 offer deep dives into advanced topics like **Selenium Grid with Kubernetes**, **Advance Appium** or **Selenium Deep Dive**. 
+  Plus, with so many professionals on-site, it's the perfect opportunity to grow your network and meet project leads, committers, and fellow testers.
+- **Scenic Valencia**: All of this will take place at the stunning **[Veles e Vents event building](https://veleseventsvalencia.es/en)**, located right by the Mediterranean Sea. 
+  And don't worry, we've got special hotel rates just for you!
+
+## Mark Your Calendar 🗓️ 
+
+- **Call for Proposals** and **ticket sales** open on **October 15, 2024**. Take your chance to submit a talk or secure your spot at this exciting event!
+- The **conference workshops** will be posted on **October 15, 2024**, so stay tuned! In the meantime, visit **[www.seleniumconf.com](https://www.seleniumconf.com)** for more details and to plan your trip.
+
+## Help Spread the Word!
+
+Excited about SeleniumConf & AppiumConf 2025? **Share this event** with your colleagues, friends, and fellow automation enthusiasts.
+Remember to follow us for updates and visit **[www.seleniumconf.com](https://www.seleniumconf.com)** to learn more.
+
+
+Happy testing!
diff --git a/website_and_docs/content/blog/2024/welcoming-puppeteer-to-the-webdriver-world.md b/website_and_docs/content/blog/2024/welcoming-puppeteer-to-the-webdriver-world.md
new file mode 100644
index 000000000000..03df0c198d9f
--- /dev/null
+++ b/website_and_docs/content/blog/2024/welcoming-puppeteer-to-the-webdriver-world.md
@@ -0,0 +1,25 @@
+---
+title: "Welcoming Puppeteer to the WebDriver World"
+linkTitle: "Welcoming Puppeteer to the WebDriver World"
+date: 2024-08-09
+tags: ["selenium"]
+categories: ["general"]
+author: David Burns [@automatedtester](https://www.linkedin.com/in/theautomatedtester/)
+description: >
+   Puppeteer has moved over to support WebDriver BiDi getting full support in Chromium browsers and Firefox.
+---
+
+The Selenium Project has always been fully supportive of creating a standard to improve the quality
+of the web that we use. We started with the [WebDriver Specification](https://w3c.github.io/webdriver) and over the last couple of years have been working
+with the Safari, Edge, Chrome, and Firefox teams on the [WebDriver-BiDi specification](https://w3c.github.io/webdriver-bidi).
+
+Today, we are celebrating that [Puppeteer](https://pptr.dev) has moved over to using [WebDriver-BiDi](https://w3c.github.io/webdriver-bidi), the new WebDriver Specification
+that allows WebDriver clients to have event driven APIs instead of the synchronous way Selenium has done it before.
+
+This new protocol allows us to be able to do things Selenium always wanted to do but was never surfaced to us in a
+meaningful way. We have documented all the latest additions to Selenium, thanks to WebDriver-BiDi, in our [documentation](https://www.selenium.dev/documentation/webdriver/bidi/)
+
+You can read about the latest changes on [Mozilla Hacks](https://hacks.mozilla.org/2024/08/puppeteer-support-for-firefox/)
+and on the [Chrome Developer Blog](https://developer.chrome.com/blog/firefox-support-in-puppeteer-with-webdriver-bidi?hl=en).
+
+Congratulations to everyone in making this a reality and supporting a standardised web!
diff --git a/website_and_docs/content/blog/2025/_index.md b/website_and_docs/content/blog/2025/_index.md
new file mode 100644
index 000000000000..0c07aa002fd7
--- /dev/null
+++ b/website_and_docs/content/blog/2025/_index.md
@@ -0,0 +1,5 @@
+---
+title: "Blog Posts - 2025"
+linkTitle: "2025"
+weight: 85
+---
diff --git a/website_and_docs/content/blog/2025/lambdatest-selenium-partnership.md b/website_and_docs/content/blog/2025/lambdatest-selenium-partnership.md
new file mode 100644
index 000000000000..82cd175c3244
--- /dev/null
+++ b/website_and_docs/content/blog/2025/lambdatest-selenium-partnership.md
@@ -0,0 +1,66 @@
+---
+title: "LambdaTest Becomes a Selenium Development Partner"
+linkTitle: "LambdaTest Becomes a Selenium Development Partner"
+date: 2025-04-10
+tags: ["selenium"]
+categories: ["general"]
+author: Sri Harsha [@harsha509](https://www.linkedin.com/in/sriharsha509/)
+images:
+  - "/images/blog/2025/lambdatest-selenium-development-partner.png"
+description: >
+  The Selenium Project is pleased to welcome LambdaTest as an official Development Partner.
+---
+
+We are excited to share that [LambdaTest](https://www.lambdatest.com) has joined as a development 
+partner for Selenium. This partnership highlights our shared commitment 
+to innovation, community engagement, and collaborative progress in the 
+test automation space. LambdaTest’s dedicated Open Source Program Office (OSPO) 
+is contributing valuable expertise and resources that will further enrich the Selenium ecosystem.
+
+## A Partnership Rooted in Open Source Values
+
+At the heart of Selenium lies a vibrant community dedicated to open 
+standards and continuous improvement. Our collaboration with LambdaTest 
+is designed to strengthen the community by channeling focused contributions 
+from their OSPO—improving tools, integrations, and documentation for 
+Selenium users around the world.
+
+## About LambdaTest
+
+[LambdaTest](https://www.lambdatest.com) is a platform that empowers businesses to 
+accelerate time to market through intelligent, cloud-based test authoring, 
+orchestration, and execution. With over 15,000 customers and 2.3 million+ 
+users across 130+ countries, LambdaTest is the trusted choice for modern software testing.
+
+## Key Points of the Partnership
+
+- **Open Source Integrity:** Selenium continues to flourish as a community-led project, embodying the true spirit of open source.
+- **Dedicated OSPO Contributions:** The team at LambdaTest is actively enhancing Selenium by improving documentation, bolstering community support, and enabling better integrations. Their efforts are aimed at empowering the global Selenium user base.
+- **Community-Focused Innovation:** By pooling our collective expertise, we are well-positioned to drive new solutions and elevate test automation practices to new heights.
+
+## What This Partnership Means for the Community
+
+The contributions from LambdaTest’s OSPO are set to bring 
+notable benefits to the broader testing landscape:
+
+- **Faster Development:** The infusion of dedicated engineering resources will accelerate the development of new features and improvements.
+- **Improved Stability:** Increased efforts in testing and quality assurance will help quickly identify and resolve issues.
+- **Better Documentation:** Enhanced documentation will make it easier for users to dive into Selenium and harness its advanced capabilities.
+- **Enhanced Community Support:** LambdaTest will play an active role in organizing and sponsoring community events, fostering rich collaboration and knowledge sharing.
+
+## Looking Ahead
+
+This partnership is more than a technical alliance—it reaffirms our 
+belief in the power of community-led development. The proactive contributions 
+from LambdaTest’s OSPO will help create a more connected and empowered test 
+automation community. We invite you to join our upcoming workshops, webinars, 
+and discussion forums to see firsthand how these collaborative projects will 
+shape the future of open source test automation.
+
+Formalizing LambdaTest as a Selenium development partner is a milestone that 
+celebrates our commitment to innovation and community spirit. With the dedicated 
+efforts from LambdaTest’s OSPO, we continue our mission to enhance the 
+Selenium ecosystem for every developer and tester worldwide.
+
+Join us on this journey toward a future that is more resilient, 
+supportive, and inventive in the realm of test automation.
diff --git a/website_and_docs/content/blog/2025/remove-cdp-firefox.md b/website_and_docs/content/blog/2025/remove-cdp-firefox.md
new file mode 100644
index 000000000000..0787c9f042aa
--- /dev/null
+++ b/website_and_docs/content/blog/2025/remove-cdp-firefox.md
@@ -0,0 +1,18 @@
+---
+title: "Removing ChromeDevTools Support For Firefox"
+linkTitle: "Removing ChromeDevTools Support For Firefox"
+date: 2025-02-03
+tags: ["selenium"]
+categories: ["releases"]
+author: Puja Jagani [@pujagani](https://www.linkedin.com/in/pujajagani/)
+description: >
+  Today we're happy to announce ChromeDevTools support for Firefox is removed and WebDriver BiDi is paving the path forward
+---
+
+Selenium has deprecated support for Chrome DevTools Protocol (CDP) for Firefox in the last two versions (4.27 and 4.28). Our typical removal policy is to deprecate support for two versions, allowing users sufficient time to update their codebase, and then remove it from the third version onwards.
+
+Starting with Selenium 4.29.0, CDP support for Firefox has been fully removed—and for good reason. Selenium’s CDP implementation for Firefox was always partial, meaning it never had complete feature parity with Chrome. Meanwhile, Firefox is shifting towards WebDriver BiDi, the future of cross-browser automation. Aligning with this, Firefox has announced that starting with Firefox 129, CDP will no longer be enabled by default. Read more here: [https://fxdx.dev/deprecating-cdp-support-in-firefox-embracing-the-future-with-webdriver-bidi/].
+
+To support this transition, Selenium is removing CDP support for Firefox, as a major portion of WebDriver BiDi functionality is now available across all Selenium language bindings. Selenium is committed to staying in sync with browser vendors and the latest developments in the WebDriver BiDi protocol. This step brings us closer to standardized, browser-agnostic automation.
+
+If you were using CDP in Selenium for Firefox, now is the time to switch to WebDriver BiDi. Start your journey with Selenium’s WebDriver BiDi examples [here](https://www.selenium.dev/documentation/webdriver/bidi/w3c/).
\ No newline at end of file
diff --git a/website_and_docs/content/blog/2025/selenium-4-28-released.md b/website_and_docs/content/blog/2025/selenium-4-28-released.md
new file mode 100644
index 000000000000..f4c4af413540
--- /dev/null
+++ b/website_and_docs/content/blog/2025/selenium-4-28-released.md
@@ -0,0 +1,184 @@
+---
+title: "Selenium 4.28 Released!"
+linkTitle: "Selenium 4.28 Released!"
+date: 2025-01-20
+tags: ["selenium"]
+categories: ["releases"]
+author: Diego Molina [@diemol](https://www.diemol.com)
+images:
+  - "/images/blog/2025/selenium_4.28.jpg"
+description: >
+  Today we're happy to announce that Selenium 4.28 has been released!
+---
+We're very happy to announce the release of Selenium 4.28 for 
+Javascript, Ruby, Python, .NET, Java and the Grid!
+Links to everything can be found on our [downloads page][downloads].
+
+
+<br>
+
+## **Highlights**
+- **Chrome DevTools support** is now: v132, v131, and v130 (Firefox still uses v85 for all versions)
+- Expanded **nullability annotations** for better type safety in .NET and Java.
+- Refinements to **Selenium Grid**, including more efficient session handling and node management.
+- **Packaging and installation enhancements** across Python and Ruby for smoother integration.
+- **Documentation improvements** across Python and .NET libraries, ensuring clearer developer guidance.
+- Updated **language-specific implementations** for modern development standards.
+
+<br>
+
+## **Changes by Language**
+
+### **Java**
+- **Encapsulation Improvements**: Encapsulated `additionalCommands` with a getter method ([#14816](https://github.com/SeleniumHQ/selenium/pull/14816)).
+- **Nullability Enhancements**: Added nullness annotations for enums, exceptions, interactions, logging, and Proxy ([#15105](https://github.com/SeleniumHQ/selenium/pull/15105), [#15094](https://github.com/SeleniumHQ/selenium/pull/15094)).
+- **SpotBugs Updates**: Excluded specific warnings to maintain clean code ([#14766](https://github.com/SeleniumHQ/selenium/pull/14766)).
+- **Improved Logging**: Enhanced error handling and message clarity in exceptions ([#15116](https://github.com/SeleniumHQ/selenium/pull/15116)).
+- **Relative Locators**: Updates for `RelativeBy` locators, simplifying usage ([#14482](https://github.com/SeleniumHQ/selenium/pull/14482)).
+
+<br>
+
+### **Python**
+- **Packaging Fixes**: Addressed issues for smoother installation ([#14806](https://github.com/SeleniumHQ/selenium/pull/14806), [#14823](https://github.com/SeleniumHQ/selenium/pull/14823)).
+- **Documentation Upgrades**: Added comprehensive docstrings to multiple classes, including `WebDriverWait`, `ExpectedConditions`, and `WebElement` ([#15077](https://github.com/SeleniumHQ/selenium/pull/15077), [#15096](https://github.com/SeleniumHQ/selenium/pull/15096)).
+- **Refactoring**: Moved project metadata and improved code organization ([#14837](https://github.com/SeleniumHQ/selenium/pull/14837)).
+- **Enhanced CDP Command Handling**: Added `execute_cdp_cmd` to `Remote` ([#14809](https://github.com/SeleniumHQ/selenium/pull/14809)).
+
+<br>
+
+### **JavaScript**
+- **Federated Credential Management Support**: Introduced support for Federated Credential Management, enhancing authentication capabilities. ([#15008](https://github.com/SeleniumHQ/selenium/pull/15008))
+- **Node.js Version Specification**: The minimum required Node.js version has been specified as 18.20.5.
+- **Improved Logging**: Added detailed error messages for invalid cookie name validation in `getCookie` and `deleteCookie` methods, aiding in debugging.
+- **Diagnostic Logging for Safari**: Enabled diagnostic logging for Safari, facilitating better issue tracking and resolution.
+
+<br>
+
+### **.NET**
+- **Nullability Improvements**: Added annotations to `SessionId`, `Alert`, `CookieJar`, `Logs API`, and more ([#14840](https://github.com/SeleniumHQ/selenium/pull/14840), [#14874](https://github.com/SeleniumHQ/selenium/pull/14874)).
+- **Refactored DevTools**: Modernized code style and enhanced JSON parsing ([#14990](https://github.com/SeleniumHQ/selenium/pull/14990)).
+- **Future-Proofing**: Added notes and deprecated setters for better immutability ([#15107](https://github.com/SeleniumHQ/selenium/pull/15107)).
+- **Testing Updates**: Migrated NUnit assertions to modern syntax ([#14870](https://github.com/SeleniumHQ/selenium/pull/14870)).
+
+<br>
+
+### **Ruby**
+- **BiDi Network Enhancements**: Added request handlers for authentication and interception ([#14751](https://github.com/SeleniumHQ/selenium/pull/14751)).
+- **Cookie Management Updates**: Added tests and improved handling for cookies ([#14843](https://github.com/SeleniumHQ/selenium/pull/14843)).
+
+<br>
+
+### **Grid**
+- **Improved Session Management**: Enhanced slot matching and session queue handling ([#14914](https://github.com/SeleniumHQ/selenium/pull/14914)).
+- **Dynamic Grid Enhancements**: Added video recording capabilities on browser node ([#15047](https://github.com/SeleniumHQ/selenium/pull/15047)).
+- **Reliability Boost**: Improved HTTP request retries and node health checks ([#14924](https://github.com/SeleniumHQ/selenium/pull/14924)).
+
+<br>
+
+### Docker Selenium
+- Update procedure to install Firefox in Node/Standalone Firefox ([#2550](https://github.com/SeleniumHQ/docker-selenium/discussions/2550))
+- Enable video recorder in Node/Standalone containers ([#2539](https://github.com/SeleniumHQ/docker-selenium/discussions/2539))
+- Env var `SE_ENABLE_TRACING=false` is not required when starting the container anymore ([#2549](https://github.com/SeleniumHQ/docker-selenium/discussions/2549))
+- Env var `SE_NODE_PLATFORM_NAME` & `SE_NODE_BROWSER_VERSION` to adjust default Node stereotypes for autoscaling ([#2520](https://github.com/SeleniumHQ/docker-selenium/pull/2520), [#2525](https://github.com/SeleniumHQ/docker-selenium/pull/2525))
+- Selenium Grid scaler in KEDA improvements ([KEDA#6437](https://github.com/kedacore/keda/pull/6437), [KEDA#6477](https://github.com/kedacore/keda/pull/6477))
+- [See all changes](https://github.com/SeleniumHQ/docker-selenium/releases)
+
+  <br>
+
+We thank all our contributors for their incredible efforts in making Selenium better with every release. ❤️
+
+For a detailed look at all changes, check out the [release notes](https://github.com/SeleniumHQ/selenium/releases/tag/4.28).
+
+<br>
+
+
+## Contributors
+
+**Special shout-out to everyone who helped the Selenium Team get this release out!**
+
+### [Selenium](https://github.com/SeleniumHQ/selenium)
+
+<div class="d-flex justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/AdamPDotty" >}}
+{{< gh-user "https://api.github.com/users/DineshKumarRA" >}}
+{{< gh-user "https://api.github.com/users/MustafaAgamy" >}}
+{{< gh-user "https://api.github.com/users/dennisoelkers" >}}
+{{< gh-user "https://api.github.com/users/iampopovich" >}}                                                                                                                                                                                                                                            
+{{< gh-user "https://api.github.com/users/lauromoura" >}}                                                                                                                                                                                                                                             
+{{< gh-user "https://api.github.com/users/mk868" >}}                                                                                                                                                                                                                                                  
+{{< gh-user "https://api.github.com/users/navin772" >}}                                                                                                                                                                                                                                               
+{{< gh-user "https://api.github.com/users/shbenzer" >}}
+    </div>
+  </div>
+</div>
+
+
+### [Selenium Docs & Website](https://github.com/SeleniumHQ/seleniumhq.github.io)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/Delta456" >}}
+{{< gh-user "https://api.github.com/users/jasonren0403" >}}
+{{< gh-user "https://api.github.com/users/navin772" >}}
+{{< gh-user "https://api.github.com/users/pallavigitwork" >}}
+{{< gh-user "https://api.github.com/users/praveenmar" >}}
+{{< gh-user "https://api.github.com/users/shbenzer" >}}
+{{< gh-user "https://api.github.com/users/yvsvarma" >}}
+    </div>
+  </div>
+</div>
+
+### [Docker Selenium](https://github.com/SeleniumHQ/docker-selenium)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/KyriosGN0" >}}
+{{< gh-user "https://api.github.com/users/jbolsens-legion" >}}
+{{< gh-user "https://api.github.com/users/joshfng" >}}
+    </div>
+  </div>
+</div>
+
+### [Selenium Team Members][team]
+
+**Thanks as well to all the team members who contributed to this release:**
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/aguspe" >}}
+{{< gh-user "https://api.github.com/users/AutomatedTester" >}}
+{{< gh-user "https://api.github.com/users/bonigarcia" >}}
+{{< gh-user "https://api.github.com/users/diemol" >}}
+{{< gh-user "https://api.github.com/users/harsha509" >}}
+{{< gh-user "https://api.github.com/users/joerg1985" >}}
+{{< gh-user "https://api.github.com/users/nvborisenko" >}}
+{{< gh-user "https://api.github.com/users/p0deje" >}}
+{{< gh-user "https://api.github.com/users/pujagani" >}}
+{{< gh-user "https://api.github.com/users/RenderMichael" >}}
+{{< gh-user "https://api.github.com/users/shs96c" >}}
+{{< gh-user "https://api.github.com/users/titusfortner" >}}
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+    </div>
+  </div>
+</div>
+
+
+
+Stay tuned for updates by following SeleniumHQ on:
+- [Mastodon](https://mastodon.social/@seleniumHQ@fosstodon.org)
+- [BlueSky](https://bsky.app/profile/seleniumconf.bsky.social)
+- [LinkedIn](https://www.linkedin.com/company/selenium/)
+- [Selenium Community YouTube Channel](https://www.youtube.com/@SeleniumHQProject/streams)
+- [X (Formerly Twitter)](https://twitter.com/seleniumhq) 
+
+Happy automating!
+
+[downloads]: /downloads
+[bindings]: /downloads#bindings
+[team]: /project/structure
+[BiDi]: https://github.com/w3c/webdriver-bidi
diff --git a/website_and_docs/content/blog/2025/selenium-4-29-released.md b/website_and_docs/content/blog/2025/selenium-4-29-released.md
new file mode 100644
index 000000000000..92a32986dc91
--- /dev/null
+++ b/website_and_docs/content/blog/2025/selenium-4-29-released.md
@@ -0,0 +1,174 @@
+---
+title: "Selenium 4.29 Released!"
+linkTitle: "Selenium 4.29 Released!"
+date: 2025-02-20
+tags: ["selenium"]
+categories: ["releases"]
+author: Diego Molina [@diemol](https://www.diemol.com)
+images:
+  - "/images/blog/2025/selenium_4.29.jpg"
+description: >
+  Today we're happy to announce that Selenium 4.29 has been released!
+---
+We're very happy to announce the release of Selenium 4.29 for 
+Javascript, Ruby, Python, .NET, Java and the Grid!
+Links to everything can be found on our [downloads page][downloads].
+
+
+---
+
+## 🚀 Major Highlights
+
+- **Final removal of [Firefox CDP support](/blog/2025/remove-cdp-firefox/)** across all language bindings.
+- **New WebDriver BiDi capabilities**: Implementation of `setCacheBehavior` and `getClientWindows` commands.
+- **Grid UI Fixes**: Live session view now works as expected.
+- **PrintOptions enhancements**: Support for predefined and custom paper sizes.
+- **Nullability annotations** continue to improve type safety in .NET.
+- **BiDi improvements**: Network response handlers and optimizations.
+- **Enhancements to logging options** in Java.
+
+---
+
+## 🔹 Language-Specific Changes
+
+### **Java**
+- Implemented `setCacheBehavior` for WebDriver BiDi. ([#15130](https://github.com/SeleniumHQ/selenium/pull/15130))
+- Enhanced `PageSize` class to support predefined and custom paper sizes. ([#15052](https://github.com/SeleniumHQ/selenium/pull/15052))
+- Ensured purging dead nodes service interval is configurable. ([#15175](https://github.com/SeleniumHQ/selenium/pull/15175))
+- Improved handling of Selenium logging options. ([#15197](https://github.com/SeleniumHQ/selenium/pull/15197))
+- Added support for `getClientWindows` in WebDriver BiDi. ([#14869](https://github.com/SeleniumHQ/selenium/pull/14869))
+
+### **Python**
+- Fixed installation issues for source distributions. ([#15128](https://github.com/SeleniumHQ/selenium/pull/15128))
+- Updated `PrintOptions` to support different page sizes. ([#15064](https://github.com/SeleniumHQ/selenium/pull/15064))
+- Documented `cygwin` path usage in `send_keys()`. ([#15275](https://github.com/SeleniumHQ/selenium/pull/15275))
+- Fixed return type and docstrings for `get_downloadable_files()`. ([#15292](https://github.com/SeleniumHQ/selenium/pull/15292))
+
+### **JavaScript**
+- Implemented `setCacheBehavior` for WebDriver BiDi. ([#15136](https://github.com/SeleniumHQ/selenium/pull/15136))
+- Fixed dependencies for `novnc` v1.5.0. ([#15005](https://github.com/SeleniumHQ/selenium/pull/15005))
+- Added support for `getClientWindows` in WebDriver BiDi. ([#15248](https://github.com/SeleniumHQ/selenium/pull/15248))
+
+### **Ruby**
+- Removed Java date dependency. ([#15122](https://github.com/SeleniumHQ/selenium/pull/15122))
+- Added WebDriver BiDi network response handler. ([#14900](https://github.com/SeleniumHQ/selenium/pull/14900))
+- Implemented WebDriver BiDi `setCacheBehavior` command. ([#15114](https://github.com/SeleniumHQ/selenium/pull/15114))
+
+### **.NET**
+- Improved BiDi exception handling when it is not enabled. ([#15163](https://github.com/SeleniumHQ/selenium/pull/15163))
+- Added nullability annotations across multiple modules, including `Command`, `DriverService`, `FirefoxProfile`, `Manage()`, `SafariOptions`, and `Navigate()`.
+- Updated WebAuth credential handling. ([#15201](https://github.com/SeleniumHQ/selenium/pull/15201))
+- Simplified creation of network types. ([#15267](https://github.com/SeleniumHQ/selenium/pull/15267))
+- Improved logging stability. ([#15257](https://github.com/SeleniumHQ/selenium/pull/15257))
+
+### **Docker Selenium**
+
+- Publish Node/Standalone images with the latest Grid core version and browser backward versions
+- Update container environment to JDK21 ([#2642](https://github.com/SeleniumHQ/docker-selenium/pull/2642))
+- Node base with share system certificate support ([#2653](https://github.com/SeleniumHQ/docker-selenium/pull/2653))
+- Node container is able to restart and retry to register when `register-period` exceeded  ([#2662](https://github.com/SeleniumHQ/docker-selenium/pull/2662))
+- Selenium Grid scaler in KEDA feature preview
+  - Add trigger param to set custom capabilities for matching specific Nodes ([KEDA#6536](https://github.com/kedacore/keda/pull/6536))
+  - Add trigger param for Node enables managed downloads capability ([KEDA#6570](https://github.com/kedacore/keda/pull/6570))
+- Helm config: Set K8s node IP to all components via env var KUBERNETES_NODE_HOST_IP in template ([#2668](https://github.com/SeleniumHQ/docker-selenium/pull/2668))
+- [See all changes](https://github.com/SeleniumHQ/docker-selenium/releases)
+
+
+<br>
+
+We thank all our contributors for their incredible efforts in making Selenium better with every release. ❤️
+
+For a detailed look at all changes, check out the [release notes](https://github.com/SeleniumHQ/selenium/releases/tag/4.29).
+
+<br>
+
+
+## Contributors
+
+**Special shout-out to everyone who helped the Selenium Team get this release out!**
+
+### [Selenium](https://github.com/SeleniumHQ/selenium)
+
+<div class="d-flex justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/Delta456" >}}
+{{< gh-user "https://api.github.com/users/iampopovich" >}}
+{{< gh-user "https://api.github.com/users/navin772" >}}
+{{< gh-user "https://api.github.com/users/smortex" >}}
+{{< gh-user "https://api.github.com/users/yvsvarma" >}}
+    </div>
+  </div>
+</div>
+
+
+### [Selenium Docs & Website](https://github.com/SeleniumHQ/seleniumhq.github.io)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/AndreyJVM" >}}
+{{< gh-user "https://api.github.com/users/Delta456" >}}
+{{< gh-user "https://api.github.com/users/alaahong" >}}
+{{< gh-user "https://api.github.com/users/b2m" >}}
+{{< gh-user "https://api.github.com/users/pallavigitwork" >}}
+    </div>
+  </div>
+</div>
+
+### [Docker Selenium](https://github.com/SeleniumHQ/docker-selenium)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/PeterUpfold" >}}
+{{< gh-user "https://api.github.com/users/StenAL" >}}
+{{< gh-user "https://api.github.com/users/amardeep2006" >}}
+{{< gh-user "https://api.github.com/users/calendir" >}}
+{{< gh-user "https://api.github.com/users/joshfng" >}}
+{{< gh-user "https://api.github.com/users/ritzk" >}}
+    </div>
+  </div>
+</div>
+
+### [Selenium Team Members][team]
+
+**Thanks as well to all the team members who contributed to this release:**
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/aguspe" >}}
+{{< gh-user "https://api.github.com/users/AutomatedTester" >}}
+{{< gh-user "https://api.github.com/users/bonigarcia" >}}
+{{< gh-user "https://api.github.com/users/cgoldberg" >}}
+{{< gh-user "https://api.github.com/users/diemol" >}}
+{{< gh-user "https://api.github.com/users/harsha509" >}}
+{{< gh-user "https://api.github.com/users/joerg1985" >}}
+{{< gh-user "https://api.github.com/users/nvborisenko" >}}
+{{< gh-user "https://api.github.com/users/p0deje" >}}
+{{< gh-user "https://api.github.com/users/pujagani" >}}
+{{< gh-user "https://api.github.com/users/RenderMichael" >}}
+{{< gh-user "https://api.github.com/users/shbenzer" >}}
+{{< gh-user "https://api.github.com/users/shs96c" >}}
+{{< gh-user "https://api.github.com/users/titusfortner" >}}
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+    </div>
+  </div>
+</div>
+
+
+
+Stay tuned for updates by following SeleniumHQ on:
+- [Mastodon](https://mastodon.social/@seleniumHQ@fosstodon.org)
+- [BlueSky](https://bsky.app/profile/seleniumconf.bsky.social)
+- [LinkedIn](https://www.linkedin.com/company/selenium/)
+- [Selenium Community YouTube Channel](https://www.youtube.com/@SeleniumHQProject/streams)
+- [X (Formerly Twitter)](https://twitter.com/seleniumhq) 
+
+Happy automating!
+
+[downloads]: /downloads
+[bindings]: /downloads#bindings
+[team]: /project/structure
+[BiDi]: https://github.com/w3c/webdriver-bidi
diff --git a/website_and_docs/content/blog/2025/selenium-4-30-released.md b/website_and_docs/content/blog/2025/selenium-4-30-released.md
new file mode 100644
index 000000000000..8c9c41880c27
--- /dev/null
+++ b/website_and_docs/content/blog/2025/selenium-4-30-released.md
@@ -0,0 +1,197 @@
+---
+title: "Selenium 4.30 Released!"
+linkTitle: "Selenium 4.30 Released!"
+date: 2025-03-21
+tags: [ "selenium" ]
+categories: [ "releases" ]
+author: Diego Molina [@diemol](https://www.diemol.com)
+images:
+  - "/images/blog/2025/selenium_4.30.jpg"
+description: >
+  Today we're happy to announce that Selenium 4.30 has been released!
+---
+
+We're very happy to announce the release of Selenium 4.30 for Javascript, Ruby, Python, .NET, Java
+and the Grid!
+This version brings key updates across the project, with improvements to the BiDi protocol,
+extensive nullability work in .NET, better error handling, and various bug fixes. It’s a great
+step forward as we continue strengthening Selenium’s stability, consistency, and support across
+all supported languages.
+
+Links to all assets can be found on our [downloads page][downloads].
+
+
+---
+
+## 🚀 Major Highlights
+
+- Continued enhancements to **BiDi (Bi-Directional Protocol)** support across Java, Ruby, .NET, JavaScript, and Python.
+- Extensive **nullability annotations** added throughout the .NET bindings.
+- Selenium Manager (Rust) now supports **nightly Grid builds**.
+- Improvements to testing infrastructure and developer experience, including better packaging, linting, and platform support.
+- Numerous bug fixes and refactors across the Grid, bindings, and devtools.
+
+---
+
+## 🔹 Language-Specific Changes
+
+### **Java**
+
+- Implemented BiDi commands: `getBidiSessionStatus` and `Permissions`.
+- Refined logger initialization.
+- Removed deprecated, non-W3C compliant `NetworkConnection` interface.
+- Added support for setting viewport and handling CDP warnings gracefully.
+
+### **Python**
+
+- Improved devtools test handling and documentation.
+- Fixed packaging issues and test discovery for `pytest`.
+- Added docstring updates for clarity and modernization.
+- Replaced strings with `By` class attributes.
+- Improved socket resource management and error handling.
+- Updated `expected_conditions` type annotations.
+
+### **JavaScript**
+
+- Fixed BiDi tests for Chrome and Firefox on CI.
+- Implemented BiDi `permissions` module commands.
+
+### **Ruby**
+
+- Fixed a compatibility issue with Ruby 3.1 ("no anonymous block parameter").
+- Added BiDi support for:
+  - Setting viewport
+  - Activating browser context
+  - Providing responses
+- Added a `target_type` parameter to devtools.
+
+### **.NET**
+
+- Enabled **nullable reference types** across many components.
+- Trimmed away CDP for **AOT** applications.
+- Enhanced BiDi support including:
+  - `SetFiles` command
+  - Support for `UnhandledPromptBehavior`
+  - Event support like `OnNavigationCommitted`
+  - Encapsulation of the transport layer
+- Improved `WebDriver`, `WebElement`, and capabilities types with nullability.
+- Introduced `SystemClock` singleton.
+- Revisited and fixed test execution on Windows/macOS.
+- Removed obsoleted members for 4.30.
+
+### **Grid & Selenium Manager**
+
+- Added trace logging for session stop events in Grid.
+- Improved configuration options for server timeouts and session handling.
+- Added support in Selenium Manager (Rust) for **nightly Grid builds**.
+- Enhanced ability to trace and view live sessions.
+
+### **Docker Selenium**
+
+- Helm config: Node Relay to extend autoscaling Grid with test cloud resources ([#2703](https://github.com/SeleniumHQ/docker-selenium/pull/2703)).
+- Docker: Disable HeapDumpOnOutOfMemoryError by default ([#2708](https://github.com/SeleniumHQ/docker-selenium/pull/2708))
+- [See all changes](https://github.com/SeleniumHQ/docker-selenium/releases)
+
+
+<br>
+
+We thank all our contributors for their incredible efforts in making Selenium better with every
+release. ❤️
+
+For a detailed look at all changes, check out
+the [release notes](https://github.com/SeleniumHQ/selenium/releases/tag/4.30).
+
+<br>
+
+## Contributors
+
+**Special shout-out to everyone who helped the Selenium Team get this release out!**
+
+### [Selenium](https://github.com/SeleniumHQ/selenium)
+
+<div class="d-flex justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/Delta456" >}}
+{{< gh-user "https://api.github.com/users/FloKNetcare" >}}
+{{< gh-user "https://api.github.com/users/ahalbrock" >}}
+{{< gh-user "https://api.github.com/users/allrob23" >}}
+{{< gh-user "https://api.github.com/users/jpawlyn" >}}
+{{< gh-user "https://api.github.com/users/navin772" >}}
+{{< gh-user "https://api.github.com/users/smortex" >}}
+{{< gh-user "https://api.github.com/users/pallavigitwork" >}}
+{{< gh-user "https://api.github.com/users/ahalbrock" >}}
+    </div>
+  </div>
+</div>
+
+### [Selenium Docs & Website](https://github.com/SeleniumHQ/seleniumhq.github.io)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/Delta456" >}}
+{{< gh-user "https://api.github.com/users/WasiqB" >}}
+{{< gh-user "https://api.github.com/users/alaahong" >}}
+{{< gh-user "https://api.github.com/users/beinghumantester" >}}
+{{< gh-user "https://api.github.com/users/franciscotrenco" >}}
+{{< gh-user "https://api.github.com/users/pallavigitwork" >}}
+    </div>
+  </div>
+</div>
+
+### [Docker Selenium](https://github.com/SeleniumHQ/docker-selenium)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+    </div>
+  </div>
+</div>
+
+### [Selenium Team Members][team]
+
+**Thanks as well to all the team members who contributed to this release:**
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/aguspe" >}}
+{{< gh-user "https://api.github.com/users/AutomatedTester" >}}
+{{< gh-user "https://api.github.com/users/bonigarcia" >}}
+{{< gh-user "https://api.github.com/users/cgoldberg" >}}
+{{< gh-user "https://api.github.com/users/diemol" >}}
+{{< gh-user "https://api.github.com/users/harsha509" >}}
+{{< gh-user "https://api.github.com/users/joerg1985" >}}
+{{< gh-user "https://api.github.com/users/nvborisenko" >}}
+{{< gh-user "https://api.github.com/users/p0deje" >}}
+{{< gh-user "https://api.github.com/users/pujagani" >}}
+{{< gh-user "https://api.github.com/users/RenderMichael" >}}
+{{< gh-user "https://api.github.com/users/shbenzer" >}}
+{{< gh-user "https://api.github.com/users/shs96c" >}}
+{{< gh-user "https://api.github.com/users/titusfortner" >}}
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+    </div>
+  </div>
+</div>
+
+
+
+Stay tuned for updates by following SeleniumHQ on:
+
+- [Mastodon](https://mastodon.social/@seleniumHQ@fosstodon.org)
+- [BlueSky](https://bsky.app/profile/seleniumconf.bsky.social)
+- [LinkedIn](https://www.linkedin.com/company/selenium/)
+- [Selenium Community YouTube Channel](https://www.youtube.com/@SeleniumHQProject/streams)
+- [X (Formerly Twitter)](https://twitter.com/seleniumhq)
+
+Happy automating!
+
+[downloads]: /downloads
+
+[bindings]: /downloads#bindings
+
+[team]: /project/structure
+
+[BiDi]: https://github.com/w3c/webdriver-bidi
diff --git a/website_and_docs/content/blog/2025/selenium-4-31-released.md b/website_and_docs/content/blog/2025/selenium-4-31-released.md
new file mode 100644
index 000000000000..c4c1fa14db18
--- /dev/null
+++ b/website_and_docs/content/blog/2025/selenium-4-31-released.md
@@ -0,0 +1,175 @@
+---
+title: "Selenium 4.31 Released!"
+linkTitle: "Selenium 4.31 Released!"
+date: 2025-04-05
+tags: [ "selenium" ]
+categories: [ "releases" ]
+author: Diego Molina [@diemol](https://www.diemol.com)
+images:
+  - "/images/blog/2025/selenium_4.31.jpg"
+description: >
+  Today we're happy to announce that Selenium 4.31 has been released!
+---
+
+We’re excited to announce the release of **Selenium 4.31** for Javascript, Ruby, Python, .NET, Java
+and the Grid! 🎉  
+This release focuses on improvements across the board, including better BiDi protocol support, test
+reliability, nullability enhancements, and cleanup of legacy code across languages.
+
+Links to all assets can be found on our [downloads page][downloads].
+
+
+---
+
+## 🚀 Major Highlights
+
+- Continued work towards full BiDi support in all bindings
+- Cleanup of unused legacy components (like `wgxpath`)
+- Expanded test coverage and fixes for various environments (CI, RBE, MacOS)
+- Improvements in documentation and development tooling
+
+---
+
+## 🔹 Language-Specific Changes
+
+### **Java**
+
+- [Handle `getNamedCookie` and `deleteNamedCookie` for empty strings](https://github.com/SeleniumHQ/selenium/pull/15092)
+- [Add nullness for AppCacheStatus, Credential, and Either](https://github.com/SeleniumHQ/selenium/pull/15119)
+- [Add nullness for interactions](https://github.com/SeleniumHQ/selenium/pull/15118)
+- [Enable Safari for CookieImplementationTest](https://github.com/SeleniumHQ/selenium/pull/15544)
+- [Add test to add a cookie in a user context (BiDi)](https://github.com/SeleniumHQ/selenium/pull/15312)
+
+### **Python**
+
+- [Fix docstring issues that sphinx complains about](https://github.com/SeleniumHQ/selenium/pull/15466)
+- [Only shutdown service if process not already terminated](https://github.com/SeleniumHQ/selenium/pull/15183)
+- [Remove unused mocker arg in chrome options test](https://github.com/SeleniumHQ/selenium/pull/15540)
+- [Fix driver class name in test fixtures](https://github.com/SeleniumHQ/selenium/pull/15550)
+
+### **JavaScript**
+
+- Fixed BiDi tests for Chrome and Firefox on CI.
+- Implemented BiDi `permissions` module commands.
+
+### **Ruby**
+
+- [Fix BiDi test errors](https://github.com/SeleniumHQ/selenium/pull/15482) 
+- [Allow symbols again to be passed on `delete_cookie`](https://github.com/SeleniumHQ/selenium/pull/15519)
+
+### **.NET**
+
+- [Decouple nested BiDi types across multiple modules](https://github.com/SeleniumHQ/selenium/pulls?q=is%3Apr+author%3Anvborisenko+label%3Adotnet)
+- [Fix null warnings in `RelativeBy` by sealing the type](https://github.com/SeleniumHQ/selenium/pull/15379)
+- [Simplify conversion to `LocalValue`](https://github.com/SeleniumHQ/selenium/pull/15441)
+- [Unify protected and internal Execute methods](https://github.com/SeleniumHQ/selenium/pull/15233)
+- [Make `ContinueWithAuthCommand` closer to spec (breaking change)](https://github.com/SeleniumHQ/selenium/pull/15545)
+- [Avoid intermediate JsonDocument allocation to improve performance](https://github.com/SeleniumHQ/selenium/pull/15555)
+
+### **Grid**
+
+- [Expose register status via Node status response](https://github.com/SeleniumHQ/selenium/pull/15448)
+- [Add traces for event stop session in Node](https://github.com/SeleniumHQ/selenium/pull/15348)
+
+### **Docker Selenium**
+
+- Helm config: Add template for file browser video records service ([#2763](https://github.com/SeleniumHQ/docker-selenium/pull/2763))
+- Helm config: Strictly handle `basicAuth.enabled` in template ([#2760](https://github.com/SeleniumHQ/docker-selenium/pull/2760))
+- Selenium Grid Autoscaling in Kubernetes is expected working well with KEDA core v2.17.0.
+- [See all changes](https://github.com/SeleniumHQ/docker-selenium/releases)
+
+
+<br>
+
+We thank all our contributors for their incredible efforts in making Selenium better with every
+release. ❤️
+
+For a detailed look at all changes, check out
+the [release notes](https://github.com/SeleniumHQ/selenium/releases/tag/4.31).
+
+<br>
+
+## Contributors
+
+**Special shout-out to everyone who helped the Selenium Team get this release out!**
+
+### [Selenium](https://github.com/SeleniumHQ/selenium)
+
+<div class="d-flex justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/Delta456" >}}
+{{< gh-user "https://api.github.com/users/PSandro" >}}
+{{< gh-user "https://api.github.com/users/mk868" >}}
+{{< gh-user "https://api.github.com/users/navin772" >}}
+    </div>
+  </div>
+</div>
+
+### [Selenium Docs & Website](https://github.com/SeleniumHQ/seleniumhq.github.io)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/alaahong" >}}
+{{< gh-user "https://api.github.com/users/pallavigitwork" >}}
+    </div>
+  </div>
+</div>
+
+### [Docker Selenium](https://github.com/SeleniumHQ/docker-selenium)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/KenHuPricer" >}}
+{{< gh-user "https://api.github.com/users/KyriosGN0" >}}
+    </div>
+  </div>
+</div>
+
+### [Selenium Team Members][team]
+
+**Thanks as well to all the team members who contributed to this release:**
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/aguspe" >}}
+{{< gh-user "https://api.github.com/users/AutomatedTester" >}}
+{{< gh-user "https://api.github.com/users/bonigarcia" >}}
+{{< gh-user "https://api.github.com/users/cgoldberg" >}}
+{{< gh-user "https://api.github.com/users/diemol" >}}
+{{< gh-user "https://api.github.com/users/harsha509" >}}
+{{< gh-user "https://api.github.com/users/joerg1985" >}}
+{{< gh-user "https://api.github.com/users/nvborisenko" >}}
+{{< gh-user "https://api.github.com/users/p0deje" >}}
+{{< gh-user "https://api.github.com/users/pujagani" >}}
+{{< gh-user "https://api.github.com/users/RenderMichael" >}}
+{{< gh-user "https://api.github.com/users/shbenzer" >}}
+{{< gh-user "https://api.github.com/users/shs96c" >}}
+{{< gh-user "https://api.github.com/users/titusfortner" >}}
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+    </div>
+  </div>
+</div>
+
+
+
+Stay tuned for updates by following SeleniumHQ on:
+
+- [Mastodon](https://mastodon.social/@seleniumHQ@fosstodon.org)
+- [BlueSky](https://bsky.app/profile/seleniumconf.bsky.social)
+- [LinkedIn](https://www.linkedin.com/company/selenium/)
+- [Selenium Community YouTube Channel](https://www.youtube.com/@SeleniumHQProject/streams)
+- [X (Formerly Twitter)](https://twitter.com/seleniumhq)
+
+Happy automating!
+
+[downloads]: /downloads
+
+[bindings]: /downloads#bindings
+
+[team]: /project/structure
+
+[BiDi]: https://github.com/w3c/webdriver-bidi
diff --git a/website_and_docs/content/blog/2025/selenium-4-32-released.md b/website_and_docs/content/blog/2025/selenium-4-32-released.md
new file mode 100644
index 000000000000..a02c31e01cad
--- /dev/null
+++ b/website_and_docs/content/blog/2025/selenium-4-32-released.md
@@ -0,0 +1,180 @@
+---
+title: "Selenium 4.32 Released!"
+linkTitle: "Selenium 4.32 Released!"
+date: 2025-05-05
+tags: [ "selenium" ]
+categories: [ "releases" ]
+author: Diego Molina [@diemol](https://www.diemol.com)
+images:
+  - "/images/blog/2025/selenium_4.32.jpg"
+description: >
+  Today we're happy to announce that Selenium 4.32 has been released!
+---
+
+We’re excited to announce the release of **Selenium 4.32** for Javascript, Ruby, Python, .NET, Java
+and the Grid! 🎉  
+This release continues the focus on strengthening BiDi support across multiple bindings, improving
+stability in tests, and refining documentation and developer experience.
+
+Links to all assets can be found on our [downloads page][downloads].
+
+
+---
+
+## 🚀 Major Highlights
+
+- Enhanced **BiDi (Bi-Directional)** protocol support for Python, Java, Ruby, and .NET bindings
+- Dozens of **bug fixes and stability improvements** in tests and documentation
+- Selenium Grid now better handles **capabilities for mobile testing with Relay Nodes**
+- New utility class in Python to manage a local Grid server
+- Additional updates to support AOT compatibility and memory optimizations in .NET
+
+---
+
+## 🔹 Language-Specific Changes
+
+### **Java**
+
+- BiDi improvements: `onNavigationCommitted`, `getClientWindows`, and Edge support [#15560](https://github.com/SeleniumHQ/selenium/pull/15560), [#15661](https://github.com/SeleniumHQ/selenium/pull/15661)
+- BiDi tests enabled for Edge network module [#15654](https://github.com/SeleniumHQ/selenium/pull/15654)
+- Set BiDi as active protocol for Remote Firefox [#15224](https://github.com/SeleniumHQ/selenium/pull/15224)
+- Dependency versioning improvements via BOM [#15689](https://github.com/SeleniumHQ/selenium/pull/15689)
+
+### **Python**
+
+- Fixes to test args for `--headless` and `--bidi` [#15567](https://github.com/SeleniumHQ/selenium/pull/15567)
+- Improvements in test coverage and cleanup [#15579](https://github.com/SeleniumHQ/selenium/pull/15579), [#15580](https://github.com/SeleniumHQ/selenium/pull/15580)
+- FedCM state leak fix [#15583](https://github.com/SeleniumHQ/selenium/pull/15583)
+- BiDi Network: intercepts and authentication implemented [#14592](https://github.com/SeleniumHQ/selenium/pull/14592)
+- Implemented BiDi `browser`, `browsing_context`, and `log` modules [#15616](https://github.com/SeleniumHQ/selenium/pull/15616), [#15631](https://github.com/SeleniumHQ/selenium/pull/15631), [#15668](https://github.com/SeleniumHQ/selenium/pull/15668)
+- Added `Server` utility class to manage Grid [#15666](https://github.com/SeleniumHQ/selenium/pull/15666)
+- Modernized linting setup and doc publishing [#15614](https://github.com/SeleniumHQ/selenium/pull/15614)
+
+### **JavaScript**
+
+- [Set remote active protocol in Firefox to BiDi only](https://github.com/SeleniumHQ/selenium/commit/a1ff120a9fd69daeea6a51d41aee6beb83748895)
+
+### **Ruby**
+
+- Added `PrintOptions` support [#15158](https://github.com/SeleniumHQ/selenium/pull/15158)
+- WebSocket port handling for Firefox [#15458](https://github.com/SeleniumHQ/selenium/pull/15458)
+- BiDi `setViewport`, `activate`, and log support enhanced [#15290](https://github.com/SeleniumHQ/selenium/pull/15290), [#15365](https://github.com/SeleniumHQ/selenium/pull/15365)
+
+
+### **.NET**
+
+- Extensive BiDi refactoring for better spec alignment and AOT compatibility [#15575](https://github.com/SeleniumHQ/selenium/pull/15575), [#15591](https://github.com/SeleniumHQ/selenium/pull/15591)
+- Introduced strong typing for LocalValue conversions [#15532](https://github.com/SeleniumHQ/selenium/pull/15532)
+- Refined network interception and error handling [#15603](https://github.com/SeleniumHQ/selenium/pull/15603), [#15521](https://github.com/SeleniumHQ/selenium/pull/15521)
+- Websocket memory and platform detection improvements [#15640](https://github.com/SeleniumHQ/selenium/pull/15640), [#15649](https://github.com/SeleniumHQ/selenium/pull/15649)
+
+### **Grid**
+
+- Fixed Safari-specific capability prefix handling [#15574](https://github.com/SeleniumHQ/selenium/pull/15574)
+- Improved handling of `browserName` for Relay Nodes in mobile [#15537](https://github.com/SeleniumHQ/selenium/pull/15537)
+
+### **Docker Selenium**
+
+- Docker: Init python venv with non-root user ([#2769](https://github.com/SeleniumHQ/docker-selenium/pull/2769))
+- Docker: Remove Hub GraphQL dependency from video recorder ([#2813](https://github.com/SeleniumHQ/docker-selenium/pull/2813))
+- Docker: Fluxbox not rendering Chinese characters via VNC view ([#2817](https://github.com/SeleniumHQ/docker-selenium/pull/2817))
+- [See all changes](https://github.com/SeleniumHQ/docker-selenium/releases)
+
+
+<br>
+
+We thank all our contributors for their incredible efforts in making Selenium better with every
+release. ❤️
+
+For a detailed look at all changes, check out
+the [release notes](https://github.com/SeleniumHQ/selenium/releases/tag/4.32).
+
+<br>
+
+## Contributors
+
+**Special shout-out to everyone who helped the Selenium Team get this release out!**
+
+### [Selenium](https://github.com/SeleniumHQ/selenium)
+
+<div class="d-flex justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/Delta456" >}}
+{{< gh-user "https://api.github.com/users/FFederi" >}}
+{{< gh-user "https://api.github.com/users/navin772" >}}
+{{< gh-user "https://api.github.com/users/yvsvarma" >}}
+    </div>
+  </div>
+</div>
+
+### [Selenium Docs & Website](https://github.com/SeleniumHQ/seleniumhq.github.io)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/HandyCC" >}}
+{{< gh-user "https://api.github.com/users/Ozoniuss" >}}
+{{< gh-user "https://api.github.com/users/alaahong" >}}
+{{< gh-user "https://api.github.com/users/manoj9788" >}}
+{{< gh-user "https://api.github.com/users/pallavigitwork" >}}
+    </div>
+  </div>
+</div>
+
+### [Docker Selenium](https://github.com/SeleniumHQ/docker-selenium)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/Trigtrig" >}}
+{{< gh-user "https://api.github.com/users/lermit" >}}
+    </div>
+  </div>
+</div>
+
+### [Selenium Team Members][team]
+
+**Thanks as well to all the team members who contributed to this release:**
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/aguspe" >}}
+{{< gh-user "https://api.github.com/users/AutomatedTester" >}}
+{{< gh-user "https://api.github.com/users/bonigarcia" >}}
+{{< gh-user "https://api.github.com/users/cgoldberg" >}}
+{{< gh-user "https://api.github.com/users/diemol" >}}
+{{< gh-user "https://api.github.com/users/harsha509" >}}
+{{< gh-user "https://api.github.com/users/joerg1985" >}}
+{{< gh-user "https://api.github.com/users/nvborisenko" >}}
+{{< gh-user "https://api.github.com/users/p0deje" >}}
+{{< gh-user "https://api.github.com/users/pujagani" >}}
+{{< gh-user "https://api.github.com/users/RenderMichael" >}}
+{{< gh-user "https://api.github.com/users/shbenzer" >}}
+{{< gh-user "https://api.github.com/users/shs96c" >}}
+{{< gh-user "https://api.github.com/users/titusfortner" >}}
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+    </div>
+  </div>
+</div>
+
+
+
+Stay tuned for updates by following SeleniumHQ on:
+
+- [Mastodon](https://mastodon.social/@seleniumHQ@fosstodon.org)
+- [BlueSky](https://bsky.app/profile/seleniumconf.bsky.social)
+- [LinkedIn](https://www.linkedin.com/company/selenium/)
+- [Selenium Community YouTube Channel](https://www.youtube.com/@SeleniumHQProject/streams)
+- [X (Formerly Twitter)](https://twitter.com/seleniumhq)
+
+Happy automating!
+
+[downloads]: /downloads
+
+[bindings]: /downloads#bindings
+
+[team]: /project/structure
+
+[BiDi]: https://github.com/w3c/webdriver-bidi
diff --git a/website_and_docs/content/blog/2025/selenium-4-33-released.md b/website_and_docs/content/blog/2025/selenium-4-33-released.md
new file mode 100644
index 000000000000..d5f022ff40d1
--- /dev/null
+++ b/website_and_docs/content/blog/2025/selenium-4-33-released.md
@@ -0,0 +1,178 @@
+---
+title: "Selenium 4.33 Released!"
+linkTitle: "Selenium 4.33 Released!"
+date: 2025-05-25
+tags: [ "selenium" ]
+categories: [ "releases" ]
+author: Diego Molina [@diemol](https://www.diemol.com)
+images:
+  - "/images/blog/2025/selenium_4.33.jpg"
+description: >
+  Today we're happy to announce that Selenium 4.33 has been released!
+---
+
+We’re excited to announce the release of **Selenium 4.33** for Javascript, Ruby, Python, .NET, Java
+and the Grid! 🎉
+
+This release contains improvements, cleanups, and new features across all language bindings and the
+Grid. This release continues our effort to modernize the codebase, improve developer experience, and
+refine the project’s tooling and documentation.
+
+Links to all assets can be found on our [downloads page][downloads].
+
+
+---
+
+## 🚀 Highlights
+
+- [9f3c923670](https://github.com/SeleniumHQ/selenium/commit/9f3c92367005f19fad2bc79c171e7250cce43da3) - Grid UI now includes live previews for each Node.
+- [43e6bb970e](https://github.com/SeleniumHQ/selenium/commit/43e6bb970e65ec62692d6bf49962ea81e1103e78) - Python BiDi support expands with the new webExtension module.
+- [ef05c15798](https://github.com/SeleniumHQ/selenium/commit/ef05c15798b22a3ade4bb1f111d3e1955988e267) - Java: Reverted deprecation notice for `getAttribute` after community feedback.
+- [638621f4bc](https://github.com/SeleniumHQ/selenium/commit/638621f4bc3c632c5955fb4d056fd2f01b6cf835) - Java: Clean-up of deprecated timeout configuration methods.
+
+## 🔍 Changes by Component
+
+### Grid
+
+- [9f3c923670](https://github.com/SeleniumHQ/selenium/commit/9f3c92367005f19fad2bc79c171e7250cce43da3) - UI Overview is able to see live preview per Node
+- [7401a3db93](https://github.com/SeleniumHQ/selenium/commit/7401a3db93a7b6cca6f4697c5d032196b2e7f661) - UI Sessions capability fields to display as additional columns
+
+### Python
+
+- [92db47fa2a](https://github.com/SeleniumHQ/selenium/commit/92db47fa2ad6b4f8baa70446b7c18e6c17966306) - Add missing modules to python API docs
+- [4fc2582bf9](https://github.com/SeleniumHQ/selenium/commit/4fc2582bf96ecc2d0d0f4552c0c200a1d4e1e303) - Better error for downloads on local webdrivers
+- [43e6bb970e](https://github.com/SeleniumHQ/selenium/commit/43e6bb970e65ec62692d6bf49962ea81e1103e78) - Add bidi webExtension module (#15749)
+
+### Rust
+
+- [7497552255](https://github.com/SeleniumHQ/selenium/commit/7497552255a2bef5a1d9883d7620de2e41c6b553) - Replace WMIC commands (deprecated) by WinAPI in Windows
+
+### Java
+
+- [ef05c15798](https://github.com/SeleniumHQ/selenium/commit/ef05c15798b22a3ade4bb1f111d3e1955988e267) - Reverting deprecation notice for `getAttribute`.
+- [638621f4bc](https://github.com/SeleniumHQ/selenium/commit/638621f4bc3c632c5955fb4d056fd2f01b6cf835) - Removing deprecated `setScriptTimeout` and `pageLoadTimeout`.
+- [fcf4c9d09e](https://github.com/SeleniumHQ/selenium/commit/fcf4c9d09ecd41223d185a0d9922f14f37f9d4f6) - Removing deprecated SlowLoadableComponent constructor.
+- [1e65b7b49f](https://github.com/SeleniumHQ/selenium/commit/1e65b7b49f4c22e842b3620d9c5841961dfccc5e) - Removing deprecated NATIVE_EVENTS field.
+- [f3f0cadedb](https://github.com/SeleniumHQ/selenium/commit/f3f0cadedbaef98cc224dc7c84f4d8720d115565) - Deprecating methods that use FirefoxBinary as well.
+
+### Ruby
+
+- [212fc8be35](https://github.com/SeleniumHQ/selenium/commit/212fc8be3566e333ee3823e153b770162c3902b8) - Upgrade to Ruby 3.2.
+- [1e2945de78](https://github.com/SeleniumHQ/selenium/commit/1e2945de78c8005d96bad66af43a02b46bde3d20) - Let firefox choose the bidi port by default.
+
+### .NET
+
+- [212fc8be35](https://github.com/SeleniumHQ/selenium/commit/212fc8be3566e333ee3823e153b770162c3902b8) - Upgrade to Ruby 3.2.
+- [1e2945de78](https://github.com/SeleniumHQ/selenium/commit/1e2945de78c8005d96bad66af43a02b46bde3d20) - Let firefox choose the bidi port by default.
+
+### JavaScript
+
+- [3ef1c25fe8](https://github.com/SeleniumHQ/selenium/commit/3ef1c25fe8eef39b195550f7b5bf76d38f4f42ca) - Chrome capabilities test passes now in RBE.
+
+
+### Docker Selenium
+
+- K8s: Fix Helm chart template for deployment of video recording manager ([#2828](https://github.com/SeleniumHQ/docker-selenium/pull/2828), [#2831](https://github.com/SeleniumHQ/docker-selenium/pull/2831)).
+- K8s: Node enable readiness probe checks status registered to Hub ([#2833](https://github.com/SeleniumHQ/docker-selenium/pull/2833)).
+- K8s: Video recorder run as sidecar container is disabled by default ([#2843](https://github.com/SeleniumHQ/docker-selenium/pull/2843)).
+- K8s: Fix chart template issue that might occur when using Helm version v3.18.0 ([365c106](https://github.com/SeleniumHQ/docker-selenium/commit/365c10659905e6ad5e7e972fcb54225dc2a8c928)).
+- K8s: Update chart dependencies (KEDA core 2.17,1, and so on).
+- [See all changes](https://github.com/SeleniumHQ/docker-selenium/releases)
+
+
+<br>
+
+We thank all our contributors for their incredible efforts in making Selenium better with every
+release. ❤️
+
+For a detailed look at all changes, check out
+the [release notes](https://github.com/SeleniumHQ/selenium/releases/tag/selenium-4.33.0).
+
+<br>
+
+## Contributors
+
+**Special shout-out to everyone who helped the Selenium Team get this release out!**
+
+### [Selenium](https://github.com/SeleniumHQ/selenium)
+
+<div class="d-flex justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/DeflateAwning" >}}
+{{< gh-user "https://api.github.com/users/Delta456" >}}
+{{< gh-user "https://api.github.com/users/bandophahita" >}}
+{{< gh-user "https://api.github.com/users/navin772" >}}
+{{< gh-user "https://api.github.com/users/t7ru" >}}
+{{< gh-user "https://api.github.com/users/tomhughes" >}}
+    </div>
+  </div>
+</div>
+
+### [Selenium Docs & Website](https://github.com/SeleniumHQ/seleniumhq.github.io)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/PeteSong" >}}
+{{< gh-user "https://api.github.com/users/alaahong" >}}
+{{< gh-user "https://api.github.com/users/pallavigitwork" >}}
+    </div>
+  </div>
+</div>
+
+### [Docker Selenium](https://github.com/SeleniumHQ/docker-selenium)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/alcpereira" >}}
+    </div>
+  </div>
+</div>
+
+### [Selenium Team Members][team]
+
+**Thanks as well to all the team members who contributed to this release:**
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/aguspe" >}}
+{{< gh-user "https://api.github.com/users/AutomatedTester" >}}
+{{< gh-user "https://api.github.com/users/bonigarcia" >}}
+{{< gh-user "https://api.github.com/users/cgoldberg" >}}
+{{< gh-user "https://api.github.com/users/diemol" >}}
+{{< gh-user "https://api.github.com/users/harsha509" >}}
+{{< gh-user "https://api.github.com/users/joerg1985" >}}
+{{< gh-user "https://api.github.com/users/nvborisenko" >}}
+{{< gh-user "https://api.github.com/users/p0deje" >}}
+{{< gh-user "https://api.github.com/users/pujagani" >}}
+{{< gh-user "https://api.github.com/users/RenderMichael" >}}
+{{< gh-user "https://api.github.com/users/shbenzer" >}}
+{{< gh-user "https://api.github.com/users/shs96c" >}}
+{{< gh-user "https://api.github.com/users/titusfortner" >}}
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+    </div>
+  </div>
+</div>
+
+
+
+Stay tuned for updates by following SeleniumHQ on:
+
+- [Mastodon](https://mastodon.social/@seleniumHQ@fosstodon.org)
+- [BlueSky](https://bsky.app/profile/seleniumconf.bsky.social)
+- [LinkedIn](https://www.linkedin.com/company/selenium/)
+- [Selenium Community YouTube Channel](https://www.youtube.com/@SeleniumHQProject/streams)
+- [X (Formerly Twitter)](https://twitter.com/seleniumhq)
+
+Happy automating!
+
+[downloads]: /downloads
+
+[bindings]: /downloads#bindings
+
+[team]: /project/structure
+
+[BiDi]: https://github.com/w3c/webdriver-bidi
diff --git a/website_and_docs/content/blog/2025/selenium-4-34-released.md b/website_and_docs/content/blog/2025/selenium-4-34-released.md
new file mode 100644
index 000000000000..77524edd69f2
--- /dev/null
+++ b/website_and_docs/content/blog/2025/selenium-4-34-released.md
@@ -0,0 +1,209 @@
+---
+title: "Selenium 4.34 Released!"
+linkTitle: "Selenium 4.34 Released!"
+date: 2025-06-29
+tags: [ "selenium" ]
+categories: [ "releases" ]
+author: Diego Molina [@diemol](https://www.diemol.com)
+images:
+  - "/images/blog/2025/selenium_4.34.jpg"
+description: >
+  Today we're happy to announce that Selenium 4.34 has been released!
+---
+
+We’re excited to announce the release of **Selenium 4.34** for Javascript, Ruby, Python, .NET, Java
+and the Grid! 🎉
+
+Links to all assets can be found on our [downloads page][downloads].
+
+
+---
+
+## 🔦 Highlights
+
+- **macOS Improvements**: Added macOS-specific key support for both Ruby and Python.
+- **Web Extension Support**: BiDi implementations now support Chromium web extensions (Java, Python).
+- **Deprecations**: FTP proxy support deprecated across Java, Python, Ruby, and .NET.
+- **Selenium Manager**: Now supports Electron (Rust backend). Still needs implementation in the bindings.
+- **BiDi Enhancements**: Continued progress with `historyUpdated`, `permissions`, and `storage` modules (Java, .NET, Python).
+- **Quality Improvements**: Significant type annotation cleanup, test stability enhancements, and doc generation in Python.
+
+### Java
+
+- ✅ Implemented BiDi commands:
+    - `browsingContext.historyUpdated`
+    - `webExtensions` and extended `BrowsingContextInfo`
+- 🛠 Refactored `CommandPayload`, removed deprecated classes:
+    - `ContextAware`
+    - `CommandLine`
+    - `OsProcess`
+- ⚠️ Deprecated `FtpProxy`
+- ➕ Environment variable support for driver paths with Selenium Manager
+- 🔐 Improvements in `VirtualAuthenticator`
+
+### Python
+
+- 🔑 Added macOS-specific keys to `Keys` enum (`OPTION`, `FN`)
+- 🧠 Extensive BiDi updates:
+    - WebExtensions
+    - Permissions
+    - Storage
+    - History updates (with timestamps)
+- 🧼 Code quality:
+    - mypy/type hint cleanups
+    - API docs improvements (auto-generated)
+    - tox/ruff upgrades
+- 💡 `enable_webextensions()` now documented with CDP note
+- ❌ Deprecated: FTP proxy support
+- 🌐 Better error reporting on HTTP failures, improved error handling in `expected_conditions`
+
+### .NET
+
+- 🚫 Deprecated FTP proxy support
+- 📚 BiDi enhancements:
+    - `OnHistoryUpdated` event
+    - AcceptInsecureCerts & Proxy in user context
+    - Implicit screenshot-to-bytes conversion
+    - Protected DTOs from inheritance
+- 🧹 Cleanup:
+    - Namespace simplifications
+    - Removed StyleCop config
+
+### JavaScript
+
+- 📢 Warning added when FTP proxy is used
+- 💡 Declared minimum required Node.js version: `>= 20.0.0`
+
+### Grid
+- 🧪 Grid UI updated to Node 20 for type compatibility
+- 🧰 New built-in slot selector: `GreedySlotSelector`
+- 🧹 UI cleanup: session deletion, log level validation
+
+### Ruby
+
+- 🧑‍💻 Added macOS key mappings (Option/Fn)
+- ⚠️ Deprecated FTP proxy support
+- 🛠 Fixed child process termination handling
+
+### Rust (Selenium Manager)
+
+- 🖥️ Added **Electron** browser support
+- 🔧 Fixed Edge version test logic
+- Electron support.
+
+### Docker Selenium
+
+- K8s: Distributor uses Greedy as slot selector strategy in autoscaling ([#2875](https://github.com/SeleniumHQ/docker-selenium/pull/2875))
+- K8s: Fix video uploader secrets pass to Node single container ([#2886](https://github.com/SeleniumHQ/docker-selenium/pull/2886))
+- Docker: Update dependencies version for CVEs fix
+- Docker: Enable `SE_NODE_ENABLE_MANAGED_DOWNLOADS` in Node config by default ([#2869](https://github.com/SeleniumHQ/docker-selenium/pull/2869))
+- Docker: Session created in Node container can be deleted on UI by default ([#2871](https://github.com/SeleniumHQ/docker-selenium/pull/2871))
+- Docker: Environment variable flag to upgrade latest version of Chrome and ChromeDriver in container ([#2872](https://github.com/SeleniumHQ/docker-selenium/pull/2872))
+- [See all changes](https://github.com/SeleniumHQ/docker-selenium/releases)
+
+
+<br>
+
+We thank all our contributors for their incredible efforts in making Selenium better with every
+release. ❤️
+
+For a detailed look at all changes, check out
+the [release notes](https://github.com/SeleniumHQ/selenium/releases/tag/selenium-4.34.0).
+
+<br>
+
+## Contributors
+
+**Special shout-out to everyone who helped the Selenium Team get this release out!**
+
+### [Selenium](https://github.com/SeleniumHQ/selenium)
+
+<div class="d-flex justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/AB-xdev" >}}
+{{< gh-user "https://api.github.com/users/Bradltr95" >}}
+{{< gh-user "https://api.github.com/users/Delta456" >}}
+{{< gh-user "https://api.github.com/users/LuisOsv" >}}
+{{< gh-user "https://api.github.com/users/ShauryaDusht" >}}
+{{< gh-user "https://api.github.com/users/adolfoarmas" >}}
+{{< gh-user "https://api.github.com/users/asolntsev" >}}
+{{< gh-user "https://api.github.com/users/iampopovich" >}}                                                                                                                                                                 
+{{< gh-user "https://api.github.com/users/manuelsblanco" >}}                                                                                                                                                               
+{{< gh-user "https://api.github.com/users/pallavigitwork" >}}                                                                                                                                                              
+{{< gh-user "https://api.github.com/users/sandeepsuryaprasad" >}}                                                                                                                                                          
+    </div>
+  </div>
+</div>
+
+### [Selenium Docs & Website](https://github.com/SeleniumHQ/seleniumhq.github.io)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/ShinySaana" >}}
+{{< gh-user "https://api.github.com/users/alaahong" >}}
+{{< gh-user "https://api.github.com/users/ivonnegattringer" >}}
+{{< gh-user "https://api.github.com/users/navin772" >}}
+{{< gh-user "https://api.github.com/users/noritaka1166" >}}
+{{< gh-user "https://api.github.com/users/pallavigitwork" >}}
+    </div>
+  </div>
+</div>
+
+### [Docker Selenium](https://github.com/SeleniumHQ/docker-selenium)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/KyriosGN0" >}}
+{{< gh-user "https://api.github.com/users/cgoldberg" >}}
+    </div>
+  </div>
+</div>
+
+### [Selenium Team Members][team]
+
+**Thanks as well to all the team members who contributed to this release:**
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/aguspe" >}}
+{{< gh-user "https://api.github.com/users/AutomatedTester" >}}
+{{< gh-user "https://api.github.com/users/bonigarcia" >}}
+{{< gh-user "https://api.github.com/users/cgoldberg" >}}
+{{< gh-user "https://api.github.com/users/diemol" >}}
+{{< gh-user "https://api.github.com/users/harsha509" >}}
+{{< gh-user "https://api.github.com/users/joerg1985" >}}
+{{< gh-user "https://api.github.com/users/nvborisenko" >}}
+{{< gh-user "https://api.github.com/users/p0deje" >}}
+{{< gh-user "https://api.github.com/users/pujagani" >}}
+{{< gh-user "https://api.github.com/users/RenderMichael" >}}
+{{< gh-user "https://api.github.com/users/shbenzer" >}}
+{{< gh-user "https://api.github.com/users/shs96c" >}}
+{{< gh-user "https://api.github.com/users/titusfortner" >}}
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+    </div>
+  </div>
+</div>
+
+
+
+Stay tuned for updates by following SeleniumHQ on:
+
+- [Mastodon](https://mastodon.social/@seleniumHQ@fosstodon.org)
+- [BlueSky](https://bsky.app/profile/seleniumconf.bsky.social)
+- [LinkedIn](https://www.linkedin.com/company/selenium/)
+- [Selenium Community YouTube Channel](https://www.youtube.com/@SeleniumHQProject/streams)
+- [X (Formerly Twitter)](https://twitter.com/seleniumhq)
+
+Happy automating!
+
+[downloads]: /downloads
+
+[bindings]: /downloads#bindings
+
+[team]: /project/structure
+
+[BiDi]: https://github.com/w3c/webdriver-bidi
diff --git a/website_and_docs/content/blog/2025/selenium-4-35-released.md b/website_and_docs/content/blog/2025/selenium-4-35-released.md
new file mode 100644
index 000000000000..61fa2919575f
--- /dev/null
+++ b/website_and_docs/content/blog/2025/selenium-4-35-released.md
@@ -0,0 +1,220 @@
+---
+title: "Selenium 4.35 Released!"
+linkTitle: "Selenium 4.35 Released!"
+date: 2025-08-12
+tags: [ "selenium" ]
+categories: [ "releases" ]
+author: Diego Molina [@diemol](https://www.diemol.com)
+images:
+  - "/images/blog/2025/selenium_4.35.jpg"
+description: >
+  Today we're happy to announce that Selenium 4.35 has been released!
+---
+
+We’re excited to announce the release of **Selenium 4.35** for Javascript, Ruby, Python, .NET, Java
+and the Grid! 🎉
+
+Links to all assets can be found on our [downloads page][downloads].
+
+
+---
+
+## 🔦 Highlights
+
+- **Chrome DevTools support** is now: v139, v138, and v137.
+- **BiDi Improvements Across Bindings**: Expanded BiDi support including emulation, input, script execution, and user context enhancements.
+- **Java Cleanup and JSpecify Annotations**: Deprecated APIs removed and comprehensive `@Nullable` annotations added for better type safety.
+- **Grid Performance Enhancements**: Improved logging, reduced redundancy, race condition fixes, and migration from Guava to Caffeine.
+- **Better Proxy and Network Handling**: Support for `SameSite=default`, IPv6 improvements, and fixes for proxy authentication and WebView2.
+- **Logging Improvements**: Driver logs in .NET are more structured and can output to console or file with timestamps.
+
+---
+
+## 🧪 Language-specific Updates
+
+### Java
+
+- 🔧 Added support for:
+  - BiDi emulation module
+  - `SameSite=default` for cookies
+  - Shadow DOM element normalization
+- 🧹 Major cleanup of deprecated classes:
+  - `LocationContext`, `WebStorage`, `FirefoxBinary`, `SessionStorage`, `AppCacheStatus`, and more
+- ✅ Enhanced test coverage: `--connect-existing` WebSocket check
+- 📝 Added JSpecify `@Nullable` annotations across all driver services and locator classes
+- 🧼 Memory/resource improvements:
+  - Released `HttpClient` resources
+  - Removed unused internal classes
+
+### Python
+
+- 🧠 BiDi enhancements:
+  - Implemented input and emulation modules
+  - Added `pin`, `unpin`, and `execute` for scripts
+  - Supported `accept_insecure_certs`, `proxy`, and `unhandled_prompt_behavior` in user context
+- 🔧 Improved handling for:
+  - Proxy authentication with special characters
+  - WebView2 + CDP/BiDi compatibility
+  - Vendor prefix fix for Edge
+- 📦 Loosened dependency for `urllib3`, and included IPv6 support for `free_port()`
+- 📚 API documentation improvements, including nightly builds and license notices
+
+### .NET
+
+- 💡 Logging Enhancements:
+  - Timestamps for Chromium-based browser logs
+  - GeckoDriver log file support
+  - Default log level now `WARN`
+  - Console output support for all drivers
+- 🧠 BiDi enhancements:
+  - Exposed internal methods and new result types
+  - User context supports `UnhandledPromptBehavior`, `proxy`, `accept_insecure_certs`
+  - Tree and Emulation modules added
+- 🧹 Cleanup:
+  - Removed long-deprecated members
+  - Reduced internal tracing noise
+- 🔄 Native packaging for Selenium Manager
+- 🌐 IPv6 support for port allocation
+
+### JavaScript
+
+- 🧪 BiDi:
+  - Stability fix for flaky cookie network test
+  - Skip FedCM tests until Chrome 140
+- ⚠️ Added `SameSite=default` cookie support
+- 🔄 Dependency updates (`typescript`, `@emotion/styled`)
+
+### Ruby
+
+- 🔒 Guarded support for Firefox Beta
+- 🚫 Removed deprecated local/session storage APIs
+- 🆗 Allowed use of `rubyzip` v3
+- ✂️ Excluded Rakefile from line-length linter
+- ⚠️ Added support for `SameSite=default`
+
+### Rust (Selenium Manager)
+
+- 🧪 Updated base URL for Edge WebDriver
+- ⬆️ Dependency upgrades (`zip`, `rstest`, `which`, Bazel lock files)
+- 🔧 Improved architecture normalization for Plausible analytics
+
+### Grid
+
+- 🔁 Performance and logging improvements:
+  - Reduced duplicate logs
+  - Improved node health checks
+  - Better session map handling and retry queue management
+- 🧰 Switched from Guava’s CacheBuilder to Caffeine
+- 🧪 New UI sorting option by URI
+
+
+### 🐳 Docker Selenium
+
+- K8s: Add config for over-provision ratio in autoscaling deployment of Nodes ([#2930](https://github.com/SeleniumHQ/docker-selenium/pull/2930))
+- Docker: Distributor uses Greedy as the slot selector strategy default in Hub-Node and Standalone mode ([#2915](https://github.com/SeleniumHQ/docker-selenium/pull/2915))
+- Docker: Update Google Noto font family to support better language character displays ([#2914](https://github.com/SeleniumHQ/docker-selenium/pull/2914))
+- [See all changes](https://github.com/SeleniumHQ/docker-selenium/releases)
+
+
+<br>
+
+We thank all our contributors for their incredible efforts in making Selenium better with every
+release. ❤️
+
+For a detailed look at all changes, check out
+the [release notes](https://github.com/SeleniumHQ/selenium/releases/tag/selenium-4.35.0).
+
+<br>
+
+## Contributors
+
+**Special shout-out to everyone who helped the Selenium Team get this release out!**
+
+### [Selenium](https://github.com/SeleniumHQ/selenium)
+
+<div class="d-flex justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/Earlopain" >}}
+{{< gh-user "https://api.github.com/users/asolntsev" >}}
+{{< gh-user "https://api.github.com/users/iampopovich" >}}
+{{< gh-user "https://api.github.com/users/jameshilliard" >}}
+{{< gh-user "https://api.github.com/users/mk868" >}}
+{{< gh-user "https://api.github.com/users/musicinmybrain" >}}
+{{< gh-user "https://api.github.com/users/navin772" >}}
+{{< gh-user "https://api.github.com/users/noritaka1166" >}}
+{{< gh-user "https://api.github.com/users/nxs7" >}}
+{{< gh-user "https://api.github.com/users/pallavigitwork" >}}
+{{< gh-user "https://api.github.com/users/sandeepsuryaprasad" >}}
+    </div>
+  </div>
+</div>
+
+### [Selenium Docs & Website](https://github.com/SeleniumHQ/seleniumhq.github.io)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/alaahong" >}}
+{{< gh-user "https://api.github.com/users/pallavigitwork" >}}
+    </div>
+  </div>
+</div>
+
+### [Docker Selenium](https://github.com/SeleniumHQ/docker-selenium)
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/KyriosGN0" >}}
+{{< gh-user "https://api.github.com/users/amardeep2006" >}}
+{{< gh-user "https://api.github.com/users/anwaramoon" >}}
+    </div>
+  </div>
+</div>
+
+### [Selenium Team Members][team]
+
+**Thanks as well to all the team members who contributed to this release:**
+
+<div class="row justify-content-center">
+  <div class="col-11 p-4 bg-transparent">
+    <div class="row justify-content-center">
+{{< gh-user "https://api.github.com/users/aguspe" >}}
+{{< gh-user "https://api.github.com/users/AutomatedTester" >}}
+{{< gh-user "https://api.github.com/users/bonigarcia" >}}
+{{< gh-user "https://api.github.com/users/cgoldberg" >}}
+{{< gh-user "https://api.github.com/users/diemol" >}}
+{{< gh-user "https://api.github.com/users/harsha509" >}}
+{{< gh-user "https://api.github.com/users/joerg1985" >}}
+{{< gh-user "https://api.github.com/users/nvborisenko" >}}
+{{< gh-user "https://api.github.com/users/p0deje" >}}
+{{< gh-user "https://api.github.com/users/pujagani" >}}
+{{< gh-user "https://api.github.com/users/RenderMichael" >}}
+{{< gh-user "https://api.github.com/users/shbenzer" >}}
+{{< gh-user "https://api.github.com/users/shs96c" >}}
+{{< gh-user "https://api.github.com/users/titusfortner" >}}
+{{< gh-user "https://api.github.com/users/VietND96" >}}
+    </div>
+  </div>
+</div>
+
+
+
+Stay tuned for updates by following SeleniumHQ on:
+
+- [Mastodon](https://mastodon.social/@seleniumHQ@fosstodon.org)
+- [BlueSky](https://bsky.app/profile/seleniumconf.bsky.social)
+- [LinkedIn](https://www.linkedin.com/company/selenium/)
+- [Selenium Community YouTube Channel](https://www.youtube.com/@SeleniumHQProject/streams)
+- [X (Formerly Twitter)](https://twitter.com/seleniumhq)
+
+Happy automating!
+
+[downloads]: /downloads
+
+[bindings]: /downloads#bindings
+
+[team]: /project/structure
+
+[BiDi]: https://github.com/w3c/webdriver-bidi
diff --git a/website_and_docs/content/blog/2025/selenium-appium-conference-2025.md b/website_and_docs/content/blog/2025/selenium-appium-conference-2025.md
new file mode 100644
index 000000000000..6edaaba66946
--- /dev/null
+++ b/website_and_docs/content/blog/2025/selenium-appium-conference-2025.md
@@ -0,0 +1,39 @@
+---
+title: "Selenium Conference and Appium Conference 2025, Valencia Spain"
+linkTitle: "Selenium Conference Appium Conference 2025 Valencia Spain"
+date: 2025-04-21
+tags: ["conference", "selenium","appium", "web driver ecosystem", "valencia", "spain"]
+categories: ["conference"]
+author: <a href="https://www.linkedin.com/in/musepallavi/" target="_blank">Pallavi Sharma</a>
+images:
+description: >
+  Selenium Conference and Appium Conference 2025, Valencia Spain
+---
+
+Selenium and Appium projects joined hands together for the 2025 annual conference of both, which was held from March 26th - March 28th in Valencia, Spain. The official web page of the conference can be found **<a href="https://seleniumconf.com/" target="_blank">here</a>**
+
+The event took place at the beautiful venue of **<a href="https://veleseventsvalencia.es/" target="_blank">Veles e Vents</a>**.  
+
+On March 26th, there were **<a href="https://seleniumconf.com/workshops/" target="_blank">Workshops</a>**, which were enthusiastically attended by participants from across the globe. On the 26th March evening, the conference organised Speaker's Dinner, which provided a fun space to sit, talk and know other better. 
+
+We are thankful to our esteemed speaker group, who joined us from all over the world and helped make the event a success. Details about the speakers for the event is available here -  **<a href="https://seleniumconf.com/speakers/" target="_blank">Speakers of the Conference</a>**
+
+The main event started from 27th of March and ran through 28th March evening. The event was attended by close to 400 global participants. We are thankful to each of them, for their presence which made the event worthwhile. 
+
+Conference also provided scholarship to 4 people who were chosen after a tough selection process to attend the conference. We thank all our **<a href="https://seleniumconf.com/sponsor/" target="_blank">Sponsors</a>** who collaborated and helped make the event possible. 
+
+The video recording, presentations and photographs from the main event can be found here - **<a href="https://seleniumconf.com/recordings-and-slides/" target="_blank">Videos, Photos and More..</a>**
+
+Conference, also ran Pre Conference webinars which helped showcase high rated talks which couldn't make it to the end program to the audience. The details of the same are available here - **<a href="https://www.youtube.com/@seleniumconf/streams" target="_blank">Pre Conference Webinars</a>**
+
+The conference program chair was **<a href="https://www.linkedin.com/in/diemol/" target="_blank">Diego Molina</a>**. Diego helmed all the activities of the conference with great leadership and meticulous supervision. 
+
+The conference was supported by a wide group of professionals who participated in volunteer capacity as reviewers and organizers of the event. 
+More details about them can be found here - **<a href="https://seleniumconf.com/about/" target="_blank">Organizers & Program Review Committee  </a>**. 
+
+The entire event was professionally managed by the event organiser company **<a href="https://www.linkedin.com/company/onestic/" target="_blank">OneStic</a>**. They ensured smooth flow of the event. Special mention to **<a href="https://www.linkedin.com/in/jesus-sanchez-martinez-89a62953/" target="_blank">Jesus Sanchez</a>**  for going out of the way to ensure everyone was well taken care of. 
+
+
+## Subscribe to Official Selenium Conference YouTube Channel 
+To explore more about our previous conferences and the next ones don't forget to subscribe to our official You Tube Channel **<a href="https://www.youtube.com/@seleniumconf/featured" target="_blank">Selenium Conference Official YouTube Channel.</a>**  
+
diff --git a/website_and_docs/content/blog/2025/selenium-community-live-episode2.md b/website_and_docs/content/blog/2025/selenium-community-live-episode2.md
new file mode 100644
index 000000000000..f713b6686c6a
--- /dev/null
+++ b/website_and_docs/content/blog/2025/selenium-community-live-episode2.md
@@ -0,0 +1,35 @@
+---
+title: "Selenium Community Live - Episode 2"
+linkTitle: "Selenium Community Live - Episode 2"
+date: 2025-01-21
+tags: ["webinar", "meetup", "talks","community"]
+categories: ["webinar"]
+author: <a href="https://www.linkedin.com/in/musepallavi/" target="_blank">Pallavi Sharma</a>
+images:
+description: >
+  Selenium Community Live - Episode 2
+---
+
+The second episode of Selenium Community Live happened on Jan 21st, 2025, with speaker **<a href="https://www.linkedin.com/in/theautomatedtester/" target="_blank">David Burns</a>**, event hosted by  **<a href="https://www.linkedin.com/in/musepallavi/" target="_blank">Pallavi Sharma</a>**
+
+You can watch the episode here-  **<a href="https://www.youtube.com/watch?v=0W_rYPxVIgA" target="_blank">Selenium Community Live - Episode 2</a>**
+
+**Selenium Community Live - Episode 2**
+
+David Burns, Selenium Project Leadership Member, Chair W3C Browser Testing and Tools Workgroup, Head Open source and Developer Advocacy at Browser Stack was the speaker for the episode. David spoke about Web Browsers and Browser engines, and how while automating them we should be aware of the underlying software we are automating, even the platform makes a difference! 
+Thank you everyone who joined the community event. 
+
+**Meet the Speakers:**
+
+1. **<a href="https://www.linkedin.com/in/theautomatedtester/" target="_blank">David Burns</a>** 
+
+
+## Watch the Recording
+
+Couldn’t join us live? Watch the entire episode here -
+📹 Recording Link: [Watch the Event Recording on YouTube](https://www.youtube.com/watch?v=0W_rYPxVIgA)
+
+David also runs a blog, and if you are interested in knowing internals of Selenium explore the link - 
+**<a href="https://www.theautomatedtester.co.uk/blog/how-selenium-works-transport/" target="_blank">Blog By David</a>** 
+
+Stay tuned as we bring the next! **<a href="https://www.youtube.com/@SeleniumHQProject/" target="_blank">Subscribe here to the Selenium HQ Official YouTube Channel.</a>**  
diff --git a/website_and_docs/content/blog/2025/selenium-community-live-episode4.md b/website_and_docs/content/blog/2025/selenium-community-live-episode4.md
new file mode 100644
index 000000000000..e647aa3dc7a0
--- /dev/null
+++ b/website_and_docs/content/blog/2025/selenium-community-live-episode4.md
@@ -0,0 +1,40 @@
+---
+title: "Selenium Community Live - Episode 4"
+linkTitle: "Selenium Community Live - Episode 4"
+date: 2025-03-19
+tags: ["webinar", "meetup", "talks","community"]
+categories: ["webinar"]
+author: <a href="https://www.linkedin.com/in/musepallavi/" target="_blank">Pallavi Sharma</a>
+images:
+description: >
+  Selenium Community Live - Episode 4
+---
+
+The fourth episode of Selenium Community Live happened on March 19th, 2025, with speaker **<a href="https://www.linkedin.com/in/mdmintz/" target="_blank">Michael Mintz</a>**, event hosted by  **<a href="https://www.linkedin.com/in/musepallavi/" target="_blank">Pallavi Sharma</a>**
+
+You can watch the episode on YouTube here-  **<a href="https://youtube.com/live/FSH712hhHvo?feature=share" target="_blank">Episode 4 on YouTube</a>**
+or
+You can watch the episode on LinkedIn here-  **<a href="https://www.linkedin.com/events/seleniumcommunitylive-episode47301014781094678530/theater/" target="_blank">Episode 4 on LinkedIn</a>**
+
+**Selenium Community Live - Episode 4**
+
+Michael Mintz is creator of Selenium Base, an all in one Browser Automation Framework, built over Selenium WebDriver Python bindings. The framework is well known and used
+in the WebDriver Ecosystem community for testing, web scraping, web crawling and stealth purposes. 
+You can find out more about Selenium Base here - **<a href="https://seleniumbase.io/" target="_blank">Selenium Base</a>** 
+
+
+**Meet the Speakers:**
+
+1. **<a href="https://www.linkedin.com/in/mdmintz/" target="_blank">Michael Mintz</a>** 
+
+
+## Watch the Recording
+
+Couldn’t join us live? Watch the entire episode here -
+📹 Recording Link: [Watch the Event Recording on YouTube](https://youtube.com/live/FSH712hhHvo?feature=share)
+
+To know more about Selenium Base, please follow the link
+**<a href="https://seleniumbase.io/help_docs/thank_you/" target="_blank">Explore more on Selenium Base</a>** 
+
+In case you were wondering what happened to episode 3, it was cancelled but will be scheduled in coming weeks. Thank you!
+Stay tuned as we bring the next! **<a href="https://www.youtube.com/@SeleniumHQProject/" target="_blank">Subscribe here to the Selenium HQ Official YouTube Channel.</a>**  
diff --git a/website_and_docs/content/blog/2025/selenium-community-live-episode5.md b/website_and_docs/content/blog/2025/selenium-community-live-episode5.md
new file mode 100644
index 000000000000..9646d6dd157a
--- /dev/null
+++ b/website_and_docs/content/blog/2025/selenium-community-live-episode5.md
@@ -0,0 +1,97 @@
+---
+title: "Selenium Community Live - Episode 5"
+linkTitle: "Selenium Community Live - Episode 5"
+date: 2025-05-05
+tags: ["webinar", "meetup", "talks","community"]
+categories: ["webinar"]
+author: <a href="https://www.linkedin.com/in/pujajagani/">Puja Jagani</a>
+images:
+description: >
+  Selenium Community Live - Episode 5
+---
+
+The fifth episode of Selenium Community Live happened on April 25th 2025. 
+
+The event featured speakers **<a href="https://www.linkedin.com/in/ashleyhunsberger/" target="_blank">Ashley Hunsberger </a>**, Director at NBCUniversal with close to 25 years of industry experience and a long-time friend of the Selenium, alongside **<a href="https://www.linkedin.com/in/pujajagani/">Puja Jagani</a>**, Open Source Engineer & Developer Advocate at BrowserStack and member of the Selenium leadership(TLC and PLC). The event was hosted by 
+**<a href="https://www.linkedin.com/in/musepallavi/" target="_blank">Pallavi Sharma</a>**, Founder 5 Elements Learning and a long-time Selenium Committer. 
+
+The theme of the community event was "Beyond Code: Understanding Developer Satisfaction in Open Source Contributions".
+ 
+While many discussions around open source have happened that focus on code contributions and technical aspects, there is a vital human element involved, something that keeps the contributions rolling for decades, i.e. developer satisfaction. This community event was dedicated to discussing the human factor in open source contributions. The speakers shared their insights and experience on developer satisfaction in open source. 
+
+### What motivates Open Source contributors?
+
+Ashley’s LinkedIn states that "My driving principle is simple: people first" and building on that, Ashley and Puja both highlight that open source is "by the community, for the community," where collaboration and human connections are foundational motivating factors for them.
+
+Ashley shares her journey with Selenium, highlighting how the warm, caring community has helped her build genuine friendships and good memories.
+
+"In the end, do people really remember what we build? They're going to remember how we made them feel." - Ashley Hunsberger
+
+She states that for her, a main motivational factor is community, and what she thinks drives people is the altruistic purpose of giving back to the community beyond their organisation and serving a great purpose. According to her, motivation drives behaviour, and if you have clear motivation, that will drive your place in the community in the long run.
+
+Beyond altruism, Puja thinks there is a diversity of motivators, emphasising that contributions extend far beyond code. Contributions might include:
+- Helping with documentation
+- Managing continuous integration (CI) pipelines
+- Handling legal, and financial aspects, and other administrative aspects
+- Organising conferences,  community events, and meetups.
+
+These roles are often in the spotlight but critical to the health and growth of open source projects.  A huge spectrum of motivators drives people’s behaviour and keeps the open source project breathing and growing.
+
+### No single factor that contributes to developer satisfaction
+
+Ashley brings a unique perspective to the idea that developer satisfaction can be understood through the lens of the Job Characteristics Model. This model outlines key aspects of work that lead to positive outcomes such as retention, motivation, and job satisfaction.
+
+Key factors include:
+- Skill Variety: Open source contributors engage in a wide range of skills, from coding to release engineering, documentation, and advocacy.
+- Task Identity: Contributors often see their work through from start to finish, building and shipping features that users directly benefit from.
+- Task Significance: Understanding the impact and value of their contributions motivates developers to continue their work.
+- Autonomy: Contributors enjoy flexibility in how, when, and where they contribute, within the project's guidelines.
+- Feedback: Constructive feedback loops help contributors improve and feel connected to the community.
+
+These elements combine to foster long-term satisfaction.
+
+### The Evolution of Motivation in Open Source 
+
+Puja shared her own journey with Selenium, from initially feeling nervous about contributing to becoming a part of the technical leadership. Initially, simple contributions like fixing a bug brought immense satisfaction. Over time, the motivation evolved to include community appreciation and the visible impact of her work on the end users of Selenium. She recounts a meaningful interaction at a recent conference where an attendee thanked her for contributing to Selenium, highlighting how such moments validate and inspire ongoing commitment.
+
+### Handling Conflict in Open Source 
+
+Ashley and Puja acknowledged that interactions on platforms like GitHub or chat channels can include harsh or unexpected comments or the project itself can have some differences of opinion. And this could be largely due to the diverse background of people, any open source project experiences. This difference of opinion and thought diversity is what makes the group awesome, but certain situations need to be resolved with care.
+
+Ashley shares her first experience receiving a non-constructive code review and emphasises the importance of kindness and clarity in feedback:
+"Be kind, but clear. Clear is kind. You don't have to be nice, but be clear about what happened, why, and how to improve." - Ashley Hunsberger
+
+Effective conflict resolution involves open questions, understanding the intent, and focusing on shared goals. It’s important to remember that conflicts are natural in any group, but they can be handled constructively with the key focus being on what is important for the situation. It is also essential to make sure an open source project has a code of conduct that is implemented in such situations and that the community is aware they have a safe space to report their issue and that they will be heard.
+
+### Inclusivity 
+
+Ashley distinguishes between mentorship and sponsorship as two pillars of inclusion:
+- Mentorship: Providing advice, guidance, and support to help someone grow and navigate the community.
+- Sponsorship: Actively advocating for someone, opening doors, and recommending them for opportunities
+
+Ashley further discussed that inclusivity needs to be beyond code. Such as ensuring inclusive language and removing any barriers of entry for new contributors. The key focus should be on building an inclusive environment and creating a welcoming space for new contributors and the community.
+
+### Overcoming Impostor Syndrome
+
+Impostor syndrome is a common challenge for developers, especially when engaging in large, visible open-source projects. Ashley shares candidly about her struggles and offers practical advice when Pallavi asked her to share her insights on how to enable people to overcome impostor syndrome. Ashley shares the following 
+- Be kind to yourself and reframe negative thoughts. Add "yet" to statements like "I don’t know how to do this... yet."
+- Recognise that many others share the same fears and questions.
+- Build a support network of trusted friends, mentors, and peers who understand your journey.
+- Use tools like worksheets to identify negative thinking patterns and consciously reframe them.
+- Focus on facts about your skills and contributions rather than self-doubt.
+
+These strategies can help contributors maintain confidence in their open-source journey. 
+
+Next they discussed how open source projects can help people, and here the importance of visibility and recognition in sustaining open source motivation was emphasised. Seeing the direct impact of one’s work, whether through download statistics, user feedback, or conference stories, reinforces the value of contributions. Whether you are a seasoned contributor or a newcomer, reflecting on the above areas can hopefully help you foster a more satisfying developer experience. 
+
+Selenium is now entering its 21st year of existence, has had contributors spanning across various time zones, geographies and areas of expertise. With nearly 800 contributors over two decades, we take this moment to express gratitude to each of them. Through continuous feedback and meaningful interaction with the community, Selenium remains dedicated to work towards a healthier developer satisfaction. 
+
+## Watch the Recording
+
+Couldn’t join us live? Watch the entire episode!
+
+You can watch the episode on YouTube here-  **<a href="https://www.youtube.com/watch?v=rjICuc8JcYU&t=1s&ab_channel=SeleniumHQProject " target="_blank">Episode 5 on YouTube</a>**
+or
+you can watch the episode on LinkedIn here-  **<a href="https://www.linkedin.com/events/seleniumcommunitylive-episode57315712465407733761/" target="_blank">Episode 5 on LinkedIn</a>**.
+
+Stay tuned as we bring the next! **<a href="https://www.youtube.com/@SeleniumHQProject/" target="_blank">Subscribe here to the Selenium HQ Official YouTube Channel.</a>** 
\ No newline at end of file
diff --git a/website_and_docs/content/blog/2025/selenium-community-live-episode6.md b/website_and_docs/content/blog/2025/selenium-community-live-episode6.md
new file mode 100644
index 000000000000..b82605e3dfed
--- /dev/null
+++ b/website_and_docs/content/blog/2025/selenium-community-live-episode6.md
@@ -0,0 +1,39 @@
+---
+title: "Selenium Community Live - Episode 6"
+linkTitle: "Selenium Community Live - Episode 6"
+date: 2025-05-21
+tags: ["webinar", "meetup", "talks","community"]
+categories: ["webinar"]
+author: <a href="https://www.linkedin.com/in/musepallavi/" target="_blank">Pallavi Sharma</a>
+images:
+description: >
+  Selenium Community Live - Episode 6
+---
+
+The sixth episode of Selenium Community Live happened on May 21st, 2025, with speaker **<a href="https://www.linkedin.com/in/i-am-luke-hill/" target="_blank">Luke Hill</a>**, event hosted by  **<a href="https://www.linkedin.com/in/musepallavi/" target="_blank">Pallavi Sharma</a>**
+
+You can watch the episode on YouTube here-  **<a href="https://www.youtube.com/live/48g7sOBHEL0?feature=shared" target="_blank">Episode 6 on YouTube</a>**
+or
+You can watch the episode on LinkedIn here-  **<a href="https://www.linkedin.com/events/seleniumcommunitylive-episode67325906639075581953/theater/" target="_blank">Episode 6 on LinkedIn</a>**
+
+**Selenium Community Live - Episode 6**
+
+Luke Hill is a Lead QA Engineer at Dexters with extensive automation expertise across FinTech, E-Commerce, and Education sectors. A passionate open-source contributor, Luke owns site_prism (a Page Object Gem extending Capybara), serves on the Cucumber technical committee, and is a maintainer of Selenium. Known for his meticulous testing approach and ability to identify challenging edge cases, Luke consistently helps teams deliver more reliable code. His technical expertise in both frontend and backend testing makes him a valuable voice in the QA community.
+
+Luke GitHub Profile is here - **<a href="https://github.com/luke-hill" target="_blank">Luke's GitHub</a>** 
+
+
+**Meet the Speakers:**
+
+1. **<a href="https://www.linkedin.com/in/i-am-luke-hill/" target="_blank">Luke Hill</a>** 
+
+
+## Watch the Recording
+
+Couldn’t join us live? Watch the entire episode here -
+📹 Recording Link: [Watch the Event Recording on YouTube](https://www.youtube.com/live/48g7sOBHEL0?feature=shared)
+
+To know more about Site Prism, please follow the link
+**<a href="https://github.com/site-prism/site_prism" target="_blank">Site Prism</a>** 
+
+Stay tuned as we bring the next! **<a href="https://www.youtube.com/@SeleniumHQProject/" target="_blank">Subscribe here to the Selenium HQ Official YouTube Channel.</a>**  
diff --git a/website_and_docs/content/blog/2025/selenium-community-live-episode7.md b/website_and_docs/content/blog/2025/selenium-community-live-episode7.md
new file mode 100644
index 000000000000..7bdb4360fa1b
--- /dev/null
+++ b/website_and_docs/content/blog/2025/selenium-community-live-episode7.md
@@ -0,0 +1,36 @@
+---
+title: "Selenium Community Live - Episode 7"
+linkTitle: "Selenium Community Live - Episode 7"
+date: 2025-07-01
+tags: ["webinar", "meetup", "talks","community"]
+categories: ["webinar"]
+author: <a href="https://www.linkedin.com/in/musepallavi/" target="_blank">Pallavi Sharma</a>
+images:
+description: >
+  Selenium Community Live - Episode 7
+---
+
+The seventh episode of Selenium Community Live happened on June 19th, 2025, with speaker **<a href="https://www.linkedin.com/in/christian-bromann/" target="_blank">Christian Bromann</a>**, event was hosted by  **<a href="https://www.linkedin.com/in/musepallavi/" target="_blank">Pallavi Sharma</a>**
+
+You can watch the episode on YouTube here-  **<a href="https://www.youtube.com/live/zrQRWi9Gpdg" target="_blank">Episode 7 on YouTube</a>**
+or
+You can watch the episode on LinkedIn here-  **<a href="https://www.linkedin.com/events/seleniumcommunitylive-episode77333058939518930944/theater/" target="_blank">Episode 7 on LinkedIn</a>**
+
+**Selenium Community Live - Episode 7**
+
+Christian Bromann is a seasoned software engineer currently working at OutSystems where he contributes to the StencilJS project, a popular web component framework. He's the driving force behind WebdriverIO, a leading test automation framework that has revolutionized browser testing for countless development teams worldwide.
+
+Christian's GitHub Profile is here - **<a href="https://github.com/christian-bromann" target="_blank">GitHub Profile</a>** 
+
+
+**Meet the Speakers:**
+
+1. **<a href="https://www.linkedin.com/in/christian-bromann/" target="_blank">Christian Bromann</a>** 
+
+
+## Watch the Recording
+
+Couldn’t join us live? Watch the entire episode here -
+📹 Recording Link: [Watch the Event Recording on YouTube](https://www.youtube.com/live/zrQRWi9Gpdg)
+
+Stay tuned as we bring the next! **<a href="https://www.youtube.com/@SeleniumHQProject/" target="_blank">Subscribe here to the Selenium HQ Official YouTube Channel.</a>**  
diff --git a/website_and_docs/content/blog/2025/selenium-community-live-episode8.md b/website_and_docs/content/blog/2025/selenium-community-live-episode8.md
new file mode 100644
index 000000000000..32baa452b1d1
--- /dev/null
+++ b/website_and_docs/content/blog/2025/selenium-community-live-episode8.md
@@ -0,0 +1,101 @@
+---
+title: "Selenium Community Live - Episode 8"
+linkTitle: "Selenium Community Live - Episode 8"
+date: 2025-07-30
+tags: ["webinar", "meetup", "talks","community"]
+categories: ["webinar"]
+author: <a href="https://www.linkedin.com/in/musepallavi/" target="_blank">Pallavi Sharma</a>
+images:
+description: >
+  Selenium Community Live - Episode 8
+---
+
+
+Episode 8 of Selenium Community Live with Dorothy Graham took place on July 30th, 2025. During this remarkable session, Graham a legend with 50+ years in software testing, shared incredible insights from her journey through the evolution of test automation. Her perspective reveals timeless truths that modern teams often overlook.
+
+**Meet the Speakers:**
+
+1. **<a href="https://www.linkedin.com/in/dorothygraham/" target="_blank">Dorothy Graham</a>** 
+
+Let's dive into session notes.
+
+**From Mainframes to Smartphones: The Incredible Journey**
+
+Graham's automation story began in 1970 at Bell Labs, working on a UNIVAC 1108 mainframe that cost $1.6 million (equivalent to $15 million today). The specifications, 1.3 megahertz, half a megabyte of RAM, and 100 megabytes of storage. Her iPhone today has 12,000 times more storage and costs 20,000 times less. Back then, you would write code on paper, punch it onto cards, and get maybe one turnaround per day. A single typo meant starting over tomorrow.
+This dramatic shift in just 50 years raises the question: what will the next 50 years bring?
+
+**The Evolution of Testing Tools: From Commercial to Open Source**
+
+Graham witnessed the dramatic transformation of testing tools over decades. The first commercial tool, AutoTester, appeared in 1985, followed by an explosion of tools in the 80s and 90s. The CAST (Computer Aided Software Testing) report eventually documented 103 different tools, yet when she recently checked, only three were still alive. What happened to all those tools? They disappeared, reminding us that tools come and go, but principles endure.
+Enter Selenium in 2004, a game-changer as an open-source tool that broke the expensive commercial tool monopoly. Graham congratulated the community: "Selenium has been around for over 20 years. That's really good." Its longevity stems from community support, continuous evolution, and freedom from licensing costs.
+However, Graham warns: "The fact that you don't have to pay purchase or licensing costs doesn't mean it doesn't need investment." Free tools still require proper architecture, training, and skilled implementation. She stresses, this as a reminder to people in management making decisions. 
+
+**What Test Automation Shouldn't Look Like**
+
+Graham's most compelling insight involves what not to do in automation. She shares Steven Norman's brilliant analogy:
+Imagine recording your drive to work, then pressing play the next day. You would reverse into traffic that wasn't there yesterday, stop at green lights because they were red yesterday, and run red lights because they turned green yesterday.
+She mentions, Testing isn't passive observation, it's active investigation.
+Graham also emphasizes: "Testing is something you do. It's not passive. It's active." This is why capture-replay approaches fundamentally misunderstand what good testing requires.
+
+**EuroSTAR Survey Insights: The Reality of Test Automation in 2023**
+
+In preparation for her keynote at the EuroSTAR conference in Vienna, Graham conducted a comprehensive survey of 200 automation practitioners that revealed surprising insights:
+
+Encouraging findings:
+
+•	80% use open-source tools.
+
+•	90% test at system level, 72% at API level
+
+•	70% had formal testing training
+
+Concerning discoveries:
+
+•	25% had zero training in their daily tools
+
+•	38% would need to rewrite 95%+ of tests when changing tools
+
+•	Most automated tests mirror manual test structure (which is wrong)
+
+•	Top problem isn't technical, it's unrealistic management expectations
+
+
+if you are interested to learn more about the survey, visit **<a href="https://automation.eurostarsoftwaretesting.com/test-automation-survey/" target="_blank">link</a>**  
+
+**The Forgotten Secrets of Good Automation**
+
+Drawing from her decades as a practitioner, coach, and consultant, Graham shares what she believes are the most overlooked principles in modern test automation. 
+
+1. Effectiveness Before Efficiency
+Graham's first hard-learned lesson: the biggest mistake is automating poor-quality tests just to make them faster.
+
+•	Wrong approach: Poor manual tests → automation → fast, poor automated tests
+
+•	Right approach: Improve test effectiveness first → then automate selectively
+
+She emphasizes: "You will get much better results if you think first about how can we improve our testing. You are better off having better testing than automating testing."
+
+2. Proper Architecture Matters
+Through years of consulting, Graham identified that good automation requires two critical abstraction levels:
+Technical level: Modular, reusable scripts where one manual test becomes multiple automated scripts, and one script serves hundreds of tests. As she notes: "If you have a thousand manual tests, they might be implemented by only 50 scripts together with data files."
+Business level: Domain-specific keywords like "create_new_policy" instead of raw code, enabling skilled testers to write tests without programming. This makes automation accessible to "people who are non-technical who often are the best testers."
+
+**A Special Thank You to Our Community**
+
+This incredible session featured engaging questions from community members whose thoughtful inquiries sparked valuable discussions about management expectations, career paths, AI's impact, and the future of testing skills. Their participation exemplified the collaborative spirit that makes the Selenium community so vibrant.
+
+We extend our heartfelt gratitude to Dorothy Graham for sharing her wealth of knowledge and to all community members who joined Episode 8. 
+
+This session marks the end of Season 1 of Selenium Community Live, a season that began by celebrating two decades of Selenium and concluded with timeless wisdom from one of testing's most respected pioneers.
+
+As we prepare for Season 2, we invite you to stay connected with the Selenium community.
+
+
+## Watch the Recording
+
+Couldn’t join us live? Watch the entire episode here -
+📹 Recording Link: [Watch the Event Recording on YouTube](https://www.youtube.com/live/4WJIt2kybHA?si=wP7vYs7oRcUPxS-e)
+
+Stay tuned as we bring the next! 
+
+**<a href="https://www.youtube.com/@SeleniumHQProject/" target="_blank">Subscribe here to the Selenium HQ Official YouTube Channel.</a>**  
diff --git a/website_and_docs/content/documentation/_index.en.md b/website_and_docs/content/documentation/_index.en.md
index 0313bb1f586b..136db40dc513 100755
--- a/website_and_docs/content/documentation/_index.en.md
+++ b/website_and_docs/content/documentation/_index.en.md
@@ -42,7 +42,7 @@ a browser. You can find a more comprehensive example in [Writing your first Sele
 {{< gh-codeblock path="/examples/dotnet/HelloSelenium.cs" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/hello/hello_selenium_spec.rb" >}}
+{{< gh-codeblock path="/examples/ruby/spec/hello/hello_selenium.rb" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< gh-codeblock path="/examples/javascript/test/hello/helloSelenium.js" >}}
diff --git a/website_and_docs/content/documentation/_index.ja.md b/website_and_docs/content/documentation/_index.ja.md
index a1720d968327..1512d796ef18 100755
--- a/website_and_docs/content/documentation/_index.ja.md
+++ b/website_and_docs/content/documentation/_index.ja.md
@@ -10,11 +10,11 @@ Seleniumはブラウザー自動化を可能にし、それを支えるツール
 
 ユーザーとブラウザーのやり取りのエミュレーション、ブラウザーの割当を増強したり縮減する分散型サーバー、そしてすべてのメジャーなブラウザー用に置換可能なコードの実装を可能にする[W3C WebDriver 仕様](//www.w3.org/TR/webdriver/)インフラの提供します。
 
-このプロジェクトは多くの有志貢献者の何千時間に及ぶ個々の時間を費やした事とソースコード[自由に利用可能]({{< ref "/copyright.md#license" >}})を誰にでも利用、楽しめ、そして改良できることによって実現しました。
+このプロジェクトは多くの有志貢献者の何千時間に及ぶ個々の時間を費やした事とソースコード[自由に利用可能]({{< ref "copyright.md#license" >}})を誰にでも利用、楽しめ、そして改良できることによって実現しました。
 
 Seleniumはウェブプラットフォームの自動化のより開かれた議論をするためブラウザーベンダー、エンジニア、愛好家をまとめます。このプロジェクトはコミュニティーを導きと育成のために[年次カンファレンス](//seleniumconf.com/)開催します。
 
-Seleniumの中核は[WebDriver]({{< ref "/webdriver.md" >}})であり、様々なブラウザーを変えてインストラクション集を実行できるインターフェースです。これは作りえる一番基本的な
+Seleniumの中核は[WebDriver]({{< ref "webdriver.md" >}})であり、様々なブラウザーを変えてインストラクション集を実行できるインターフェースです。これは作りえる一番基本的な
 インストラクションの一つです:
 
 
@@ -29,7 +29,7 @@ Seleniumの中核は[WebDriver]({{< ref "/webdriver.md" >}})であり、様々
 {{< gh-codeblock path="/examples/dotnet/HelloSelenium.cs" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/hello/hello_selenium_spec.rb" >}}
+{{< gh-codeblock path="/examples/ruby/spec/hello/hello_selenium.rb" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< gh-codeblock path="/examples/javascript/test/hello/helloSelenium.js" >}}
diff --git a/website_and_docs/content/documentation/_index.other.md b/website_and_docs/content/documentation/_index.other.md
deleted file mode 100755
index 24e3f9fba7d4..000000000000
--- a/website_and_docs/content/documentation/_index.other.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: "The Selenium Browser Automation Project"
-linkTitle: "Documentation"
-cascade:
-- type: docs
----
-
-{{% pageinfo color="warning" %}}
-<p class="lead">
-   <i class="fas fa-language d-4"></i> 
-   Is there another translation you'd like to see? We're only supporting translations for which we have 
-   a dedicated translator. If you'd like to volunteer to be a translator, read how 
-   <a href="https://www.selenium.dev/getinvolved/#translating_site">you can help</a>.
-</p>
-{{% /pageinfo %}}
diff --git a/website_and_docs/content/documentation/_index.pt-br.md b/website_and_docs/content/documentation/_index.pt-br.md
index 547702f66062..7d92d0f5eb8b 100755
--- a/website_and_docs/content/documentation/_index.pt-br.md
+++ b/website_and_docs/content/documentation/_index.pt-br.md
@@ -24,7 +24,7 @@ para promover uma discussão aberta sobre a automação da plataforma da web.
 O projeto organiza [uma conferência anual](//seleniumconf.com/)
 para ensinar e nutrir a comunidade.
 
-No núcleo do Selenium está [WebDriver]({{< ref "/webdriver.md" >}}),
+No núcleo do Selenium está [WebDriver]({{< ref "webdriver.md" >}}),
 uma interface para escrever conjuntos de instruções que podem ser executados alternadamente em muitos
 navegadores. Aqui está uma das instruções mais simples que você pode fazer:
 
@@ -40,7 +40,7 @@ navegadores. Aqui está uma das instruções mais simples que você pode fazer:
 {{< gh-codeblock path="/examples/dotnet/HelloSelenium.cs" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/hello/hello_selenium_spec.rb" >}}
+{{< gh-codeblock path="/examples/ruby/spec/hello/hello_selenium.rb" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< gh-codeblock path="/examples/javascript/test/hello/helloSelenium.js" >}}
diff --git a/website_and_docs/content/documentation/_index.zh-cn.md b/website_and_docs/content/documentation/_index.zh-cn.md
index 70fb9ac185f7..8049e83ad16d 100755
--- a/website_and_docs/content/documentation/_index.zh-cn.md
+++ b/website_and_docs/content/documentation/_index.zh-cn.md
@@ -13,12 +13,12 @@ Selenium 是支持 web 浏览器自动化的一系列工具和库的综合项目
 该 规范 允许您为所有主要 Web 浏览器编写可互换的代码。
 
 这个项目是由志愿者贡献者实现的，他们投入了自己数千小时的时间，
-并使源代码[免费提供]({{< ref "/copyright.md#许可" >}})给任何人使用、享受和改进。
+并使源代码[免费提供]({{< ref "copyright.md#许可" >}})给任何人使用、享受和改进。
 
 Selenium 汇集了浏览器供应商，工程师和爱好者，以进一步围绕 Web 平台自动化进行公开讨论。
 该项目组织了[一次年度会议](//seleniumconf.com/)，以教学和培养社区。
 
-Selenium 的核心是 [WebDriver]({{< ref "/webdriver.md" >}})，这是一个编写指令集的接口，可以在许多浏览器中互换运行。
+Selenium 的核心是 [WebDriver]({{< ref "webdriver.md" >}})，这是一个编写指令集的接口，可以在许多浏览器中互换运行。
 这里有一个最简单的说明：
 
 
@@ -34,7 +34,7 @@ Selenium 的核心是 [WebDriver]({{< ref "/webdriver.md" >}})，这是一个编
 {{< gh-codeblock path="/examples/dotnet/HelloSelenium.cs" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/hello/hello_selenium_spec.rb" >}}
+{{< gh-codeblock path="/examples/ruby/spec/hello/hello_selenium.rb" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< gh-codeblock path="/examples/javascript/test/hello/helloSelenium.js" >}}
diff --git a/website_and_docs/content/documentation/about/contributing.en.md b/website_and_docs/content/documentation/about/contributing.en.md
index c3d23fca37d7..993437df8f4f 100644
--- a/website_and_docs/content/documentation/about/contributing.en.md
+++ b/website_and_docs/content/documentation/about/contributing.en.md
@@ -49,7 +49,7 @@ https://selenium.dev/support.
 
 ### Creating Examples
 
-Examples that need to be moved are marked with: {{% badge-code %}}
+Examples that need to be added are marked with: {{% badge-code %}}
 
 We want to be able to run all of our code examples in the CI to ensure that people can copy and paste and
 execute everything on the site. So we put the code where it belongs in the
@@ -117,7 +117,7 @@ and check out your copy locally.
 We use [Hugo](https://gohugo.io/) and the [Docsy theme](https://www.docsy.dev/)
 to build and render the site. You will need the “extended” 
 Sass/SCSS version of the Hugo binary to work on this site. We recommend
-to use Hugo 0.110.0 or higher.
+to use Hugo 0.125.4 .
 
 Please follow the [Install Hugo](https://www.docsy.dev/docs/getting-started/#install-hugo) 
 instructions from Docsy.
diff --git a/website_and_docs/content/documentation/about/contributing.ja.md b/website_and_docs/content/documentation/about/contributing.ja.md
index 3aa58a6c3122..138fead97eb1 100644
--- a/website_and_docs/content/documentation/about/contributing.ja.md
+++ b/website_and_docs/content/documentation/about/contributing.ja.md
@@ -2,9 +2,8 @@
 title: "Seleniumのサイトとドキュメントに貢献する"
 linkTitle: "Seleniumのサイトとドキュメントに貢献する"
 weight: 2
-requiresTranslation: true
 description: >-
-    Information on improving documentation and code examples for Selenium
+    Seleniumのドキュメントとコード例を改善するための情報
 aliases: 
         [
           "/documentation/ja/contributing/",
@@ -12,15 +11,6 @@ aliases:
         ]
 ---
 
-{{% pageinfo color="warning" %}}
-<p class="lead">
-   <i class="fas fa-language d-4"></i> 
-   Page being translated from 
-   English to Japanese. Do you speak Japanese? Help us to translate
-   it by sending us pull requests!
-</p>
-{{% /pageinfo %}}
-
 Seleniumは大きなソフトウェアプロジェクトであり、そのサイトとドキュメントは、物事の仕組みを理解し、その可能性を活用する効果的な方法を学ぶための鍵となります。
 
 このプロジェクトには、Seleniumのサイトとドキュメントの両方が含まれています。これは、Seleniumを効果的に使用する方法、Seleniumに参加する方法、およびSeleniumに貢献する方法に関する最新情報を提供するための継続的な取り組みです（特定のリリースを対象としていません）。
@@ -43,53 +33,47 @@ Seleniumのすべてのコンポーネントは、時間の経過とともに非
 見つかったものが問題であるかどうかわからない場合、[https://selenium.dev/support](https://selenium.dev/support)に記載されているコミュニケーション手段にて質問してください。
 
 
-## What to Help With
+## 何を手伝うか
 
-### Creating Examples
+### 例の作成
 
-Examples that need to be moved are marked with: {{% badge-code %}}
+追加が必要な例には、次のマークが付いています: {{% badge-code %}}
 
-We want to be able to run all of our code examples in the CI to ensure that people can copy and paste and
-execute everything on the site. So we put the code where it belongs in the
-[examples directory](https://github.com/SeleniumHQ/seleniumhq.github.io/blob/trunk/examples/).
-Each page in the documentation correlates to a test file in each of the languages, and should follow naming conventions.
-For instance examples for this page https://www.selenium.dev/documentation/webdriver/browsers/chrome/ get added in these
-files:
+すべてのコード例をCIで実行できるようにし、サイト上のすべてのコードをコピー＆ペーストして実行できることを確認したいと考えています。そのため、コードを[examplesディレクトリ](https://github.com/SeleniumHQ/seleniumhq.github.io/blob/trunk/examples/)の適切な場所に配置します。
+ドキュメントの各ページは各言語のテストファイルに関連しており、命名規則に従う必要があります。
+例えば、このページ（https://www.selenium.dev/documentation/webdriver/browsers/chrome/）の例は以下のファイルに追加されています:
 * `"/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java"`
 * `"/examples/python/tests/browsers/test_chrome.py"`
 * `"/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs"`
 * `"/examples/ruby/spec/browsers/chrome_spec.rb"`
 * `"/examples/javascript/test/browser/chromeSpecificCaps.spec.js"`
 
-Each example should get its own test. Ideally each test has an assertion that verifies the code works as intended.
-Once the code is copied to its own test in the proper file, it needs to be referenced in the markdown file.
+各例はそれぞれ独自のテストが必要です。理想的には、各テストにはコードが意図したとおりに動作することを確認するアサーションが含まれています。
+コードを適切なファイル内の独自のテストにコピーしたら、Markdownファイルで参照する必要があります。
 
-For example, the tab in Ruby would look like this:
+例えば、Rubyのtabは次のようになります:
 
         {{</* tab header="Ruby" */>}}
         {{</* gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L8-L9" */>}}
         {{</* /tab */>}}
 
-The line numbers at the end represent only the line or lines of code that actually represent the item being displayed.
-If a user wants more context, they can click the link to the GitHub page that will show the full context.
+末尾の行番号は、実際に表示される項目を表すコードの行のみを表します。
+ユーザーがより多くのコンテキストを必要とする場合、GitHubページへのリンクをクリックすると完全なコンテキストが表示されます。
 
-Make sure that if you add a test to the page that all the other line numbers in the markdown file are still
-correct. Adding a test at the top of a page means updating every single reference in the documentation that has a line
-number for that file.
+ページにテストを追加する場合は、Markdownファイル内の他のすべての行番号が正しいことを確認してください。
+ページの先頭にテストを追加すると、そのファイルの行番号を持つドキュメント内のすべての参照が更新されます。
 
-Finally, make sure that the tests pass in the CI.
+最後に、CIでテストがPassすることを確認してください。
 
 
-### Moving Examples
+### 例の移動
 
-Examples that need to be moved are marked with: {{% badge-examples %}}
+移動が必要な例には、次のマークが付いています: {{% badge-examples %}}
 
-Everything from the [Creating Examples](#creating-examples) section applies, with one addition.
+[例の作成](#例の作成)セクションのすべてが適用されますが、1つ追加があります。
 
-Make sure the tab includes `text=true`. By default, the tabs get formatted
-for code, so to use markdown or other shortcode statements (like `gh-codeblock`) it needs to be declared as text.
-For most examples, the `tabpane` declares the `text=true`, but if some of the tabs have code examples, the `tabpane`
-cannot specify it, and it must be specified in the tabs that do not need automatic code formatting.
+tabには`text=true`を含めてください。デフォルトではtabはコード用にフォーマットされるため、Markdownや他のショートコードステートメント（`gh-codeblock`など）を使用するには、`text=true`を宣言する必要があります。
+ほとんどの例では、`tabpane`が`text=true`を宣言しますが、tabの一部にコード例が含まれている場合、`tabpane`はそれを指定できず、自動コードフォーマットが不要なtabでは指定する必要があります。
 
 
 ## 貢献
@@ -110,13 +94,9 @@ Seleniumプロジェクトは新しいコントリビュータを歓迎します
 
 #### 依存関係: Hugo
 
-We use [Hugo](https://gohugo.io/) and the [Docsy theme](https://www.docsy.dev/)
-to build and render the site. You will need the “extended” 
-Sass/SCSS version of the Hugo binary to work on this site. We recommend
-to use Hugo 0.110.0 or higher.
+[Hugo](https://gohugo.io/)と[Docsyテーマ](https://www.docsy.dev/)を使用してサイトの構築とレンダリングをしています。このサイトの作業をするには、Hugoバイナリの“拡張”Sass/SCSSバージョンが必要です。Hugo 0.125.4の使用を推奨します。
 
-Please follow the [Install Hugo](https://www.docsy.dev/docs/getting-started/#install-hugo) 
-instructions from Docsy.
+[Docsyのインストール手順](https://www.docsy.dev/docs/getting-started/#install-hugo)に従ってください。
 
 ### ステップ 2: ブランチの作成
 
@@ -130,11 +110,7 @@ instructions from Docsy.
 
 ### ステップ 3: 変更を加える
 
-The repository contains the site and docs. Before jumping into
-making changes, please initialize the submodules and install the
-needed dependencies (see commands below). To make changes to the site, 
-work on the `website_and_docs` directory. To see a live preview of 
-your changes, run `hugo server` on the site's root directory.
+リポジトリにはサイトとドキュメントが含まれています。 変更を加える前に、submoduleを初期化し、必要な依存関係をインストールしてください（以下のコマンドを参照）。サイトに変更を加えるには、`website_and_docs` ディレクトリで作業してください。変更のライブプレビューを確認するには、サイトのルートディレクトリで `hugo server`を実行してください。
 
 ```shell
 % git submodule update --init --recursive
@@ -142,7 +118,7 @@ your changes, run `hugo server` on the site's root directory.
 % hugo server
 ```
 
-See [Style Guide]({{< ref "style.md" >}}) for more information on our conventions for contribution
+寄稿に関する規約の詳細については、 [スタイルガイド]({{< ref "style.md" >}}) をご覧ください。
 
 ### ステップ 4: コミット
 
diff --git a/website_and_docs/content/documentation/about/contributing.pt-br.md b/website_and_docs/content/documentation/about/contributing.pt-br.md
index 34b2bb3ae67a..90a86c7fa7c5 100644
--- a/website_and_docs/content/documentation/about/contributing.pt-br.md
+++ b/website_and_docs/content/documentation/about/contributing.pt-br.md
@@ -50,7 +50,7 @@ https://selenium.dev/support.
 
 ### Creating Examples
 
-Examples that need to be moved are marked with: {{% badge-code %}}
+Examples that need to be added are marked with: {{% badge-code %}}
 
 We want to be able to run all of our code examples in the CI to ensure that people can copy and paste and
 execute everything on the site. So we put the code where it belongs in the
@@ -117,7 +117,7 @@ e faça checkout na sua cópia localmente.
 
 Usamos [Hugo](https://gohugo.io/) e [Docsy theme](https://www.docsy.dev/)
 para criar e gerar o website. Você vai necessitar de usar a versão "extended"
-Sass/SCSS do binário Hugo. Recomendamos a versão 0.110.0 ou superior.
+Sass/SCSS do binário Hugo. Recomendamos a versão 0.125.4 .
 
 Por favor siga as instruções do Docsy [Install Hugo](https://www.docsy.dev/docs/getting-started/#install-hugo) 
 
diff --git a/website_and_docs/content/documentation/about/contributing.zh-cn.md b/website_and_docs/content/documentation/about/contributing.zh-cn.md
index e8063da27807..84a81142c462 100644
--- a/website_and_docs/content/documentation/about/contributing.zh-cn.md
+++ b/website_and_docs/content/documentation/about/contributing.zh-cn.md
@@ -45,7 +45,7 @@ https://selenium.dev/support.
 
 ### Creating Examples
 
-Examples that need to be moved are marked with: {{% badge-code %}}
+Examples that need to be added are marked with: {{% badge-code %}}
 
 We want to be able to run all of our code examples in the CI to ensure that people can copy and paste and
 execute everything on the site. So we put the code where it belongs in the
@@ -113,7 +113,7 @@ Selenium项目欢迎新的贡献者.
 我们使用 [Hugo](https://gohugo.io/) 和 [Docsy theme](https://www.docsy.dev/)
 用于构建和渲染本网站. 
 你需要Hugo“extended”扩展的Sass/SCSS版本用于这个网站.
-我们推荐使用0.110.0或更高版本的Hugo.
+我们推荐使用Hugo 0.125.4 .
 
 请参考来自Docsy的说明
 [安装Hugo](https://www.docsy.dev/docs/getting-started/#install-hugo) .
diff --git a/website_and_docs/content/documentation/about/copyright.en.md b/website_and_docs/content/documentation/about/copyright.en.md
index 2b372d5d9906..3915afdcbf52 100644
--- a/website_and_docs/content/documentation/about/copyright.en.md
+++ b/website_and_docs/content/documentation/about/copyright.en.md
@@ -20,7 +20,7 @@ The information provided is on an “as-is” basis.
 The authors and the publisher shall have
 neither liability nor responsibility to any person or entity
 with respect to any loss or damages arising
-from the information contained in this book.
+from the information contained herein.
 No patent liability is assumed with respect
 to the use of the information contained herein.
 
diff --git a/website_and_docs/content/documentation/about/copyright.pt-br.md b/website_and_docs/content/documentation/about/copyright.pt-br.md
index feba8e686983..d50d38fdb7e0 100644
--- a/website_and_docs/content/documentation/about/copyright.pt-br.md
+++ b/website_and_docs/content/documentation/about/copyright.pt-br.md
@@ -3,8 +3,7 @@ title: "Direitos autorais e atribuições"
 linkTitle: "Direitos autorais e atribuições"
 weight: 1
 description: >
-  Copyright, contributions and all attributions for the different projects
-  under the Selenium umbrella.
+  Direitos autorais, contribuições e todas as atribuições para os diferentes projetos sob a iniciativa do Selenium.
 aliases: [
 "/documentation/pt-br/front_matter/copyright_and_attributions/",
 "/pt-br/documentation/about/copyright_and_attributions"
diff --git a/website_and_docs/content/documentation/about/style.en.md b/website_and_docs/content/documentation/about/style.en.md
index 2f5ad48868c7..fa2ad642bc07 100644
--- a/website_and_docs/content/documentation/about/style.en.md
+++ b/website_and_docs/content/documentation/about/style.en.md
@@ -6,7 +6,7 @@ description: >-
   Conventions for contributions to the Selenium documentation and code examples
 ---
 
-Read our [contributing documentation]({{< ref contributing.md >}}) for complete instructions on 
+Read our [contributing documentation]({{< ref contributing.md >}}) for complete instructions on
 how to add content to this documentation.
 
 ## Alerts
@@ -68,7 +68,7 @@ Selenium now has official translators for each of the supported languages.
   also add it to `important_documentation.ja.md`, `important_documentation.pt-br.md`,
   `important_documentation.zh-cn.md`.
 * If you make text changes in the English version, just make a Pull Request.
-  The new process is for issues to be created and tagged as needs translation based on 
+  The new process is for issues to be created and tagged as needs translation based on
   changes made in a given PR.
 
 ## Code examples
@@ -81,24 +81,24 @@ and the code itself should be placed inside code tabs.
 The Docsy code tabs look like this:
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-    WebDriver driver = new ChromeDriver();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-    var driver = new ChromeDriver();
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-    let driver = await new Builder().forBrowser('chrome').build();
-  {{< /tab >}}
-  {{< tab header="Kotlin" >}}
-    val driver = ChromeDriver()
-  {{< /tab >}}
+{{< tab header="Java" >}}
+WebDriver driver = new ChromeDriver();
+{{< /tab >}}
+{{< tab header="Python" >}}
+driver = webdriver.Chrome()
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+var driver = new ChromeDriver();
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+driver = Selenium::WebDriver.for :chrome
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+let driver = await new Builder().forBrowser('chrome').build();
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+val driver = ChromeDriver()
+{{< /tab >}}
 {{< /tabpane >}}
 
 To generate the above tabs, this is what you need to write.
@@ -132,7 +132,7 @@ and ensures that all tabs on the page with a language are set to the same thing.
 To ensure that all code is kept up to date, our goal is to write the code in the repo where it
 can be executed when Selenium versions are updated to ensure that everything is correct.
 
-All code examples to be in our 
+All code examples to be in our
 [example directories](https://github.com/SeleniumHQ/seleniumhq.github.io/tree/dev/examples).
 
 This code can be automatically displayed in the documentation using the `gh-codeblock` shortcode.
@@ -149,22 +149,22 @@ A basic comparison of code looks like:
 
     {{</* tabpane text=true */>}}
     {{</* tab header="Java" */>}}
-    {{</* gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L46-L47" */>}}
+    {{</* gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L26-L27" */>}}
     {{</* /tab */>}}
     {{</* tab header="Python" */>}}
-    {{</* gh-codeblock path="examples/python/tests/getting_started/first_script.py#L17-L18" */>}}
+    {{</* gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L18-L19" */>}}
     {{</* /tab */>}}
     {{</* tab header="CSharp" */>}}
-    {{</* gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L39-L40" */>}}
+    {{</* gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L25-L26" */>}}
     {{</* /tab */>}}
     {{</* tab header="Ruby" */>}}
-    {{</* gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L16-L17" */>}}
+    {{</* gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L17-L18" */>}}
     {{</* /tab */>}}
     {{</* tab header="JavaScript" */>}}
-    {{</* gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L23-L24" */>}}
+    {{</* gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L22-L23" */>}}
     {{</* /tab */>}}
     {{</* tab header="Kotlin" */>}}
-    {{</* gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L25-L26" */>}}
+    {{</* gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L31-L32" */>}}
     {{</* /tab */>}}
     {{</* /tabpane */>}}
 
@@ -172,39 +172,39 @@ Which looks like this:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L46-L47" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L26-L27" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L17-L18" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L18-L19" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L39-L40" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L25-L26" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L16-L17" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L17-L18" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L23-L24" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L22-L23" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L25-L26" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L31-L32" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
 ### Using Markdown in a Tab
 
 If you want your example to include something other than code (default) or html (from `gh-codeblock`),
-you need to first set `text=true`, 
+you need to first set `text=true`,
 then change the Hugo syntax for the `tab`to use `%` instead of `<` and `>` with curly braces:
 
     {{</* tabpane text=true */>}}
     {{%/* tab header="Java" */%}}
     1. Start the driver
-    {{</* gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" */>}}
+    {{</* gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" */>}}
     2. Navigate to a page
-    {{</* gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" */>}}
+    {{</* gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" */>}}
     3. Quit the driver
-    {{</* gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" */>}}
+    {{</* gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" */>}}
     {{%/* /tab */%}}
     < ... >
     {{</* /tabpane */>}}
@@ -213,14 +213,15 @@ This produces:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
+
 1. Start the driver
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" >}}
+   {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" >}}
 2. Navigate to a page
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" >}}
+   {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" >}}
 3. Quit the driver
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" >}}
-{{% /tab %}}
-{{< /tabpane >}}
+   {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" >}}
+   {{% /tab %}}
+   {{< /tabpane >}}
 
 This is preferred to writing code comments because those will not be translated.
 Only include the code that is needed for the documentation, and avoid over-explaining.
diff --git a/website_and_docs/content/documentation/about/style.ja.md b/website_and_docs/content/documentation/about/style.ja.md
index 2f5ad48868c7..fa2ad642bc07 100644
--- a/website_and_docs/content/documentation/about/style.ja.md
+++ b/website_and_docs/content/documentation/about/style.ja.md
@@ -6,7 +6,7 @@ description: >-
   Conventions for contributions to the Selenium documentation and code examples
 ---
 
-Read our [contributing documentation]({{< ref contributing.md >}}) for complete instructions on 
+Read our [contributing documentation]({{< ref contributing.md >}}) for complete instructions on
 how to add content to this documentation.
 
 ## Alerts
@@ -68,7 +68,7 @@ Selenium now has official translators for each of the supported languages.
   also add it to `important_documentation.ja.md`, `important_documentation.pt-br.md`,
   `important_documentation.zh-cn.md`.
 * If you make text changes in the English version, just make a Pull Request.
-  The new process is for issues to be created and tagged as needs translation based on 
+  The new process is for issues to be created and tagged as needs translation based on
   changes made in a given PR.
 
 ## Code examples
@@ -81,24 +81,24 @@ and the code itself should be placed inside code tabs.
 The Docsy code tabs look like this:
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-    WebDriver driver = new ChromeDriver();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-    var driver = new ChromeDriver();
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-    let driver = await new Builder().forBrowser('chrome').build();
-  {{< /tab >}}
-  {{< tab header="Kotlin" >}}
-    val driver = ChromeDriver()
-  {{< /tab >}}
+{{< tab header="Java" >}}
+WebDriver driver = new ChromeDriver();
+{{< /tab >}}
+{{< tab header="Python" >}}
+driver = webdriver.Chrome()
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+var driver = new ChromeDriver();
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+driver = Selenium::WebDriver.for :chrome
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+let driver = await new Builder().forBrowser('chrome').build();
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+val driver = ChromeDriver()
+{{< /tab >}}
 {{< /tabpane >}}
 
 To generate the above tabs, this is what you need to write.
@@ -132,7 +132,7 @@ and ensures that all tabs on the page with a language are set to the same thing.
 To ensure that all code is kept up to date, our goal is to write the code in the repo where it
 can be executed when Selenium versions are updated to ensure that everything is correct.
 
-All code examples to be in our 
+All code examples to be in our
 [example directories](https://github.com/SeleniumHQ/seleniumhq.github.io/tree/dev/examples).
 
 This code can be automatically displayed in the documentation using the `gh-codeblock` shortcode.
@@ -149,22 +149,22 @@ A basic comparison of code looks like:
 
     {{</* tabpane text=true */>}}
     {{</* tab header="Java" */>}}
-    {{</* gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L46-L47" */>}}
+    {{</* gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L26-L27" */>}}
     {{</* /tab */>}}
     {{</* tab header="Python" */>}}
-    {{</* gh-codeblock path="examples/python/tests/getting_started/first_script.py#L17-L18" */>}}
+    {{</* gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L18-L19" */>}}
     {{</* /tab */>}}
     {{</* tab header="CSharp" */>}}
-    {{</* gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L39-L40" */>}}
+    {{</* gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L25-L26" */>}}
     {{</* /tab */>}}
     {{</* tab header="Ruby" */>}}
-    {{</* gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L16-L17" */>}}
+    {{</* gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L17-L18" */>}}
     {{</* /tab */>}}
     {{</* tab header="JavaScript" */>}}
-    {{</* gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L23-L24" */>}}
+    {{</* gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L22-L23" */>}}
     {{</* /tab */>}}
     {{</* tab header="Kotlin" */>}}
-    {{</* gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L25-L26" */>}}
+    {{</* gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L31-L32" */>}}
     {{</* /tab */>}}
     {{</* /tabpane */>}}
 
@@ -172,39 +172,39 @@ Which looks like this:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L46-L47" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L26-L27" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L17-L18" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L18-L19" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L39-L40" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L25-L26" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L16-L17" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L17-L18" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L23-L24" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L22-L23" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L25-L26" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L31-L32" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
 ### Using Markdown in a Tab
 
 If you want your example to include something other than code (default) or html (from `gh-codeblock`),
-you need to first set `text=true`, 
+you need to first set `text=true`,
 then change the Hugo syntax for the `tab`to use `%` instead of `<` and `>` with curly braces:
 
     {{</* tabpane text=true */>}}
     {{%/* tab header="Java" */%}}
     1. Start the driver
-    {{</* gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" */>}}
+    {{</* gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" */>}}
     2. Navigate to a page
-    {{</* gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" */>}}
+    {{</* gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" */>}}
     3. Quit the driver
-    {{</* gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" */>}}
+    {{</* gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" */>}}
     {{%/* /tab */%}}
     < ... >
     {{</* /tabpane */>}}
@@ -213,14 +213,15 @@ This produces:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
+
 1. Start the driver
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" >}}
+   {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" >}}
 2. Navigate to a page
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" >}}
+   {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" >}}
 3. Quit the driver
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" >}}
-{{% /tab %}}
-{{< /tabpane >}}
+   {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" >}}
+   {{% /tab %}}
+   {{< /tabpane >}}
 
 This is preferred to writing code comments because those will not be translated.
 Only include the code that is needed for the documentation, and avoid over-explaining.
diff --git a/website_and_docs/content/documentation/about/style.pt-br.md b/website_and_docs/content/documentation/about/style.pt-br.md
index 2f5ad48868c7..760f76d18bd0 100644
--- a/website_and_docs/content/documentation/about/style.pt-br.md
+++ b/website_and_docs/content/documentation/about/style.pt-br.md
@@ -1,12 +1,12 @@
 ---
-title: "Style guide for Selenium documentation"
-linkTitle: "Style"
+title: "Guia de estilo para a documentação do Selenium"
+linkTitle: "Estilo"
 weight: 6
 description: >-
-  Conventions for contributions to the Selenium documentation and code examples
+  Convenções para contribuições à documentação do Selenium e exemplos de código.
 ---
 
-Read our [contributing documentation]({{< ref contributing.md >}}) for complete instructions on 
+Read our [contributing documentation]({{< ref contributing.md >}}) for complete instructions on
 how to add content to this documentation.
 
 ## Alerts
@@ -68,7 +68,7 @@ Selenium now has official translators for each of the supported languages.
   also add it to `important_documentation.ja.md`, `important_documentation.pt-br.md`,
   `important_documentation.zh-cn.md`.
 * If you make text changes in the English version, just make a Pull Request.
-  The new process is for issues to be created and tagged as needs translation based on 
+  The new process is for issues to be created and tagged as needs translation based on
   changes made in a given PR.
 
 ## Code examples
@@ -81,24 +81,24 @@ and the code itself should be placed inside code tabs.
 The Docsy code tabs look like this:
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-    WebDriver driver = new ChromeDriver();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-    var driver = new ChromeDriver();
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-    let driver = await new Builder().forBrowser('chrome').build();
-  {{< /tab >}}
-  {{< tab header="Kotlin" >}}
-    val driver = ChromeDriver()
-  {{< /tab >}}
+{{< tab header="Java" >}}
+WebDriver driver = new ChromeDriver();
+{{< /tab >}}
+{{< tab header="Python" >}}
+driver = webdriver.Chrome()
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+var driver = new ChromeDriver();
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+driver = Selenium::WebDriver.for :chrome
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+let driver = await new Builder().forBrowser('chrome').build();
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+val driver = ChromeDriver()
+{{< /tab >}}
 {{< /tabpane >}}
 
 To generate the above tabs, this is what you need to write.
@@ -132,7 +132,7 @@ and ensures that all tabs on the page with a language are set to the same thing.
 To ensure that all code is kept up to date, our goal is to write the code in the repo where it
 can be executed when Selenium versions are updated to ensure that everything is correct.
 
-All code examples to be in our 
+All code examples to be in our
 [example directories](https://github.com/SeleniumHQ/seleniumhq.github.io/tree/dev/examples).
 
 This code can be automatically displayed in the documentation using the `gh-codeblock` shortcode.
@@ -149,22 +149,22 @@ A basic comparison of code looks like:
 
     {{</* tabpane text=true */>}}
     {{</* tab header="Java" */>}}
-    {{</* gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L46-L47" */>}}
+    {{</* gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L26-L27" */>}}
     {{</* /tab */>}}
     {{</* tab header="Python" */>}}
-    {{</* gh-codeblock path="examples/python/tests/getting_started/first_script.py#L17-L18" */>}}
+    {{</* gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L18-L19" */>}}
     {{</* /tab */>}}
     {{</* tab header="CSharp" */>}}
-    {{</* gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L39-L40" */>}}
+    {{</* gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L25-L26" */>}}
     {{</* /tab */>}}
     {{</* tab header="Ruby" */>}}
-    {{</* gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L16-L17" */>}}
+    {{</* gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L17-L18" */>}}
     {{</* /tab */>}}
     {{</* tab header="JavaScript" */>}}
-    {{</* gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L23-L24" */>}}
+    {{</* gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L22-L23" */>}}
     {{</* /tab */>}}
     {{</* tab header="Kotlin" */>}}
-    {{</* gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L25-L26" */>}}
+    {{</* gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L31-L32" */>}}
     {{</* /tab */>}}
     {{</* /tabpane */>}}
 
@@ -172,39 +172,39 @@ Which looks like this:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L46-L47" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L26-L27" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L17-L18" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L18-L19" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L39-L40" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L25-L26" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L16-L17" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L17-L18" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L23-L24" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L22-L23" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L25-L26" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L31-L32" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
 ### Using Markdown in a Tab
 
 If you want your example to include something other than code (default) or html (from `gh-codeblock`),
-you need to first set `text=true`, 
+you need to first set `text=true`,
 then change the Hugo syntax for the `tab`to use `%` instead of `<` and `>` with curly braces:
 
     {{</* tabpane text=true */>}}
     {{%/* tab header="Java" */%}}
     1. Start the driver
-    {{</* gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" */>}}
+    {{</* gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" */>}}
     2. Navigate to a page
-    {{</* gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" */>}}
+    {{</* gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" */>}}
     3. Quit the driver
-    {{</* gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" */>}}
+    {{</* gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" */>}}
     {{%/* /tab */%}}
     < ... >
     {{</* /tabpane */>}}
@@ -213,14 +213,15 @@ This produces:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
+
 1. Start the driver
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" >}}
+   {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" >}}
 2. Navigate to a page
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" >}}
+   {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" >}}
 3. Quit the driver
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" >}}
-{{% /tab %}}
-{{< /tabpane >}}
+   {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" >}}
+   {{% /tab %}}
+   {{< /tabpane >}}
 
 This is preferred to writing code comments because those will not be translated.
 Only include the code that is needed for the documentation, and avoid over-explaining.
diff --git a/website_and_docs/content/documentation/about/style.zh-cn.md b/website_and_docs/content/documentation/about/style.zh-cn.md
index 2f5ad48868c7..fa2ad642bc07 100644
--- a/website_and_docs/content/documentation/about/style.zh-cn.md
+++ b/website_and_docs/content/documentation/about/style.zh-cn.md
@@ -6,7 +6,7 @@ description: >-
   Conventions for contributions to the Selenium documentation and code examples
 ---
 
-Read our [contributing documentation]({{< ref contributing.md >}}) for complete instructions on 
+Read our [contributing documentation]({{< ref contributing.md >}}) for complete instructions on
 how to add content to this documentation.
 
 ## Alerts
@@ -68,7 +68,7 @@ Selenium now has official translators for each of the supported languages.
   also add it to `important_documentation.ja.md`, `important_documentation.pt-br.md`,
   `important_documentation.zh-cn.md`.
 * If you make text changes in the English version, just make a Pull Request.
-  The new process is for issues to be created and tagged as needs translation based on 
+  The new process is for issues to be created and tagged as needs translation based on
   changes made in a given PR.
 
 ## Code examples
@@ -81,24 +81,24 @@ and the code itself should be placed inside code tabs.
 The Docsy code tabs look like this:
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-    WebDriver driver = new ChromeDriver();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-    var driver = new ChromeDriver();
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-    let driver = await new Builder().forBrowser('chrome').build();
-  {{< /tab >}}
-  {{< tab header="Kotlin" >}}
-    val driver = ChromeDriver()
-  {{< /tab >}}
+{{< tab header="Java" >}}
+WebDriver driver = new ChromeDriver();
+{{< /tab >}}
+{{< tab header="Python" >}}
+driver = webdriver.Chrome()
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+var driver = new ChromeDriver();
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+driver = Selenium::WebDriver.for :chrome
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+let driver = await new Builder().forBrowser('chrome').build();
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+val driver = ChromeDriver()
+{{< /tab >}}
 {{< /tabpane >}}
 
 To generate the above tabs, this is what you need to write.
@@ -132,7 +132,7 @@ and ensures that all tabs on the page with a language are set to the same thing.
 To ensure that all code is kept up to date, our goal is to write the code in the repo where it
 can be executed when Selenium versions are updated to ensure that everything is correct.
 
-All code examples to be in our 
+All code examples to be in our
 [example directories](https://github.com/SeleniumHQ/seleniumhq.github.io/tree/dev/examples).
 
 This code can be automatically displayed in the documentation using the `gh-codeblock` shortcode.
@@ -149,22 +149,22 @@ A basic comparison of code looks like:
 
     {{</* tabpane text=true */>}}
     {{</* tab header="Java" */>}}
-    {{</* gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L46-L47" */>}}
+    {{</* gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L26-L27" */>}}
     {{</* /tab */>}}
     {{</* tab header="Python" */>}}
-    {{</* gh-codeblock path="examples/python/tests/getting_started/first_script.py#L17-L18" */>}}
+    {{</* gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L18-L19" */>}}
     {{</* /tab */>}}
     {{</* tab header="CSharp" */>}}
-    {{</* gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L39-L40" */>}}
+    {{</* gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L25-L26" */>}}
     {{</* /tab */>}}
     {{</* tab header="Ruby" */>}}
-    {{</* gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L16-L17" */>}}
+    {{</* gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L17-L18" */>}}
     {{</* /tab */>}}
     {{</* tab header="JavaScript" */>}}
-    {{</* gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L23-L24" */>}}
+    {{</* gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L22-L23" */>}}
     {{</* /tab */>}}
     {{</* tab header="Kotlin" */>}}
-    {{</* gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L25-L26" */>}}
+    {{</* gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L31-L32" */>}}
     {{</* /tab */>}}
     {{</* /tabpane */>}}
 
@@ -172,39 +172,39 @@ Which looks like this:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L46-L47" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L26-L27" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L17-L18" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L18-L19" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L39-L40" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L25-L26" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L16-L17" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L17-L18" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L23-L24" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L22-L23" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L25-L26" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L31-L32" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
 ### Using Markdown in a Tab
 
 If you want your example to include something other than code (default) or html (from `gh-codeblock`),
-you need to first set `text=true`, 
+you need to first set `text=true`,
 then change the Hugo syntax for the `tab`to use `%` instead of `<` and `>` with curly braces:
 
     {{</* tabpane text=true */>}}
     {{%/* tab header="Java" */%}}
     1. Start the driver
-    {{</* gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" */>}}
+    {{</* gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" */>}}
     2. Navigate to a page
-    {{</* gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" */>}}
+    {{</* gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" */>}}
     3. Quit the driver
-    {{</* gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" */>}}
+    {{</* gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" */>}}
     {{%/* /tab */%}}
     < ... >
     {{</* /tabpane */>}}
@@ -213,14 +213,15 @@ This produces:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
+
 1. Start the driver
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" >}}
+   {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" >}}
 2. Navigate to a page
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" >}}
+   {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" >}}
 3. Quit the driver
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" >}}
-{{% /tab %}}
-{{< /tabpane >}}
+   {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" >}}
+   {{% /tab %}}
+   {{< /tabpane >}}
 
 This is preferred to writing code comments because those will not be translated.
 Only include the code that is needed for the documentation, and avoid over-explaining.
diff --git a/website_and_docs/content/documentation/grid/_index.en.md b/website_and_docs/content/documentation/grid/_index.en.md
index 4e8b5c629d5a..cab1f133ecff 100644
--- a/website_and_docs/content/documentation/grid/_index.en.md
+++ b/website_and_docs/content/documentation/grid/_index.en.md
@@ -1,7 +1,7 @@
 ---
 title: "Grid"
 linkTitle: "Grid"
-weight: 6
+weight: 4
 description: >
   Want to run tests in parallel across multiple machines? Then, Grid is for you.
 aliases: 
diff --git a/website_and_docs/content/documentation/grid/_index.ja.md b/website_and_docs/content/documentation/grid/_index.ja.md
index 2522b5608e7c..23c2d39512c7 100644
--- a/website_and_docs/content/documentation/grid/_index.ja.md
+++ b/website_and_docs/content/documentation/grid/_index.ja.md
@@ -1,7 +1,7 @@
 ---
 title: "Grid"
 linkTitle: "Grid"
-weight: 6
+weight: 4
 description: >
   複数のマシンで並行してテストを実行したいですか？ Grid が手助けします。
 aliases:
diff --git a/website_and_docs/content/documentation/grid/_index.pt-br.md b/website_and_docs/content/documentation/grid/_index.pt-br.md
index 70bfa581e61c..1288fe2c1451 100644
--- a/website_and_docs/content/documentation/grid/_index.pt-br.md
+++ b/website_and_docs/content/documentation/grid/_index.pt-br.md
@@ -1,7 +1,7 @@
 ---
 title: "Grid"
 linkTitle: "Grid"
-weight: 6
+weight: 4
 description: >
   Pretende executar testes em paralelo em várias máquinas? Então a Grid é para si.
 aliases: 
diff --git a/website_and_docs/content/documentation/grid/_index.zh-cn.md b/website_and_docs/content/documentation/grid/_index.zh-cn.md
index 5131dbb55ceb..fe867bf3e7f6 100644
--- a/website_and_docs/content/documentation/grid/_index.zh-cn.md
+++ b/website_and_docs/content/documentation/grid/_index.zh-cn.md
@@ -1,7 +1,7 @@
 ---
 title: "Grid"
 linkTitle: "Grid"
-weight: 6
+weight: 4
 description: >
   要在多台计算机上并行运行测试吗? 那么, Grid正是为你准备的.
 aliases: 
diff --git a/website_and_docs/content/documentation/grid/advanced_features/customize_node.en.md b/website_and_docs/content/documentation/grid/advanced_features/customize_node.en.md
index 0ab872844ee4..f73e5c9dbee5 100644
--- a/website_and_docs/content/documentation/grid/advanced_features/customize_node.en.md
+++ b/website_and_docs/content/documentation/grid/advanced_features/customize_node.en.md
@@ -95,8 +95,8 @@ public class DecoratedLoggingNode extends Node {
 
   private Node node;
 
-  protected DecoratedLoggingNode(Tracer tracer, URI uri, Secret registrationSecret) {
-    super(tracer, new NodeId(UUID.randomUUID()), uri, registrationSecret);
+  protected DecoratedLoggingNode(Tracer tracer, NodeId nodeId, URI uri, Secret registrationSecret, Duration sessionTimeout) {
+    super(tracer, nodeId, uri, registrationSecret, sessionTimeout);
   }
 
   public static Node create(Config config) {
@@ -104,12 +104,17 @@ public class DecoratedLoggingNode extends Node {
     BaseServerOptions serverOptions = new BaseServerOptions(config);
     URI uri = serverOptions.getExternalUri();
     SecretOptions secretOptions = new SecretOptions(config);
+    NodeOptions nodeOptions = new NodeOptions(config);
+    Duration sessionTimeout = nodeOptions.getSessionTimeout();
 
     // Refer to the foot notes for additional context on this line.
     Node node = LocalNodeFactory.create(config);
 
     DecoratedLoggingNode wrapper = new DecoratedLoggingNode(loggingOptions.getTracer(),
-        uri, secretOptions.getRegistrationSecret());
+        node.getId(),
+        uri,
+        secretOptions.getRegistrationSecret(),
+        sessionTimeout);
     wrapper.node = node;
     return wrapper;
   }
diff --git a/website_and_docs/content/documentation/grid/advanced_features/customize_node.ja.md b/website_and_docs/content/documentation/grid/advanced_features/customize_node.ja.md
index ae5d36710bfc..c6a19435cf13 100644
--- a/website_and_docs/content/documentation/grid/advanced_features/customize_node.ja.md
+++ b/website_and_docs/content/documentation/grid/advanced_features/customize_node.ja.md
@@ -100,8 +100,8 @@ public class DecoratedLoggingNode extends Node {
 
   private Node node;
 
-  protected DecoratedLoggingNode(Tracer tracer, URI uri, Secret registrationSecret) {
-    super(tracer, new NodeId(UUID.randomUUID()), uri, registrationSecret);
+  protected DecoratedLoggingNode(Tracer tracer, NodeId nodeId, URI uri, Secret registrationSecret, Duration sessionTimeout) {
+    super(tracer, nodeId, uri, registrationSecret, sessionTimeout);
   }
 
   public static Node create(Config config) {
@@ -109,12 +109,17 @@ public class DecoratedLoggingNode extends Node {
     BaseServerOptions serverOptions = new BaseServerOptions(config);
     URI uri = serverOptions.getExternalUri();
     SecretOptions secretOptions = new SecretOptions(config);
+    NodeOptions nodeOptions = new NodeOptions(config);
+    Duration sessionTimeout = nodeOptions.getSessionTimeout();
 
     // Refer to the foot notes for additional context on this line.
     Node node = LocalNodeFactory.create(config);
 
     DecoratedLoggingNode wrapper = new DecoratedLoggingNode(loggingOptions.getTracer(),
-        uri, secretOptions.getRegistrationSecret());
+        node.getId(),
+        uri,
+        secretOptions.getRegistrationSecret(),
+        sessionTimeout);
     wrapper.node = node;
     return wrapper;
   }
diff --git a/website_and_docs/content/documentation/grid/advanced_features/customize_node.pt-br.md b/website_and_docs/content/documentation/grid/advanced_features/customize_node.pt-br.md
index f2a4a6058248..ea10a4bf899e 100644
--- a/website_and_docs/content/documentation/grid/advanced_features/customize_node.pt-br.md
+++ b/website_and_docs/content/documentation/grid/advanced_features/customize_node.pt-br.md
@@ -90,8 +90,8 @@ public class DecoratedLoggingNode extends Node {
 
   private Node node;
 
-  protected DecoratedLoggingNode(Tracer tracer, URI uri, Secret registrationSecret) {
-    super(tracer, new NodeId(UUID.randomUUID()), uri, registrationSecret);
+  protected DecoratedLoggingNode(Tracer tracer, NodeId nodeId, URI uri, Secret registrationSecret, Duration sessionTimeout) {
+    super(tracer, nodeId, uri, registrationSecret, sessionTimeout);
   }
 
   public static Node create(Config config) {
@@ -99,12 +99,17 @@ public class DecoratedLoggingNode extends Node {
     BaseServerOptions serverOptions = new BaseServerOptions(config);
     URI uri = serverOptions.getExternalUri();
     SecretOptions secretOptions = new SecretOptions(config);
+    NodeOptions nodeOptions = new NodeOptions(config);
+    Duration sessionTimeout = nodeOptions.getSessionTimeout();
 
     // Refer to the foot notes for additional context on this line.
     Node node = LocalNodeFactory.create(config);
 
     DecoratedLoggingNode wrapper = new DecoratedLoggingNode(loggingOptions.getTracer(),
-        uri, secretOptions.getRegistrationSecret());
+        node.getId(),
+        uri,
+        secretOptions.getRegistrationSecret(),
+        sessionTimeout);
     wrapper.node = node;
     return wrapper;
   }
diff --git a/website_and_docs/content/documentation/grid/advanced_features/customize_node.zh-cn.md b/website_and_docs/content/documentation/grid/advanced_features/customize_node.zh-cn.md
index c52403d29c45..87d624ff1e61 100644
--- a/website_and_docs/content/documentation/grid/advanced_features/customize_node.zh-cn.md
+++ b/website_and_docs/content/documentation/grid/advanced_features/customize_node.zh-cn.md
@@ -100,8 +100,8 @@ public class DecoratedLoggingNode extends Node {
 
   private Node node;
 
-  protected DecoratedLoggingNode(Tracer tracer, URI uri, Secret registrationSecret) {
-    super(tracer, new NodeId(UUID.randomUUID()), uri, registrationSecret);
+  protected DecoratedLoggingNode(Tracer tracer, NodeId nodeId, URI uri, Secret registrationSecret, Duration sessionTimeout) {
+    super(tracer, nodeId, uri, registrationSecret, sessionTimeout);
   }
 
   public static Node create(Config config) {
@@ -109,12 +109,17 @@ public class DecoratedLoggingNode extends Node {
     BaseServerOptions serverOptions = new BaseServerOptions(config);
     URI uri = serverOptions.getExternalUri();
     SecretOptions secretOptions = new SecretOptions(config);
+    NodeOptions nodeOptions = new NodeOptions(config);
+    Duration sessionTimeout = nodeOptions.getSessionTimeout();
 
     // Refer to the foot notes for additional context on this line.
     Node node = LocalNodeFactory.create(config);
 
     DecoratedLoggingNode wrapper = new DecoratedLoggingNode(loggingOptions.getTracer(),
-        uri, secretOptions.getRegistrationSecret());
+        node.getId(),
+        uri,
+        secretOptions.getRegistrationSecret(),
+        sessionTimeout);
     wrapper.node = node;
     return wrapper;
   }
diff --git a/website_and_docs/content/documentation/grid/advanced_features/endpoints.en.md b/website_and_docs/content/documentation/grid/advanced_features/endpoints.en.md
index 714718021280..3d605084c87c 100644
--- a/website_and_docs/content/documentation/grid/advanced_features/endpoints.en.md
+++ b/website_and_docs/content/documentation/grid/advanced_features/endpoints.en.md
@@ -16,9 +16,20 @@ Grid status provides the current state of the Grid. It consists of details about
 For every Node, the status includes information regarding Node availability, sessions, and slots. 
 
 ```shell
-cURL GET 'http://localhost:4444/status'
+curl --request GET 'http://localhost:4444/status'
 ```
 
+### Delete session
+
+Deleting the session terminates the WebDriver session, quits the driver and removes it from the active sessions map.
+Any request using the removed session-id or reusing the driver instance will throw an error.
+
+```shell
+curl --request DELETE 'http://localhost:4444/session/<session-id>'
+```
+
+### Which URL should I use?
+
 In the Standalone mode, the Grid URL is the Standalone server address.
 
 In the Hub-Node mode, the Grid URL is the Hub server address. 
@@ -31,7 +42,7 @@ Default URL for all the above modes is http://localhost:4444.
 
 ### Remove Node
 
-To remove the Node from the Grid, use the cURL command enlisted below.
+To remove the Node from the Grid, use the curl command enlisted below.
 It does not stop any ongoing session running on that Node.
 The Node continues running as it is unless explicitly killed. 
 The Distributor is no longer aware of the Node and hence any matching new session request
@@ -41,15 +52,15 @@ In the Standalone mode, the Distributor URL is the Standalone server address.
 
 In the Hub-Node mode, the Distributor URL is the Hub server address.  
 ```shell
-cURL --request DELETE 'http://localhost:4444/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET: <secret> '
+curl --request DELETE 'http://localhost:4444/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET: <secret> '
 ```
-In the fully distributed mode, the URL is the Distributor server address. 
+In the fully distributed mode, the URL is the Router server address. 
 ```shell
-cURL --request DELETE 'http://localhost:5553/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request DELETE 'http://localhost:4444/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 If no registration secret has been configured while setting up the Grid, then use 
 ```shell
-cURL --request DELETE 'http://<Distributor-URL>/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET;'
+curl --request DELETE 'http://<Router-URL>/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET;'
 ```
 
 ### Drain Node
@@ -62,15 +73,15 @@ In the Standalone mode, the Distributor URL is the Standalone server address.
 
 In the Hub-Node mode, the Distributor URL is the Hub server address.  
 ```shell
-cURL --request POST 'http://localhost:4444/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET: <secret> '
+curl --request POST 'http://localhost:4444/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET: <secret> '
 ```
-In the fully distributed mode, the URL is the Distributor server address. 
+In the fully distributed mode, the URL is the Router server address. 
 ```shell
-cURL --request POST 'http://localhost:5553/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request POST 'http://localhost:4444/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 If no registration secret has been configured while setting up the Grid, then use 
 ```shell
-cURL --request POST 'http://<Distributor-URL>/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET;'
+curl --request POST 'http://<Router-URL>/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET;'
 ```
 
 ## Node
@@ -83,37 +94,37 @@ In case of multiple Nodes, use [Grid status](#grid-status) to get all Node detai
 ### Status 
 
 The Node status is essentially a health-check for the Node.
-Distributor pings the node status are regular intervals and updates the Grid Model accordingly.
+Distributor pings the node status at regular intervals and updates the Grid Model accordingly.
 The status includes information regarding availability, sessions, and slots. 
 
 ```shell
-cURL --request GET 'http://localhost:5555/status'
+curl --request GET 'http://localhost:5555/status'
 ```
 
 ### Drain
 
 Distributor passes the [drain](#drain-node) command to the appropriate node identified by the node-id.
-To drain the Node directly, use the cuRL command enlisted below.
+To drain the Node directly, use the curl command enlisted below.
 Both endpoints are valid and produce the same result. Drain finishes the ongoing sessions before stopping the Node.
 
 ```shell
-cURL --request POST 'http://localhost:5555/se/grid/node/drain' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request POST 'http://localhost:5555/se/grid/node/drain' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 If no registration secret has been configured while setting up the Grid, then use 
 ```shell
-cURL --request POST 'http://<node-URL>/se/grid/node/drain' --header 'X-REGISTRATION-SECRET;'
+curl --request POST 'http://<node-URL>/se/grid/node/drain' --header 'X-REGISTRATION-SECRET;'
 ```
 
 ### Check session owner
 
-To check if a session belongs to a Node, use the cURL command enlisted below. 
+To check if a session belongs to a Node, use the curl command enlisted below. 
 
 ```shell
-cURL --request GET 'http://localhost:5555/se/grid/node/owner/<session-id>' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request GET 'http://localhost:5555/se/grid/node/owner/<session-id>' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 If no registration secret has been configured while setting up the Grid, then use 
 ```shell
-cURL --request GET 'http://<node-URL>/se/grid/node/owner/<session-id>' --header 'X-REGISTRATION-SECRET;'
+curl --request GET 'http://<node-URL>/se/grid/node/owner/<session-id>' --header 'X-REGISTRATION-SECRET;'
 ```
 
 It will return true if the session belongs to the Node else it will return false.
@@ -124,11 +135,11 @@ Deleting the session terminates the WebDriver session, quits the driver and remo
 Any request using the removed session-id or reusing the driver instance will throw an error.
 
 ```shell
-cURL --request DELETE 'http://localhost:5555/se/grid/node/session/<session-id>' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request DELETE 'http://localhost:5555/se/grid/node/session/<session-id>' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 If no registration secret has been configured while setting up the Grid, then use 
 ```shell
-cURL --request DELETE 'http://<node-URL>/se/grid/node/session/<session-id>' --header 'X-REGISTRATION-SECRET;'
+curl --request DELETE 'http://<node-URL>/se/grid/node/session/<session-id>' --header 'X-REGISTRATION-SECRET;'
 ```
 
 ## New Session Queue
@@ -136,7 +147,7 @@ cURL --request DELETE 'http://<node-URL>/se/grid/node/session/<session-id>' --he
 ### Clear New Session Queue
 
 New Session Request Queue holds the new session requests. 
-To clear the queue, use the cURL command enlisted below. 
+To clear the queue, use the curl command enlisted below. 
 Clearing the queue rejects all the requests in the queue. For each such request, the server returns an error response to the respective client.
 The result of the clear command is the total number of deleted requests.
 
@@ -145,23 +156,23 @@ In the Standalone mode, the Queue URL is the Standalone server address.
 In the Hub-Node mode, the Queue URL is the Hub server address.
 
 ```shell
-cURL --request DELETE 'http://localhost:4444/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request DELETE 'http://localhost:4444/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 
-In the fully distributed mode, the Queue URL is New Session Queue server address.
+In the fully distributed mode, the Queue URL is Router server address.
 ```shell
-cURL --request DELETE 'http://localhost:5559/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request DELETE 'http://localhost:4444/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 
 If no registration secret has been configured while setting up the Grid, then use 
 ```shell
-cURL --request DELETE 'http://<URL>/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET;'
+curl --request DELETE 'http://<Router-URL>/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET;'
 ```
 
 ### Get New Session Queue Requests
 
 New Session Request Queue holds the new session requests. 
-To get the current requests in the queue, use the cURL command enlisted below. 
+To get the current requests in the queue, use the curl command enlisted below. 
 The response returns the total number of requests in the queue and the request payloads.
 
 In the Standalone mode, the Queue URL is the Standalone server address. 
@@ -169,9 +180,9 @@ In the Standalone mode, the Queue URL is the Standalone server address.
 In the Hub-Node mode, the Queue URL is the Hub server address.
 
 ```shell
-cURL --request GET 'http://localhost:4444/se/grid/newsessionqueue/queue'
+curl --request GET 'http://localhost:4444/se/grid/newsessionqueue/queue'
 ```
 
-In the fully distributed mode, the Queue URL is New Session Queue server address.
+In the fully distributed mode, the Queue URL is Router server address.
 ```shell
-cURL --request GET 'http://localhost:5559/se/grid/newsessionqueue/queue'
+curl --request GET 'http://localhost:4444/se/grid/newsessionqueue/queue'
diff --git a/website_and_docs/content/documentation/grid/advanced_features/endpoints.ja.md b/website_and_docs/content/documentation/grid/advanced_features/endpoints.ja.md
index 70e2d6e63a20..5407895187d8 100644
--- a/website_and_docs/content/documentation/grid/advanced_features/endpoints.ja.md
+++ b/website_and_docs/content/documentation/grid/advanced_features/endpoints.ja.md
@@ -16,9 +16,20 @@ Grid ステータスは Grid の現在の状態を提供します。 登録さ
 各ノードのステータスには、ノードの稼働状況、セッション、およびスロットに関する情報が含まれます。
 
 ```shell
-cURL GET 'http://localhost:4444/status'
+curl --request GET 'http://localhost:4444/status'
 ```
 
+### セッションの削除
+
+セッションを削除すると、WebDriver セッションが終了し、ドライバがアクティブなセッションマップから削除されます。
+削除されたセッション ID を使用するリクエストや、ドライバのインスタンスを再利用しようとすると、エラーとなります。
+
+```shell
+curl --request DELETE 'http://localhost:4444/session/<session-id>'
+```
+
+### Which URL should I use?
+
 スタンドアロンモードでは、Grid URL は スタンドアロンサーバーのアドレスになります。
 
 ハブ&ノードモードでは、Grid URL は ハブのアドレスになります。
@@ -31,7 +42,7 @@ cURL GET 'http://localhost:4444/status'
 
 ### ノード削除
 
-ノードを Grid から削除するには、以下の cURL コマンドを使用します。
+ノードを Grid から削除するには、以下の curl コマンドを使用します。
 このコマンドは、そのノード上で実行中のセッションを停止させるものではありません。
 ノードは明示的に強制終了されない限り、そのまま動作し続けます。
 ディストリビューターはそのノードを認識しなくなるため、マッチする新しいセッションのリクエストは はその Node に転送されません。
@@ -41,19 +52,19 @@ cURL GET 'http://localhost:4444/status'
 ハブ&ノードモードでは、ディストリビューターの URL は ハブのアドレスになります。
 
 ```shell
-cURL --request DELETE 'http://localhost:4444/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET: <secret> '
+curl --request DELETE 'http://localhost:4444/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET: <secret> '
 ```
 
 完全分散モードでは、ディストリビューター URL は ディストリビューターのアドレスになります。
 
 ```shell
-cURL --request DELETE 'http://localhost:5553/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request DELETE 'http://localhost:4444/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 
 Grid の設定時に登録用の secret を設定していない場合は次のようにします:
 
 ```shell
-cURL --request DELETE 'http://<Distributor-URL>/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET;'
+curl --request DELETE 'http://<Router-URL>/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET;'
 ```
 
 ### ノードのドレイン
@@ -67,19 +78,19 @@ cURL --request DELETE 'http://<Distributor-URL>/se/grid/distributor/node/<node-i
 ハブ&ノードモードでは、ディストリビューターの URL は ハブのアドレスになります。
 
 ```shell
-cURL --request POST 'http://localhost:4444/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET: <secret> '
+curl --request POST 'http://localhost:4444/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET: <secret> '
 ```
 
 完全分散モードでは、ディストリビューター URL は ディストリビューターのアドレスになります。
 
 ```shell
-cURL --request POST 'http://localhost:5553/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request POST 'http://localhost:4444/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 
 Grid の設定時に登録用の secret を設定していない場合は次のようにします:
 
 ```shell
-cURL --request POST 'http://<Distributor-URL>/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET;'
+curl --request POST 'http://<Router-URL>/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET;'
 ```
 
 ## ノード
@@ -95,38 +106,38 @@ cURL --request POST 'http://<Distributor-URL>/se/grid/distributor/node/<node-id>
 ステータスには稼働状況、セッション、およびスロットに関する情報が含まれます。
 
 ```shell
-cURL --request GET 'http://localhost:5555/status'
+curl --request GET 'http://localhost:5555/status'
 ```
 
 ### ドレイン
 
 ディストリビューターは [ドレイン](#ノードのドレイン)コマンドを適切なノードに渡します。
-ノードを直接ドレインするには以下の cURL コマンドを使います。
+ノードを直接ドレインするには以下の curl コマンドを使います。
 どちらのエンドポイントも有効であり、同じ結果になります。
 ドレインは、ノードを停止する前に進行中のセッションを終了させます。
 
 ```shell
-cURL --request POST 'http://localhost:5555/se/grid/node/drain' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request POST 'http://localhost:5555/se/grid/node/drain' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 
 Grid の設定時に登録用の secret を設定していない場合は次のようにします:
 
 ```shell
-cURL --request POST 'http://<node-URL>/se/grid/node/drain' --header 'X-REGISTRATION-SECRET;'
+curl --request POST 'http://<node-URL>/se/grid/node/drain' --header 'X-REGISTRATION-SECRET;'
 ```
 
 ### セッションオーナーのチェック
 
-あるセッションがノードに属しているかどうかをチェックするには、以下の cURL コマンドを使います。
+あるセッションがノードに属しているかどうかをチェックするには、以下の curl コマンドを使います。
 
 ```shell
-cURL --request GET 'http://localhost:5555/se/grid/node/owner/<session-id>' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request GET 'http://localhost:5555/se/grid/node/owner/<session-id>' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 
 Grid の設定時に登録用の secret を設定していない場合は次のようにします:
 
 ```shell
-cURL --request GET 'http://<node-URL>/se/grid/node/owner/<session-id>' --header 'X-REGISTRATION-SECRET;'
+curl --request GET 'http://<node-URL>/se/grid/node/owner/<session-id>' --header 'X-REGISTRATION-SECRET;'
 ```
 
 もしセッションがノードに属していたら true を返し、そうでなければ false が返ります。
@@ -137,13 +148,13 @@ cURL --request GET 'http://<node-URL>/se/grid/node/owner/<session-id>' --header
 削除されたセッション ID を使用するリクエストや、ドライバのインスタンスを再利用しようとすると、エラーとなります。
 
 ```shell
-cURL --request DELETE 'http://localhost:5555/se/grid/node/session/<session-id>' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request DELETE 'http://localhost:5555/se/grid/node/session/<session-id>' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 
 Grid の設定時に登録用の secret を設定していない場合は次のようにします:
 
 ```shell
-cURL --request DELETE 'http://<node-URL>/se/grid/node/session/<session-id>' --header 'X-REGISTRATION-SECRET;'
+curl --request DELETE 'http://<node-URL>/se/grid/node/session/<session-id>' --header 'X-REGISTRATION-SECRET;'
 ```
 
 ## 新規セッションキュー
@@ -151,7 +162,7 @@ cURL --request DELETE 'http://<node-URL>/se/grid/node/session/<session-id>' --he
 ### 新規セッションキューのクリア
 
 新規セッションキューには、新規セッションリクエストが格納されます。
-キューをクリアするには、以下に挙げる cURL コマンドを使用します。
+キューをクリアするには、以下に挙げる curl コマンドを使用します。
 キューを消去すると、キューにあるすべてのリクエストを拒否します。
 サーバーは各リクエストのそれぞれのクライアントにエラーレスポンスを返します。
 クリアコマンドの結果は、削除されたリクエストの数です。
@@ -161,25 +172,25 @@ cURL --request DELETE 'http://<node-URL>/se/grid/node/session/<session-id>' --he
 ハブ&ノードモードでは、キューの URL は ハブのアドレスになります。
 
 ```shell
-cURL --request DELETE 'http://localhost:4444/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request DELETE 'http://localhost:4444/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 
 完全分散モードでは、キューの URL は 新規セッションキューのアドレスになります。
 
 ```shell
-cURL --request DELETE 'http://localhost:5559/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request DELETE 'http://localhost:4444/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 
 Grid の設定時に登録用の secret を設定していない場合は次のようにします:
 
 ```shell
-cURL --request DELETE 'http://<URL>/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET;'
+curl --request DELETE 'http://<Router-URL>/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET;'
 ```
 
 ### 新規セッションリクエストの取得
 
 新規セッションキューには、新規セッションリクエストが格納されます。
-キューにある現在のリクエストを取得するには、以下に挙げる cURL コマンドを使用します。
+キューにある現在のリクエストを取得するには、以下に挙げる curl コマンドを使用します。
 レスポンスはキュー内のリクエストの数とリクエストのペイロードを返します。
 
 スタンドアロンモードでは、キューの URL はスタンドアロンサーバーのアドレスとなります。
@@ -187,11 +198,11 @@ cURL --request DELETE 'http://<URL>/se/grid/newsessionqueue/queue' --header 'X-R
 ハブ&ノードモードでは、キューの URL は ハブのアドレスになります。
 
 ```shell
-cURL --request GET 'http://localhost:4444/se/grid/newsessionqueue/queue'
+curl --request GET 'http://localhost:4444/se/grid/newsessionqueue/queue'
 ```
 
 完全分散モードでは、キューの URL は 新規セッションキューのアドレスになります。
 
 ```shell
-cURL --request GET 'http://localhost:5559/se/grid/newsessionqueue/queue'
+curl --request GET 'http://localhost:4444/se/grid/newsessionqueue/queue'
 ```
diff --git a/website_and_docs/content/documentation/grid/advanced_features/endpoints.pt-br.md b/website_and_docs/content/documentation/grid/advanced_features/endpoints.pt-br.md
index 277631e336d4..046e2ab41fb8 100644
--- a/website_and_docs/content/documentation/grid/advanced_features/endpoints.pt-br.md
+++ b/website_and_docs/content/documentation/grid/advanced_features/endpoints.pt-br.md
@@ -16,9 +16,20 @@ O status da Grid fornece o estado atual da grid. Consiste em detalhes sobre cada
 Para cada nó, o status inclui informações sobre a disponibilidade, sessões e slots do nó.
 
 ```shell
-cURL GET 'http://localhost:4444/status'
+curl --request GET 'http://localhost:4444/status'
 ```
 
+### Deletar sessão
+
+A exclusão da sessão encerra a sessão do WebDriver, fecha o driver e o remove do mapa de sessões ativas.
+Qualquer solicitação usando o id de sessão removido ou reutilizando a instância do driver gerará um erro.
+
+```shell
+curl --request DELETE 'http://localhost:4444/session/<session-id>'
+```
+
+### Which URL should I use?
+
 No modo Standalone, o URL da Grid é o endereço do servidor Standalone.
 
 No modo Hub-Node, a URL da Grid é o endereço do servidor Hub.
@@ -31,7 +42,7 @@ A URL padrão para todos os modos acima é http://localhost:4444.
 
 ### Remover Nó
 
-Para remover o Nó da Grid, use o comando cURL listado abaixo.
+Para remover o Nó da Grid, use o comando curl listado abaixo.
 Ele não interrompe nenhuma sessão em andamento em execução nesse nó.
 O Node continua rodando como está, a menos que seja explicitamente eliminado.
 O Distribuidor não está mais ciente do Nó e, portanto, qualquer solicitação de nova sessão correspondente
@@ -41,15 +52,15 @@ No modo Standalone, a URL do distribuidor é o endereço do servidor Standalone.
 
 No modo Hub-Node, a URL do Distribuidor é o endereço do servidor Hub.  
 ```shell
-cURL --request DELETE 'http://localhost:4444/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET: <secret> '
+curl --request DELETE 'http://localhost:4444/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET: <secret> '
 ```
-No modo totalmente distribuído, a URL é o endereço do servidor Distribuidor.
+No modo totalmente distribuído, a URL é o endereço do servidor Router.
 ```shell
-cURL --request DELETE 'http://localhost:5553/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request DELETE 'http://localhost:4444/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 Se nenhum segredo de registro foi configurado durante a configuração da Grid, use 
 ```shell
-cURL --request DELETE 'http://<Distributor-URL>/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET;'
+curl --request DELETE 'http://<Router-URL>/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET;'
 ```
 
 ### Drenar Nó
@@ -62,15 +73,15 @@ No modo Standalone, a URL do distribuidor é o endereço do servidor Standalone.
 
 No modo Hub-Node, a URL do Distribuidor é o endereço do servidor Hub. 
 ```shell
-cURL --request POST 'http://localhost:4444/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET: <secret> '
+curl --request POST 'http://localhost:4444/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET: <secret> '
 ```
-No modo totalmente distribuído, a URL é o endereço do servidor Distribuidor. 
+No modo totalmente distribuído, a URL é o endereço do servidor Router. 
 ```shell
-cURL --request POST 'http://localhost:5553/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request POST 'http://localhost:4444/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 Se nenhum segredo de registro foi configurado durante a configuração da Grid, use  
 ```shell
-cURL --request POST 'http://<Distributor-URL>/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET;'
+curl --request POST 'http://<Router-URL>/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET;'
 ```
 
 ## Nó
@@ -86,33 +97,33 @@ O distribuidor executa ping no status do Nó em intervalos regulares e atualiza
 O status inclui informações sobre disponibilidade, sessões e slots.
 
 ```shell
-cURL --request GET 'http://localhost:5555/status'
+curl --request GET 'http://localhost:5555/status'
 ```
 
 ### Drenagem
 
 O Distribuidor passa o comando [drain](# drain-node) para o Nó apropriado identificado pelo ID do Nó.
-Para drenar o Nó diretamente, use o comando cuRL listado abaixo.
+Para drenar o Nó diretamente, use o comando curl listado abaixo.
 Ambos as rotas são válidas e produzem o mesmo resultado. Drenar termina as sessões em andamento antes de interromper o Nó.
 
 ```shell
-cURL --request POST 'http://localhost:5555/se/grid/node/drain' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request POST 'http://localhost:5555/se/grid/node/drain' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 Se nenhum segredo de registro foi configurado durante a configuração da Grid, use 
 ```shell
-cURL --request POST 'http://<node-URL>/se/grid/node/drain' --header 'X-REGISTRATION-SECRET;'
+curl --request POST 'http://<node-URL>/se/grid/node/drain' --header 'X-REGISTRATION-SECRET;'
 ```
 
 ### Checar dono da sessão
 
-Para verificar se uma sessão pertence a um Nó, use o comando cURL listado abaixo. 
+Para verificar se uma sessão pertence a um Nó, use o comando curl listado abaixo. 
 
 ```shell
-cURL --request GET 'http://localhost:5555/se/grid/node/owner/<session-id>' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request GET 'http://localhost:5555/se/grid/node/owner/<session-id>' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 Se nenhum segredo de registro foi configurado durante a configuração da Grid, use 
 ```shell
-cURL --request GET 'http://<node-URL>/se/grid/node/owner/<session-id>' --header 'X-REGISTRATION-SECRET;'
+curl --request GET 'http://<node-URL>/se/grid/node/owner/<session-id>' --header 'X-REGISTRATION-SECRET;'
 ```
 
 Ele retornará true se a sessão pertencer ao Nó, caso contrário, retornará false.
@@ -123,11 +134,11 @@ A exclusão da sessão encerra a sessão do WebDriver, fecha o driver e o remove
 Qualquer solicitação usando o id de sessão removido ou reutilizando a instância do driver gerará um erro.
 
 ```shell
-cURL --request DELETE 'http://localhost:5555/se/grid/node/session/<session-id>' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request DELETE 'http://localhost:5555/se/grid/node/session/<session-id>' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 Se nenhum segredo de registro foi configurado durante a configuração da Grid, use 
 ```shell
-cURL --request DELETE 'http://<node-URL>/se/grid/node/session/<session-id>' --header 'X-REGISTRATION-SECRET;'
+curl --request DELETE 'http://<node-URL>/se/grid/node/session/<session-id>' --header 'X-REGISTRATION-SECRET;'
 ```
 
 ## Fila de Sessão
@@ -135,7 +146,7 @@ cURL --request DELETE 'http://<node-URL>/se/grid/node/session/<session-id>' --he
 ### Limpar a Fila de Sessão
 
 A Fila de Sessão contém as novas solicitações de sessão.
-Para limpar a fila, use o comando cURL listado abaixo.
+Para limpar a fila, use o comando curl listado abaixo.
 Limpar a fila rejeita todas as solicitações na fila. Para cada solicitação, o servidor retorna uma resposta de erro ao respectivo cliente.
 O resultado do comando clear é o número total de solicitações excluídas.
 
@@ -144,31 +155,31 @@ No modo Standalone, a URL Queue é o endereço do servidor Standalone.
 No modo Hub-Node, a URL do enfileirador é o endereço do servidor Hub.
 
 ```shell
-cURL --request DELETE 'http://localhost:4444/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request DELETE 'http://localhost:4444/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 
 No modo totalmente distribuído, a URL do enfileirador é o endereço do servidor do Enfileirador de Sessões.
 ```shell
-cURL --request DELETE 'http://localhost:5559/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request DELETE 'http://localhost:4444/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 
 If no registration secret has been configured while setting up the Grid, then use 
 ```shell
-cURL --request DELETE 'http://<URL>/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET;'
+curl --request DELETE 'http://<Router-URL>/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET;'
 ```
 
 ### Obter novos pedidos da Fila de Sessão
 
 Novos pedidos da Fila de Sessão contém os novos pedidos de sessão.
-Para obter os pedidos na Fila, utiliza o comando cURL listado abaixo.
+Para obter os pedidos na Fila, utiliza o comando curl listado abaixo.
 É retornado o número total de pedidos na Fila.
 
 No modo Standalone, a URL é a do servidor, em modo Grid, a URL será a do HUB.
 
 ```shell
-cURL --request GET 'http://localhost:4444/se/grid/newsessionqueue/queue'
+curl --request GET 'http://localhost:4444/se/grid/newsessionqueue/queue'
 ```
 
 No modo totalmente distribuido, a URL da Fila é a porta do servidor de Fila.
 ```shell
-cURL --request GET 'http://localhost:5559/se/grid/newsessionqueue/queue'
+curl --request GET 'http://localhost:4444/se/grid/newsessionqueue/queue'
diff --git a/website_and_docs/content/documentation/grid/advanced_features/endpoints.zh-cn.md b/website_and_docs/content/documentation/grid/advanced_features/endpoints.zh-cn.md
index 112a5c91211e..8e67ae00a270 100644
--- a/website_and_docs/content/documentation/grid/advanced_features/endpoints.zh-cn.md
+++ b/website_and_docs/content/documentation/grid/advanced_features/endpoints.zh-cn.md
@@ -18,12 +18,22 @@ Grid状态提供Grid的当前状态.
 状态包括有关节点可用性、会话和插槽的信息. 
 
 ```shell
-cURL GET 'http://localhost:4444/status'
+curl --request GET 'http://localhost:4444/status'
 ```
 
-在独立模式下, Grid URL是独立服务器的地址.
+### 删除会话
+
+删除会话会终止 WebDriver 会话、退出驱动程序并将其从活动会话映射中删除。任何使用删除的会话标识或重新使用驱动程序实例的请求都会出错。
+
+```shell
+curl --request DELETE 'http://localhost:4444/session/<session-id>'
+```
+
+### 我应该使用哪一个URL?
+
+在 Standalone 模式下, Grid URL是独立服务器的地址.
 
-在集线器节点模式下, Grid URL是集线器服务器的地址.
+在 Hub-Node 模式下, Grid URL是集线器服务器的地址.
 
 在完全分布式模式下, Grid URL是路由服务器的地址.
 
@@ -33,179 +43,137 @@ cURL GET 'http://localhost:4444/status'
 
 ### 删除节点
 
-要从Grid中删除节点, 
-请使用下面列出的cURL命令.
-它不会停止在该节点上运行的任何持续中的会话.
-除非显式终止, 否则节点将继续按原样运行.
-分发器不再知晓该节点,
-因此任何匹配的新会话请求
-也不会转发到该节点.
+要从网格中删除节点，请使用下面列出的 curl 命令。该命令不会停止正在该节点上运行的任何会话。除非显式终止, 否则节点将继续运行。分发器不再知道该节点，因此任何匹配的新会话请求都不会转发到该节点。
 
-在独立模式下, 分发器URL是独立服务器的地址.
+在 Standalone 模式下，分发器 URL 是独立服务器地址。
 
-在集线器节点模式下, 分发器URL是集线器服务器的地址. 
+在 Hub-Node 模式下, 分发器 URL 是 Hub 服务器的地址。
 
 ```shell
-cURL --request DELETE 'http://localhost:4444/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET: <secret> '
+curl --request DELETE 'http://localhost:4444/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET: <secret> '
 ```
-在完全分布式模式下, URL是分发器的地址.
+在完全分布式模式下, URL是分发器的地址。
 
 ```shell
-cURL --request DELETE 'http://localhost:5553/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request DELETE 'http://localhost:4444/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
-如果在设置Grid时未配置注册密码, 
-则使用
+如果在设置Grid时未配置注册密码, 则使用
 ```shell
-cURL --request DELETE 'http://<Distributor-URL>/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET;'
+curl --request DELETE 'http://<Router-URL>/se/grid/distributor/node/<node-id>' --header 'X-REGISTRATION-SECRET;'
 ```
 
-### 放空节点
+### 释放节点
 
-节点放空命令用于优雅地关闭节点.
-放空节点将在所有持续中的会话完成后停止节点.
-但是, 它不接受任何新的会话请求.
+节点释放命令用于优雅地关闭节点。在所有正在进行的会话结束后，会停止该节点。并且，它不会接受任何新的会话请求。
 
-在独立模式下, 分发器URL是独立服务器的地址.
+在 Standalone 模式下，分发器 URL 是独立服务器地址。
 
-在集线器节点模式下, 分发器URL是集线器服务器的地址.
+在 Hub-Node 模式下, 分发器 URL 是 Hub 服务器的地址。
 ```shell
-cURL --request POST 'http://localhost:4444/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET: <secret> '
+curl --request POST 'http://localhost:4444/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET: <secret> '
 ```
-在完全分布式模式下, URL是分发服务器的地址.
+在完全分布式模式下, URL是分发服务器的地址。
 ```shell
-cURL --request POST 'http://localhost:5553/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request POST 'http://localhost:4444/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
-如果在设置Grid时未配置注册密码, 
-则使用
+如果在设置Grid时未配置注册密码, 则使用
 ```shell
-cURL --request POST 'http://<Distributor-URL>/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET;'
+curl --request POST 'http://<Router-URL>/se/grid/distributor/node/<node-id>/drain' --header 'X-REGISTRATION-SECRET;'
 ```
 
 ## 节点
 
-本节中的端点适用于
-集线器节点模式和
-节点独立运行的完全分布式网格模式.
-在一个节点的情况下, 默认节点的URL为 http://localhost:5555 .
-如果有多个节点,
-请使用 [Grid 状态](#grid-状态) 获取所有节点详细信息
-以及定位地址.
+本节中的端点适用于 Hub-Node 模式和节点独立运行的完全分布式网格模式。在一个节点的情况下, 默认节点的URL为 http://localhost:5555 。
+如果有多个节点,请使用 [Grid 状态](#grid-状态) 获取所有节点的详细信息并查找节点地址。
 
 ### 状态 
 
-节点状态本质上是节点的运行状况检查.
-分发器定期ping节点状态，
-并相应地更新Grid模型.
-状态包括相关的可用性, 会话和插槽的信息.
+节点状态本质上是节点的健康检查。分发程序会定期 ping 节点状态，并相应地更新 Grid 模型。状态包括有关可用性、会话和插槽的信息。
 
 ```shell
-cURL --request GET 'http://localhost:5555/status'
+curl --request GET 'http://localhost:5555/status'
 ```
 
-### 放空
+### 释放
 
-分发器将 [放空](#放空节点) 命令传递给
-由node-id标识的相应节点.
-要直接放空节点,
-请使用下面列出的cuRL命令.
-两个端点都有效并产生相同的结果.
-放空会等待持续中的会话完成后
-才停止节点.
+分发器将 [释放](#释放节点) 命令传递给由node-id标识的相应节点。要直接释放节点,请使用下面列出的curl命令。
+两个端点都有效并产生相同的结果。释放会等待持续中的会话完成后才停止节点。
 
 ```shell
-cURL --request POST 'http://localhost:5555/se/grid/node/drain' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request POST 'http://localhost:5555/se/grid/node/drain' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
-如果在设置Grid时未配置注册密码,
-则使用
+如果在设置Grid时未配置注册密码,则使用
 ```shell
-cURL --request POST 'http://<node-URL>/se/grid/node/drain' --header 'X-REGISTRATION-SECRET;'
+curl --request POST 'http://<node-URL>/se/grid/node/drain' --header 'X-REGISTRATION-SECRET;'
 ```
 
 ### 检查会话所有者
 
-要检查会话是否属于某一节点, 请使用下面列出的cURL命令. 
+要检查会话是否属于某一节点, 请使用下面列出的curl命令. 
 
 ```shell
-cURL --request GET 'http://localhost:5555/se/grid/node/owner/<session-id>' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request GET 'http://localhost:5555/se/grid/node/owner/<session-id>' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
-如果在设置Grid时未配置注册密码, 
-则使用
+如果在设置Grid时未配置注册密码, 则使用
 ```shell
-cURL --request GET 'http://<node-URL>/se/grid/node/owner/<session-id>' --header 'X-REGISTRATION-SECRET;'
+curl --request GET 'http://<node-URL>/se/grid/node/owner/<session-id>' --header 'X-REGISTRATION-SECRET;'
 ```
 
 如果会话属于该节点, 
 则返回true, 
-否则返回false.
+否则返回false。
 
 ### 删除会话
 
-删除会话将终止WebDriver会话,
-退出驱动程序
-并将其从活动会话集合中删除. 
-任何使用删除的会话id
-或重用驱动程序实例的请求
-都将抛出错误. 
+删除会话会终止 WebDriver 会话、退出驱动程序并将其从活动会话映射中删除。任何使用删除的会话标识或重新使用驱动程序实例的请求都会出错。
 
 ```shell
-cURL --request DELETE 'http://localhost:5555/se/grid/node/session/<session-id>' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request DELETE 'http://localhost:5555/se/grid/node/session/<session-id>' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
-如果在设置Grid时未配置注册密码, 
-则使用
+如果在设置Grid时未配置注册密码, 则使用
 ```shell
-cURL --request DELETE 'http://<node-URL>/se/grid/node/session/<session-id>' --header 'X-REGISTRATION-SECRET;'
+curl --request DELETE 'http://<node-URL>/se/grid/node/session/<session-id>' --header 'X-REGISTRATION-SECRET;'
 ```
 
 ## 新会话队列
 
 ### 清除新会话队列
 
-新会话请求队列保存新会话请求.
-要清除队列, 
-请使用下面列出的cURL命令.
-清除队列将拒绝队列中的所有请求.
-对于每个这样的请求, 
-服务器都会向相应的客户端返回一个错误响应.
-清除命令的返回结果是
-已删除请求的总数.
+新会话请求队列保存新会话请求。要清除队列，请使用下面列出的 curl 命令。清除队列会拒绝队列中的所有请求。对于每个此类请求，服务器都会向相应的客户端返回错误响应。清除命令的结果是被删除请求的总数。
 
-在独立模式下, 队列URL是独立服务器的地址. 
-在集线器节点模式下, 队列URL是集线器服务器的地址. 
+在 Standalone 模式下, 队列URL是独立服务器的地址。
+在 Hub-Node 模式下, 队列URL是集线器服务器的地址。
 
 ```shell
-cURL --request DELETE 'http://localhost:4444/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request DELETE 'http://localhost:4444/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 
 在完全分布式模式下,
-队列URL是新会话队列服务器的地址.
+队列URL是新会话队列服务器的地址。
 ```shell
-cURL --request DELETE 'http://localhost:5559/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET: <secret>'
+curl --request DELETE 'http://localhost:4444/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET: <secret>'
 ```
 
-如果在设置Grid时未配置注册密码, 
-则使用
+如果在设置Grid时未配置注册密码, 则使用
 ```shell
-cURL --request DELETE 'http://<URL>/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET;'
+curl --request DELETE 'http://<Router-URL>/se/grid/newsessionqueue/queue' --header 'X-REGISTRATION-SECRET;'
 ```
 
 ### 获取新会话队列请求
 
-New Session Request Queue holds the new session requests. 
-To get the current requests in the queue, use the cURL command enlisted below. 
-The response returns the total number of requests in the queue and the request payloads.
-新会话请求队列保存新会话请求.
+新会话请求队列保存新会话请求。
 要获取队列中的当前请求,
-请使用下面列出的cURL命令.
-响应会返回队列中的请求总数以及请求内容.
+请使用下面列出的curl命令。
+响应会返回队列中的请求总数以及请求内容。
 
-在独立模式下, 队列URL是独立服务器的地址.
-在集线器节点模式下, 队列URL是集线器服务器的地址.
+在 Standalone 模式下, 队列URL是独立服务器的地址。
+在 Hub-Node 模式下, 队列URL是集线器服务器的地址。
 
 ```shell
-cURL --request GET 'http://localhost:4444/se/grid/newsessionqueue/queue'
+curl --request GET 'http://localhost:4444/se/grid/newsessionqueue/queue'
 ```
 
 在完全分布式模式下,
-队列URL是新会话队列服务器的地址.
+队列URL是新会话队列服务器的地址。
 ```shell
-cURL --request GET 'http://localhost:5559/se/grid/newsessionqueue/queue'
+curl --request GET 'http://localhost:4444/se/grid/newsessionqueue/queue'
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 c6b1a8308afc..486c1be49754 100644
--- a/website_and_docs/content/documentation/grid/applicability.zh-cn.md
+++ b/website_and_docs/content/documentation/grid/applicability.zh-cn.md
@@ -3,46 +3,39 @@ title: "什么时候应该使用Grid"
 linkTitle: "适用性"
 weight: 4
 description: >
-  Is Grid right for you?
+  Grid适合您吗?
 aliases: [
 "/documentation/zh-cn/grid/when_to_use_grid/",
 "/zh-cn/documentation/grid/when_to_use_grid"
 ]
 ---
 
-{{% pageinfo color="warning" %}}
-<p class="lead">
-   <i class="fas fa-language d-4"></i> 
-   Page being translated from English to Chinese. 
-   Do you speak Chinese? Help us to translate
-   it by sending us pull requests!
-</p>
-{{% /pageinfo %}}
 
 什么情况下可以使用 `Selenium Grid` ？
 
 * 想要在不同的浏览器类型、浏览器版本和操作系统上并行运行测试时
 * 想要缩短执行测试案例所需的时间
 
-`Selenium Grid` 可以并行地在多台计算机（称为节点）上运行测试案例。对于大型和长时间运行的测试案例，这可以节省几分钟、几小时甚至几天的时间。
+`Selenium Grid` 可以并行地在多台计算机（称为节点）上运行测试案例. 对于大型和长时间运行的测试案例，这可以节省几分钟、几小时甚至几天的时间. 
 
-这有效的缩短了测试结果的反馈时间，使得在测试的应用程序发生变化时能够更快地得到测试结果。
+这有效的缩短了测试结果的反馈时间，使得在测试的应用程序发生变化时能够更快地得到测试结果. 
 
-`Grid` 可以并行地运行测试，支持多种不同的浏览器类型，并且可以同时运行多个相同浏览器的实例。
+`Grid` 可以并行地运行测试，支持多种不同的浏览器类型，并且可以同时运行多个相同浏览器的实例. 
 
-举个例子，假设一个拥有六个节点的Grid。第一台计算机拥有Firefox的最新版本，第二台拥有Firefox的上一个版本，第三台运行最新版Chrome，而其余三台机器是Mac Mini，允许在最新版本的Safari上并行运行三个测试。
+举个例子，假设一个拥有六个节点的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
+       15      *       45s        /        1        =      11m 15s   // 没有Grid
+       15      *       45s        /        5        =      2m 15s    // 5节点的Grid
+       15      *       45s        /        15       =      45s       // 15节点的Grid
+      100      *       120s       /        15       =      13m 20s   // 如果没有Grid, 需要3个多小时
 
-在测试案例执行时，`Grid` 会按照测试配置将测试分配到相应的浏览器上运行。
+在测试案例执行时，`Grid` 会按照测试配置将测试分配到相应的浏览器上运行. 
 
-即使对于比较复杂的 `Selenium` 测试案例，这样的配置也可以极大地加快执行时间。
+即使对于比较复杂的 `Selenium` 测试案例，这样的配置也可以极大地加快执行时间. 
 
-`Selenium Grid` 是 `Selenium` 项目中的重要组成部分，由同一团队的核心Selenium开发人员并行维护。由于意识到测试执行速度的重要性，`Grid` 自设计之初就成为 `Selenium` 项目的关键部分。
+`Selenium Grid` 是 `Selenium` 项目中的重要组成部分，由同一团队的核心Selenium开发人员并行维护. 
+由于意识到测试执行速度的重要性，`Grid` 自设计之初就成为 `Selenium` 项目的关键部分.
\ No newline at end of file
diff --git a/website_and_docs/content/documentation/grid/components.en.md b/website_and_docs/content/documentation/grid/components.en.md
index a85fd66ee473..df29d7f0e628 100644
--- a/website_and_docs/content/documentation/grid/components.en.md
+++ b/website_and_docs/content/documentation/grid/components.en.md
@@ -87,7 +87,7 @@ part of the registration message.
 
 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 
+created. Through a specific [configuration]({{< ref "configuration" >}}), it can run sessions in Docker 
 containers or relay commands.
 
 A **Node** only executes the received commands, it does not evaluate, make judgments, or control anything other
diff --git a/website_and_docs/content/documentation/grid/components.ja.md b/website_and_docs/content/documentation/grid/components.ja.md
index 91a185ac5b48..881803b51fb5 100644
--- a/website_and_docs/content/documentation/grid/components.ja.md
+++ b/website_and_docs/content/documentation/grid/components.ja.md
@@ -1,5 +1,5 @@
 ---
-title: "Serenium Grid のコンポーネント"
+title: "Selenium Grid のコンポーネント"
 linkTitle: "コンポーネント"
 weight: 6
 description: >
@@ -84,7 +84,7 @@ Grid は複数の**ノード**を持つことができます。
 デフォルトでは、**ノード**はマシンのパス上に存在する全てのブラウザドライバーを自動で登録します。
 また FireFox と Chromium ベースブラウザの場合、CPU1 つにつき 1 スロットを作成します。
 Safari の場合は 1 つのスロットのみ作成します。
-[特定の設定によって]({{< ref "/configuration" >}})セッションを Docker コンテナで実行したり、コマンドを中継したりすることも可能です。
+[特定の設定によって]({{< ref "configuration" >}})セッションを Docker コンテナで実行したり、コマンドを中継したりすることも可能です。
 
 **ノード**は受信したコマンドを実行するだけで、コマンドの評価・判断や、フロー制御以外の制御は行いません。
 **ノード**が実行されているマシンは、他のコンポーネントと同じ OS を持つ必要はありません。
diff --git a/website_and_docs/content/documentation/grid/components.pt-br.md b/website_and_docs/content/documentation/grid/components.pt-br.md
index e9800a183fff..9db5f2676706 100644
--- a/website_and_docs/content/documentation/grid/components.pt-br.md
+++ b/website_and_docs/content/documentation/grid/components.pt-br.md
@@ -85,7 +85,7 @@ como parte da mensagem de registo.
 
 Por omissão, o **Node** regista automaticamente todos os navegadores que estejam disponíveis no PATH da máquina onde
 executa. Cria também um slot de execução por cada CPU para os navegadores Chrome e Firefox. Para Safari,
-apenas é criado um slot. Usando uma [configuração]({{< ref "/configuration" >}}) específica, é também
+apenas é criado um slot. Usando uma [configuração]({{< ref "configuration" >}}) específica, é também
 possível executar sessões em containers Docker.
 
 O **Node** apenas executa os comandos que recebe, não avalia, faz julgamentos ou controla mais nada que não seja
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 05a352487880..9ee6760d555f 100644
--- a/website_and_docs/content/documentation/grid/components.zh-cn.md
+++ b/website_and_docs/content/documentation/grid/components.zh-cn.md
@@ -10,14 +10,6 @@ aliases: [
 ]
 ---
 
-{{% pageinfo color="warning" %}}
-<p class="lead">
-   <i class="fas fa-language d-4"></i> 
-   Page being translated from 
-   English to Chinese. Do you speak Chinese? Help us to translate
-   it by sending us pull requests!
-</p>
-{{% /pageinfo %}}
 
 Selenium Grid 4 是对以前版本的彻底重写。除了对性能和标准合规性进行全面改进外，还分解了 `Grid` 的不同功能以反映更现代的计算和软件开发时代。 Selenium Grid 4 专为容器化和云分布式可扩展性而构建，是现代时代的全新解决方案。
 
@@ -67,7 +59,7 @@ Selenium Grid 4 是对以前版本的彻底重写。除了对性能和标准合
 
 **Node**通过**事件总线**向**分发器**注册自己，并将其配置作为注册消息发送。
 
-默认情况下，**Node**会自动注册其所在机器上路径中可用的所有浏览器驱动程序。它还为基于Chromium的浏览器和Firefox创建每个可用CPU一个插槽。对于Safari，只创建一个插槽。通过特定的[配置]({{< ref "/configuration" >}})，它可以在Docker容器中运行会话或转发命令。
+默认情况下，**Node**会自动注册其所在机器上路径中可用的所有浏览器驱动程序。它还为基于Chromium的浏览器和Firefox创建每个可用CPU一个插槽。对于Safari，只创建一个插槽。通过特定的[配置]({{< ref "configuration" >}})，它可以在Docker容器中运行会话或转发命令。
 
 **Node**仅执行接收到的命令，不评估、不做出判断或控制任何除命令和响应流之外的东西。**Node**所在的机器不需要与其他组件具有相同的操作系统。例如，Windows节点可能具有在Edge上提供IE模式作为浏览器选项的能力，而在Linux或Mac上则不可能，网格可以配置多个具有Windows、Mac或Linux的**Node**。
 
diff --git a/website_and_docs/content/documentation/grid/configuration/cli_options.en.md b/website_and_docs/content/documentation/grid/configuration/cli_options.en.md
index 051f7034c584..075c1eb82db2 100644
--- a/website_and_docs/content/documentation/grid/configuration/cli_options.en.md
+++ b/website_and_docs/content/documentation/grid/configuration/cli_options.en.md
@@ -162,6 +162,8 @@ pull request updating this page.
 | `--reject-unsupported-caps` | boolean | `false` | Allow the Distributor to reject a request immediately if the Grid does not support the requested capability. Rejecting requests immediately is suitable for a Grid setup that does not spin up Nodes on demand. |
 | `--slot-matcher` | string | `org.openqa.selenium.grid.data.DefaultSlotMatcher` | Full class name of non-default slot matcher to use. This is used to determine whether a Node can support a particular session. |
 | `--slot-selector` | string | `org.openqa.selenium.grid.distributor.selector.DefaultSlotSelector` | Full class name of non-default slot selector. This is used to select a slot in a Node once the Node has been matched. |
+| `--newsession-threadpool-size` | int | `24` | The Distributor uses a fixed-sized thread pool to create new sessions as it consumes new session requests from the queue. This allows configuring the size of the thread pool. The default value is no. of available processors * 3. Note: If the no. of threads is way greater than the available processors it will not always increase the performance. A high number of threads causes more context switching which is an expensive operation. |
+| `--purge-nodes-interval` | int | `30` | How often, in seconds, will the Distributor purge Nodes that have been down for a while. This is calculated based on the heartbeat received from a particular node. |
 
 ### Docker
 
@@ -174,6 +176,7 @@ pull request updating this page.
 | `--docker-port` | int | `2375` | Port where the Docker daemon is running |
 | `--docker-url` | string | `http://localhost:2375` | URL for connecting to the Docker daemon |
 | `--docker-video-image` | string | `selenium/video:latest` | Docker image to be used when video recording is enabled |
+ | `--docker-host-config-keys` | string[] | `Dns DnsOptions DnsSearch ExtraHosts Binds` | Specify which docker host configuration keys should be passed to browser containers. Keys name can be found in the Docker API [documentation](https://docs.docker.com/engine/api/v1.41/#tag/Container/operation/ContainerCreate), or by running `docker inspect` the node-docker container. |
 
 ### Events
 
@@ -191,7 +194,7 @@ pull request updating this page.
 | `--http-logs` | boolean |  `false` | Enable http logging. Tracing should be enabled to log http logs. |
 | `--log-encoding` | string |  `UTF-8` | Log encoding |
 | `--log` | string | Windows path example : <br>`'\path\to\file\gridlog.log'` <br> or <br> `'C:\path\path\to\file\gridlog.log'`<br><br>Linux/Unix/MacOS path example :<br> `'/path/to/file/gridlog.log'` | File to write out logs. Ensure the file path is compatible with the operating system's file path. |
-| `--log-level` | string | `“INFO”` | Log level. Default logging level is INFO. Log levels are described here https://docs.oracle.com/javase/7/docs/api/java/util/logging/Level.html |
+| `--log-level` | string | `“INFO”` | Log level. Default logging level is INFO. Log levels are described here https://docs.oracle.com/en/java/javase/11/docs/api/java.logging/java/util/logging/Level.html |
 | `--plain-logs` | boolean | `true` | Use plain log lines |
 | `--structured-logs` | boolean | `false` | Use structured logs |
 | `--tracing` | boolean | `true` | Enable trace collection |
@@ -208,7 +211,7 @@ pull request updating this page.
 | Option | Type | Value/Example | Description |
 |---|---|---|---|---|
 | `--detect-drivers` | boolean | `true` | Autodetect which drivers are available on the current system, and add them to the Node. |
-| `--driver-configuration` | string[] | `display-name="Firefox Nightly" max-sessions=2 webdriver-path="/usr/local/bin/geckodriver" stereotype='{"browserName": "firefox", "browserVersion": "86", "moz:firefoxOptions": {"binary":"/Applications/Firefox Nightly.app/Contents/MacOS/firefox-bin"}}'` | List of configured drivers a Node supports. It is recommended to provide this type of configuration through a toml config file to improve readability |
+| `--driver-configuration` | string[] | `display-name="Firefox Nightly" max-sessions=2 webdriver-path="/usr/local/bin/geckodriver" stereotype="{\"browserName\": \"firefox\", \"browserVersion\": \"86\", \"moz:firefoxOptions\": {\"binary\":\"/Applications/Firefox Nightly.app/Contents/MacOS/firefox-bin\"}}"` | List of configured drivers a Node supports. It is recommended to provide this type of configuration through a toml config file to improve readability |
 | `--driver-factory` | string[] | `org.openqa.selenium.example.LynxDriverFactory '{"browserName": "lynx"}'` | Mapping of fully qualified class name to a browser configuration that this matches against. |
 | `--driver-implementation` | string[] | `"firefox"` | Drivers that should be checked. If specified, will skip autoconfiguration. |
 | `--node-implementation` | string | `"org.openqa.selenium.grid.node.local.LocalNodeFactory"` | Full classname of non-default Node implementation. This is used to manage a session's lifecycle. |
@@ -219,13 +222,14 @@ pull request updating this page.
 | `--register-cycle` | int | `10` | How often, in seconds, the Node will try to register itself for the first time to the Distributor. |
 | `--register-period` | int | `120` | How long, in seconds, will the Node try to register to the Distributor for the first time. After this period is completed, the Node will not attempt to register again. |
 | `--session-timeout` | int | `300` | Let X be the session-timeout in seconds. The Node will automatically kill a session that has not had any activity in the last X seconds. This will release the slot for other tests. |
-| `--vnc-env-var`| string | `START_XVFB` | Environment variable to check in order to determine if a vnc stream is available or not. |
+| `--vnc-env-var`| string[] | `SE_START_XVFB SE_START_VNC SE_START_NO_VNC` | Environment variable to check in order to determine if a vnc stream is available or not. |
 | `--no-vnc-port`| int | `7900` | If VNC is available, sets the port where the local noVNC stream can be obtained |
 | `--drain-after-session-count`| int | `1` | Drain and shutdown the Node after X sessions have been executed. Useful for environments like Kubernetes. A value higher than zero enables this feature. |
 | `--hub`| string | `http://localhost:4444` | The address of the Hub in a Hub-and-Node configuration. Can be a hostname or IP address (`hostname`), in which case the Hub will be assumed to be `http://hostname:4444`, the `--grid-url` will be the same `--publish-events` will be `tcp://hostname:4442` and `--subscribe-events` will be `tcp://hostname:4443`. If `hostname` contains a port number, that will be used for `--grid-url` but the URIs for the event bus will remain the same. Any of these default values may be overridden but setting the correct flags. If the hostname has  a protocol (such as `https`) that will be used too. |
 | `--enable-cdp`| boolean | `true` | Enable CDP proxying in Grid. A Grid admin can disable CDP if the network doesnot allow websockets. True by default. |
 | `--enable-managed-downloads`| boolean | `false` | This causes the Node to auto manage files downloaded for a given session on the Node. |
 | `--selenium-manager`| boolean | `false` | When drivers are not available on the current system, use Selenium Manager. False by default. |
+| `--connection-limit-per-session` | int | `10` | Let X be the maximum number of websocket connections per session.This will ensure one session is not able to exhaust the connection limit of the host. |
 
 ### Relay
 
@@ -235,6 +239,7 @@ pull request updating this page.
 | `--service-host` | string | `localhost` | Host name where the service that supports WebDriver commands is running |
 | `--service-port` | int | `4723` | Port where the service that supports WebDriver commands is running |
 | `--service-status-endpoint` | string | `/status` | Optional, endpoint to query the WebDriver service status, an HTTP 200 response is expected |
+| `--service-protocol-version` | string | `HTTP/1.1` | Optional, enforce a specific protocol version in HttpClient when communicating with the endpoint service status |
 | `--service-configuration` | string[] | `max-sessions=2 stereotype='{"browserName": "safari", "platformName": "iOS", "appium:platformVersion": "14.5"}}'` | Configuration for the service where calls will be relayed to. It is recommended to provide this type of configuration through a toml config file to improve readability. |
 
 ### Router
@@ -244,6 +249,7 @@ pull request updating this page.
 | `--password` | string | `myStrongPassword` | Password clients must use to connect to the server. Both this and the username need to be set in order to be used. |
 | `--username` | string | `admin` | User name clients must use to connect to the server. Both this and the password need to be set in order to be used. |
 | `--sub-path` | string | `my_company/selenium_grid` | A sub-path that should be considered for all user facing routes on the Hub/Router/Standalone. |
+| `--disable-ui` | boolean | `true` | Disable the Grid UI. |
 
 
 ### Server
@@ -268,6 +274,7 @@ pull request updating this page.
 | `--sessionqueue-port` | int | `1234` | Port on which the session queue server is listening. |
 | `--session-request-timeout` | int | `300` | Timeout in seconds. A new incoming session request is added to the queue. Requests sitting in the queue for longer than the configured time will timeout. |
 | `--session-retry-interval` | int | `5` | Retry interval in seconds. If all slots are busy, new session request will be retried after the given interval. |
+| `--maximum-response-delay` | int | `8` | How often, in seconds, will the the SessionQueue response in case there is no data, to reduce the http requests while polling for new session requests. |
 
 ### Sessions
 
diff --git a/website_and_docs/content/documentation/grid/configuration/cli_options.ja.md b/website_and_docs/content/documentation/grid/configuration/cli_options.ja.md
index 8592e1650a27..b61aa761852b 100644
--- a/website_and_docs/content/documentation/grid/configuration/cli_options.ja.md
+++ b/website_and_docs/content/documentation/grid/configuration/cli_options.ja.md
@@ -161,6 +161,8 @@ Grid の設定には、さまざまなセクションが用意されています
 | `--reject-unsupported-caps`    | boolean | `false`                                                             | Grid がサポートしていない capabilities をリクエストされた時、ディストリビューターがリクエストを即座に今日できるようにします。これはオンデマンドでノードを立ち上げをしない Grid の設定に適しています。 |
 | `--slot-matcher`               | string  | `org.openqa.selenium.grid.data.DefaultSlotMatcher`                  | デフォルト以外で使用するスロットマッチャーの完全なクラス名。これはノードが特定のセッションをサポートできるかを判断するために使用されます。                                                            |
 | `--slot-selector`              | string  | `org.openqa.selenium.grid.distributor.selector.DefaultSlotSelector` | デフォルト以外のスロットセレクターの完全なクラス名。これは、ノードがマッチした後ノード内のスロットを選択するために使用されます。                                                                      |
+| `--newsession-threadpool-size` | int | `24` | The Distributor uses a fixed-sized thread pool to create new sessions as it consumes new session requests from the queue. This allows configuring the size of the thread pool. The default value is no. of available processors * 3. Note: If the no. of threads is way greater than the available processors it will not always increase the performance. A high number of threads causes more context switching which is an expensive operation. |
+| `--purge-nodes-interval` | int | `30` | How often, in seconds, will the Distributor purge Nodes that have been down for a while. This is calculated based on the heartbeat received from a particular node. |
 
 ### Docker
 
@@ -173,6 +175,7 @@ Grid の設定には、さまざまなセクションが用意されています
 | `--docker-port`        | int      | `2375`                                                            | Docker デーモンが動作しているポート名。                                                                                                                                                          |
 | `--docker-url`         | string   | `http://localhost:2375`                                           | Docker デーモンに接続するための URL。                                                                                                                                                            |
 | `--docker-video-image` | string   | `selenium/video:latest`                                           | ビデオレコーディングが有効になっているときに利用される Docker イメージ。                                                                                                                         |
+| `--docker-host-config-keys` | string[] | `Dns DnsOptions DnsSearch ExtraHosts Binds` | Specify which docker host configuration keys should be passed to browser containers. Keys name can be found in the Docker API [documentation](https://docs.docker.com/engine/api/v1.41/#tag/Container/operation/ContainerCreate), or by running `docker inspect` the node-docker container. |
 
 ### Events
 
@@ -190,7 +193,7 @@ Grid の設定には、さまざまなセクションが用意されています
 | `--http-logs`            | boolean | `false`                                                                                                                                                                   | http ログを有効にします。http ログを記録するには、トレースを有効にする必要があります。                                                             |
 | `--log-encoding`         | string  | `UTF-8`                                                                                                                                                                   | ログのエンコーディング。                                                                                                                           |
 | `--log`                  | string  | Windows パスの例: <br>`'\path\to\file\gridlog.log'` <br> or <br> `'C:\path\path\to\file\gridlog.log'`<br><br>Linux/Unix/MacOS パスの例:<br> `'/path/to/file/gridlog.log'` | ログを出力するファイル。OS のファイルパスと互換性があることを確認してください。                                                                    |
-| `--log-level`            | string  | `“INFO”`                                                                                                                                                                  | ログレベル。デフォルトは INFO です。 ログレベルはこちらを参照してください。 https://docs.oracle.com/javase/7/docs/api/java/util/logging/Level.html |
+| `--log-level`            | string  | `“INFO”`                                                                                                                                                                  | ログレベル。デフォルトは INFO です。 ログレベルはこちらを参照してください。 https://docs.oracle.com/en/java/javase/11/docs/api/java.logging/java/util/logging/Level.html |
 | `--plain-logs`           | boolean | `true`                                                                                                                                                                    | プレーンなログを使用します。                                                                                                                       |
 | `--structured-logs`      | boolean | `false`                                                                                                                                                                   | 構造化ログを使用します。                                                                                                                           |
 | `--tracing`              | boolean | `true`                                                                                                                                                                    | トレースを有効にします。                                                                                                                           |
@@ -204,10 +207,10 @@ Grid の設定には、さまざまなセクションが用意されています
 
 ### Node
 
-| オプション                    | 型       | 値/例                                                                                                                                                                                                                                                        | 概要                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
-| ----------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| オプション                    | 型        | 値/例                                                                                                                                                                                                                                                        | 概要                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
+| ----------------------------- |----------| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | `--detect-drivers`            | boolean  | `true`                                                                                                                                                                                                                                                       | 現在のシステム上で利用可能なドライバーを自動で検出してノードに追加します。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
-| `--driver-configuration`      | string[] | `display-name="Firefox Nightly" max-sessions=2 webdriver-path="/usr/local/bin/geckodriver" stereotype='{"browserName": "firefox", "browserVersion": "86", "moz:firefoxOptions": {"binary":"/Applications/Firefox Nightly.app/Contents/MacOS/firefox-bin"}}'` | ノードがサポートするドライバーの一覧。可読性向上のため TOML ファイルで設定することを推奨します。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
+| `--driver-configuration`      | string[] | `display-name="Firefox Nightly" max-sessions=2 webdriver-path="/usr/local/bin/geckodriver" stereotype="{\"browserName\": \"firefox\", \"browserVersion\": \"86\", \"moz:firefoxOptions\": {\"binary\":\"/Applications/Firefox Nightly.app/Contents/MacOS/firefox-bin\"}}"` | ノードがサポートするドライバーの一覧。可読性向上のため TOML ファイルで設定することを推奨します。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
 | `--driver-factory`            | string[] | `org.openqa.selenium.example.LynxDriverFactory '{"browserName": "lynx"}'`                                                                                                                                                                                    | 完全修飾クラス名と、そのクラスが対応するブラウザの設定とのマッピング。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
 | `--driver-implementation`     | string[] | `"firefox"`                                                                                                                                                                                                                                                  | チェックされるドライバー。指定された場合、自動設定はスキップされます。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
 | `--node-implementation`       | string   | `"org.openqa.selenium.grid.node.local.LocalNodeFactory"`                                                                                                                                                                                                     | デフォルトでないノード実装の完全なクラス名。これはセッションのライフサイクルを管理するために使用されます。                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
@@ -218,13 +221,14 @@ Grid の設定には、さまざまなセクションが用意されています
 | `--register-cycle`            | int      | `10`                                                                                                                                                                                                                                                         | ノードがディストリビューターに初回登録を試みる頻度(秒)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
 | `--register-period`           | int      | `120`                                                                                                                                                                                                                                                        | ノードが初めてディストリビューターに初回登録を試みるのにかかる時間(秒)。この時間が経過すると、ノードは再登録を試みない。                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
 | `--session-timeout`           | int      | `300`                                                                                                                                                                                                                                                        | X をセッションタイムアウト(秒)としたとき、 ノード は、過去 X 秒間に何の活動もなかったセッションを自動的に終了させます。 これにより他のテストが利用できるようスロットを解放します。                                                                                                                                                                                                                                                                                                                                                                                                  |
-| `--vnc-env-var`               | string   | `START_XVFB`                                                                                                                                                                                                                                                 | VNC ストリームが利用可能かどうかを判断するために利用する環境変数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
+| `--vnc-env-var`               | string[] | `SE_START_XVFB SE_START_VNC SE_START_NO_VNC`                                                                                                                                                                                                                                                 | VNC ストリームが利用可能かどうかを判断するために利用する環境変数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
 | `--no-vnc-port`               | int      | `7900`                                                                                                                                                                                                                                                       | VNC が利用可能な場合、ローカルの noVNC ストリームを取得できるポートを設定します。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
 | `--drain-after-session-count` | int      | `1`                                                                                                                                                                                                                                                          | X 個のセッションが実行された後に、ノードをドレインしてシャットダウンします。 Kubernetes のような環境で有用です。 0 より大きい値を指定すると、この機能が有効になります。                                                                                                                                                                                                                                                                                                                                                                                                             |
 | `--hub`                       | string   | `http://localhost:4444`                                                                                                                                                                                                                                      | ハブ・ノード構成におけるハブのアドレスを指定します。ホスト名か IP アドレスが指定できます。この場合、ハブは `http://hostname:4444` とみなされ、 `--grid-url` は同じものになります。 `--publish-events` は `tcp://hostname:4442` 、`--subscribe-events` は `tcp://hostname:4443` となります。 `hostname` にポート番号が含まれている場合は、それが `--grid-url` に使用されますが、イベントバスの URI は変更されません。これらのデフォルト値は、適切なフラグを設定することでオーバーライドすることができます。ホスト名にプロトコル(`https`のような)が含まれる場合もそれが利用されます。 |
 | `--enable-cdp`                | boolean  | `true`                                                                                                                                                                                                                                                       | Grid 内で CDP プロキシーを有効にします。もしネットワークが web socket を許可していない場合、Grid 管理者は CDP を無効にできます。デフォルトは true です。                                                                                                                                                                                                                                                                                                                                                                                                                            |
-| `--enable-managed-downloads`| boolean | `false` | This causes the Node to auto manage files downloaded for a given session on the Node. |
-| `--selenium-manager`| boolean | `false` | When drivers are not available on the current system, use Selenium Manager. False by default. |
+| `--enable-managed-downloads`| boolean  | `false` | This causes the Node to auto manage files downloaded for a given session on the Node. |
+| `--selenium-manager`| boolean  | `false` | When drivers are not available on the current system, use Selenium Manager. False by default. |
+| `--connection-limit-per-session` | int      | `10` | Let X be the maximum number of websocket connections per session.This will ensure one session is not able to exhaust the connection limit of the host. |
 
 ### Relay
 
@@ -234,6 +238,7 @@ Grid の設定には、さまざまなセクションが用意されています
 | `--service-host`            | string   | `localhost`                                                                                                       | WebDriver コマンドをサポートしてるサービスが稼働しているホスト名。                                          |
 | `--service-port`            | int      | `4723`                                                                                                            | WebDriver コマンドをサポートしてるサービスが稼働しているポート番号。                                        |
 | `--service-status-endpoint` | string   | `/status`                                                                                                         | WebDriver サービスの状態を問い合わせるエンドポイント、オプショナルです。HTTP 200 レスポンスが期待されます。 |
+| `--service-protocol-version` | string | `HTTP/1.1` | Optional, enforce a specific protocol version in HttpClient when communicating with the endpoint service status |
 | `--service-configuration`   | string[] | `max-sessions=2 stereotype='{"browserName": "safari", "platformName": "iOS", "appium:platformVersion": "14.5"}}'` | 呼び出しの中継先となるサービスの設定。可読性向上のため、TOML ファイルで設定することを推奨します。           |
 
 ### Router
@@ -243,6 +248,7 @@ Grid の設定には、さまざまなセクションが用意されています
 | `--password` | string | `myStrongPassword` | クライアントがサーバーに接続する際に使用するパスワード。このパスワードとユーザー名の両方が設定されていないと使用できません。 |
 | `--username` | string | `admin`            | クライアントがサーバーに接続する際に使用するユーザー名。このユーザー名とパスワードの両方が設定されていないと使用できません。 |
 | `--sub-path` | string | `my_company/selenium_grid` | A sub-path that should be considered for all user facing routes on the Hub/Router/Standalone. |
+| `--disable-ui` | boolean | `true` | Disable the Grid UI. |
 
 ### Server
 
@@ -265,6 +271,7 @@ Grid の設定には、さまざまなセクションが用意されています
 | `--sessionqueue-port`       | int    | `1234`                  | 新規セッションキューがリッスンするポート                                                                                            |
 | `--session-request-timeout` | int    | `300`                   | タイムアウト(秒)。 新規セッションリクエストはキューに追加され、設定された時間以上キューに残っているリクエストはタイムアウトします。 |
 | `--session-retry-interval`  | int    | `5`                     | リトライ間隔(秒)。すべてのスロットがビジーな場合、 新規セッションリクエストはこの時間の間隔をおいてからリトライされます。           |
+| `--maximum-response-delay` | int | `8` | How often, in seconds, will the the SessionQueue response in case there is no data, to reduce the http requests while polling for new session requests. |
 
 ### Sessions
 
diff --git a/website_and_docs/content/documentation/grid/configuration/cli_options.pt-br.md b/website_and_docs/content/documentation/grid/configuration/cli_options.pt-br.md
index 4008db7f552c..0ca074b58e04 100644
--- a/website_and_docs/content/documentation/grid/configuration/cli_options.pt-br.md
+++ b/website_and_docs/content/documentation/grid/configuration/cli_options.pt-br.md
@@ -164,6 +164,8 @@ e esteja à vontade para nos enviar um pull request com alterações a esta pág
 | `--reject-unsupported-caps` | boolean | `false` | Permitir que o Distributor rejeite imediatamente um pedido de sessão se a Grid não suportar a capacidade pedida. Esta configuração é a ideal para Grid que não inicie Nodes a pedido. |
 | `--slot-matcher` | string | `org.openqa.selenium.grid.data.DefaultSlotMatcher` | Nome completo da class para uma implementação não padrão do comparador de slots. Isto é usado para determinar se um Node pode suportar uma sessão em particular. |
 | `--slot-selector` | string | `org.openqa.selenium.grid.distributor.selector.DefaultSlotSelector` | Nome completo da class para uma implementação não padrão do selector de slots. Isto é usado para selecionar um slot no Node caso tenha sido "matched". |
+| `--newsession-threadpool-size` | int | `24` | The Distributor uses a fixed-sized thread pool to create new sessions as it consumes new session requests from the queue. This allows configuring the size of the thread pool. The default value is no. of available processors * 3. Note: If the no. of threads is way greater than the available processors it will not always increase the performance. A high number of threads causes more context switching which is an expensive operation. |
+| `--purge-nodes-interval` | int | `30` | How often, in seconds, will the Distributor purge Nodes that have been down for a while. This is calculated based on the heartbeat received from a particular node. |
 
 ### Docker
 
@@ -176,6 +178,7 @@ e esteja à vontade para nos enviar um pull request com alterações a esta pág
 | `--docker-port` | int | `2375` | Port where the Docker daemon is running |
 | `--docker-url` | string | `http://localhost:2375` | URL for connecting to the Docker daemon |
 | `--docker-video-image` | string | `selenium/video:latest` | Docker image to be used when video recording is enabled |
+| `--docker-host-config-keys` | string[] | `Dns DnsOptions DnsSearch ExtraHosts Binds` | Specify which docker host configuration keys should be passed to browser containers. Keys name can be found in the Docker API [documentation](https://docs.docker.com/engine/api/v1.41/#tag/Container/operation/ContainerCreate), or by running `docker inspect` the node-docker container. |
 
 ### Events
 
@@ -193,7 +196,7 @@ e esteja à vontade para nos enviar um pull request com alterações a esta pág
 | `--http-logs` | boolean |  `false` | Enable http logging. Tracing should be enabled to log http logs. |
 | `--log-encoding` | string |  `UTF-8` | Log encoding |
 | `--log` | string | Windows path example : <br>`'\path\to\file\gridlog.log'` <br> or <br> `'C:\path\path\to\file\gridlog.log'`<br><br>Linux/Unix/MacOS path example :<br> `'/path/to/file/gridlog.log'` | File to write out logs. Ensure the file path is compatible with the operating system's file path. |
-| `--log-level` | string | `“INFO”` | Log level. Default logging level is INFO. Log levels are described here https://docs.oracle.com/javase/7/docs/api/java/util/logging/Level.html |
+| `--log-level` | string | `“INFO”` | Log level. Default logging level is INFO. Log levels are described here https://docs.oracle.com/en/java/javase/11/docs/api/java.logging/java/util/logging/Level.html |
 | `--plain-logs` | boolean | `true` | Use plain log lines |
 | `--structured-logs` | boolean | `false` | Use structured logs |
 | `--tracing` | boolean | `true` | Enable trace collection |
@@ -210,7 +213,7 @@ e esteja à vontade para nos enviar um pull request com alterações a esta pág
 | Opção | Tipo | Valor/Exemplo | Descrição |
 |---|---|---|---|---|
 | `--detect-drivers` | boolean | `true` | Autodetect which drivers are available on the current system, and add them to the Node. |
-| `--driver-configuration` | string[] | `display-name="Firefox Nightly" max-sessions=2 webdriver-path="/usr/local/bin/geckodriver" stereotype='{"browserName": "firefox", "browserVersion": "86", "moz:firefoxOptions": {"binary":"/Applications/Firefox Nightly.app/Contents/MacOS/firefox-bin"}}'` | List of configured drivers a Node supports. It is recommended to provide this type of configuration through a toml config file to improve readability |
+| `--driver-configuration` | string[] | `display-name="Firefox Nightly" max-sessions=2 webdriver-path="/usr/local/bin/geckodriver" stereotype="{\"browserName\": \"firefox\", \"browserVersion\": \"86\", \"moz:firefoxOptions\": {\"binary\":\"/Applications/Firefox Nightly.app/Contents/MacOS/firefox-bin\"}}"` | List of configured drivers a Node supports. It is recommended to provide this type of configuration through a toml config file to improve readability |
 | `--driver-factory` | string[] | `org.openqa.selenium.example.LynxDriverFactory '{"browserName": "lynx"}'` | Mapping of fully qualified class name to a browser configuration that this matches against. |
 | `--driver-implementation` | string[] | `"firefox"` | Drivers that should be checked. If specified, will skip autoconfiguration. |
 | `--node-implementation` | string | `"org.openqa.selenium.grid.node.local.LocalNodeFactory"` | Full classname of non-default Node implementation. This is used to manage a session's lifecycle. |
@@ -221,13 +224,14 @@ e esteja à vontade para nos enviar um pull request com alterações a esta pág
 | `--register-cycle` | int | `10` | How often, in seconds, the Node will try to register itself for the first time to the Distributor. |
 | `--register-period` | int | `120` | How long, in seconds, will the Node try to register to the Distributor for the first time. After this period is completed, the Node will not attempt to register again. |
 | `--session-timeout` | int | `300` | Let X be the session-timeout in seconds. The Node will automatically kill a session that has not had any activity in the last X seconds. This will release the slot for other tests. |
-| `--vnc-env-var`| string | `START_XVFB` | Environment variable to check in order to determine if a vnc stream is available or not. |
+| `--vnc-env-var`| string[] | `SE_START_XVFB SE_START_VNC SE_START_NO_VNC` | Environment variable to check in order to determine if a vnc stream is available or not. |
 | `--no-vnc-port`| int | `7900` | If VNC is available, sets the port where the local noVNC stream can be obtained |
 | `--drain-after-session-count`| int | `1` | Drain and shutdown the Node after X sessions have been executed. Useful for environments like Kubernetes. A value higher than zero enables this feature. |
 | `--hub`| string | `http://localhost:4444` | The address of the Hub in a Hub-and-Node configuration. Can be a hostname or IP address (`hostname`), in which case the Hub will be assumed to be `http://hostname:4444`, the `--grid-url` will be the same `--publish-events` will be `tcp://hostname:4442` and `--subscribe-events` will be `tcp://hostname:4443`. If `hostname` contains a port number, that will be used for `--grid-url` but the URIs for the event bus will remain the same. Any of these default values may be overridden but setting the correct flags. If the hostname has  a protocol (such as `https`) that will be used too. |
 | `--enable-cdp`| boolean | `true` | Enable CDP proxying in Grid. A Grid admin can disable CDP if the network doesnot allow websockets. True by default. |
 | `--enable-managed-downloads`| boolean | `false` | This causes the Node to auto manage files downloaded for a given session on the Node. |
 | `--selenium-manager`| boolean | `false` | When drivers are not available on the current system, use Selenium Manager. False by default. |
+| `--connection-limit-per-session` | int | `10` | Let X be the maximum number of websocket connections per session.This will ensure one session is not able to exhaust the connection limit of the host. |
 
 
 ### Relay
@@ -238,6 +242,7 @@ e esteja à vontade para nos enviar um pull request com alterações a esta pág
 | `--service-host` | string | `localhost` | Host name where the service that supports WebDriver commands is running |
 | `--service-port` | int | `4723` | Port where the service that supports WebDriver commands is running |
 | `--service-status-endpoint` | string | `/status` | Optional, endpoint to query the WebDriver service status, an HTTP 200 response is expected |
+| `--service-protocol-version` | string | `HTTP/1.1` | Optional, enforce a specific protocol version in HttpClient when communicating with the endpoint service status |
 | `--service-configuration` | string[] | `max-sessions=2 stereotype='{"browserName": "safari", "platformName": "iOS", "appium:platformVersion": "14.5"}}'` | Configuration for the service where calls will be relayed to. It is recommended to provide this type of configuration through a toml config file to improve readability. |
 
 ### Router
@@ -247,6 +252,7 @@ e esteja à vontade para nos enviar um pull request com alterações a esta pág
 | `--password` | string | `myStrongPassword` | Password clients must use to connect to the server. Both this and the username need to be set in order to be used. |
 | `--username` | string | `admin` | User name clients must use to connect to the server. Both this and the password need to be set in order to be used. |
 | `--sub-path` | string | `my_company/selenium_grid` | A sub-path that should be considered for all user facing routes on the Hub/Router/Standalone. |
+| `--disable-ui` | boolean | `true` | Disable the Grid UI. |
 
 
 ### Server
@@ -270,6 +276,7 @@ e esteja à vontade para nos enviar um pull request com alterações a esta pág
 | `--sessionqueue-port` | int | `1234` | Port on which the session queue server is listening. |
 | `--session-request-timeout` | int | `300` | Timeout in seconds. A new incoming session request is added to the queue. Requests sitting in the queue for longer than the configured time will timeout. |
 | `--session-retry-interval` | int | `5` | Retry interval in seconds. If all slots are busy, new session request will be retried after the given interval. |
+| `--maximum-response-delay` | int | `8` | How often, in seconds, will the the SessionQueue response in case there is no data, to reduce the http requests while polling for new session requests. |
 
 ### Sessions
 
diff --git a/website_and_docs/content/documentation/grid/configuration/cli_options.zh-cn.md b/website_and_docs/content/documentation/grid/configuration/cli_options.zh-cn.md
index 13f6fdac6597..27b92048a91b 100644
--- a/website_and_docs/content/documentation/grid/configuration/cli_options.zh-cn.md
+++ b/website_and_docs/content/documentation/grid/configuration/cli_options.zh-cn.md
@@ -171,6 +171,8 @@ pull request updating this page.
 | `--reject-unsupported-caps` | boolean | `false` | Allow the Distributor to reject a request immediately if the Grid does not support the requested capability. Rejecting requests immediately is suitable for a Grid setup that does not spin up Nodes on demand. |
 | `--slot-matcher` | string | `org.openqa.selenium.grid.data.DefaultSlotMatcher` | Full class name of non-default slot matcher to use. This is used to determine whether a Node can support a particular session. |
 | `--slot-selector` | string | `org.openqa.selenium.grid.distributor.selector.DefaultSlotSelector` | Full class name of non-default slot selector. This is used to select a slot in a Node once the Node has been matched. |
+| `--newsession-threadpool-size` | int | `24` | The Distributor uses a fixed-sized thread pool to create new sessions as it consumes new session requests from the queue. This allows configuring the size of the thread pool. The default value is no. of available processors * 3. Note: If the no. of threads is way greater than the available processors it will not always increase the performance. A high number of threads causes more context switching which is an expensive operation. |
+| `--purge-nodes-interval` | int | `30` | How often, in seconds, will the Distributor purge Nodes that have been down for a while. This is calculated based on the heartbeat received from a particular node. |
 
 ### Docker
 
@@ -183,6 +185,7 @@ pull request updating this page.
 | `--docker-port` | int | `2375` | Port where the Docker daemon is running |
 | `--docker-url` | string | `http://localhost:2375` | URL for connecting to the Docker daemon |
 | `--docker-video-image` | string | `selenium/video:latest` | Docker image to be used when video recording is enabled |
+| `--docker-host-config-keys` | string[] | `Dns DnsOptions DnsSearch ExtraHosts Binds` | Specify which docker host configuration keys should be passed to browser containers. Keys name can be found in the Docker API [documentation](https://docs.docker.com/engine/api/v1.41/#tag/Container/operation/ContainerCreate), or by running `docker inspect` the node-docker container. |
 
 ### Events
 
@@ -200,7 +203,7 @@ pull request updating this page.
 | `--http-logs` | boolean |  `false` | Enable http logging. Tracing should be enabled to log http logs. |
 | `--log-encoding` | string |  `UTF-8` | Log encoding |
 | `--log` | string | Windows path example : <br>`'\path\to\file\gridlog.log'` <br> or <br> `'C:\path\path\to\file\gridlog.log'`<br><br>Linux/Unix/MacOS path example :<br> `'/path/to/file/gridlog.log'` | File to write out logs. Ensure the file path is compatible with the operating system's file path. |
-| `--log-level` | string | `“INFO”` | Log level. Default logging level is INFO. Log levels are described here https://docs.oracle.com/javase/7/docs/api/java/util/logging/Level.html |
+| `--log-level` | string | `“INFO”` | Log level. Default logging level is INFO. Log levels are described here https://docs.oracle.com/en/java/javase/11/docs/api/java.logging/java/util/logging/Level.html |
 | `--plain-logs` | boolean | `true` | Use plain log lines |
 | `--structured-logs` | boolean | `false` | Use structured logs |
 | `--tracing` | boolean | `true` | Enable trace collection |
@@ -217,7 +220,7 @@ pull request updating this page.
 | Option | Type | Value/Example | Description |
 |---|---|---|---|---|
 | `--detect-drivers` | boolean | `true` | Autodetect which drivers are available on the current system, and add them to the Node. |
-| `--driver-configuration` | string[] | `display-name="Firefox Nightly" max-sessions=2 webdriver-path="/usr/local/bin/geckodriver" stereotype='{"browserName": "firefox", "browserVersion": "86", "moz:firefoxOptions": {"binary":"/Applications/Firefox Nightly.app/Contents/MacOS/firefox-bin"}}'` | List of configured drivers a Node supports. It is recommended to provide this type of configuration through a toml config file to improve readability |
+| `--driver-configuration` | string[] | `display-name="Firefox Nightly" max-sessions=2 webdriver-path="/usr/local/bin/geckodriver" stereotype="{\"browserName\": \"firefox\", \"browserVersion\": \"86\", \"moz:firefoxOptions\": {\"binary\":\"/Applications/Firefox Nightly.app/Contents/MacOS/firefox-bin\"}}"` | List of configured drivers a Node supports. It is recommended to provide this type of configuration through a toml config file to improve readability |
 | `--driver-factory` | string[] | `org.openqa.selenium.example.LynxDriverFactory '{"browserName": "lynx"}'` | Mapping of fully qualified class name to a browser configuration that this matches against. |
 | `--driver-implementation` | string[] | `"firefox"` | Drivers that should be checked. If specified, will skip autoconfiguration. |
 | `--node-implementation` | string | `"org.openqa.selenium.grid.node.local.LocalNodeFactory"` | Full classname of non-default Node implementation. This is used to manage a session's lifecycle. |
@@ -228,13 +231,14 @@ pull request updating this page.
 | `--register-cycle` | int | `10` | How often, in seconds, the Node will try to register itself for the first time to the Distributor. |
 | `--register-period` | int | `120` | How long, in seconds, will the Node try to register to the Distributor for the first time. After this period is completed, the Node will not attempt to register again. |
 | `--session-timeout` | int | `300` | Let X be the session-timeout in seconds. The Node will automatically kill a session that has not had any activity in the last X seconds. This will release the slot for other tests. |
-| `--vnc-env-var`| string | `START_XVFB` | Environment variable to check in order to determine if a vnc stream is available or not. |
+| `--vnc-env-var`| string[] | `SE_START_XVFB SE_START_VNC SE_START_NO_VNC` | Environment variable to check in order to determine if a vnc stream is available or not. |
 | `--no-vnc-port`| int | `7900` | If VNC is available, sets the port where the local noVNC stream can be obtained |
 | `--drain-after-session-count`| int | `1` | Drain and shutdown the Node after X sessions have been executed. Useful for environments like Kubernetes. A value higher than zero enables this feature. |
 | `--hub`| string | `http://localhost:4444` | The address of the Hub in a Hub-and-Node configuration. Can be a hostname or IP address (`hostname`), in which case the Hub will be assumed to be `http://hostname:4444`, the `--grid-url` will be the same `--publish-events` will be `tcp://hostname:4442` and `--subscribe-events` will be `tcp://hostname:4443`. If `hostname` contains a port number, that will be used for `--grid-url` but the URIs for the event bus will remain the same. Any of these default values may be overridden but setting the correct flags. If the hostname has  a protocol (such as `https`) that will be used too. |
 | `--enable-cdp`| boolean | `true` | Enable CDP proxying in Grid. A Grid admin can disable CDP if the network doesnot allow websockets. True by default. |
 | `--enable-managed-downloads`| boolean | `false` | This causes the Node to auto manage files downloaded for a given session on the Node. |
 | `--selenium-manager`| boolean | `false` | When drivers are not available on the current system, use Selenium Manager. False by default. |
+| `--connection-limit-per-session` | int | `10` | Let X be the maximum number of websocket connections per session.This will ensure one session is not able to exhaust the connection limit of the host. |
 
 ### Relay
 
@@ -244,6 +248,7 @@ pull request updating this page.
 | `--service-host` | string | `localhost` | Host name where the service that supports WebDriver commands is running |
 | `--service-port` | int | `4723` | Port where the service that supports WebDriver commands is running |
 | `--service-status-endpoint` | string | `/status` | Optional, endpoint to query the WebDriver service status, an HTTP 200 response is expected |
+| `--service-protocol-version` | string | `HTTP/1.1` | Optional, enforce a specific protocol version in HttpClient when communicating with the endpoint service status |
 | `--service-configuration` | string[] | `max-sessions=2 stereotype='{"browserName": "safari", "platformName": "iOS", "appium:platformVersion": "14.5"}}'` | Configuration for the service where calls will be relayed to. It is recommended to provide this type of configuration through a toml config file to improve readability. |
 
 ### Router
@@ -253,6 +258,7 @@ pull request updating this page.
 | `--password` | string | `myStrongPassword` | Password clients must use to connect to the server. Both this and the username need to be set in order to be used. |
 | `--username` | string | `admin` | User name clients must use to connect to the server. Both this and the password need to be set in order to be used. |
 | `--sub-path` | string | `my_company/selenium_grid` | A sub-path that should be considered for all user facing routes on the Hub/Router/Standalone. |
+| `--disable-ui` | boolean | `true` | Disable the Grid UI. |
 
 
 ### Server
@@ -276,6 +282,7 @@ pull request updating this page.
 | `--sessionqueue-port` | int | `1234` | Port on which the session queue server is listening. |
 | `--session-request-timeout` | int | `300` | Timeout in seconds. A new incoming session request is added to the queue. Requests sitting in the queue for longer than the configured time will timeout. |
 | `--session-retry-interval` | int | `5` | Retry interval in seconds. If all slots are busy, new session request will be retried after the given interval. |
+| `--maximum-response-delay` | int | `8` | How often, in seconds, will the the SessionQueue response in case there is no data, to reduce the http requests while polling for new session requests. |
 
 ### Sessions
 
diff --git a/website_and_docs/content/documentation/grid/configuration/toml_options.en.md b/website_and_docs/content/documentation/grid/configuration/toml_options.en.md
index 515b960734d3..38de632f4656 100644
--- a/website_and_docs/content/documentation/grid/configuration/toml_options.en.md
+++ b/website_and_docs/content/documentation/grid/configuration/toml_options.en.md
@@ -134,6 +134,8 @@ detect-drivers = false
 # Default Appium/Cloud server endpoint
 url = "http://localhost:4723/wd/hub"
 status-endpoint = "/status"
+# Optional, enforce a specific protocol version in HttpClient when communicating with the endpoint service status (e.g. HTTP/1.1, HTTP/2)
+protocol-version = "HTTP/1.1"
 # Stereotypes supported by the service. The initial number is "max-sessions", and will allocate 
 # that many test slots to that particular configuration
 configs = [
@@ -156,10 +158,15 @@ password = "myStrongPassword"
 Here is a Java example showing how to start a session using the configured user and password.
 
 ```java
-URL gridUrl = new URL("http://admin:myStrongPassword@localhost:4444");
-RemoteWebDriver webDriver = new RemoteWebDriver(gridUrl, new ChromeOptions());
+ClientConfig clientConfig = ClientConfig.defaultConfig()
+  .baseUrl(new URL("http://localhost:4444"))
+  .authenticateAs(new UsernameAndPassword("admin", "myStrongPassword"));
+HttpCommandExecutor executor = new HttpCommandExecutor(clientConfig);
+RemoteWebDriver driver = new RemoteWebDriver(executor, new ChromeOptions());
 ```
 
+In other languages, you can use the URL http://admin:myStrongPassword@localhost:4444
+
 ### Setting custom capabilities for matching specific Nodes
 
 **Important:** Custom capabilities need to be set in the configuration in all Nodes. They also
diff --git a/website_and_docs/content/documentation/grid/configuration/toml_options.ja.md b/website_and_docs/content/documentation/grid/configuration/toml_options.ja.md
index 6601f238fc00..88a59cb06593 100644
--- a/website_and_docs/content/documentation/grid/configuration/toml_options.ja.md
+++ b/website_and_docs/content/documentation/grid/configuration/toml_options.ja.md
@@ -131,6 +131,8 @@ detect-drivers = false
 # Default Appium/Cloud server endpoint
 url = "http://localhost:4723/wd/hub"
 status-endpoint = "/status"
+# Optional, enforce a specific protocol version in HttpClient when communicating with the endpoint service status (e.g. HTTP/1.1, HTTP/2)
+protocol-version = "HTTP/1.1"
 # Stereotypes supported by the service. The initial number is "max-sessions", and will allocate
 # that many test slots to that particular configuration
 configs = [
@@ -154,10 +156,15 @@ password = "myStrongPassword"
 Java でユーザーとパスワードを使ってセッションを開始する方法の例です。
 
 ```java
-URL gridUrl = new URL("http://admin:myStrongPassword@localhost:4444");
-RemoteWebDriver webDriver = new RemoteWebDriver(gridUrl, new ChromeOptions());
+ClientConfig clientConfig = ClientConfig.defaultConfig()
+  .baseUrl(new URL("http://localhost:4444"))
+  .authenticateAs(new UsernameAndPassword("admin", "myStrongPassword"));
+HttpCommandExecutor executor = new HttpCommandExecutor(clientConfig);
+RemoteWebDriver driver = new RemoteWebDriver(executor, new ChromeOptions());
 ```
 
+In other languages, you can use the URL http://admin:myStrongPassword@localhost:4444
+
 ### 特定のノードにマッチするカスタム capabilities の設定
 
 **重要**: カスタム capabilities は全てのノードで設定する必要があります。
diff --git a/website_and_docs/content/documentation/grid/configuration/toml_options.pt-br.md b/website_and_docs/content/documentation/grid/configuration/toml_options.pt-br.md
index d5fa132c2034..5b6932bd8c36 100644
--- a/website_and_docs/content/documentation/grid/configuration/toml_options.pt-br.md
+++ b/website_and_docs/content/documentation/grid/configuration/toml_options.pt-br.md
@@ -143,6 +143,8 @@ detect-drivers = false
 # Default Appium/Cloud server endpoint
 url = "http://localhost:4723/wd/hub"
 status-endpoint = "/status"
+# Optional, enforce a specific protocol version in HttpClient when communicating with the endpoint service status (e.g. HTTP/1.1, HTTP/2)
+protocol-version = "HTTP/1.1"
 # Stereotypes supported by the service. The initial number is "max-sessions", and will allocate 
 # that many test slots to that particular configuration
 configs = [
@@ -165,10 +167,15 @@ password = "myStrongPassword"
 Here is a Java example showing how to start a session using the configured user and password.
 
 ```java
-URL gridUrl = new URL("http://admin:myStrongPassword@localhost:4444");
-RemoteWebDriver webDriver = new RemoteWebDriver(gridUrl, new ChromeOptions());
+ClientConfig clientConfig = ClientConfig.defaultConfig()
+  .baseUrl(new URL("http://localhost:4444"))
+  .authenticateAs(new UsernameAndPassword("admin", "myStrongPassword"));
+HttpCommandExecutor executor = new HttpCommandExecutor(clientConfig);
+RemoteWebDriver driver = new RemoteWebDriver(executor, new ChromeOptions());
 ```
 
+In other languages, you can use the URL http://admin:myStrongPassword@localhost:4444
+
 ### Setting custom capabilities for matching specific Nodes
 
 **Important:** Custom capabilities need to be set in the configuration in all Nodes. They also
diff --git a/website_and_docs/content/documentation/grid/configuration/toml_options.zh-cn.md b/website_and_docs/content/documentation/grid/configuration/toml_options.zh-cn.md
index 9370ca12ecb6..ecda44aa766d 100644
--- a/website_and_docs/content/documentation/grid/configuration/toml_options.zh-cn.md
+++ b/website_and_docs/content/documentation/grid/configuration/toml_options.zh-cn.md
@@ -110,8 +110,8 @@ webdriver-executable = '/path/to/chromedriver/95/chromedriver'
 则最多有2个并发会话.
 原型配置需要映射一个Docker映像,
 Docker的守护进程需要通过http/tcp公开.
-此外，可以通过 `devices` 属性定义在主机上可访问的哪些设备文件将在容器中可用。
-有关 docker 设备映射如何工作的更多信息，请参阅 [docker](https://docs.docker.com/engine/reference/commandline/run/#add-host-device-to-container---device) 文档。
+此外, 可以通过 `devices` 属性定义在主机上可访问的哪些设备文件将在容器中可用. 
+有关 docker 设备映射如何工作的更多信息, 请参阅 [docker](https://docs.docker.com/engine/reference/commandline/run/#add-host-device-to-container---device) 文档. 
 
 ```toml
 [node]
@@ -149,6 +149,8 @@ detect-drivers = false
 # Default Appium/Cloud server endpoint
 url = "http://localhost:4723/wd/hub"
 status-endpoint = "/status"
+# Optional, enforce a specific protocol version in HttpClient when communicating with the endpoint service status (e.g. HTTP/1.1, HTTP/2)
+protocol-version = "HTTP/1.1"
 # Stereotypes supported by the service. The initial number is "max-sessions", and will allocate 
 # that many test slots to that particular configuration
 configs = [
@@ -173,14 +175,18 @@ password = "myStrongPassword"
 下面是一个Java示例, 演示如何使用配置的用户和密码启动会话.
 
 ```java
-URL gridUrl = new URL("http://admin:myStrongPassword@localhost:4444");
-RemoteWebDriver webDriver = new RemoteWebDriver(gridUrl, new ChromeOptions());
+ClientConfig clientConfig = ClientConfig.defaultConfig()
+  .baseUrl(new URL("http://localhost:4444"))
+  .authenticateAs(new UsernameAndPassword("admin", "myStrongPassword"));
+HttpCommandExecutor executor = new HttpCommandExecutor(clientConfig);
+RemoteWebDriver driver = new RemoteWebDriver(executor, new ChromeOptions());
 ```
 
-### Setting custom capabilities for matching specific Nodes
+在其他语言中, 您可以使用 URL  http://admin:myStrongPassword@localhost:4444
 
-**Important:** Custom capabilities need to be set in the configuration in all Nodes. They also
-need to be included always in every session request.
+### 为匹配特定节点设置自定义功能
+
+**重要提示:** 自定义功能需要在所有节点的配置中进行设置. 并且在每次会话请求中都必须包含这些功能.
 
 ```toml
 [node]
@@ -192,7 +198,7 @@ stereotype = '{"browserName": "firefox", "platformName": "macOS", "browserVersio
 max-sessions = 5
 ```
 
-Here is a Java example showing how to match that Node
+这里有一个 Java 示例, 展示了如何匹配那个节点
 
 ```java
 FirefoxOptions options = new FirefoxOptions();
@@ -205,14 +211,16 @@ driver.get("https://selenium.dev");
 driver.quit();
 ```
 
-### Enabling Managed downloads by the Node.
+### 启用节点的托管下载功能.
 
-The Node can be instructed to manage downloads automatically. This will cause the Node to save all files that were downloaded for a particular session into a temp directory, which can later be retrieved from the node.
-To turn this capability on, use the below configuration:
+节点可以被设置为自动管理下载. 
+这将导致节点会把特定会话中下载的所有文件保存到一个临时目录中, 
+之后可以从节点中获取这些文件.  
+要启用此功能, 请使用以下配置:
 
 ```toml
 [node]
 enable-managed-downloads = true
 ```
 
-Refer to the [CLI section]({{< ref "cli_options.md#enabling-managed-downloads-by-the-node" >}}) for a complete example.
\ No newline at end of file
+有关完整示例, 请参阅[CLI章节]({{< ref "cli_options.md#enabling-managed-downloads-by-the-node" >}}) .
\ No newline at end of file
diff --git a/website_and_docs/content/documentation/grid/getting_started.en.md b/website_and_docs/content/documentation/grid/getting_started.en.md
index c5d956a88883..9b32f24ca380 100644
--- a/website_and_docs/content/documentation/grid/getting_started.en.md
+++ b/website_and_docs/content/documentation/grid/getting_started.en.md
@@ -216,7 +216,7 @@ endpoint or using [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.
+[Configuring Components]({{< ref "configuration" >}}) section.
 {{% /pageinfo %}}
 
 ## Using the Java 11 HTTP Client {{% badge-version version="4.5" %}}
@@ -304,13 +304,12 @@ Failure to protect your Grid could result in one or more of the following occurr
 * You allow third parties to access internal web applications and files
 * You allow third parties to run custom binaries
 
-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/)
+See this blog post on Detectify Labs, 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/).
 
 ## Further reading
 
 * [Components]({{< ref "components.md" >}}): learn how Grid's internal components relate to each other.
-* [Configuration]({{< ref "/configuration" >}}): customize your Grid setup.
+* [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.
+* [Advanced Features]({{< ref "advanced_features" >}}): explore more possibilities through Grid's features.
diff --git a/website_and_docs/content/documentation/grid/getting_started.ja.md b/website_and_docs/content/documentation/grid/getting_started.ja.md
index 869519d2b1a7..eb5c7a451f54 100644
--- a/website_and_docs/content/documentation/grid/getting_started.ja.md
+++ b/website_and_docs/content/documentation/grid/getting_started.ja.md
@@ -304,12 +304,12 @@ Grid を保護しないと、以下のような問題が発生する可能性が
 - サードパーティが内部 Web アプリケーションやファイルにアクセスすることを許可してしまう。
 - サードパーティにカスタムバイナリの実行を許可してしまう。
 
-[Detectify](//labs.detectify.com) のブログで公開されてしまった Grid が
+Detectify Labs, のブログで公開されてしまった Grid が
 どのように悪用されるかを紹介しています: [Don't Leave your Grid Wide Open](//labs.detectify.com/2017/10/06/guest-blog-dont-leave-your-grid-wide-open/)
 
 ## 参考文献
 
 - [Components]({{< ref "components.md" >}}): 内部のコンポーネントの仕組みを知る
-- [Configuration]({{< ref "/configuration" >}}): Grid の設定をカスタマイズする
+- [Configuration]({{< ref "configuration" >}}): Grid の設定をカスタマイズする
 - [Architecture]({{< ref "architecture.md" >}}): Grid のコンセプトを理解する
-- [Advanced Features]({{< ref "/advanced_features" >}}): Grid のさらなる可能性を探る
+- [Advanced Features]({{< ref "advanced_features" >}}): Grid のさらなる可能性を探る
diff --git a/website_and_docs/content/documentation/grid/getting_started.pt-br.md b/website_and_docs/content/documentation/grid/getting_started.pt-br.md
index ab919c0ded6d..4ef28f9b7e95 100644
--- a/website_and_docs/content/documentation/grid/getting_started.pt-br.md
+++ b/website_and_docs/content/documentation/grid/getting_started.pt-br.md
@@ -211,7 +211,7 @@ através de [GraphQL]({{< ref "advanced_features/graphql_support.md" >}}).
 
 {{% pageinfo color="primary" %}}
 Para simplificar, todos os exemplos apresentados assumem que os componentes estão a ser executados localmente.
-Exemplos mais detalhados podem ser encontrados na secção [Configurando Componentes]({{< ref "/configuration" >}}).
+Exemplos mais detalhados podem ser encontrados na secção [Configurando Componentes]({{< ref "configuration" >}}).
 {{% /pageinfo %}}
 
 ## Usando o cliente HTTP nativo Java 11 {{% badge-version version="4.5" %}}
@@ -300,13 +300,13 @@ Se falhar em proteger a Grid uma ou mais coisas poderão ocorrer:
 * Permitir acesso de terceiros a aplicativos web e a ficheiros
 * Permitir execução remota de ficheiros binários por terceiros
 
-Leia este artigo (em Inglês) em [Detectify](//labs.detectify.com), que dá um bom resumo
+Leia este artigo (em Inglês) em Detectify Labs, que dá um bom resumo
 de como uma Grid exposta publicamente pode ser abusada:
 [Don't Leave your Grid Wide Open](//labs.detectify.com/2017/10/06/guest-blog-dont-leave-your-grid-wide-open/)
 
 ## Leituras adicionais
 
 * [Componentes]({{< ref "components.md" >}}): compreender como usar os componentes da Grid
-* [Configuração]({{< ref "/configuration" >}}): personalize a sua configuração Grid.
+* [Configuração]({{< ref "configuration" >}}): personalize a sua configuração Grid.
 * [Arquitectura]({{< ref "architecture.md" >}}): entenda conceitos chave da Grid.
-* [Advanced Features]({{< ref "/advanced_features" >}}): explore mais possibilidades da Grid.
+* [Advanced Features]({{< ref "advanced_features" >}}): explore mais possibilidades da Grid.
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 b799eb48847f..c56aec37a41a 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
@@ -209,7 +209,7 @@ driver.quit();
 `API` 调用可以通过 [http://localhost:4444/status](http://localhost:4444/status) 端点或使用 [GraphQL]({{< ref "advanced_features/graphql_support.md" >}})
 
 {{% pageinfo color="primary" %}}
-为简单起见，本页中显示的所有命令示例均假定组件正在运行在本地。更详细的示例和用法可以在[配置组件]({{< ref "/configuration" >}}) 部分。
+为简单起见，本页中显示的所有命令示例均假定组件正在运行在本地。更详细的示例和用法可以在[配置组件]({{< ref "configuration" >}}) 部分。
 {{% /pageinfo %}}
 
 ## 使用 Java 11 中的 HTTP Client {{% badge-version version="4.5" %}}
@@ -272,11 +272,11 @@ java -Dwebdriver.http.factory=jdk-http-client -jar selenium-server-<version>.jar
 * 您允许第三方访问内部网络应用程序和文件
 * 您允许第三方运行自定义二进制文件
 
-请参阅 [Detectify](//labs.detectify.com) 上的这篇博文，它提供了一个很好的公开暴露的 `Grid` 如何被滥用的概述：[不要让你的 `Grid` 暴露在外](//labs.detectify.com/2017/10/06/guest-blog-dont-leave-your-grid-wide-open/)
+请参阅 Detectify Labs, 上的这篇博文，它提供了一个很好的公开暴露的 `Grid` 如何被滥用的概述：[不要让你的 `Grid` 暴露在外](//labs.detectify.com/2017/10/06/guest-blog-dont-leave-your-grid-wide-open/)
 
 ## 延伸阅读
 
 * [Components]({{< ref "components.md" >}})：了解 `Grid` 的内部组件如何相互关联。
-* [Configuration]({{< ref "/configuration" >}}): 自定义您的 `Grid` 设置。
+* [Configuration]({{< ref "configuration" >}}): 自定义您的 `Grid` 设置。
 * [Architecture]({{< ref "architecture.md" >}}): 理解 `Grid` 中的关键概念。
-* [Advanced Features]({{< ref "/advanced_features" >}}): 通过Grid的特性探索更多的可能性。
+* [Advanced Features]({{< ref "advanced_features" >}}): 通过Grid的特性探索更多的可能性。
diff --git a/website_and_docs/content/documentation/legacy/desired_capabilities.en.md b/website_and_docs/content/documentation/legacy/desired_capabilities.en.md
index 322157dd5d79..12203a16ec53 100644
--- a/website_and_docs/content/documentation/legacy/desired_capabilities.en.md
+++ b/website_and_docs/content/documentation/legacy/desired_capabilities.en.md
@@ -14,7 +14,7 @@ See [JSON Wire Protocol]({{< ref "json_wire_protocol.md#capabilities-json-object
 ## Remote Driver Specific
 <table><thead><th> <b>Key</b> </th><th> <b>Type</b> </th><th> <b>Description</b> </th></thead><tbody>
 <tr><td> webdriver.remote.sessionid </td><td> string     </td><td> WebDriver session ID for the session. Readonly and only returned if the server implements a server-side webdriver-backed selenium. </td></tr>
-<tr><td> webdriver.remote.quietExceptions </td><td> boolean      </td><td> Disable automatic screnshot capture on exceptions. This is False by default. </td></tr></tbody></table>
+<tr><td> webdriver.remote.quietExceptions </td><td> boolean      </td><td> Disable automatic screenshot capture on exceptions. This is False by default. </td></tr></tbody></table>
 
 ## Grid Specific
 <table><thead><th> <b>Key</b> </th><th> <b>Type</b> </th><th> <b>Description</b> </th></thead><tbody>
@@ -78,7 +78,7 @@ Preferences accepted by the FirefoxProfile with special meaning, in the WebDrive
 ## Safari specific
 | Key                      | Type              | Description                                                                                                                   |
 |:-----|:-------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| honorSystemProxy | boolean | Whether to honour the sysem proxy.                                                                                                                                                                                           |
+| honorSystemProxy | boolean | Whether to honour the system proxy.                                                                                                                                                                                          |
 | ensureCleanSession | boolean | Whether to make sure the session has no cookies, cache entries. And that any registry and proxy settings are restored after the session.                                                                                     |
 
 
diff --git a/website_and_docs/content/documentation/legacy/json_wire_protocol.en.md b/website_and_docs/content/documentation/legacy/json_wire_protocol.en.md
index 6e58c7c6626c..05eb0f75f552 100644
--- a/website_and_docs/content/documentation/legacy/json_wire_protocol.en.md
+++ b/website_and_docs/content/documentation/legacy/json_wire_protocol.en.md
@@ -904,7 +904,7 @@ Arguments may be any JSON-primitive, array, or JSON object.  JSON objects that d
 <dt><b>Potential Errors:</b></dt>
 <dd><code>NoSuchWindow</code> - If the currently selected window has been closed.</dd>
 <dd><code>StaleElementReference</code> - If one of the script arguments is a WebElement that is not attached to the page's DOM.</dd>
-<dd><code>Timeout</code> - If the script callback is not invoked before the timout expires. Timeouts are controlled by the <code>/session/:sessionId/timeout/async_script</code> command.</dd>
+<dd><code>Timeout</code> - If the script callback is not invoked before the timeout expires. Timeouts are controlled by the <code>/session/:sessionId/timeout/async_script</code> command.</dd>
 <dd><code>JavaScriptError</code> - If the script throws an Error or if an <code>unload</code> event is fired while waiting for the script to finish.</dd>
 </dl>
 </dd>
diff --git a/website_and_docs/content/documentation/legacy/selenium_2/faq.en.md b/website_and_docs/content/documentation/legacy/selenium_2/faq.en.md
index e44c997762a0..b61d13716f22 100644
--- a/website_and_docs/content/documentation/legacy/selenium_2/faq.en.md
+++ b/website_and_docs/content/documentation/legacy/selenium_2/faq.en.md
@@ -35,7 +35,7 @@ A: We believe that within a software application's development team, the people
 
 A: We believe that most of the time there is a requirement to execute Javascript there is a failing in the tool being used: it hasn't emitted the correct events, has not interacted with a page correctly, or has failed to react when an XmlHttpRequest returns. We would rather fix WebDriver to work consistently and correctly than rely on testers working out which Javascript method to call.
 
-We also realise that there will be times when this is a limitation. As a result, for those browsers that support it, you can execute Javascript by casting the WebDriver instance to a [JavascriptExecutor](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/JavascriptExecutor.html). In Java, this looks like:
+We also realise that there will be times when this is a limitation. As a result, for those browsers that support it, you can execute Javascript by casting the WebDriver instance to a JavascriptExecutor (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/JavascriptExecutor.html`). In Java, this looks like:
 
 ```
 WebDriver driver; // Assigned elsewhere
@@ -87,7 +87,7 @@ A: WebDriver offers the ability to cope with multiple windows. This is done by u
 
 ### Q: Does WebDriver support Javascript alerts and prompts?
 
-A: Yes, using the [Alerts API](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/Alert.html):
+A: Yes, using the Alerts API (`http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/Alert.html`):
 
 ```
 // Get a handle to the open alert, prompt or confirmation
diff --git a/website_and_docs/content/documentation/legacy/selenium_ide/_index.ja.md b/website_and_docs/content/documentation/legacy/selenium_ide/_index.ja.md
index 387fad87d05f..dcef8026d4dd 100644
--- a/website_and_docs/content/documentation/legacy/selenium_ide/_index.ja.md
+++ b/website_and_docs/content/documentation/legacy/selenium_ide/_index.ja.md
@@ -664,7 +664,7 @@ id 属性に一致する要素がない場合には、name 属性を持つ要素
 
 ### Nameによる特定
 
-name ロケータタイプは、nama 属性に一致する最初の要素を特定します。
+name ロケータタイプは、name 属性に一致する最初の要素を特定します。
 1つの name 属性に対して、複数の要素が同じ値を持っている場合には、フィルタを使ってロケーションストラテジーの精度を高めることができます。
 デフォルトのフィルタタイプは value です (value 属性に一致)。
 
diff --git a/website_and_docs/content/documentation/overview/_index.en.md b/website_and_docs/content/documentation/overview/_index.en.md
index 720099690895..02fbeafd7e9d 100644
--- a/website_and_docs/content/documentation/overview/_index.en.md
+++ b/website_and_docs/content/documentation/overview/_index.en.md
@@ -1,7 +1,7 @@
 ---
 title: "Selenium Overview"
 linkTitle: "Overview"
-weight: 2
+weight: 1
 description: >
   Is Selenium for you? See an overview of the different project components.
 aliases: ["/documentation/en/introduction/"]
diff --git a/website_and_docs/content/documentation/overview/_index.ja.md b/website_and_docs/content/documentation/overview/_index.ja.md
index 07cb682a90d6..13f5eba59aa6 100644
--- a/website_and_docs/content/documentation/overview/_index.ja.md
+++ b/website_and_docs/content/documentation/overview/_index.ja.md
@@ -1,7 +1,7 @@
 ---
 title: "概要"
 linkTitle: "概要"
-weight: 2
+weight: 1
 description: >
   Seleniumはあなたに適していますか？さまざまなプロジェクトのコンポーネントの概要を参照してください。
 aliases: ["/documentation/ja/introduction/"]
@@ -12,7 +12,7 @@ Seleniumは一つのツールやAPIではありません。たくさんのツー
 ## WebDriver
 
 デスクトップのウェブサイトのテスト自動化をはじめるのなら、WebDriver APIを使いましょう。
-[WebDriver]({{< ref "/webdriver.md" >}}) はブラウザ自動化のAPIを使用します。このAPIは、ブラウザをコントロールしてテストを実行するためにブラウザベンダーによって提供されています。これは現実のユーザーがブラウザを操作するかのように動きます。
+[WebDriver]({{< ref "webdriver.md" >}}) はブラウザ自動化のAPIを使用します。このAPIは、ブラウザをコントロールしてテストを実行するためにブラウザベンダーによって提供されています。これは現実のユーザーがブラウザを操作するかのように動きます。
 WebDriverのAPIはアプリケーションのコードと一緒にコンパイルする必要がありませんから、全く邪魔になりません。
 これによって、あなたは本番環境と同じアプリケーションをテストすることができます。
 
@@ -31,4 +31,4 @@ Selenium Grid を使用すると、さまざまなプラットフォームのさ
 リモート端末によって自動的に実行されます。
 
 WebDriverテストの開発後、複数のブラウザーとオペレーティングシステムの組み合わせでテストを実行する必要が出てくる場合があります。
-ここで [Grid]({{< ref "/grid.md" >}}) が登場します。
+ここで [Grid]({{< ref "grid.md" >}}) が登場します。
diff --git a/website_and_docs/content/documentation/overview/_index.pt-br.md b/website_and_docs/content/documentation/overview/_index.pt-br.md
index 4ce84ce34c33..5c50abaa71fa 100644
--- a/website_and_docs/content/documentation/overview/_index.pt-br.md
+++ b/website_and_docs/content/documentation/overview/_index.pt-br.md
@@ -1,7 +1,7 @@
 ---
 title: "Resumo"
 linkTitle: "Resumo"
-weight: 2
+weight: 1
 description: >
   Será Selenium a ferramenta para você? Veja um resumo dos componentes do projecto.
 aliases: ["/documentation/pt-br/introduction/"]
@@ -13,7 +13,7 @@ mas sim uma composição de várias ferramentas.
 ## WebDriver
 
 Se você está começando com automação de testes de um site de desktop ou site para celular, então
-vai usar as APIs WebDriver. O [WebDriver]({{< ref "/webdriver.md" >}})
+vai usar as APIs WebDriver. O [WebDriver]({{< ref "webdriver.md" >}})
 usa APIs de automação de navegador disponibilizadas por fornecedores de navegador para o controlar e
 executar testes. É como se um usuário real o estivesse operando. Como o
 WebDriver não exige que sua API seja compilada com o código do aplicativo,
@@ -42,4 +42,4 @@ executados pela extremidade remota.
 Após o desenvolvimento dos testes WebDriver, você pode enfrentar
 a necessidade de executar seus testes em vários navegadores e
 combinações de sistemas operacionais.
-É aqui que o [Grid]({{< ref "/grid.md" >}}) entra em cena.
+É aqui que o [Grid]({{< ref "grid.md" >}}) entra em cena.
diff --git a/website_and_docs/content/documentation/overview/_index.zh-cn.md b/website_and_docs/content/documentation/overview/_index.zh-cn.md
index c1687341bbec..ab27288d82b4 100644
--- a/website_and_docs/content/documentation/overview/_index.zh-cn.md
+++ b/website_and_docs/content/documentation/overview/_index.zh-cn.md
@@ -1,7 +1,7 @@
 ---
 title: "概述"
 linkTitle: "概述"
-weight: 2
+weight: 1
 description: >
   Selenium适合你吗? 请参见不同项目组件的概述.
 aliases: ["/documentation/zh-cn/introduction/"]
@@ -13,7 +13,7 @@ Selenium 不仅仅是一个工具或 API, 它还包含许多工具.
 ## WebDriver
 
 如果您开始使用桌面网站测试自动化, 那么您将使用 WebDriver APIs. 
-[WebDriver]({{< ref "/webdriver.md" >}}) 使用浏览器供应商提供的浏览器自动化 API 来控制浏览器和运行测试. 
+[WebDriver]({{< ref "webdriver.md" >}}) 使用浏览器供应商提供的浏览器自动化 API 来控制浏览器和运行测试. 
 这就像真正的用户正在操作浏览器一样. 
 由于 WebDriver 不要求使用应用程序代码编译其 API, 因此它本质上不具有侵入性. 
 因此, 您测试的应用程序与实时推送的应用程序相同. 
@@ -35,4 +35,4 @@ Selenium Grid允许您在不同平台的不同机器上运行测试用例.
 
 当开发完WebDriver测试之后, 
 您可能需要在多个浏览器和操作系统的组合上运行测试. 
-这就是 [Grid]({{< ref "/grid.md" >}}) 的用途所在.
+这就是 [Grid]({{< ref "grid.md" >}}) 的用途所在.
diff --git a/website_and_docs/content/documentation/overview/details.en.md b/website_and_docs/content/documentation/overview/details.en.md
index 53b1064cffa3..7700beaa9475 100644
--- a/website_and_docs/content/documentation/overview/details.en.md
+++ b/website_and_docs/content/documentation/overview/details.en.md
@@ -40,8 +40,8 @@ Web browsers are incredibly complex, highly engineered applications,
 performing their operations in entirely different ways
 but which frequently look the same while doing so.
 Even though the text is rendered in the same fonts,
-the images are displayed in the same place
-, and the links take you to the same destination.
+the images are displayed in the same place,
+and the links take you to the same destination.
 What is happening underneath is as different as night and day.
 Selenium “abstracts” these differences,
 hiding their details and intricacies from the person writing the code.
diff --git a/website_and_docs/content/documentation/overview/details.ja.md b/website_and_docs/content/documentation/overview/details.ja.md
index 10edf16e19ee..34332c6dacf8 100644
--- a/website_and_docs/content/documentation/overview/details.ja.md
+++ b/website_and_docs/content/documentation/overview/details.ja.md
@@ -41,7 +41,7 @@ Selenium はこれらの違いを "抽象化" し、コードを書いている
 
 Seleniumの必要最小限な設計アプローチは、より大きなアプリケーションのコンポーネントとして含まれる汎用性を提供します。 
 Seleniumの包括的なプロジェクトの下で提供される周辺インフラストラクチャは、
-[ブラウザーのgrid]({{< ref "/grid.md" >}})をまとめるためのツールを提供し、
+[ブラウザーのgrid]({{< ref "grid.md" >}})をまとめるためのツールを提供し、
 さまざまなブラウザーやさまざまなマシンの複数のオペレーティングシステムでテストを実行できるようにします。
 
 サーバールームやデータセンター内の一連のコンピューターがすべて同時にブラウザーを起動して、
diff --git a/website_and_docs/content/documentation/overview/details.pt-br.md b/website_and_docs/content/documentation/overview/details.pt-br.md
index cd0f2639b0e9..edd1d1b0d23c 100644
--- a/website_and_docs/content/documentation/overview/details.pt-br.md
+++ b/website_and_docs/content/documentation/overview/details.pt-br.md
@@ -56,7 +56,7 @@ A abordagem de design minimalista do Selenium lhe dá a
 versatilidade para ser incluído como um componente em aplicações maiores.
 A infraestrutura circundante fornecida sob o Selenium
 dá a você as ferramentas para montar
-sua [Grid de navegadores]({{< ref "/grid.md" >}})
+sua [Grid de navegadores]({{< ref "grid.md" >}})
 para que os testes possam ser executados em diferentes navegadores e sistemas operacionais
 em uma variedade de máquinas.
 
diff --git a/website_and_docs/content/documentation/overview/details.zh-cn.md b/website_and_docs/content/documentation/overview/details.zh-cn.md
index bed93ef45425..e31bba574532 100644
--- a/website_and_docs/content/documentation/overview/details.zh-cn.md
+++ b/website_and_docs/content/documentation/overview/details.zh-cn.md
@@ -39,7 +39,7 @@ Selenium “抽象”了这些差异，向编写代码的人隐藏了它们的
 
 Selenium 的极简设计方法使其具有通用性，可以作为更大应用程序中的组件。
 Selenium 保护伞下提供的周边基础设施为您提供了组合自己的
-[浏览器 grid]({{< ref "/grid.md" >}}) 的工具，
+[浏览器 grid]({{< ref "grid.md" >}}) 的工具，
 因此测试就可以跨一系列机器在不同的浏览器和多个操作系统上运行。
 
 想象一下，
diff --git a/website_and_docs/content/documentation/selenium_manager.en.md b/website_and_docs/content/documentation/selenium_manager.en.md
index 0e27a36bb843..03e65b1e8846 100644
--- a/website_and_docs/content/documentation/selenium_manager.en.md
+++ b/website_and_docs/content/documentation/selenium_manager.en.md
@@ -1,7 +1,7 @@
 ---
 title: "Selenium Manager (Beta)"
 linkTitle: "Selenium Manager"
-weight: 11
+weight: 3
 description: >
     Selenium Manager is a command-line tool implemented in Rust that provides automated driver and browser management for Selenium. Selenium bindings use this tool by default, so you do not need to download it or add anything to your code or do anything else to use it.
 ---
@@ -69,6 +69,22 @@ edge can only be installed in Windows with administrator permissions
 
 Therefore, administrator permissions are required to install Edge in Windows automatically through Selenium Manager, and Edge is eventually installed in the usual program files folder (e.g., `C:\Program Files (x86)\Microsoft\Edge`).
 
+## Data collection
+Selenium Manager will report anonymised usage [statistics](https://plausible.io/privacy-focused-web-analytics) to [Plausible](https://plausible.io/manager.selenium.dev). This allows the Selenium team to understand more about how Selenium is being used so that we can better focus our development efforts. The data being collected is:
+
+| Data | Purpose |
+| -----|---------|
+| Selenium version | This allows the Selenium developers to safely deprecate and remove features, as well as determine which new features may be available to you |
+| Language binding | Programming language used to execute Selenium scripts (Java, JavaScript, Python, .Net, Ruby) |
+| OS and architecture Selenium Manager is running on | The Selenium developers can use this information to help prioritise bug reports, and to identify if there are systemic OS-related issues |
+| Browser and browser version | Helping for prioritising bug reports |
+| Rough geolocation | Derived from the IP address you connect from. This is useful for determining where we need to focus our documentation efforts |
+
+Selenium Manager sends these data to Plausible once a day. This period is based on the TTL value (see [configuration](https://www.selenium.dev/documentation/selenium_manager/#configuration)).
+
+### Opting out of data collection
+**Data collection is on by default.** To disable it, set the `SE_AVOID_STATS` environment variable to `true`. You may also disable data collection in the configuration file (see below) by setting `avoid-stats = true`.
+
 ## Configuration
 ***TL;DR:*** *Selenium Manager should work silently and transparently for most users. Nevertheless, there are scenarios (e.g., to specify a custom cache path or setup globally a proxy) where custom configuration can be required.*
 
@@ -102,7 +118,7 @@ The following table summarizes all the supported arguments supported by Selenium
 |`--browser-path <BROWSER_PATH>`|`browser-path = "BROWSER_PATH"`|`SE_BROWSER_PATH=BROWSER_PATH`|Browser path (absolute) for browser version detection (e.g., `/usr/bin/google-chrome`, `/Applications/Google Chrome.app/Contents/MacOS/Google Chrome`, `C:\Program Files\Google\Chrome\Application\chrome.exe`)|
 |`--driver-mirror-url <DRIVER_MIRROR_URL>`|`driver-mirror-url = "DRIVER_MIRROR_URL"`|`SE_DRIVER_MIRROR_URL=DRIVER_MIRROR_URL`|Mirror URL for driver repositories|
 |`--browser-mirror-url <BROWSER_MIRROR_URL>`|`browser-mirror-url = "BROWSER_MIRROR_URL"`|`SE_BROWSER_MIRROR_URL=BROWSER_MIRROR_URL`|Mirror URL for browser repositories|
-|`--output <OUTPUT>`|`output = "OUTPUT"`|`SE_OUTPUT=OUTPUT`|Output type: `LOGGER` (using `INFO`, `WARN`, etc.), `JSON` (custom JSON notation), or `SHELL` (Unix-like). Default: `LOGGER`|
+|`--output <OUTPUT>`|`output = "OUTPUT"`|`SE_OUTPUT=OUTPUT`|Output type: `LOGGER` (using `INFO`, `WARN`, etc.), `JSON` (custom JSON notation), `SHELL` (Unix-like), or `MIXED` (`INFO`, `WARN`, `DEBUG`, etc. to stderr and minimal `JSON` to stdout). Default: `LOGGER`|
 |`--os <OS>`|`os = "OS"`|`SE_OS=OS`|Operating system for drivers and browsers (i.e., `windows`, `linux`, or `macos`)|
 |`--arch <ARCH>`|`arch = "ARCH"`|`SE_ARCH=ARCH`|System architecture for drivers and browsers (i.e., `x32`, `x64`, or `arm64`)|
 |`--proxy <PROXY>`|`proxy = "PROXY"`|`SE_PROXY=PROXY`|HTTP proxy for network connection (e.g., `myproxy:port`, `myuser:mypass@myproxy:port`)|
@@ -110,10 +126,14 @@ The following table summarizes all the supported arguments supported by Selenium
 |`--offline`|`offline = true`|`SE_OFFLINE=true`|Offline mode (i.e., disabling network requests and downloads)|
 |`--force-browser-download`|`force-browser-download = true`|`SE_FORCE_BROWSER_DOWNLOAD=true`|Force to download browser, e.g., when a browser is already installed in the system, but you want Selenium Manager to download and use it|
 |`--avoid-browser-download`|`avoid-browser-download = true`|`SE_AVOID_BROWSER_DOWNLOAD=true`|Avoid to download browser, e.g., when a browser is supposed to be downloaded by Selenium Manager, but you prefer to avoid it|
+|`--skip-driver-in-path`|`skip-driver-in-path = true`|`SE_SKIP_DRIVER_IN_PATH=true`|Not using drivers found in the `PATH`|
+|`--skip-browser-in-path`|`skip-browser-in-path = true`|`SE_SKIP_BROWSER_IN_PATH=true`|Not using browsers found in the `PATH`|
 |`--debug`|`debug = true`|`SE_DEBUG=true`|Display `DEBUG` messages|
 |`--trace`|`trace = true`|`SE_TRACE=true`|Display `TRACE` messages|
 |`--cache-path <CACHE_PATH>`|`cache-path="CACHE_PATH"`|`SE_CACHE_PATH=CACHE_PATH`|Local folder used to store downloaded assets (drivers and browsers), local metadata, and configuration file. See next section for details. Default: `~/.cache/selenium`. For Windows paths in the TOML configuration file, double backslashes are required (e.g., `C:\\custom\\cache`).|
 |`--ttl <TTL>`|`ttl = TTL`|`SE_TTL=TTL`|Time-to-live in seconds. See next section for details. Default: `3600` (1 hour)|
+|`--language-binding <LANGUAGE>`|`language-binding = "LANGUAGE"`|`SE_LANGUAGE_BINDING=LANGUAGE`|Language that invokes Selenium Manager (e.g., Java, JavaScript, Python, DotNet, Ruby)|
+|`--avoid-stats`|`avoid-stats = true`|`SE_AVOID_STATS=true`|Avoid sends usage statistics to plausible.io. Default: `false`|
 
 In addition to the configuration keys specified in the table before, there are some special cases, namely:
 
@@ -123,6 +143,13 @@ In addition to the configuration keys specified in the table before, there are s
 - Driver mirror. Following the same pattern, we can use `chromedriver-mirror-url`, `geckodriver-mirror-url`,  `msedgedriver-mirror-url`,  etc. (in the configuration file), and `SE_CHROMEDRIVER_MIRROR_URL`, `SE_GECKODRIVER_MIRROR_URL`, `SE_MSEDGEDRIVER_MIRROR_URL`,  etc. (as environment variables).
 - Browser mirror. Following the same pattern, we can use `chrome-mirror-url`, `firefox-mirror-url`,  `edge-mirror-url`,  etc. (in the configuration file), and `SE_CHROME_MIRROR_URL`, `SE_FIREFOX_MIRROR_URL`, `SE_EDGE_MIRROR_URL`,  etc. (as environment variables).
 
+### se-config.toml Example
+{{< tabpane text=true >}}
+{{< tab header="se-config.toml" >}}
+{{< gh-codeblock path="/examples/python/tests/selenium_manager/example_se-config.toml#L1-L21" >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
 ## Caching
 ***TL;DR:*** *The drivers and browsers managed by Selenium Manager are stored in a local folder (`~/.cache/selenium`).*
 
@@ -131,7 +158,7 @@ The cache in Selenium Manager is a local folder (`~/.cache/selenium` by default)
 In addition to the downloaded drivers and browsers, two additional files live in the cache's root:
 
 - Configuration file (`se-config.toml`). This file is optional and, as explained in the previous section, allows to store custom configuration values for Selenium Manager. This file is maintained by the end-user and read by Selenium Manager.
-- Metadata file (`se-metadata.json`). This file contains versions discovered by Selenium Manger making network requests (e.g., using the [CfT JSON endpoints](https://github.com/GoogleChromeLabs/chrome-for-testing#json-api-endpoints)) and the time-to-live (TTL) in which they are valid. Selenium Manager automatically maintains this file.
+- Metadata file (`se-metadata.json`). This file contains versions discovered by Selenium Manager making network requests (e.g., using the [CfT JSON endpoints](https://github.com/GoogleChromeLabs/chrome-for-testing#json-api-endpoints)) and the time-to-live (TTL) in which they are valid. Selenium Manager automatically maintains this file.
 
 The TTL in Selenium Manager is inspired by the TTL for DNS, a well-known mechanism that refers to how long some values are cached before they are automatically refreshed. In the case of Selenium Manager, these values are the versions found by making network requests for driver and browser version discovery. By default, the TTL is `3600` seconds (i.e., 1 hour) and can be tuned using configuration values or disabled by setting this configuration value to `0`.
 
@@ -141,8 +168,8 @@ Let's consider an example. A Selenium binding asks Selenium Manager to resolve c
 
 Selenium Manager includes two additional arguments two handle the cache, namely:
 
-- `--clear-cache`: To remove the cache folder.
-- `--clear-metadata`: To remove the metadata file.
+- `--clear-cache`: To remove the cache folder (equivalent to the environment variable `SE_CLEAR_CACHE=true`).
+- `--clear-metadata`: To remove the metadata file (equivalent to the environment variable `SE_CLEAR_METADATA=true`).
 
 ## Versioning
 Selenium Manager follows the same versioning schema as Selenium. Nevertheless, we use the major version 0 for Selenium Manager releases because it is still in beta. For example, the Selenium Manager binaries shipped with Selenium 4.12.0 corresponds to version 0.4.12.
@@ -150,8 +177,8 @@ Selenium Manager follows the same versioning schema as Selenium. Nevertheless, w
 ## Getting Selenium Manager
 For most users, direct interaction with Selenium Manager is not required since the Selenium bindings use it internally. Nevertheless, if you want to *play* with Selenium Manager or use it for your use case involving driver or browser management, you can get the Selenium Manager binaries in different ways:
 
-- From the Selenium repository. The Selenium Manager source code is stored in the main Selenium repo under the folder [rust](https://github.com/SeleniumHQ/selenium/tree/trunk/rust). Moreover, you can find the compiled versions for Windows, Linux, and macOS in the [common folder](https://github.com/SeleniumHQ/selenium/tree/trunk/common/manager) of this repo.
-- From the build workflow. Selenium Manager is compiled using a [GitHub Actions workflow]((https://github.com/SeleniumHQ/selenium/actions/workflows/build-selenium-manager.yml)). This workflow creates binaries for Windows, Linux, and macOS. You can download these binaries from these workflow executions.
+- From the Selenium repository. The Selenium Manager source code is stored in the main Selenium repo under the folder [rust](https://github.com/SeleniumHQ/selenium/tree/trunk/rust). Moreover, you can find the compiled versions for Windows, Linux, and macOS in the [Selenium Manager Artifacts](https://github.com/SeleniumHQ/selenium_manager_artifacts) repo. The stable Selenium Manager binaries (i.e., those distributed in the latest stable Selenium version) are linked in this [file](https://github.com/SeleniumHQ/selenium/blob/trunk/common/selenium_manager.bzl).
+- From the build workflow. Selenium Manager is compiled using a [GitHub Actions workflow](https://github.com/SeleniumHQ/selenium/actions/workflows/ci-rust.yml). This workflow creates binaries for Windows, Linux, and macOS. You can download these binaries from these workflow executions.
 - From the cache. As of version 4.15.0 of the Selenium Java bindings, the Selenium Manager binary is extracted and copied to the cache folder. For instance, the Selenium Manager binary shipped with Selenium 4.15.0 is stored in the folder `~/.cache/selenium/manager/0.4.15`).
 
 ## Examples
@@ -159,16 +186,15 @@ Let's consider a typical example: we want to manage chromedriver automatically.
 
 ```
 $ ./selenium-manager --browser chrome --debug
-DEBUG   chromedriver not found in PATH
-DEBUG   chrome detected at C:\Program Files\Google\Chrome\Application\chrome.exe
-DEBUG   Running command: wmic datafile where name='C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe' get Version /value
-DEBUG   Output: "\r\r\n\r\r\nVersion=116.0.5845.111\r\r\n\r\r\n\r\r\n\r"
-DEBUG   Detected browser: chrome 116.0.5845.111
-DEBUG   Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
-DEBUG   Required driver: chromedriver 116.0.5845.96
-DEBUG   Downloading chromedriver 116.0.5845.96 from https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/116.0.5845.96/win64/chromedriver-win64.zip
-INFO    Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\116.0.5845.96\chromedriver.exe
-INFO    Browser path: C:\Program Files\Google\Chrome\Application\chrome.exe
+DEBUG chromedriver not found in PATH
+DEBUG chrome detected at C:\Program Files\Google\Chrome\Application\chrome.exe
+DEBUG Detected browser: chrome 139.0.7258.67
+DEBUG Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
+DEBUG Required driver: chromedriver 139.0.7258.68
+DEBUG Acquiring lock: C:\Users\boni\.cache\selenium\chromedriver\win64\139.0.7258.68\sm.lock
+DEBUG Downloading chromedriver 139.0.7258.68 from https://storage.googleapis.com/chrome-for-testing-public/139.0.7258.68/win64/chromedriver-win64.zip
+INFO  Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\139.0.7258.68\chromedriver.exe
+INFO  Browser path: C:\Program Files\Google\Chrome\Application\chrome.exe
 ```
 
 In this case, the local Chrome (in Windows) is detected by Selenium Manager. Then, using its version and the CfT endpoints, the proper chromedriver version (115, in this example) is downloaded to the local cache. Finally, Selenium Manager provides two results: i) the driver path (downloaded) and ii) the browser path (local).
@@ -177,20 +203,59 @@ Let's consider another example. Now we want to use Chrome beta. Therefore, we in
 
 ```
 $ ./selenium-manager --browser chrome --browser-version beta --debug
-DEBUG   chromedriver not found in PATH
-DEBUG   chrome not found in PATH
-DEBUG   chrome beta not found in the system
-DEBUG   Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json
-DEBUG   Required browser: chrome 117.0.5938.22
-DEBUG   Downloading chrome 117.0.5938.22 from https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/117.0.5938.22/win64/chrome-win64.zip
-DEBUG   chrome 117.0.5938.22 has been downloaded at C:\Users\boni\.cache\selenium\chrome\win64\117.0.5938.22\chrome.exe
-DEBUG   Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
-DEBUG   Required driver: chromedriver 117.0.5938.22
-DEBUG   Downloading chromedriver 117.0.5938.22 from https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/117.0.5938.22/win64/chromedriver-win64.zip
-INFO    Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\117.0.5938.22\chromedriver.exe
-INFO    Browser path: C:\Users\boni\.cache\selenium\chrome\win64\117.0.5938.22\chrome.exe
+DEBUG chromedriver not found in PATH
+DEBUG chrome not found in PATH
+DEBUG chrome beta not found in the system
+DEBUG Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json
+DEBUG Required browser: chrome 140.0.7339.16
+DEBUG Acquiring lock: C:\Users\boni\.cache\selenium\chrome\win64\140.0.7339.16\sm.lock
+DEBUG Downloading chrome 140.0.7339.16 from https://storage.googleapis.com/chrome-for-testing-public/140.0.7339.16/win64/chrome-win64.zip
+DEBUG chrome 140.0.7339.16 is available at C:\Users\boni\.cache\selenium\chrome\win64\140.0.7339.16\chrome.exe
+DEBUG Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
+DEBUG Required driver: chromedriver 140.0.7339.16
+DEBUG Acquiring lock: C:\Users\boni\.cache\selenium\chromedriver\win64\140.0.7339.16\sm.lock
+DEBUG Downloading chromedriver 140.0.7339.16 from https://storage.googleapis.com/chrome-for-testing-public/140.0.7339.16/win64/chromedriver-win64.zip
+INFO  Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\140.0.7339.16\chromedriver.exe
+INFO  Browser path: C:\Users\boni\.cache\selenium\chrome\win64\140.0.7339.16\chrome.exe
 ```
 
+### Using Selenium Manager from the bindings
+
+All Selenium binding languages (Java, JavaScript, Python, .Net, Ruby) use Selenium Manager internally to manage drivers and browsers. The automated management process starts before starting a new Selenium session, i.e., each time a Selenium script instantiates a driver object (e.g., `ChromeDriver`, `FirefoxDriver`, etc.). The following snippets illustrate the difference between the old-fashioned way of manually managing drivers and the built-in automated mechanism provided by Selenium Manager.
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+**Previously**
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/selenium_manager/SeleniumManagerUsageDemo.java#L12-L17" >}}
+**Selenium Manager**
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/selenium_manager/SeleniumManagerUsageDemo.java#L20-L24" >}}
+{{< /tab >}}
+{{% tab header="Python" %}}
+**Previously**
+{{< gh-codeblock path="/examples/python/tests/selenium_manager/usage.py#L5-L8" >}}
+**Selenium Manager**
+{{< gh-codeblock path="/examples/python/tests/selenium_manager/usage.py#L10-L12" >}}
+{{< /tab >}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/SeleniumManager/UsageTest.cs#L10-L18" >}}
+{{< /tab >}}
+{{% tab header="Ruby" %}}
+**Previously**
+{{< gh-codeblock path="/examples/ruby/spec/selenium_manager/usage.rb#L5-L10" >}}
+**Selenium Manager**
+{{< gh-codeblock path="/examples/ruby/spec/selenium_manager/usage.rb#L12-L16" >}}
+{{< /tab >}}
+{{% tab header="JavaScript" %}}
+**Previously**
+{{< gh-codeblock path="/examples/javascript/test/selenium_manager/usage.spec.js#L16-L31" >}}
+**Selenium Manager**
+{{< gh-codeblock path="/examples/javascript/test/selenium_manager/usage.spec.js#L6-L14" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
 ## Selenium Grid
 Selenium Manager allows you to configure the drivers automatically when setting up Selenium Grid. To that aim, you need to include the argument `--selenium-manager true` in the command to start Selenium Grid. For more details, visit the [Selenium Grid starting page](https://www.selenium.dev/documentation/grid/getting_started/).
 
@@ -282,5 +347,36 @@ In this case, the library to be installed is the following:
 sudo apt-get install libatk-bridge2.0-0
 ```
 
+### Using an environment variable for the driver path
+It's possible to use an environment variable to specify the driver path without using Selenium Manager.
+The following environment variables are supported:
+
+* `SE_CHROMEDRIVER`
+* `SE_EDGEDRIVER`
+* `SE_GECKODRIVER`
+* `SE_IEDRIVER`
+
+For example, to specify the path to the chromedriver, 
+you can set the `SE_CHROMEDRIVER` environment variable to the path of the chromedriver executable.
+The following bindings allow you to specify the driver path using an environment variable:
+
+* Ruby
+* Java
+* Python
+
+This feature is available in the Selenium Ruby binding starting from version 4.25.0 and in the Python binding from version 4.26.0.
+
+## Building a Custom Selenium Manager
+In order to build your own custom Selenium Manager that works in an architecture we don't currently support, you can
+utilize the following steps:
+
+1. Install Rust Dev Environment
+2. clone Selenium onto your local machine `git clone https://github.com/SeleniumHQ/selenium.git --depth 1`
+3. Navigate into your clone `cd selenium/rust`
+4. Build selenium `cargo build --release`
+5. Set the following environment variable for the driver path `SE_MANAGER_PATH=~/selenium/rust/target/release/selenium-manager`
+6. Put the driver you want in a location on your system PATH
+7. Selenium will now use the built Selenium Manager to locate the manually downloaded driver on PATH
+
 ## Roadmap
 You can trace the work in progress in the [Selenium Manager project dashboard](https://github.com/orgs/SeleniumHQ/projects/5). Moreover, you can check the new features shipped with each Selenium Manager release in its [changelog file](https://github.com/SeleniumHQ/selenium/blob/trunk/rust/CHANGELOG.md).
diff --git a/website_and_docs/content/documentation/selenium_manager.ja.md b/website_and_docs/content/documentation/selenium_manager.ja.md
index 0e27a36bb843..fede78817fa1 100644
--- a/website_and_docs/content/documentation/selenium_manager.ja.md
+++ b/website_and_docs/content/documentation/selenium_manager.ja.md
@@ -1,7 +1,7 @@
 ---
 title: "Selenium Manager (Beta)"
 linkTitle: "Selenium Manager"
-weight: 11
+weight: 3
 description: >
     Selenium Manager is a command-line tool implemented in Rust that provides automated driver and browser management for Selenium. Selenium bindings use this tool by default, so you do not need to download it or add anything to your code or do anything else to use it.
 ---
@@ -69,6 +69,22 @@ edge can only be installed in Windows with administrator permissions
 
 Therefore, administrator permissions are required to install Edge in Windows automatically through Selenium Manager, and Edge is eventually installed in the usual program files folder (e.g., `C:\Program Files (x86)\Microsoft\Edge`).
 
+## Data collection
+Selenium Manager will report anonymised usage [statistics](https://plausible.io/privacy-focused-web-analytics) to [Plausible](https://plausible.io/manager.selenium.dev). This allows the Selenium team to understand more about how Selenium is being used so that we can better focus our development efforts. The data being collected is:
+
+| Data | Purpose |
+| -----|---------|
+| Selenium version | This allows the Selenium developers to safely deprecate and remove features, as well as determine which new features may be available to you |
+| Language binding | Programming language used to execute Selenium scripts (Java, JavaScript, Python, .Net, Ruby) |
+| OS and architecture Selenium Manager is running on | The Selenium developers can use this information to help prioritise bug reports, and to identify if there are systemic OS-related issues |
+| Browser and browser version | Helping for prioritising bug reports |
+| Rough geolocation | Derived from the IP address you connect from. This is useful for determining where we need to focus our documentation efforts |
+
+Selenium Manager sends these data to Plausible once a day. This period is based on the TTL value (see [configuration](https://www.selenium.dev/documentation/selenium_manager/#configuration)).
+
+### Opting out of data collection
+**Data collection is on by default.** To disable it, set the `SE_AVOID_STATS` environment variable to `true`. You may also disable data collection in the configuration file (see below) by setting `avoid-stats = true`.
+
 ## Configuration
 ***TL;DR:*** *Selenium Manager should work silently and transparently for most users. Nevertheless, there are scenarios (e.g., to specify a custom cache path or setup globally a proxy) where custom configuration can be required.*
 
@@ -102,7 +118,7 @@ The following table summarizes all the supported arguments supported by Selenium
 |`--browser-path <BROWSER_PATH>`|`browser-path = "BROWSER_PATH"`|`SE_BROWSER_PATH=BROWSER_PATH`|Browser path (absolute) for browser version detection (e.g., `/usr/bin/google-chrome`, `/Applications/Google Chrome.app/Contents/MacOS/Google Chrome`, `C:\Program Files\Google\Chrome\Application\chrome.exe`)|
 |`--driver-mirror-url <DRIVER_MIRROR_URL>`|`driver-mirror-url = "DRIVER_MIRROR_URL"`|`SE_DRIVER_MIRROR_URL=DRIVER_MIRROR_URL`|Mirror URL for driver repositories|
 |`--browser-mirror-url <BROWSER_MIRROR_URL>`|`browser-mirror-url = "BROWSER_MIRROR_URL"`|`SE_BROWSER_MIRROR_URL=BROWSER_MIRROR_URL`|Mirror URL for browser repositories|
-|`--output <OUTPUT>`|`output = "OUTPUT"`|`SE_OUTPUT=OUTPUT`|Output type: `LOGGER` (using `INFO`, `WARN`, etc.), `JSON` (custom JSON notation), or `SHELL` (Unix-like). Default: `LOGGER`|
+|`--output <OUTPUT>`|`output = "OUTPUT"`|`SE_OUTPUT=OUTPUT`|Output type: `LOGGER` (using `INFO`, `WARN`, etc.), `JSON` (custom JSON notation), `SHELL` (Unix-like), or `MIXED` (`INFO`, `WARN`, `DEBUG`, etc. to stderr and minimal `JSON` to stdout). Default: `LOGGER`|
 |`--os <OS>`|`os = "OS"`|`SE_OS=OS`|Operating system for drivers and browsers (i.e., `windows`, `linux`, or `macos`)|
 |`--arch <ARCH>`|`arch = "ARCH"`|`SE_ARCH=ARCH`|System architecture for drivers and browsers (i.e., `x32`, `x64`, or `arm64`)|
 |`--proxy <PROXY>`|`proxy = "PROXY"`|`SE_PROXY=PROXY`|HTTP proxy for network connection (e.g., `myproxy:port`, `myuser:mypass@myproxy:port`)|
@@ -110,10 +126,14 @@ The following table summarizes all the supported arguments supported by Selenium
 |`--offline`|`offline = true`|`SE_OFFLINE=true`|Offline mode (i.e., disabling network requests and downloads)|
 |`--force-browser-download`|`force-browser-download = true`|`SE_FORCE_BROWSER_DOWNLOAD=true`|Force to download browser, e.g., when a browser is already installed in the system, but you want Selenium Manager to download and use it|
 |`--avoid-browser-download`|`avoid-browser-download = true`|`SE_AVOID_BROWSER_DOWNLOAD=true`|Avoid to download browser, e.g., when a browser is supposed to be downloaded by Selenium Manager, but you prefer to avoid it|
+|`--skip-driver-in-path`|`skip-driver-in-path = true`|`SE_SKIP_DRIVER_IN_PATH=true`|Not using drivers found in the `PATH`|
+|`--skip-browser-in-path`|`skip-browser-in-path = true`|`SE_SKIP_BROWSER_IN_PATH=true`|Not using browsers found in the `PATH`|
 |`--debug`|`debug = true`|`SE_DEBUG=true`|Display `DEBUG` messages|
 |`--trace`|`trace = true`|`SE_TRACE=true`|Display `TRACE` messages|
 |`--cache-path <CACHE_PATH>`|`cache-path="CACHE_PATH"`|`SE_CACHE_PATH=CACHE_PATH`|Local folder used to store downloaded assets (drivers and browsers), local metadata, and configuration file. See next section for details. Default: `~/.cache/selenium`. For Windows paths in the TOML configuration file, double backslashes are required (e.g., `C:\\custom\\cache`).|
 |`--ttl <TTL>`|`ttl = TTL`|`SE_TTL=TTL`|Time-to-live in seconds. See next section for details. Default: `3600` (1 hour)|
+|`--language-binding <LANGUAGE>`|`language-binding = "LANGUAGE"`|`SE_LANGUAGE_BINDING=LANGUAGE`|Language that invokes Selenium Manager (e.g., Java, JavaScript, Python, DotNet, Ruby)|
+|`--avoid-stats`|`avoid-stats = true`|`SE_AVOID_STATS=true`|Avoid sends usage statistics to plausible.io. Default: `false`|
 
 In addition to the configuration keys specified in the table before, there are some special cases, namely:
 
@@ -123,6 +143,13 @@ In addition to the configuration keys specified in the table before, there are s
 - Driver mirror. Following the same pattern, we can use `chromedriver-mirror-url`, `geckodriver-mirror-url`,  `msedgedriver-mirror-url`,  etc. (in the configuration file), and `SE_CHROMEDRIVER_MIRROR_URL`, `SE_GECKODRIVER_MIRROR_URL`, `SE_MSEDGEDRIVER_MIRROR_URL`,  etc. (as environment variables).
 - Browser mirror. Following the same pattern, we can use `chrome-mirror-url`, `firefox-mirror-url`,  `edge-mirror-url`,  etc. (in the configuration file), and `SE_CHROME_MIRROR_URL`, `SE_FIREFOX_MIRROR_URL`, `SE_EDGE_MIRROR_URL`,  etc. (as environment variables).
 
+### se-config.toml Example
+{{< tabpane text=true >}}
+{{< tab header="se-config.toml" >}}
+{{< gh-codeblock path="/examples/python/tests/selenium_manager/example_se-config.toml#L1-L21" >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
 ## Caching
 ***TL;DR:*** *The drivers and browsers managed by Selenium Manager are stored in a local folder (`~/.cache/selenium`).*
 
@@ -131,7 +158,7 @@ The cache in Selenium Manager is a local folder (`~/.cache/selenium` by default)
 In addition to the downloaded drivers and browsers, two additional files live in the cache's root:
 
 - Configuration file (`se-config.toml`). This file is optional and, as explained in the previous section, allows to store custom configuration values for Selenium Manager. This file is maintained by the end-user and read by Selenium Manager.
-- Metadata file (`se-metadata.json`). This file contains versions discovered by Selenium Manger making network requests (e.g., using the [CfT JSON endpoints](https://github.com/GoogleChromeLabs/chrome-for-testing#json-api-endpoints)) and the time-to-live (TTL) in which they are valid. Selenium Manager automatically maintains this file.
+- Metadata file (`se-metadata.json`). This file contains versions discovered by Selenium Manager making network requests (e.g., using the [CfT JSON endpoints](https://github.com/GoogleChromeLabs/chrome-for-testing#json-api-endpoints)) and the time-to-live (TTL) in which they are valid. Selenium Manager automatically maintains this file.
 
 The TTL in Selenium Manager is inspired by the TTL for DNS, a well-known mechanism that refers to how long some values are cached before they are automatically refreshed. In the case of Selenium Manager, these values are the versions found by making network requests for driver and browser version discovery. By default, the TTL is `3600` seconds (i.e., 1 hour) and can be tuned using configuration values or disabled by setting this configuration value to `0`.
 
@@ -141,8 +168,8 @@ Let's consider an example. A Selenium binding asks Selenium Manager to resolve c
 
 Selenium Manager includes two additional arguments two handle the cache, namely:
 
-- `--clear-cache`: To remove the cache folder.
-- `--clear-metadata`: To remove the metadata file.
+- `--clear-cache`: To remove the cache folder (equivalent to the environment variable `SE_CLEAR_CACHE=true`).
+- `--clear-metadata`: To remove the metadata file (equivalent to the environment variable `SE_CLEAR_METADATA=true`).
 
 ## Versioning
 Selenium Manager follows the same versioning schema as Selenium. Nevertheless, we use the major version 0 for Selenium Manager releases because it is still in beta. For example, the Selenium Manager binaries shipped with Selenium 4.12.0 corresponds to version 0.4.12.
@@ -150,8 +177,8 @@ Selenium Manager follows the same versioning schema as Selenium. Nevertheless, w
 ## Getting Selenium Manager
 For most users, direct interaction with Selenium Manager is not required since the Selenium bindings use it internally. Nevertheless, if you want to *play* with Selenium Manager or use it for your use case involving driver or browser management, you can get the Selenium Manager binaries in different ways:
 
-- From the Selenium repository. The Selenium Manager source code is stored in the main Selenium repo under the folder [rust](https://github.com/SeleniumHQ/selenium/tree/trunk/rust). Moreover, you can find the compiled versions for Windows, Linux, and macOS in the [common folder](https://github.com/SeleniumHQ/selenium/tree/trunk/common/manager) of this repo.
-- From the build workflow. Selenium Manager is compiled using a [GitHub Actions workflow]((https://github.com/SeleniumHQ/selenium/actions/workflows/build-selenium-manager.yml)). This workflow creates binaries for Windows, Linux, and macOS. You can download these binaries from these workflow executions.
+- From the Selenium repository. The Selenium Manager source code is stored in the main Selenium repo under the folder [rust](https://github.com/SeleniumHQ/selenium/tree/trunk/rust). Moreover, you can find the compiled versions for Windows, Linux, and macOS in the [Selenium Manager Artifacts](https://github.com/SeleniumHQ/selenium_manager_artifacts) repo. The stable Selenium Manager binaries (i.e., those distributed in the latest stable Selenium version) are linked in this [file](https://github.com/SeleniumHQ/selenium/blob/trunk/common/selenium_manager.bzl).
+- From the build workflow. Selenium Manager is compiled using a [GitHub Actions workflow](https://github.com/SeleniumHQ/selenium/actions/workflows/ci-rust.yml). This workflow creates binaries for Windows, Linux, and macOS. You can download these binaries from these workflow executions.
 - From the cache. As of version 4.15.0 of the Selenium Java bindings, the Selenium Manager binary is extracted and copied to the cache folder. For instance, the Selenium Manager binary shipped with Selenium 4.15.0 is stored in the folder `~/.cache/selenium/manager/0.4.15`).
 
 ## Examples
@@ -159,16 +186,15 @@ Let's consider a typical example: we want to manage chromedriver automatically.
 
 ```
 $ ./selenium-manager --browser chrome --debug
-DEBUG   chromedriver not found in PATH
-DEBUG   chrome detected at C:\Program Files\Google\Chrome\Application\chrome.exe
-DEBUG   Running command: wmic datafile where name='C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe' get Version /value
-DEBUG   Output: "\r\r\n\r\r\nVersion=116.0.5845.111\r\r\n\r\r\n\r\r\n\r"
-DEBUG   Detected browser: chrome 116.0.5845.111
-DEBUG   Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
-DEBUG   Required driver: chromedriver 116.0.5845.96
-DEBUG   Downloading chromedriver 116.0.5845.96 from https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/116.0.5845.96/win64/chromedriver-win64.zip
-INFO    Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\116.0.5845.96\chromedriver.exe
-INFO    Browser path: C:\Program Files\Google\Chrome\Application\chrome.exe
+DEBUG chromedriver not found in PATH
+DEBUG chrome detected at C:\Program Files\Google\Chrome\Application\chrome.exe
+DEBUG Detected browser: chrome 139.0.7258.67
+DEBUG Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
+DEBUG Required driver: chromedriver 139.0.7258.68
+DEBUG Acquiring lock: C:\Users\boni\.cache\selenium\chromedriver\win64\139.0.7258.68\sm.lock
+DEBUG Downloading chromedriver 139.0.7258.68 from https://storage.googleapis.com/chrome-for-testing-public/139.0.7258.68/win64/chromedriver-win64.zip
+INFO  Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\139.0.7258.68\chromedriver.exe
+INFO  Browser path: C:\Program Files\Google\Chrome\Application\chrome.exe
 ```
 
 In this case, the local Chrome (in Windows) is detected by Selenium Manager. Then, using its version and the CfT endpoints, the proper chromedriver version (115, in this example) is downloaded to the local cache. Finally, Selenium Manager provides two results: i) the driver path (downloaded) and ii) the browser path (local).
@@ -177,20 +203,59 @@ Let's consider another example. Now we want to use Chrome beta. Therefore, we in
 
 ```
 $ ./selenium-manager --browser chrome --browser-version beta --debug
-DEBUG   chromedriver not found in PATH
-DEBUG   chrome not found in PATH
-DEBUG   chrome beta not found in the system
-DEBUG   Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json
-DEBUG   Required browser: chrome 117.0.5938.22
-DEBUG   Downloading chrome 117.0.5938.22 from https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/117.0.5938.22/win64/chrome-win64.zip
-DEBUG   chrome 117.0.5938.22 has been downloaded at C:\Users\boni\.cache\selenium\chrome\win64\117.0.5938.22\chrome.exe
-DEBUG   Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
-DEBUG   Required driver: chromedriver 117.0.5938.22
-DEBUG   Downloading chromedriver 117.0.5938.22 from https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/117.0.5938.22/win64/chromedriver-win64.zip
-INFO    Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\117.0.5938.22\chromedriver.exe
-INFO    Browser path: C:\Users\boni\.cache\selenium\chrome\win64\117.0.5938.22\chrome.exe
+DEBUG chromedriver not found in PATH
+DEBUG chrome not found in PATH
+DEBUG chrome beta not found in the system
+DEBUG Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json
+DEBUG Required browser: chrome 140.0.7339.16
+DEBUG Acquiring lock: C:\Users\boni\.cache\selenium\chrome\win64\140.0.7339.16\sm.lock
+DEBUG Downloading chrome 140.0.7339.16 from https://storage.googleapis.com/chrome-for-testing-public/140.0.7339.16/win64/chrome-win64.zip
+DEBUG chrome 140.0.7339.16 is available at C:\Users\boni\.cache\selenium\chrome\win64\140.0.7339.16\chrome.exe
+DEBUG Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
+DEBUG Required driver: chromedriver 140.0.7339.16
+DEBUG Acquiring lock: C:\Users\boni\.cache\selenium\chromedriver\win64\140.0.7339.16\sm.lock
+DEBUG Downloading chromedriver 140.0.7339.16 from https://storage.googleapis.com/chrome-for-testing-public/140.0.7339.16/win64/chromedriver-win64.zip
+INFO  Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\140.0.7339.16\chromedriver.exe
+INFO  Browser path: C:\Users\boni\.cache\selenium\chrome\win64\140.0.7339.16\chrome.exe
 ```
 
+### Using Selenium Manager from the bindings
+
+All Selenium binding languages (Java, JavaScript, Python, .Net, Ruby) use Selenium Manager internally to manage drivers and browsers. The automated management process starts before starting a new Selenium session, i.e., each time a Selenium script instantiates a driver object (e.g., `ChromeDriver`, `FirefoxDriver`, etc.). The following snippets illustrate the difference between the old-fashioned way of manually managing drivers and the built-in automated mechanism provided by Selenium Manager.
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+**Previously**
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/selenium_manager/SeleniumManagerUsageDemo.java#L12-L17" >}}
+**Selenium Manager**
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/selenium_manager/SeleniumManagerUsageDemo.java#L20-L24" >}}
+{{< /tab >}}
+{{% tab header="Python" %}}
+**Previously**
+{{< gh-codeblock path="/examples/python/tests/selenium_manager/usage.py#L5-L8" >}}
+**Selenium Manager**
+{{< gh-codeblock path="/examples/python/tests/selenium_manager/usage.py#L10-L12" >}}
+{{< /tab >}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/SeleniumManager/UsageTest.cs#L10-L18" >}}
+{{< /tab >}}
+{{% tab header="Ruby" %}}
+**Previously**
+{{< gh-codeblock path="/examples/ruby/spec/selenium_manager/usage.rb#L5-L10" >}}
+**Selenium Manager**
+{{< gh-codeblock path="/examples/ruby/spec/selenium_manager/usage.rb#L12-L16" >}}
+{{< /tab >}}
+{{% tab header="JavaScript" %}}
+**Previously**
+{{< gh-codeblock path="/examples/javascript/test/selenium_manager/usage.spec.js#L16-L31" >}}
+**Selenium Manager**
+{{< gh-codeblock path="/examples/javascript/test/selenium_manager/usage.spec.js#L6-L14" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
 ## Selenium Grid
 Selenium Manager allows you to configure the drivers automatically when setting up Selenium Grid. To that aim, you need to include the argument `--selenium-manager true` in the command to start Selenium Grid. For more details, visit the [Selenium Grid starting page](https://www.selenium.dev/documentation/grid/getting_started/).
 
@@ -282,5 +347,36 @@ In this case, the library to be installed is the following:
 sudo apt-get install libatk-bridge2.0-0
 ```
 
+### Using an environment variable for the driver path
+It's possible to use an environment variable to specify the driver path without using Selenium Manager.
+The following environment variables are supported:
+
+* `SE_CHROMEDRIVER`
+* `SE_EDGEDRIVER`
+* `SE_GECKODRIVER`
+* `SE_IEDRIVER`
+
+For example, to specify the path to the chromedriver,
+you can set the `SE_CHROMEDRIVER` environment variable to the path of the chromedriver executable.
+The following bindings allow you to specify the driver path using an environment variable:
+
+* Ruby
+* Java
+* Python
+
+This feature is available in the Selenium Ruby binding starting from version 4.25.0 and in the Python binding from version 4.26.0.
+
+## Building a Custom Selenium Manager
+In order to build your own custom Selenium Manager that works in an architecture we don't currently support, you can
+utilize the following steps:
+
+1. Install Rust Dev Environment
+2. clone Selenium onto your local machine `git clone https://github.com/SeleniumHQ/selenium.git --depth 1`
+3. Navigate into your clone `cd selenium/rust`
+4. Build selenium `cargo build --release`
+5. Set the following environment variable for the driver path `SE_MANAGER_PATH=~/selenium/rust/target/release/selenium-manager`
+6. Put the driver you want in a location on your system PATH
+7. Selenium will now use the built Selenium Manager to locate the manually downloaded driver on PATH
+
 ## Roadmap
 You can trace the work in progress in the [Selenium Manager project dashboard](https://github.com/orgs/SeleniumHQ/projects/5). Moreover, you can check the new features shipped with each Selenium Manager release in its [changelog file](https://github.com/SeleniumHQ/selenium/blob/trunk/rust/CHANGELOG.md).
diff --git a/website_and_docs/content/documentation/selenium_manager.pt-br.md b/website_and_docs/content/documentation/selenium_manager.pt-br.md
index 0e27a36bb843..eeaf8f8d90ee 100644
--- a/website_and_docs/content/documentation/selenium_manager.pt-br.md
+++ b/website_and_docs/content/documentation/selenium_manager.pt-br.md
@@ -1,9 +1,9 @@
 ---
-title: "Selenium Manager (Beta)"
-linkTitle: "Selenium Manager"
-weight: 11
+title: "Gerenciador do Selenium (Beta)"
+linkTitle: "Gerenciador do Selenium"
+weight: 3
 description: >
-    Selenium Manager is a command-line tool implemented in Rust that provides automated driver and browser management for Selenium. Selenium bindings use this tool by default, so you do not need to download it or add anything to your code or do anything else to use it.
+    O Selenium Manager é uma ferramenta de linha de comando implementada em Rust que fornece gerenciamento automatizado de drivers e navegadores para o Selenium. As bibliotecas do Selenium usam essa ferramenta por padrão, portanto, você não precisa baixá-la, adicionar nada ao seu código ou realizar qualquer outra ação para utilizá-la.
 ---
 
 ## Motivation
@@ -69,6 +69,22 @@ edge can only be installed in Windows with administrator permissions
 
 Therefore, administrator permissions are required to install Edge in Windows automatically through Selenium Manager, and Edge is eventually installed in the usual program files folder (e.g., `C:\Program Files (x86)\Microsoft\Edge`).
 
+## Data collection
+Selenium Manager will report anonymised usage [statistics](https://plausible.io/privacy-focused-web-analytics) to [Plausible](https://plausible.io/manager.selenium.dev). This allows the Selenium team to understand more about how Selenium is being used so that we can better focus our development efforts. The data being collected is:
+
+| Data | Purpose |
+| -----|---------|
+| Selenium version | This allows the Selenium developers to safely deprecate and remove features, as well as determine which new features may be available to you |
+| Language binding | Programming language used to execute Selenium scripts (Java, JavaScript, Python, .Net, Ruby) |
+| OS and architecture Selenium Manager is running on | The Selenium developers can use this information to help prioritise bug reports, and to identify if there are systemic OS-related issues |
+| Browser and browser version | Helping for prioritising bug reports |
+| Rough geolocation | Derived from the IP address you connect from. This is useful for determining where we need to focus our documentation efforts |
+
+Selenium Manager sends these data to Plausible once a day. This period is based on the TTL value (see [configuration](https://www.selenium.dev/documentation/selenium_manager/#configuration)).
+
+### Opting out of data collection
+**Data collection is on by default.** To disable it, set the `SE_AVOID_STATS` environment variable to `true`. You may also disable data collection in the configuration file (see below) by setting `avoid-stats = true`.
+
 ## Configuration
 ***TL;DR:*** *Selenium Manager should work silently and transparently for most users. Nevertheless, there are scenarios (e.g., to specify a custom cache path or setup globally a proxy) where custom configuration can be required.*
 
@@ -102,7 +118,7 @@ The following table summarizes all the supported arguments supported by Selenium
 |`--browser-path <BROWSER_PATH>`|`browser-path = "BROWSER_PATH"`|`SE_BROWSER_PATH=BROWSER_PATH`|Browser path (absolute) for browser version detection (e.g., `/usr/bin/google-chrome`, `/Applications/Google Chrome.app/Contents/MacOS/Google Chrome`, `C:\Program Files\Google\Chrome\Application\chrome.exe`)|
 |`--driver-mirror-url <DRIVER_MIRROR_URL>`|`driver-mirror-url = "DRIVER_MIRROR_URL"`|`SE_DRIVER_MIRROR_URL=DRIVER_MIRROR_URL`|Mirror URL for driver repositories|
 |`--browser-mirror-url <BROWSER_MIRROR_URL>`|`browser-mirror-url = "BROWSER_MIRROR_URL"`|`SE_BROWSER_MIRROR_URL=BROWSER_MIRROR_URL`|Mirror URL for browser repositories|
-|`--output <OUTPUT>`|`output = "OUTPUT"`|`SE_OUTPUT=OUTPUT`|Output type: `LOGGER` (using `INFO`, `WARN`, etc.), `JSON` (custom JSON notation), or `SHELL` (Unix-like). Default: `LOGGER`|
+|`--output <OUTPUT>`|`output = "OUTPUT"`|`SE_OUTPUT=OUTPUT`|Output type: `LOGGER` (using `INFO`, `WARN`, etc.), `JSON` (custom JSON notation), `SHELL` (Unix-like), or `MIXED` (`INFO`, `WARN`, `DEBUG`, etc. to stderr and minimal `JSON` to stdout). Default: `LOGGER`|
 |`--os <OS>`|`os = "OS"`|`SE_OS=OS`|Operating system for drivers and browsers (i.e., `windows`, `linux`, or `macos`)|
 |`--arch <ARCH>`|`arch = "ARCH"`|`SE_ARCH=ARCH`|System architecture for drivers and browsers (i.e., `x32`, `x64`, or `arm64`)|
 |`--proxy <PROXY>`|`proxy = "PROXY"`|`SE_PROXY=PROXY`|HTTP proxy for network connection (e.g., `myproxy:port`, `myuser:mypass@myproxy:port`)|
@@ -110,10 +126,14 @@ The following table summarizes all the supported arguments supported by Selenium
 |`--offline`|`offline = true`|`SE_OFFLINE=true`|Offline mode (i.e., disabling network requests and downloads)|
 |`--force-browser-download`|`force-browser-download = true`|`SE_FORCE_BROWSER_DOWNLOAD=true`|Force to download browser, e.g., when a browser is already installed in the system, but you want Selenium Manager to download and use it|
 |`--avoid-browser-download`|`avoid-browser-download = true`|`SE_AVOID_BROWSER_DOWNLOAD=true`|Avoid to download browser, e.g., when a browser is supposed to be downloaded by Selenium Manager, but you prefer to avoid it|
+|`--skip-driver-in-path`|`skip-driver-in-path = true`|`SE_SKIP_DRIVER_IN_PATH=true`|Not using drivers found in the `PATH`|
+|`--skip-browser-in-path`|`skip-browser-in-path = true`|`SE_SKIP_BROWSER_IN_PATH=true`|Not using browsers found in the `PATH`|
 |`--debug`|`debug = true`|`SE_DEBUG=true`|Display `DEBUG` messages|
 |`--trace`|`trace = true`|`SE_TRACE=true`|Display `TRACE` messages|
 |`--cache-path <CACHE_PATH>`|`cache-path="CACHE_PATH"`|`SE_CACHE_PATH=CACHE_PATH`|Local folder used to store downloaded assets (drivers and browsers), local metadata, and configuration file. See next section for details. Default: `~/.cache/selenium`. For Windows paths in the TOML configuration file, double backslashes are required (e.g., `C:\\custom\\cache`).|
 |`--ttl <TTL>`|`ttl = TTL`|`SE_TTL=TTL`|Time-to-live in seconds. See next section for details. Default: `3600` (1 hour)|
+|`--language-binding <LANGUAGE>`|`language-binding = "LANGUAGE"`|`SE_LANGUAGE_BINDING=LANGUAGE`|Language that invokes Selenium Manager (e.g., Java, JavaScript, Python, DotNet, Ruby)|
+|`--avoid-stats`|`avoid-stats = true`|`SE_AVOID_STATS=true`|Avoid sends usage statistics to plausible.io. Default: `false`|
 
 In addition to the configuration keys specified in the table before, there are some special cases, namely:
 
@@ -123,6 +143,13 @@ In addition to the configuration keys specified in the table before, there are s
 - Driver mirror. Following the same pattern, we can use `chromedriver-mirror-url`, `geckodriver-mirror-url`,  `msedgedriver-mirror-url`,  etc. (in the configuration file), and `SE_CHROMEDRIVER_MIRROR_URL`, `SE_GECKODRIVER_MIRROR_URL`, `SE_MSEDGEDRIVER_MIRROR_URL`,  etc. (as environment variables).
 - Browser mirror. Following the same pattern, we can use `chrome-mirror-url`, `firefox-mirror-url`,  `edge-mirror-url`,  etc. (in the configuration file), and `SE_CHROME_MIRROR_URL`, `SE_FIREFOX_MIRROR_URL`, `SE_EDGE_MIRROR_URL`,  etc. (as environment variables).
 
+### se-config.toml Example
+{{< tabpane text=true >}}
+{{< tab header="se-config.toml" >}}
+{{< gh-codeblock path="/examples/python/tests/selenium_manager/example_se-config.toml#L1-L21" >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
 ## Caching
 ***TL;DR:*** *The drivers and browsers managed by Selenium Manager are stored in a local folder (`~/.cache/selenium`).*
 
@@ -131,7 +158,7 @@ The cache in Selenium Manager is a local folder (`~/.cache/selenium` by default)
 In addition to the downloaded drivers and browsers, two additional files live in the cache's root:
 
 - Configuration file (`se-config.toml`). This file is optional and, as explained in the previous section, allows to store custom configuration values for Selenium Manager. This file is maintained by the end-user and read by Selenium Manager.
-- Metadata file (`se-metadata.json`). This file contains versions discovered by Selenium Manger making network requests (e.g., using the [CfT JSON endpoints](https://github.com/GoogleChromeLabs/chrome-for-testing#json-api-endpoints)) and the time-to-live (TTL) in which they are valid. Selenium Manager automatically maintains this file.
+- Metadata file (`se-metadata.json`). This file contains versions discovered by Selenium Manager making network requests (e.g., using the [CfT JSON endpoints](https://github.com/GoogleChromeLabs/chrome-for-testing#json-api-endpoints)) and the time-to-live (TTL) in which they are valid. Selenium Manager automatically maintains this file.
 
 The TTL in Selenium Manager is inspired by the TTL for DNS, a well-known mechanism that refers to how long some values are cached before they are automatically refreshed. In the case of Selenium Manager, these values are the versions found by making network requests for driver and browser version discovery. By default, the TTL is `3600` seconds (i.e., 1 hour) and can be tuned using configuration values or disabled by setting this configuration value to `0`.
 
@@ -141,8 +168,8 @@ Let's consider an example. A Selenium binding asks Selenium Manager to resolve c
 
 Selenium Manager includes two additional arguments two handle the cache, namely:
 
-- `--clear-cache`: To remove the cache folder.
-- `--clear-metadata`: To remove the metadata file.
+- `--clear-cache`: To remove the cache folder (equivalent to the environment variable `SE_CLEAR_CACHE=true`).
+- `--clear-metadata`: To remove the metadata file (equivalent to the environment variable `SE_CLEAR_METADATA=true`).
 
 ## Versioning
 Selenium Manager follows the same versioning schema as Selenium. Nevertheless, we use the major version 0 for Selenium Manager releases because it is still in beta. For example, the Selenium Manager binaries shipped with Selenium 4.12.0 corresponds to version 0.4.12.
@@ -150,8 +177,8 @@ Selenium Manager follows the same versioning schema as Selenium. Nevertheless, w
 ## Getting Selenium Manager
 For most users, direct interaction with Selenium Manager is not required since the Selenium bindings use it internally. Nevertheless, if you want to *play* with Selenium Manager or use it for your use case involving driver or browser management, you can get the Selenium Manager binaries in different ways:
 
-- From the Selenium repository. The Selenium Manager source code is stored in the main Selenium repo under the folder [rust](https://github.com/SeleniumHQ/selenium/tree/trunk/rust). Moreover, you can find the compiled versions for Windows, Linux, and macOS in the [common folder](https://github.com/SeleniumHQ/selenium/tree/trunk/common/manager) of this repo.
-- From the build workflow. Selenium Manager is compiled using a [GitHub Actions workflow]((https://github.com/SeleniumHQ/selenium/actions/workflows/build-selenium-manager.yml)). This workflow creates binaries for Windows, Linux, and macOS. You can download these binaries from these workflow executions.
+- From the Selenium repository. The Selenium Manager source code is stored in the main Selenium repo under the folder [rust](https://github.com/SeleniumHQ/selenium/tree/trunk/rust). Moreover, you can find the compiled versions for Windows, Linux, and macOS in the [Selenium Manager Artifacts](https://github.com/SeleniumHQ/selenium_manager_artifacts) repo. The stable Selenium Manager binaries (i.e., those distributed in the latest stable Selenium version) are linked in this [file](https://github.com/SeleniumHQ/selenium/blob/trunk/common/selenium_manager.bzl).
+- From the build workflow. Selenium Manager is compiled using a [GitHub Actions workflow](https://github.com/SeleniumHQ/selenium/actions/workflows/ci-rust.yml). This workflow creates binaries for Windows, Linux, and macOS. You can download these binaries from these workflow executions.
 - From the cache. As of version 4.15.0 of the Selenium Java bindings, the Selenium Manager binary is extracted and copied to the cache folder. For instance, the Selenium Manager binary shipped with Selenium 4.15.0 is stored in the folder `~/.cache/selenium/manager/0.4.15`).
 
 ## Examples
@@ -159,16 +186,15 @@ Let's consider a typical example: we want to manage chromedriver automatically.
 
 ```
 $ ./selenium-manager --browser chrome --debug
-DEBUG   chromedriver not found in PATH
-DEBUG   chrome detected at C:\Program Files\Google\Chrome\Application\chrome.exe
-DEBUG   Running command: wmic datafile where name='C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe' get Version /value
-DEBUG   Output: "\r\r\n\r\r\nVersion=116.0.5845.111\r\r\n\r\r\n\r\r\n\r"
-DEBUG   Detected browser: chrome 116.0.5845.111
-DEBUG   Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
-DEBUG   Required driver: chromedriver 116.0.5845.96
-DEBUG   Downloading chromedriver 116.0.5845.96 from https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/116.0.5845.96/win64/chromedriver-win64.zip
-INFO    Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\116.0.5845.96\chromedriver.exe
-INFO    Browser path: C:\Program Files\Google\Chrome\Application\chrome.exe
+DEBUG chromedriver not found in PATH
+DEBUG chrome detected at C:\Program Files\Google\Chrome\Application\chrome.exe
+DEBUG Detected browser: chrome 139.0.7258.67
+DEBUG Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
+DEBUG Required driver: chromedriver 139.0.7258.68
+DEBUG Acquiring lock: C:\Users\boni\.cache\selenium\chromedriver\win64\139.0.7258.68\sm.lock
+DEBUG Downloading chromedriver 139.0.7258.68 from https://storage.googleapis.com/chrome-for-testing-public/139.0.7258.68/win64/chromedriver-win64.zip
+INFO  Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\139.0.7258.68\chromedriver.exe
+INFO  Browser path: C:\Program Files\Google\Chrome\Application\chrome.exe
 ```
 
 In this case, the local Chrome (in Windows) is detected by Selenium Manager. Then, using its version and the CfT endpoints, the proper chromedriver version (115, in this example) is downloaded to the local cache. Finally, Selenium Manager provides two results: i) the driver path (downloaded) and ii) the browser path (local).
@@ -177,20 +203,59 @@ Let's consider another example. Now we want to use Chrome beta. Therefore, we in
 
 ```
 $ ./selenium-manager --browser chrome --browser-version beta --debug
-DEBUG   chromedriver not found in PATH
-DEBUG   chrome not found in PATH
-DEBUG   chrome beta not found in the system
-DEBUG   Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json
-DEBUG   Required browser: chrome 117.0.5938.22
-DEBUG   Downloading chrome 117.0.5938.22 from https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/117.0.5938.22/win64/chrome-win64.zip
-DEBUG   chrome 117.0.5938.22 has been downloaded at C:\Users\boni\.cache\selenium\chrome\win64\117.0.5938.22\chrome.exe
-DEBUG   Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
-DEBUG   Required driver: chromedriver 117.0.5938.22
-DEBUG   Downloading chromedriver 117.0.5938.22 from https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/117.0.5938.22/win64/chromedriver-win64.zip
-INFO    Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\117.0.5938.22\chromedriver.exe
-INFO    Browser path: C:\Users\boni\.cache\selenium\chrome\win64\117.0.5938.22\chrome.exe
+DEBUG chromedriver not found in PATH
+DEBUG chrome not found in PATH
+DEBUG chrome beta not found in the system
+DEBUG Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json
+DEBUG Required browser: chrome 140.0.7339.16
+DEBUG Acquiring lock: C:\Users\boni\.cache\selenium\chrome\win64\140.0.7339.16\sm.lock
+DEBUG Downloading chrome 140.0.7339.16 from https://storage.googleapis.com/chrome-for-testing-public/140.0.7339.16/win64/chrome-win64.zip
+DEBUG chrome 140.0.7339.16 is available at C:\Users\boni\.cache\selenium\chrome\win64\140.0.7339.16\chrome.exe
+DEBUG Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
+DEBUG Required driver: chromedriver 140.0.7339.16
+DEBUG Acquiring lock: C:\Users\boni\.cache\selenium\chromedriver\win64\140.0.7339.16\sm.lock
+DEBUG Downloading chromedriver 140.0.7339.16 from https://storage.googleapis.com/chrome-for-testing-public/140.0.7339.16/win64/chromedriver-win64.zip
+INFO  Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\140.0.7339.16\chromedriver.exe
+INFO  Browser path: C:\Users\boni\.cache\selenium\chrome\win64\140.0.7339.16\chrome.exe
 ```
 
+### Using Selenium Manager from the bindings
+
+All Selenium binding languages (Java, JavaScript, Python, .Net, Ruby) use Selenium Manager internally to manage drivers and browsers. The automated management process starts before starting a new Selenium session, i.e., each time a Selenium script instantiates a driver object (e.g., `ChromeDriver`, `FirefoxDriver`, etc.). The following snippets illustrate the difference between the old-fashioned way of manually managing drivers and the built-in automated mechanism provided by Selenium Manager.
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+**Previously**
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/selenium_manager/SeleniumManagerUsageDemo.java#L12-L17" >}}
+**Selenium Manager**
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/selenium_manager/SeleniumManagerUsageDemo.java#L20-L24" >}}
+{{< /tab >}}
+{{% tab header="Python" %}}
+**Previously**
+{{< gh-codeblock path="/examples/python/tests/selenium_manager/usage.py#L5-L8" >}}
+**Selenium Manager**
+{{< gh-codeblock path="/examples/python/tests/selenium_manager/usage.py#L10-L12" >}}
+{{< /tab >}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/SeleniumManager/UsageTest.cs#L10-L18" >}}
+{{< /tab >}}
+{{% tab header="Ruby" %}}
+**Previously**
+{{< gh-codeblock path="/examples/ruby/spec/selenium_manager/usage.rb#L5-L10" >}}
+**Selenium Manager**
+{{< gh-codeblock path="/examples/ruby/spec/selenium_manager/usage.rb#L12-L16" >}}
+{{< /tab >}}
+{{% tab header="JavaScript" %}}
+**Previously**
+{{< gh-codeblock path="/examples/javascript/test/selenium_manager/usage.spec.js#L16-L31" >}}
+**Selenium Manager**
+{{< gh-codeblock path="/examples/javascript/test/selenium_manager/usage.spec.js#L6-L14" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
 ## Selenium Grid
 Selenium Manager allows you to configure the drivers automatically when setting up Selenium Grid. To that aim, you need to include the argument `--selenium-manager true` in the command to start Selenium Grid. For more details, visit the [Selenium Grid starting page](https://www.selenium.dev/documentation/grid/getting_started/).
 
@@ -282,5 +347,36 @@ In this case, the library to be installed is the following:
 sudo apt-get install libatk-bridge2.0-0
 ```
 
+### Using an environment variable for the driver path
+It's possible to use an environment variable to specify the driver path without using Selenium Manager.
+The following environment variables are supported:
+
+* `SE_CHROMEDRIVER`
+* `SE_EDGEDRIVER`
+* `SE_GECKODRIVER`
+* `SE_IEDRIVER`
+
+For example, to specify the path to the chromedriver,
+you can set the `SE_CHROMEDRIVER` environment variable to the path of the chromedriver executable.
+The following bindings allow you to specify the driver path using an environment variable:
+
+* Ruby
+* Java
+* Python
+
+This feature is available in the Selenium Ruby binding starting from version 4.25.0 and in the Python binding from version 4.26.0.
+
+## Building a Custom Selenium Manager
+In order to build your own custom Selenium Manager that works in an architecture we don't currently support, you can
+utilize the following steps:
+
+1. Install Rust Dev Environment
+2. clone Selenium onto your local machine `git clone https://github.com/SeleniumHQ/selenium.git --depth 1`
+3. Navigate into your clone `cd selenium/rust`
+4. Build selenium `cargo build --release`
+5. Set the following environment variable for the driver path `SE_MANAGER_PATH=~/selenium/rust/target/release/selenium-manager`
+6. Put the driver you want in a location on your system PATH
+7. Selenium will now use the built Selenium Manager to locate the manually downloaded driver on PATH
+
 ## Roadmap
 You can trace the work in progress in the [Selenium Manager project dashboard](https://github.com/orgs/SeleniumHQ/projects/5). Moreover, you can check the new features shipped with each Selenium Manager release in its [changelog file](https://github.com/SeleniumHQ/selenium/blob/trunk/rust/CHANGELOG.md).
diff --git a/website_and_docs/content/documentation/selenium_manager.zh-cn.md b/website_and_docs/content/documentation/selenium_manager.zh-cn.md
index 0e27a36bb843..5a830138e2df 100644
--- a/website_and_docs/content/documentation/selenium_manager.zh-cn.md
+++ b/website_and_docs/content/documentation/selenium_manager.zh-cn.md
@@ -1,97 +1,188 @@
 ---
-title: "Selenium Manager (Beta)"
+title: "Selenium Manager (测试版)"
 linkTitle: "Selenium Manager"
-weight: 11
+weight: 3
 description: >
-    Selenium Manager is a command-line tool implemented in Rust that provides automated driver and browser management for Selenium. Selenium bindings use this tool by default, so you do not need to download it or add anything to your code or do anything else to use it.
+  Selenium Manager 是一个用 Rust 语言实现的命令行工具, 为 Selenium 提供了自动化的驱动程序和浏览器管理功能. Selenium 默认绑定使用此工具, 因此您无需下载它, 也不需要在代码中添加任何内容或执行其他操作即可使用它. 
 ---
 
-## Motivation
-***TL;DR:*** *Selenium Manager is the official driver manager of the Selenium project, and it is shipped out of the box with every Selenium release.*
+## 动机
+***简而言之:*** 
+*Selenium Manager 是 Selenium 项目的官方驱动程序管理器, 并且在每次 Selenium 发布时都会随附提供.*
+
+Selenium 利用每个浏览器实现的原生支持来执行自动化流程. 
+因此, Selenium 用户需要在使用 Selenium API 的脚本和浏览器之间放置一个名为 _驱动程序_(如 chromedriver、geckodriver、msedgedriver 等)的组件. 
+多年来, 管理这些驱动程序, 对Selenium 用户来说, 一直是个繁琐手动过程. 
+他们必须下载浏览器所需的驱动程序(如 Chrome 的 chromedriver、Firefox 的 geckodriver 等), 
+并将其放置在  `PATH`  中或以系统属性的形式导出驱动程序路径(如 Java、JavaScript 等). 
+但这种过程很麻烦, 导致了可维护性问题.
+
+让我们来看一个例子. 
+假设您手动下载了用于通过 Selenium 驱动 Chrome 的所需 chromedriver. 
+在执行此操作时, Chrome 的稳定版本是 113, 
+所以您下载了 chromedriver 113 并将其放在您的  `PATH` 中. 
+此时, 您的 Selenium 脚本执行正确. 但 *问题* 在于 Chrome 是 *保持更新* 的. 
+这指的是 Chrome 能够在有新版本可用时自动且静默地升级到下一个稳定版本. 
+此功能对终端用户来说很棒, 但对浏览器自动化来说可能很危险. 
+让我们回到这个例子来明确这一点. 
+当您本地的 Chrome 最终更新到了 115 版本. 
+此时, 由于手动下载的驱动程序(113 版)与 Chrome 版本(115 版)不兼容, 
+您的 Selenium 脚本出错了. 
+因此, 您的 Selenium 脚本会因以下错误消息而失败: 
+*“会话无法创建: 此版本的 ChromeDriver 仅支持 Chrome 版本 113”*. 
+
+
+这个问题是所谓的驱动管理器(例如 Java 的 [WebDriverManager](https://bonigarcia.dev/webdrivermanager/) 、
+Python 的 [webdriver-manager](https://pypi.org/project/webdriver-manager/) 、
+JavaScript 的 [webdriver-manager](https://www.npmjs.com/package/webdriver-manager) 、
+C# 的 [WebDriverManager.Net](https://github.com/rosolko/WebDriverManager.Net) 以及 Ruby 的 [webdrivers](https://github.com/titusfortner/webdrivers) 
+存在的主要原因. 
+所有这些项目都是一种启示, 
+也清楚地表明社区需要将此功能内置到 Selenium 中. 
+因此, Selenium 项目创建了 *Selenium Manager*, 
+这是 Selenium 的官方驱动管理器, 从 4.6 版本开始, 它随每个 Selenium 发行版一起提供. 
+
+
+## 用法
+***简而言之:*** 
+*当驱动程序(如 ChromeDriver、GeckoDriver 等)不可用时, Selenium 绑定会使用 Selenium Manager.*
+
+通过 Selenium Manager 进行驱动程序管理是 Selenium 绑定的 *可选功能* . 
+因此, 用户可以继续手动管理其驱动程序(将驱动程序放在  `PATH`   中或使用系统属性), 
+也可以依靠第三方 *驱动程序管理器* 自动完成. 
+Selenium Manager 仅作为备用方案: 
+如果未提供驱动程序, Selenium Manager 将会介入. 
+
+Selenium Manager 是一个用 Rust 语言实现的命令行界面(CLI)工具, 
+可于 Windows、Linux 和 macOS 等多种操作系统上跨平台运行. 
+Selenium Manager 的二进制文件随每个 Selenium 版本一起发布. 
+这样, 每个 Selenium 绑定语言都会调用 Selenium Manager 来执行以下各节中所述的自动化驱动程序和浏览器管理. 
+
+## Automated driver management 自动驱动管理
+***简而言之:*** 
+*当所需驱动程序不可用时, Selenium Manager 会自动寻找、下载并缓存 Selenium 所需的驱动程序.*
+
+Selenium Manager 的主要特性被称为 *自动驱动管理* . 
+让我们通过一个例子来理解它. 假设我们想用 Selenium 驱动 Chrome(请参阅关于如何[使用Selenium启动会话](https://www.selenium.dev/documentation/webdriver/getting_started/first_script/#1-start-the-session)的文档). 
+在会话开始之前, 如果驱动程序不可用, Selenium Manager 会为我们管理 chromedriver. 
+我们用 *管理* 这个词来描述此功能(而不仅仅是 *下载* ), 因为这个过程更广泛, 包含不同的步骤: 
+
+1. 探索浏览器版本. Selenium Manager 会发现执行 Selenium 的机器上安装的浏览器版本(例如, Chrome、Firefox、Edge). 此步骤使用 shell 命令(例如,  `google-chrome --version` ). 
+2. 寻找驱动程序版本. 通过探索过的浏览器版本, 确定合适的驱动程序版本. 在此步骤中, 使用由浏览器供应商维护的在线元数据/端点(例如, [chromedriver](https://chromedriver.chromium.org/downloads), [geckodriver](https://github.com/mozilla/geckodriver/releases), 或 [msedgedriver](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/)). 
+3. 驱动下载. 通过解析出的驱动程序版本获取驱动程序的 URL；利用该 URL 下载驱动程序文件, 解压后将其存储在本地. 
+4. 驱动程序缓存. 未压缩的驱动程序二进制文件存储在本地缓存文件夹( `~/.cache/selenium` )中. 下次需要相同的驱动程序时, 如果该驱动程序已在缓存中, 则将从那里使用. 
+
+
+## 自动化浏览器管理
+***简而言之:*** 
+*当本地系统未安装 Selenium 驱动的浏览器(Chrome、Firefox 和 Edge)时, Selenium Manager 会自动发现、下载并缓存这些浏览器.*
+
+从 Selenium 4.11.0 版本开始, Selenium Manager 还实现了 *自动浏览器管理*. 
+借助此功能, Selenium Manager 能够发现、下载并缓存不同浏览器的版本, 
+使其能够无缝地供 Selenium 使用. 
+在内部, Selenium Manager 使用了与前一节所述类似的管理流程, 但这次是针对浏览器版本的. 
+
+Selenium Manager 自动管理的浏览器有: 
+
+- Chrome浏览器, 基于 [Chrome for Testing (CfT)](https://googlechromelabs.github.io/chrome-for-testing/), 自 Selenium 4.11.0 版本起. 
+- 火狐浏览器. 基于[public Firefox releases](https://ftp.mozilla.org/pub/firefox/releases/), 自 Selenium 4.12.0 版本. 
+- Edge浏览器, 基于 [Edge downloads](https://www.microsoft.com/en-us/edge/download), 自 Selenium 4.14.0 版本. 
+
+让我们再次考虑用 Selenium 驱动 Chrome 的典型示例. 
+这一次, 假设在[启动新会话](https://www.selenium.dev/documentation/webdriver/getting_started/first_script/#1-start-the-session)时本地机器上未安装 Chrome. 
+在这种情况下, Selenium Manager会发现、下载并缓存当前的稳定版 Chrome 浏览器(在 `~/.cache/selenium/chrome` 中). 
+
+但不仅如此. 除了稳定的浏览器版本, 
+Selenium Manager 还允许下载旧版浏览器(对于 Chrome for Testing 而言, 
+从 113 版本开始, 这是作为 Chrome for Testing 发布的第一个版本). 
+要使用 Selenium 设置浏览器版本, 我们使用一个名为 [browserVersion](https://www.selenium.dev/documentation/webdriver/drivers/options/#browserversion) 的浏览器选项. 
+
+让我们考虑另一个简单的例子. 
+假设我们使用 [Chrome options](https://www.selenium.dev/documentation/webdriver/browsers/chrome/) 将  `browserVersion`  设置为  `114` . 
+在这种情况下, Selenium Manager会检查是否已安装 Chrome 114 版本. 
+如果已安装, 就会使用它. 如果没有安装, Selenium Manager会进行管理(即发现、下载并缓存)Chrome 114 版本. 
+无论哪种情况, chromedriver 也会被管理. 最后, Selenium 会像往常一样启动 Chrome 以实现程序化驱动. 
+
+但还有更多. 除了固定的浏览器版本(例如,  `113`, `114`, `115`  等), 
+我们还可以为  `browserVersion`  使用以下标签: 
+
+- `stable`: 当前 CfT 版本.
+- `beta`: 下一个稳定版.
+- `dev`: 当前正在开发的版本.
+- `canary`: 面向开发者的夜间构建版本.
+- `esr`: 扩展支持版本(仅适用于 Firefox 浏览器).
+
+当指定了这些标签时, Selenium Manager首先会检查给定的浏览器是否已安装( `beta`, `dev`  等), 
+如果未检测到, 则会自动管理该浏览器. 
+
+### Windows中的Edge
+
+在 Windows 系统中, Selenium Manager 对 Edge 的自动化边缘管理与其他浏览器有所不同. 
+对于 Chrome 和 Firefox(以及 macOS 和 Linux 系统中的 Edge), 
+Selenium Manager 会自动将其下载到本地缓存( `~/.cache/selenium` ). 
+然而, 在 Windows 系统中, Edge 却无法实现同样的操作. 
+原因在于 Windows 版本的 Edge 安装程序是以微软安装程序(MSI)文件的形式分发的, 
+需要以管理员权限执行. 
+因此, 当在 Windows 系统中使用非管理员权限会话通过 Selenium Manager 安装 Edge 时, 
+Selenium Manager 会显示如下警告信息: 
 
-Selenium uses the native support implemented by each browser to carry out the automation process. For this reason, Selenium users need to place a component called _driver_ (chromedriver, geckodriver, msedgedriver, etc.) between the script using the Selenium API and the browser. For many years, managing these drivers was a manual process for Selenium users. This way, they had to download the required driver for a browser (chromedriver for Chrome, geckodriver for Firefox, etc.) and place it in the `PATH` or export the driver path as a system property (Java, JavaScript, etc.). But this process was cumbersome and led to maintainability issues.
-
-Let's consider an example. Imagine you manually downloaded the required chromedriver for driving your Chrome with Selenium. When you did this process, the stable version of Chrome was 113, so you downloaded chromedriver 113 and put it in your `PATH`. At that moment, your Selenium script executed correctly. But the *problem* is that Chrome is *evergreen*. This name refers to Chrome's ability to upgrade automatically and silently to the next stable version when available. This feature is excellent for end-users but potentially dangerous for browser automation. Let's go back to the example to discover it. Your local Chrome eventually updates to version 115. And that moment, your Selenium script is broken due to the incompatibility between the manually downloaded driver (113) and the Chrome version (115). Thus, your Selenium script fails with the following error message: *"session not created: This version of ChromeDriver only supports Chrome version 113"*.
-
-This problem is the primary reason for the existence of the so-called *driver managers* (such as [WebDriverManager](https://bonigarcia.dev/webdrivermanager/) for Java, 
-[webdriver-manager](https://pypi.org/project/webdriver-manager/) for Python, [webdriver-manager](https://www.npmjs.com/package/webdriver-manager) for JavaScript, [WebDriverManager.Net](https://github.com/rosolko/WebDriverManager.Net) for C#, and [webdrivers](https://github.com/titusfortner/webdrivers) for Ruby). All these projects were an inspiration and a clear sign that the community needed this feature to be built in Selenium. Thus, the Selenium project has created *Selenium Manager*, the official driver manager for Selenium, shipped out of the box with each Selenium release as of version 4.6.
-
-## Usage
-***TL;DR:*** *Selenium Manager is used by the Selenium bindings when the drivers (chromedriver, geckodriver, etc.) are unavailable.*
-
-Driver management through Selenium Manager is *opt-in* for the Selenium bindings. Thus, users can continue managing their drivers manually (putting the driver in the `PATH` or using system properties) or rely on a third-party *driver manager* to do it automatically. Selenium Manager only operates as a fallback: if no driver is provided, Selenium Manager will come to the rescue.
-
-Selenium Manager is a CLI (command line interface) tool implemented in Rust to allow cross-platform execution and compiled for Windows, Linux, and macOS. The Selenium Manager binaries are shipped with each Selenium release. This way, each Selenium binding language invokes Selenium Manager to carry out the automated driver and browser management explained in the following sections.
-
-## Automated driver management
-***TL;DR:*** *Selenium Manager automatically discovers, downloads, and caches the drivers required by Selenium when these drivers are unavailable.*
-
-The primary feature of Selenium Manager is called *automated driver management*. Let's consider an example to understand it. Suppose we want to driver Chrome with Selenium (see the doc about how to [start a session with Selenium](https://www.selenium.dev/documentation/webdriver/getting_started/first_script/#1-start-the-session)). Before the session begins, and when the driver is unavailable, Selenium Manager manages chromedriver for us. We use the term *management* for this feature (and not just *download*) since this process is broader and implies different steps:
-
-1. Browser version discovery. Selenium Manager discovers the browser version (e.g., Chrome, Firefox, Edge) installed in the machine that executes Selenium. This step uses shell commands (e.g., `google-chrome --version`).
-2. Driver version discovery. With the discovered browser version, the proper driver version is resolved. For this step, the online metadata/endpoints maintained by the browser vendors (e.g., [chromedriver](https://chromedriver.chromium.org/downloads), [geckodriver](https://github.com/mozilla/geckodriver/releases), or [msedgedriver](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/)) are used.
-3. Driver download. The driver URL is obtained with the resolved driver version; with that URL, the driver artifact is downloaded, uncompressed, and stored locally.
-4. Driver cache. Uncompressed driver binaries are stored in a local cache folder (`~/.cache/selenium`). The next time the same driver is required, it will be used from there if the driver is already in the cache.
-
-## Automated browser management
-***TL;DR:*** *Selenium Manager automatically discovers, downloads, and caches the browsers driven with Selenium (Chrome, Firefox, and Edge) when these browsers are not installed in the local system.*
-
-As of Selenium 4.11.0, Selenium Manager also implements *automated browser management*. With this feature, Selenium Manager allows us to discover, download, and cache the different browser releases, making them seamlessly available for Selenium. Internally, Selenium Manager uses an equivalent management procedure explained in the section before, but this time, for browser releases.
-
-The browser automatically managed by Selenium Manager are:
-
-- Chrome. Based on [Chrome for Testing (CfT)](https://googlechromelabs.github.io/chrome-for-testing/), as of Selenium 4.11.0.
-- Firefox. Based on [public Firefox releases](https://ftp.mozilla.org/pub/firefox/releases/), as of Selenium 4.12.0.
-- Edge. Based on [Edge downloads](https://www.microsoft.com/en-us/edge/download), as of Selenium 4.14.0.
-
-Let's consider again the typical example of driving Chrome with Selenium. And this time, suppose Chrome is not installed on the local machine when [starting a new session](https://www.selenium.dev/documentation/webdriver/getting_started/first_script/#1-start-the-session)). In that case, the current stable CfT release will be discovered, downloaded, and cached (in `~/.cache/selenium/chrome`) by Selenium Manager. 
-
-But there is more. In addition to the stable browser version, Selenium Manager also allows downloading older browser versions (in the case of CfT, starting in version 113, the first version published as CfT). To set a browser version with Selenium, we use a browser option called [browserVersion](https://www.selenium.dev/documentation/webdriver/drivers/options/#browserversion).
-
-Let's consider another simple example. Suppose we set `browserVersion` to `114` using [Chrome options](https://www.selenium.dev/documentation/webdriver/browsers/chrome/). In this case, Selenium Manager will check if Chrome 114 is already installed. If it is, it will be used. If not, Selenium Manager will manage (i.e., discover, download, and cache) CfT 114. And in either case, the chromedriver is also managed. Finally, Selenium will start Chrome to be driven programmatically, as usual.
-
-But there is even more. In addition to fixed browser versions (e.g., `113`, `114`, `115`, etc.), we can use the following labels for `browserVersion`:
+```
+edge can only be installed in Windows with administrator permissions
+```
 
-- `stable`: Current CfT version.
-- `beta`: Next version to stable.
-- `dev`: Version in development at this moment.
-- `canary`: Nightly build for developers.
-- `esr`: Extended Support Release (only for Firefox).
+因此, 通过 Selenium Manager 在 Windows 系统中自动安装 Edge 浏览器需要管理员权限, 
+并且 Edge 最终会被安装在通常的程序文件夹中(例如 `C:\Program Files (x86)\Microsoft\Edge` ). 
 
-When these labels are specified, Selenium Manager first checks if a given browser is already installed (`beta`, `dev`, etc.), and when it is not detected, the browser is automatically managed.
+## 数据收集
+Selenium Manager会向 [Plausible](https://plausible.io/manager.selenium.dev) 报送匿名使用[statistics](https://plausible.io/privacy-focused-web-analytics) 数据. 
+这能让 Selenium 团队更深入地了解 Selenium 的使用情况, 
+从而更好地集中我们的开发精力. 所收集的数据包括: 
 
-### Edge in Windows
-Automated Edge management by Selenium Manager in Windows is different from other browsers. Both Chrome and Firefox (and Edge in macOS and Linux) are downloaded automatically to the local cache (`~/.cache/selenium`) by Selenium Manager. Nevertheless, the same cannot be done for Edge in Windows. The reason is that the Edge installer for Windows is distributed as a Microsoft Installer (MSI) file, designed to be executed with administrator rights. This way, when Edge is attempted to be installed with Selenium Manager in Windows with a non-administrator session, a warning message will be displayed by Selenium Manager as follows:
+| Data                          | Purpose |
+|-------------------------------|---------|
+| Selenium 版本                   | 这使得 Selenium 开发人员能够安全地弃用和移除功能, 并确定哪些新功能可能对您可用.  |
+| 语言绑定                          | 用于执行 Selenium 脚本的编程语言(Java、JavaScript、Python、.Net、Ruby)|
+| Selenium Manager 正在运行的操作系统和架构 | Selenium 开发人员可以利用这些信息来帮助确定错误报告的优先级, 并识别是否存在系统性的与操作系统相关的故障.  |
+| 浏览器及浏览器版本                     | 协助确定错误报告的优先级 |
+| 大致地理位置                        | 根据您连接的 IP 地址得出. 这有助于我们确定需要在哪些地区集中文档编写工作.  |
 
-```
-edge can only be installed in Windows with administrator permissions
-```
+Selenium Manager 每天会将这些数据发送给 Plausible 一次. 
+此周期基于 TTL 值(请参阅[configuration](https://www.selenium.dev/documentation/selenium_manager/#configuration)). 
 
-Therefore, administrator permissions are required to install Edge in Windows automatically through Selenium Manager, and Edge is eventually installed in the usual program files folder (e.g., `C:\Program Files (x86)\Microsoft\Edge`).
+### 选择退出数据收集
+**默认情况下会收集数据.** 若要禁用数据收集, 请将 `SE_AVOID_STATS` 环境变量设置 `true`.
+您也可以在配置文件中(见下文)通过设置  `avoid-stats = true` 来禁用数据收集. 
 
-## Configuration
-***TL;DR:*** *Selenium Manager should work silently and transparently for most users. Nevertheless, there are scenarios (e.g., to specify a custom cache path or setup globally a proxy) where custom configuration can be required.*
+## 配置
+***简而言之:*** 
+*对于大多数用户而言, Selenium Manager 应该能静默且透明地运行. 不过, 在某些场景下(例如指定自定义缓存路径或全局设置代理), 可能需要自定义配置.*
 
-Selenium Manager is a CLI tool. Therefore, under the hood, the Selenium bindings call Selenium Manager by invoking shell commands. Like any other CLI tool, arguments can be used to specify specific capabilities in Selenium Manager. The different arguments supported by Selenium Manager can be checked by running the following command:
+Selenium Manager 是一个命令行界面(CLI)工具. 
+因此, 在底层, Selenium 绑定通过调用 shell 命令来调用 Selenium Manager. 
+和任何其他 CLI 工具一样, 可以使用参数来指定 Selenium Manager 中的特定功能. 
+要查看 Selenium Manager 支持的不同参数, 可以运行以下命令: 
 
 ```
 $ ./selenium-manager --help
 ```
 
-In addition to CLI arguments, Selenium Manager allows two additional mechanisms for configuration:
+除了命令行参数之外, Selenium Manager 还支持两种额外的配置机制: 
 
-- Configuration file. Selenium Manager uses a file called `se-config.toml` located in the Selenium cache (by default, at `~/.cache/selenium`) for custom configuration values. This TOML file contains a key-value collection used for custom configuration.
-- Environmental variables. Each configuration key has its equivalence in environmental variables by converting each key name to uppercase, replacing the dash symbol (`-`) with an underscore (`_`), and adding the prefix `SE_`.
+- 配置文件. Selenium Manager使用位于 Selenium 缓存中的一个名为  `se-config.toml`   的文件(默认情况下位于  `~/.cache/selenium` )来存储自定义配置值. 此 TOML 文件包含用于自定义配置的键值集合. 
+- 环境变量. 每个配置键在环境变量中都有对应的等效项, 方法是将每个键名转换为大写, 将破折号(`-`)替换为下划线(`_`), 并在前面加上前缀`SE_`. 
 
-The configuration file is honored by Selenium Manager when it is present, and the corresponding CLI parameter is not specified. Besides, the environmental variables are used when neither of the previous options (CLI arguments and configuration file) is specified. In other words, the order of preference for Selenium Manager custom configuration is as follows:
+当存在配置文件且未指定相应的命令行参数时, Selenium Manager 会遵循该配置文件. 
+此外, 如果既未指定命令行参数也未提供配置文件, 则会使用环境变量. 换句话说, Selenium Manager 自定义配置的优先级顺序如下: 
 
-1. CLI arguments.
-2. Configuration file.
-3. Environment variables.
+1. CLI参数. 
+2. 配置文件. 
+3. 环境变量. 
 
-Notice that the Selenium bindings use the CLI arguments to specify configuration values, which in turn, are defined in each binding using [browser options](https://www.selenium.dev/documentation/webdriver/drivers/options/).
+请注意, Selenium 绑定使用命令行参数来指定配置值, 
+而这些配置值又在每个绑定中通过[browser options](https://www.selenium.dev/documentation/webdriver/drivers/options/)来定义. 
+
+下表总结了 Selenium Manager 支持的所有参数及其在配置文件和环境变量中的对应键. 
 
-The following table summarizes all the supported arguments supported by Selenium Manager and their correspondence key in the configuration file and environment variables.
 
 | CLI argument| Configuration file | Env variable | Description |
 |-------------|--------------------|--------------|-------------|
@@ -102,7 +193,7 @@ The following table summarizes all the supported arguments supported by Selenium
 |`--browser-path <BROWSER_PATH>`|`browser-path = "BROWSER_PATH"`|`SE_BROWSER_PATH=BROWSER_PATH`|Browser path (absolute) for browser version detection (e.g., `/usr/bin/google-chrome`, `/Applications/Google Chrome.app/Contents/MacOS/Google Chrome`, `C:\Program Files\Google\Chrome\Application\chrome.exe`)|
 |`--driver-mirror-url <DRIVER_MIRROR_URL>`|`driver-mirror-url = "DRIVER_MIRROR_URL"`|`SE_DRIVER_MIRROR_URL=DRIVER_MIRROR_URL`|Mirror URL for driver repositories|
 |`--browser-mirror-url <BROWSER_MIRROR_URL>`|`browser-mirror-url = "BROWSER_MIRROR_URL"`|`SE_BROWSER_MIRROR_URL=BROWSER_MIRROR_URL`|Mirror URL for browser repositories|
-|`--output <OUTPUT>`|`output = "OUTPUT"`|`SE_OUTPUT=OUTPUT`|Output type: `LOGGER` (using `INFO`, `WARN`, etc.), `JSON` (custom JSON notation), or `SHELL` (Unix-like). Default: `LOGGER`|
+|`--output <OUTPUT>`|`output = "OUTPUT"`|`SE_OUTPUT=OUTPUT`|Output type: `LOGGER` (using `INFO`, `WARN`, etc.), `JSON` (custom JSON notation), `SHELL` (Unix-like), or `MIXED` (`INFO`, `WARN`, `DEBUG`, etc. to stderr and minimal `JSON` to stdout). Default: `LOGGER`|
 |`--os <OS>`|`os = "OS"`|`SE_OS=OS`|Operating system for drivers and browsers (i.e., `windows`, `linux`, or `macos`)|
 |`--arch <ARCH>`|`arch = "ARCH"`|`SE_ARCH=ARCH`|System architecture for drivers and browsers (i.e., `x32`, `x64`, or `arm64`)|
 |`--proxy <PROXY>`|`proxy = "PROXY"`|`SE_PROXY=PROXY`|HTTP proxy for network connection (e.g., `myproxy:port`, `myuser:mypass@myproxy:port`)|
@@ -110,104 +201,189 @@ The following table summarizes all the supported arguments supported by Selenium
 |`--offline`|`offline = true`|`SE_OFFLINE=true`|Offline mode (i.e., disabling network requests and downloads)|
 |`--force-browser-download`|`force-browser-download = true`|`SE_FORCE_BROWSER_DOWNLOAD=true`|Force to download browser, e.g., when a browser is already installed in the system, but you want Selenium Manager to download and use it|
 |`--avoid-browser-download`|`avoid-browser-download = true`|`SE_AVOID_BROWSER_DOWNLOAD=true`|Avoid to download browser, e.g., when a browser is supposed to be downloaded by Selenium Manager, but you prefer to avoid it|
+|`--skip-driver-in-path`|`skip-driver-in-path = true`|`SE_SKIP_DRIVER_IN_PATH=true`|Not using drivers found in the `PATH`|
+|`--skip-browser-in-path`|`skip-browser-in-path = true`|`SE_SKIP_BROWSER_IN_PATH=true`|Not using browsers found in the `PATH`|
 |`--debug`|`debug = true`|`SE_DEBUG=true`|Display `DEBUG` messages|
 |`--trace`|`trace = true`|`SE_TRACE=true`|Display `TRACE` messages|
 |`--cache-path <CACHE_PATH>`|`cache-path="CACHE_PATH"`|`SE_CACHE_PATH=CACHE_PATH`|Local folder used to store downloaded assets (drivers and browsers), local metadata, and configuration file. See next section for details. Default: `~/.cache/selenium`. For Windows paths in the TOML configuration file, double backslashes are required (e.g., `C:\\custom\\cache`).|
 |`--ttl <TTL>`|`ttl = TTL`|`SE_TTL=TTL`|Time-to-live in seconds. See next section for details. Default: `3600` (1 hour)|
-
-In addition to the configuration keys specified in the table before, there are some special cases, namely:
-
-- Browser version. In addition to `browser-version`, we can use the specific configuration keys to specify custom versions per supported browser. This way, the keys `chrome-version`, `firefox-version`, `edge-version`, etc., are supported. The same applies to environment variables (i.e., `SE_CHROME_VERSION`, `SE_FIREFOX_VERSION`, `SE_EDGE_VERSION`, etc.).
-- Driver version. Following the same pattern, we can use `chromedriver-version`, `geckodriver-version`,  `msedgedriver-version`,  etc. (in the configuration file), and `SE_CHROMEDRIVER_VERSION`, `SE_GECKODRIVER_VERSION`, `SE_MSEDGEDRIVER_VERSION`,  etc. (as environment variables).
-- Browser path. Following the same pattern, we can use `chrome-path`, `firefox-path`,  `edge-path`,  etc. (in the configuration file), and `SE_CHROME_PATH`, `SE_FIREFOX_PATH`, `SE_EDGE_PATH`,  etc. (as environment variables). The Selenium bindings also allow to specify a custom location of the browser path using options, namely: [Chrome](https://www.selenium.dev/documentation/webdriver/browsers/chrome/#start-browser-in-a-specified-location)), [Edge](https://www.selenium.dev/documentation/webdriver/browsers/edge/#start-browser-in-a-specified-location), or [Firefox](https://www.selenium.dev/documentation/webdriver/browsers/firefox/#start-browser-in-a-specified-location).
-- Driver mirror. Following the same pattern, we can use `chromedriver-mirror-url`, `geckodriver-mirror-url`,  `msedgedriver-mirror-url`,  etc. (in the configuration file), and `SE_CHROMEDRIVER_MIRROR_URL`, `SE_GECKODRIVER_MIRROR_URL`, `SE_MSEDGEDRIVER_MIRROR_URL`,  etc. (as environment variables).
-- Browser mirror. Following the same pattern, we can use `chrome-mirror-url`, `firefox-mirror-url`,  `edge-mirror-url`,  etc. (in the configuration file), and `SE_CHROME_MIRROR_URL`, `SE_FIREFOX_MIRROR_URL`, `SE_EDGE_MIRROR_URL`,  etc. (as environment variables).
-
-## Caching
-***TL;DR:*** *The drivers and browsers managed by Selenium Manager are stored in a local folder (`~/.cache/selenium`).*
-
-The cache in Selenium Manager is a local folder (`~/.cache/selenium` by default) in which the downloaded assets (drivers and browsers) are stored. For the sake of performance, when a driver or browser is already in the cache (i.e., there is a *cache hint*), Selenium Manager uses it from there.
-
-In addition to the downloaded drivers and browsers, two additional files live in the cache's root:
-
-- Configuration file (`se-config.toml`). This file is optional and, as explained in the previous section, allows to store custom configuration values for Selenium Manager. This file is maintained by the end-user and read by Selenium Manager.
-- Metadata file (`se-metadata.json`). This file contains versions discovered by Selenium Manger making network requests (e.g., using the [CfT JSON endpoints](https://github.com/GoogleChromeLabs/chrome-for-testing#json-api-endpoints)) and the time-to-live (TTL) in which they are valid. Selenium Manager automatically maintains this file.
-
-The TTL in Selenium Manager is inspired by the TTL for DNS, a well-known mechanism that refers to how long some values are cached before they are automatically refreshed. In the case of Selenium Manager, these values are the versions found by making network requests for driver and browser version discovery. By default, the TTL is `3600` seconds (i.e., 1 hour) and can be tuned using configuration values or disabled by setting this configuration value to `0`.
-
-The TTL mechanism is a way to improve the overall performance of Selenium. It is based on the fact that the discovered driver and browser versions (e.g., the proper chromedriver version for Chrome 115 is 115.0.5790.170) will likely remain the same in the short term. Therefore, the discovered versions are written in the metadata file and read from there instead of making the same consecutive network request. This way, during the driver version discovery (step 2 of the automated driver management process previously introduced), Selenium Manager first reads the file metadata. When a *fresh* resolution (i.e., a driver/browser version valid during a TTL) is found, that version is used (saving some time in making a new network request). If not found or the TTL has expired, a network request is made, and the result is stored in the metadata file.
-
-Let's consider an example. A Selenium binding asks Selenium Manager to resolve chromedriver. Selenium Manager detects that Chrome 115 is installed, so it makes a network request to the CfT endpoints to discover the proper chromedriver version (115.0.5790.170, at that moment). This version is stored in the metadata file and considered valid during the next hour (TTL). If Selenium Manager is asked to resolve chromedriver during that time (which is likely to happen in the execution of a test suite), the chromedriver version is discovered by reading the metadata file instead of making a new request to the CfT endpoints. After one hour, the chromedriver version stored in the cache will be considered as *stale*, and Selenium Manager will refresh it by making a new network request to the corresponding endpoint.
+|`--language-binding <LANGUAGE>`|`language-binding = "LANGUAGE"`|`SE_LANGUAGE_BINDING=LANGUAGE`|Language that invokes Selenium Manager (e.g., Java, JavaScript, Python, DotNet, Ruby)|
+|`--avoid-stats`|`avoid-stats = true`|`SE_AVOID_STATS=true`|Avoid sends usage statistics to plausible.io. Default: `false`|
+
+除了前面表格中指定的配置键之外, 还有一些特殊情况, 即: 
+
+- 浏览器版本. 除了 `browser-version` 之外, 我们还可以使用特定的配置键为每个受支持的浏览器指定自定义版本. 这样, 键 `chrome-version`, `firefox-version`, `edge-version` 等就得到了支持. 环境变量(即 `SE_CHROME_VERSION`, `SE_FIREFOX_VERSION`, `SE_EDGE_VERSION`  等)也是如此. 
+- 驱动程序版本. 遵循相同的模式, 我们可以在配置文件中使用 `chromedriver-version`, `geckodriver-version`,  `msedgedriver-version`等, 在环境变量中使用 `SE_CHROMEDRIVER_VERSION`, `SE_GECKODRIVER_VERSION`, `SE_MSEDGEDRIVER_VERSION` 等. 
+- 浏览器路径. 遵循相同的模式, 我们可以在配置文件中使用  `chrome-path`, `firefox-path`,  `edge-path`  等, 在环境变量中使用 `SE_CHROME_PATH`, `SE_FIREFOX_PATH`, `SE_EDGE_PATH`等. Selenium 绑定还允许使用选项指定浏览器路径的自定义位置, 例如: Chrome、Edge 或 Firefox. 
+- 驱动镜像. 遵循同样的模式, 我们可以在配置文件中使用  `chromedriver-mirror-url`, `geckodriver-mirror-url`,  `msedgedriver-mirror-url` 等, 在环境变量中使用 `SE_CHROMEDRIVER_MIRROR_URL`, `SE_GECKODRIVER_MIRROR_URL`, `SE_MSEDGEDRIVER_MIRROR_URL` 等. 
+- 浏览器镜像. 遵循同样的模式, 我们可以在配置文件中使用 `chrome-mirror-url`, `firefox-mirror-url`,  `edge-mirror-url` 等, 在环境变量中使用 `SE_CHROME_MIRROR_URL`, `SE_FIREFOX_MIRROR_URL`, `SE_EDGE_MIRROR_URL` 等. 
+
+### se-config.toml 示例
+{{< tabpane text=true >}}
+{{< tab header="se-config.toml" >}}
+{{< gh-codeblock path="/examples/python/tests/selenium_manager/example_se-config.toml#L1-L21" >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## 缓存
+***简而言之:*** 
+*由 Selenium Manager 管理的驱动程序和浏览器会存储在本地文件夹(`~/.cache/selenium` )中.*
+
+Selenium Manager中的缓存是一个本地文件夹(默认为 `~/.cache/selenium` ), 用于存储下载的资源(驱动程序和浏览器). 
+为了提高性能, 当驱动程序或浏览器已存在于缓存中(即存在 *缓存* 提示)时, Selenium Manager会从那里使用它们. 
+
+除了已下载的驱动程序和浏览器之外, 缓存根目录中还有两个额外的文件: 
+
+- 配置文件( `se-config.toml` ). 此文件是可选的, 正如前一节所述, 它允许为 Selenium Manager 存储自定义配置值. 此文件由最终用户维护, 并由 Selenium Manager 读取. 
+- 元数据文件( `se-metadata.json` ). 此文件包含由 Selenium Manager通过网络请求(例如, 使用 [CfT JSON endpoints](https://github.com/GoogleChromeLabs/chrome-for-testing#json-api-endpoints))发现的版本以及它们有效的生存时间(TTL). Selenium Manager会自动维护此文件. 
+
+Selenium Manager 中的生存时间(TTL)借鉴了 DNS 的 TTL 机制, 这是一种广为人知的机制, 
+指的是某些值在被自动刷新之前被缓存的时长. 
+对于 Selenium Manager 而言, 这些值是通过网络请求获取的驱动程序和浏览器版本发现的结果. 
+默认情况下, TTL 为  3600  秒(即 1 小时), 并且可以通过配置值进行调整, 或者将其设置为  0  来禁用此功能. 
+
+TTL 机制是一种提升 Selenium 总体性能的方法. 
+它基于这样一个事实: 在短期内, 发现的驱动程序和浏览器版本(例如, 适用于 Chrome 115 的正确 chromedriver 版本是 115.0.5790.170)很可能保持不变. 
+因此, 发现的版本会被写入元数据文件, 并从那里读取, 而不是连续进行相同的网络请求. 
+这样, 在驱动程序版本发现过程中(之前介绍的自动化驱动程序管理流程的第 2 步), 
+Selenium Manager 首先读取元数据文件. 如果找到新的解决方案(即在 TTL 期间有效的驱动程序/浏览器版本), 
+则使用该版本(节省了进行新网络请求的时间). 
+如果未找到或 TTL 已过期, 则会进行网络请求, 并将结果存储在元数据文件中. 
+
+我们来看一个例子. 
+一个 Selenium 绑定请求 Selenium Manager解析 chromedriver. 
+Selenium Manager检测到已安装 Chrome 115 版本, 
+于是向 CfT 端点发出网络请求以确定合适的 chromedriver 版本(当时为 115.0.5790.170). 
+此版本会被存储在元数据文件中, 并在接下来的一小时内(TTL)被视为有效. 
+如果在此期间(在执行测试套件时很可能发生)再次请求 Selenium Manager解析 chromedriver, 
+那么将通过读取元数据文件来获取 chromedriver 版本, 而无需向 CfT 端点发出新的请求. 一小时后, 
+缓存中存储的 chromedriver 版本将被视为过期, Selenium Manager会通过向相应端点发出新的网络请求来刷新它. 
 
 Selenium Manager includes two additional arguments two handle the cache, namely:
+Selenium Manager包含两个用于处理缓存的附加参数, 分别是: 
 
-- `--clear-cache`: To remove the cache folder.
-- `--clear-metadata`: To remove the metadata file.
+- `--clear-cache`:  要删除缓存文件夹(相当于环境变量 `SE_CLEAR_CACHE=true` ). 
+- `--clear-metadata` : 删除元数据文件(相当于环境变量  `SE_CLEAR_METADATA=true` ). 
 
-## Versioning
-Selenium Manager follows the same versioning schema as Selenium. Nevertheless, we use the major version 0 for Selenium Manager releases because it is still in beta. For example, the Selenium Manager binaries shipped with Selenium 4.12.0 corresponds to version 0.4.12.
+## 版本控制
+Selenium Manager 采用与 Selenium 相同的版本命名规则. 
+不过, 由于 Selenium Manager 仍处于测试阶段, 因此其主版本号为 0. 
+例如, 与 Selenium 4.12.0 一同发布的 Selenium Manager 二进制文件对应的是 0.4.12 版本. 
 
-## Getting Selenium Manager
-For most users, direct interaction with Selenium Manager is not required since the Selenium bindings use it internally. Nevertheless, if you want to *play* with Selenium Manager or use it for your use case involving driver or browser management, you can get the Selenium Manager binaries in different ways:
+## 获取 Selenium Manager
+对于大多数用户而言, 由于 Selenium 绑定会在内部使用 Selenium Manager, 
+所以无需直接与之交互. 
+不过, 如果您想试用 Selenium Manager 或将其用于涉及驱动程序或浏览器管理的用例, 
+可以通过多种方式获取 Selenium Manager 的二进制文件
 
-- From the Selenium repository. The Selenium Manager source code is stored in the main Selenium repo under the folder [rust](https://github.com/SeleniumHQ/selenium/tree/trunk/rust). Moreover, you can find the compiled versions for Windows, Linux, and macOS in the [common folder](https://github.com/SeleniumHQ/selenium/tree/trunk/common/manager) of this repo.
-- From the build workflow. Selenium Manager is compiled using a [GitHub Actions workflow]((https://github.com/SeleniumHQ/selenium/actions/workflows/build-selenium-manager.yml)). This workflow creates binaries for Windows, Linux, and macOS. You can download these binaries from these workflow executions.
-- From the cache. As of version 4.15.0 of the Selenium Java bindings, the Selenium Manager binary is extracted and copied to the cache folder. For instance, the Selenium Manager binary shipped with Selenium 4.15.0 is stored in the folder `~/.cache/selenium/manager/0.4.15`).
+- Selenium Manager的源代码存储在 Selenium 主仓库的 [rust](https://github.com/SeleniumHQ/selenium/tree/trunk/rust) 文件夹中. 此外, 您可以在 [Selenium Manager Artifacts](https://github.com/SeleniumHQ/selenium_manager_artifacts) 仓库中找到适用于 Windows、Linux 和 macOS 的编译版本. 此文件中链接了稳定版的 Selenium Manager二进制[file](https://github.com/SeleniumHQ/selenium/blob/trunk/common/selenium_manager.bzl)(即在最新稳定版 Selenium 中分发的那些). 
+- 在构建工作流中, Selenium Manager 是通过 [GitHub Actions workflow](https://github.com/SeleniumHQ/selenium/actions/workflows/ci-rust.yml)进行编译的. 此工作流会为 Windows、Linux 和 macOS 创建二进制文件. 您可以从这些工作流执行中下载这些二进制文件. 
+- 在缓存中. 自 Selenium Java 绑定的 4.15.0 版本起, Selenium Manager 二进制文件会被提取并复制到缓存文件夹中. 例如, 与 Selenium 4.15.0 一同提供的 Selenium Manager 二进制文件会存储在文件夹  `~/.cache/selenium/manager/0.4.15`  中. 
 
-## Examples
-Let's consider a typical example: we want to manage chromedriver automatically. For that, we invoke Selenium Manager as follows (notice that the flag `--debug` is optional, but it helps us to understand what Selenium Manager is doing):
+## 例子
+让我们来看一个典型的例子: 我们想要自动管理 chromedriver. 
+为此, 我们像下面这样调用 Selenium Manager
+(请注意, 标志 `--debug` 是可选的, 但它有助于我们理解 Selenium Manager 正在做什么): 
 
 ```
 $ ./selenium-manager --browser chrome --debug
-DEBUG   chromedriver not found in PATH
-DEBUG   chrome detected at C:\Program Files\Google\Chrome\Application\chrome.exe
-DEBUG   Running command: wmic datafile where name='C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe' get Version /value
-DEBUG   Output: "\r\r\n\r\r\nVersion=116.0.5845.111\r\r\n\r\r\n\r\r\n\r"
-DEBUG   Detected browser: chrome 116.0.5845.111
-DEBUG   Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
-DEBUG   Required driver: chromedriver 116.0.5845.96
-DEBUG   Downloading chromedriver 116.0.5845.96 from https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/116.0.5845.96/win64/chromedriver-win64.zip
-INFO    Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\116.0.5845.96\chromedriver.exe
-INFO    Browser path: C:\Program Files\Google\Chrome\Application\chrome.exe
+DEBUG chromedriver not found in PATH
+DEBUG chrome detected at C:\Program Files\Google\Chrome\Application\chrome.exe
+DEBUG Detected browser: chrome 139.0.7258.67
+DEBUG Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
+DEBUG Required driver: chromedriver 139.0.7258.68
+DEBUG Acquiring lock: C:\Users\boni\.cache\selenium\chromedriver\win64\139.0.7258.68\sm.lock
+DEBUG Downloading chromedriver 139.0.7258.68 from https://storage.googleapis.com/chrome-for-testing-public/139.0.7258.68/win64/chromedriver-win64.zip
+INFO  Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\139.0.7258.68\chromedriver.exe
+INFO  Browser path: C:\Program Files\Google\Chrome\Application\chrome.exe
 ```
 
-In this case, the local Chrome (in Windows) is detected by Selenium Manager. Then, using its version and the CfT endpoints, the proper chromedriver version (115, in this example) is downloaded to the local cache. Finally, Selenium Manager provides two results: i) the driver path (downloaded) and ii) the browser path (local).
+在这种情况下, Selenium Manager会检测到本地的 Chrome(在 Windows 系统中). 
+然后, 根据其版本和 CfT 端点, 会将合适的 chromedriver 版本(在此示例中为 115 版)下载到本地缓存. 
+最后, Selenium Manager提供两个结果: 
+i)驱动程序路径(已下载)和 ii)浏览器路径(本地). 
 
-Let's consider another example. Now we want to use Chrome beta. Therefore, we invoke Selenium Manager specifying that version label as follows (notice that the CfT beta is discovered, downloaded, and stored in the local cache):
+让我们再来看一个例子. 现在我们想要使用 Chrome 测试版. 
+因此, 我们调用 Selenium Manager并指定该版本标签, 
+如下所示(请注意, CfT 测试版会被发现、下载并存储在本地缓存中): 
 
 ```
 $ ./selenium-manager --browser chrome --browser-version beta --debug
-DEBUG   chromedriver not found in PATH
-DEBUG   chrome not found in PATH
-DEBUG   chrome beta not found in the system
-DEBUG   Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json
-DEBUG   Required browser: chrome 117.0.5938.22
-DEBUG   Downloading chrome 117.0.5938.22 from https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/117.0.5938.22/win64/chrome-win64.zip
-DEBUG   chrome 117.0.5938.22 has been downloaded at C:\Users\boni\.cache\selenium\chrome\win64\117.0.5938.22\chrome.exe
-DEBUG   Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
-DEBUG   Required driver: chromedriver 117.0.5938.22
-DEBUG   Downloading chromedriver 117.0.5938.22 from https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/117.0.5938.22/win64/chromedriver-win64.zip
-INFO    Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\117.0.5938.22\chromedriver.exe
-INFO    Browser path: C:\Users\boni\.cache\selenium\chrome\win64\117.0.5938.22\chrome.exe
+DEBUG chromedriver not found in PATH
+DEBUG chrome not found in PATH
+DEBUG chrome beta not found in the system
+DEBUG Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json
+DEBUG Required browser: chrome 140.0.7339.16
+DEBUG Acquiring lock: C:\Users\boni\.cache\selenium\chrome\win64\140.0.7339.16\sm.lock
+DEBUG Downloading chrome 140.0.7339.16 from https://storage.googleapis.com/chrome-for-testing-public/140.0.7339.16/win64/chrome-win64.zip
+DEBUG chrome 140.0.7339.16 is available at C:\Users\boni\.cache\selenium\chrome\win64\140.0.7339.16\chrome.exe
+DEBUG Discovering versions from https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
+DEBUG Required driver: chromedriver 140.0.7339.16
+DEBUG Acquiring lock: C:\Users\boni\.cache\selenium\chromedriver\win64\140.0.7339.16\sm.lock
+DEBUG Downloading chromedriver 140.0.7339.16 from https://storage.googleapis.com/chrome-for-testing-public/140.0.7339.16/win64/chromedriver-win64.zip
+INFO  Driver path: C:\Users\boni\.cache\selenium\chromedriver\win64\140.0.7339.16\chromedriver.exe
+INFO  Browser path: C:\Users\boni\.cache\selenium\chrome\win64\140.0.7339.16\chrome.exe
 ```
 
+### Using Selenium Manager from the bindings
+
+All Selenium binding languages (Java, JavaScript, Python, .Net, Ruby) use Selenium Manager internally to manage drivers and browsers. The automated management process starts before starting a new Selenium session, i.e., each time a Selenium script instantiates a driver object (e.g., `ChromeDriver`, `FirefoxDriver`, etc.). The following snippets illustrate the difference between the old-fashioned way of manually managing drivers and the built-in automated mechanism provided by Selenium Manager.
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+**Previously**
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/selenium_manager/SeleniumManagerUsageDemo.java#L12-L17" >}}
+**Selenium Manager**
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/selenium_manager/SeleniumManagerUsageDemo.java#L20-L24" >}}
+{{< /tab >}}
+{{% tab header="Python" %}}
+**Previously**
+{{< gh-codeblock path="/examples/python/tests/selenium_manager/usage.py#L5-L8" >}}
+**Selenium Manager**
+{{< gh-codeblock path="/examples/python/tests/selenium_manager/usage.py#L10-L12" >}}
+{{< /tab >}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/SeleniumManager/UsageTest.cs#L10-L18" >}}
+{{< /tab >}}
+{{% tab header="Ruby" %}}
+**Previously**
+{{< gh-codeblock path="/examples/ruby/spec/selenium_manager/usage.rb#L5-L10" >}}
+**Selenium Manager**
+{{< gh-codeblock path="/examples/ruby/spec/selenium_manager/usage.rb#L12-L16" >}}
+{{< /tab >}}
+{{% tab header="JavaScript" %}}
+**Previously**
+{{< gh-codeblock path="/examples/javascript/test/selenium_manager/usage.spec.js#L16-L31" >}}
+**Selenium Manager**
+{{< gh-codeblock path="/examples/javascript/test/selenium_manager/usage.spec.js#L6-L14" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
 ## Selenium Grid
-Selenium Manager allows you to configure the drivers automatically when setting up Selenium Grid. To that aim, you need to include the argument `--selenium-manager true` in the command to start Selenium Grid. For more details, visit the [Selenium Grid starting page](https://www.selenium.dev/documentation/grid/getting_started/).
+Selenium Manager 可让您在设置 Selenium Grid 时自动配置驱动程序. 
+为此, 您需要在启动 Selenium Grid 的命令中包含 `--selenium-manager true` 参数. 
+更多详情, 请访问 [Selenium Grid starting page](https://www.selenium.dev/documentation/grid/getting_started/). 
 
-Moreover, Selenium Manager also allows managing Selenium Grid releases automatically. For that, the argument `--grid` is used as follows:
+此外, Selenium Manager 还允许自动管理 Selenium Grid 的版本. 为此, 使用如下参数  `--grid`  : 
 
 ```
 $ ./selenium-manager --grid
 ```
 
-After this command, Selenium Manager discovers the latest version of Selenium Grid, storing the `selenium-server.jar` in the local cache.
+执行此命令后, Selenium Manager会发现 Selenium Grid 的最新版本, 
+并将 `selenium-server.jar` 存储在本地缓存中. 
 
-Optionally, the argument `--grid` allows to specify a Selenium Grid version (`--grid <GRID_VERSION>`).
+可选地, 参数  `--grid`  允许指定 Selenium Grid 版本( `--grid <GRID_VERSION>` ). 
 
-## Known Limitations
+## 已知的限制
 
-### Connectivity issues
-Selenium Manager requests remote endpoints (like Chrome for Testing (CfT), among others) to discover and download drivers and browsers from online repositories. When this operation is done in a corporate environment with a proxy or firewall, it might lead to connectivity problems like the following:
+###  连接问题
+Selenium Manager会请求远程端点(例如 Chrome 测试版(CfT)等)
+从在线存储库中发现并下载驱动程序和浏览器. 
+当在具有代理或防火墙的企业环境中执行此操作时, 可能会导致以下连接问题: 
 
 ```
 error sending request for url (https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json)
@@ -221,66 +397,107 @@ error trying to connect: dns error: failed to lookup address information
 error trying to connect: An existing connection was forcibly closed by the remote host. (os error 10054)
 ```
 
-When that happens, consider the following solutions:
+当这种情况发生时, 请考虑以下解决方案: 
 
-- Use the proxy capabilities of Selenium (see [documentation](https://www.selenium.dev/documentation/webdriver/drivers/options/#proxy)). Alternatively, use the environment variable `SE_PROXY` to set the proxy URL or use the configuration file (see [configuration](https://www.selenium.dev/documentation/selenium_manager/#configuration)).
-- Review your network setup to enable the remote requests and downloads required by Selenium Manager.
+- 使用 Selenium 的代理功能(请参阅[documentation](https://www.selenium.dev/documentation/webdriver/drivers/options/#proxy)). 或者, 使用环境变量   `SE_PROXY` 来设置代理 URL, 或者使用配置文件(请参阅 [configuration](https://www.selenium.dev/documentation/selenium_manager/#configuration) ). 
+- 检查您的网络设置, 以启用 Selenium Manager所需的远程请求和下载. 
 
-### Custom package managers
-If you are using a Linux package manager (Anaconda, snap, etc) that requires a specific driver be used for your browsers,
-you'll need to either specify the 
-[driver location](https://www.selenium.dev/documentation/webdriver/drivers/service/#driver-location), 
-the [browser location](https://www.selenium.dev/documentation/webdriver/browsers/chrome/#start-browser-in-a-specified-location),
-or both, depending on the requirements.
+### 自定义包管理器
+如果您正在使用需要特定驱动程序的 Linux 软件包管理器(如 Anaconda、snap 等)来运行您的浏览器, 
+您可能需要指定[driver location](https://www.selenium.dev/documentation/webdriver/drivers/service/#driver-location)、[browser location](https://www.selenium.dev/documentation/webdriver/browsers/chrome/#start-browser-in-a-specified-location), 
+或者两者都需要, 具体取决于管理器的要求. 
 
-### Alternative architectures
-Selenium supports all five architectures managed by Google's Chrome for Testing, and all six drivers provided for Microsoft Edge.
 
-Each release of the Selenium bindings comes with three separate Selenium Manager binaries — one for Linux, Windows, and Mac. 
-* The Mac version supports both x64 and aarch64 (Intel and Apple).
-* The Windows version should work for both x86 and x64 (32-bit and 64-bit OS). 
-* The Linux version has only been verified to work for x64.
 
-Reasons for not supporting more architectures:
-1. Neither Chrome for Testing nor Microsoft Edge supports additional architectures, so Selenium Manager would need to 
-manage something unofficial for it to work. 
-2. We currently build the binaries from existing GitHub actions runners, which do not support these architectures
-3. Any additional architectures would get distributed with all Selenium releases, increasing the total build size
+### 备选架构
+Selenium 支持由谷歌 Chrome for Testing 管理的所有五种架构, 
+以及为微软 Edge 提供的所有六种驱动程序. 
 
-If you are running Linux on arm64/aarch64, 32-bit architecture, or a Raspberry Pi, Selenium Manager will not work for you.
-The biggest issue for people is that they used to get custom-built drivers and put them on PATH and have them work.
-Now that Selenium Manager is responsible for locating drivers on PATH, this approach no longer works, and users
-need to use a `Service` class and [set the location directly](https://www.selenium.dev/documentation/webdriver/drivers/service/#driver-location).
-There are a number of advantages to having Selenium Manager look for drivers on PATH instead of managing that logic 
-in each of the bindings, so that's currently a trade-off we are comfortable with.
+Selenium 绑定的每次发布都包含三个独立的 Selenium Manager 二进制文件, 
+分别适用于 Linux、Windows 和 Mac 系统. 
 
-However, as of Selenium 4.13.0, the Selenium bindings allow locating the Selenium Manager binary using an environment variable called `SE_MANAGER_PATH`. If this variable is set, the bindings will use its value as the Selenium Manager path in the local filesystem. This feature will allow users to provide a custom compilation of Selenium Manager, for instance, if the default binaries (compiled for Windows, Linux, and macOS) are incompatible with a given system (e.g., ARM64 in Linux).
+* Mac 版本支持 x64 和 aarch64(英特尔和苹果)架构. 
+* Windows 版本应适用于 x86 和 x64(32 位和 64 位操作系统). 
+* Linux 版本仅经过验证可在 x64 系统上运行
 
-### Browser dependencies
-When automatically managing browsers in Linux, Selenium Manager relies on the releases published by the browser vendors (i.e., Chrome, Firefox, and Edge). These releases are portable in most cases. Nevertheless, there might be cases in which existing libraries are required. In Linux, this problem might be experienced when trying to run Firefox, e.g., as follows:
+不支持更多架构的原因: 
+
+1. 无论是 Chrome for Testing 还是 Microsoft Edge 都不支持其他架构, 因此 Selenium Manager 需要管理一些非官方的东西才能使其正常工作. 
+2. 我们目前从现有的 GitHub 操作运行器构建二进制文件, 这些运行器不支持这些架构. 
+3. 任何额外的架构都会随所有 Selenium 版本一起分发, 从而增加总的构建大小. 
+
+如果您在 arm64/aarch64、32 位架构或树莓派上运行 Linux, Selenium Manager 将无法为您服务.  
+对于用户来说, 最大的问题在于他们过去常常获取自定义构建的驱动程序并将其放在 PATH 上, 然后就能正常工作.  
+现在由于 Selenium Manager 负责在 PATH 上查找驱动程序, 
+这种方法不再奏效, 用户需要使用 `Service` 类并[直接设置位置](https://www.selenium.dev/documentation/webdriver/drivers/service/#driver-location) .
+让 Selenium Manager 在 PATH 上查找驱动程序而不是在每个绑定中管理该逻辑, 有诸多优势, 所以目前这是我们愿意接受的权衡. 
+
+然而, 从 Selenium 4.13.0 版本开始, 
+Selenium 绑定允许通过一个名为  `SE_MANAGER_PATH`  的环境变量来定位 Selenium Manager 二进制文件. 
+如果设置了此变量, 绑定将使用其值作为本地文件系统中的 Selenium Manager 路径. 
+此功能将允许用户提供自定义编译的 Selenium Manager, 
+例如, 如果默认的二进制文件(针对 Windows、Linux 和 macOS 编译)与给定系统(例如 Linux 中的 ARM64)不兼容. 
+
+### 浏览器依赖
+在 Linux 系统中自动管理浏览器时, Selenium Manager 依赖于浏览器供应商(例如 Chrome、Firefox 和 Edge)发布的版本. 
+这些版本在大多数情况下都是可移植的. 
+然而, 在某些情况下可能需要现有的库. 
+在 Linux 中, 尝试运行 Firefox 时可能会遇到此问题, 例如: 
 
 ```
 libdbus-glib-1.so.2: cannot open shared object file: No such file or directory
 Couldn't load XPCOM.
 ```
 
-If that happens, the solution is to install that library, for instance, as follows:
+如果出现这种情况, 解决办法是安装相应的库, 例如, 可以按如下方式操作: 
 
 ```
 sudo apt-get install libdbus-glib-1-2
 ```
 
-A similar issue might happen when trying to execute Chrome for Testing in Linux:
+在 Linux 系统中尝试执行 Chrome for Testing 时可能会出现类似的问题: 
 
 ```
 error while loading shared libraries: libatk-1.0.so.0: cannot open shared object file: No such file or directory
 ```
 
-In this case, the library to be installed is the following:
+在这种情况下, 要安装的库是以下这个: 
 
 ```
 sudo apt-get install libatk-bridge2.0-0
 ```
 
-## Roadmap
-You can trace the work in progress in the [Selenium Manager project dashboard](https://github.com/orgs/SeleniumHQ/projects/5). Moreover, you can check the new features shipped with each Selenium Manager release in its [changelog file](https://github.com/SeleniumHQ/selenium/blob/trunk/rust/CHANGELOG.md).
+### 使用环境变量来指定驱动程序路径
+可以使用环境变量来指定驱动程序路径, 而无需使用 Selenium Manager.  
+支持以下环境变量: 
+
+* `SE_CHROMEDRIVER`
+* `SE_EDGEDRIVER`
+* `SE_GECKODRIVER`
+* `SE_IEDRIVER`
+
+例如, 要指定 chromedriver 的路径, 
+您可以将  `SE_CHROMEDRIVER`  环境变量设置为 chromedriver 可执行文件的路径. 
+以下绑定允许您使用环境变量指定驱动程序路径: 
+
+* Ruby
+* Java
+* Python
+
+此功能从 Selenium Ruby 绑定的 4.25.0 版本以及 Python 绑定的 4.26.0 版本开始可用. 
+
+## 构建自定义 Selenium Manager
+若要构建适用于我们当前不支持的架构的自定义 Selenium Manager, 
+您可以按照以下步骤操作: 
+
+2. 安装 Rust 开发环境
+3. 将 Selenium 克隆到您的本地机器上  `git clone https://github.com/SeleniumHQ/selenium.git --depth 1`
+4. 进入您的下载目录  `cd selenium/rust`
+5. 构建 Selenium `cargo build --release`
+6. 设置以下环境变量以指定驱动程序路径 `SE_MANAGER_PATH=~/selenium/rust/target/release/selenium-manager`
+7. 将您想要的驱动程序放在系统路径中的某个位置. 
+8. Selenium 现在将使用内置的 Selenium Manager在 PATH 中定位手动下载的驱动程序. 
+
+## 路线图
+您可以在 [Selenium Manager project dashboard](https://github.com/orgs/SeleniumHQ/projects/5) 中追踪正在进行的工作. 
+此外, 您还可以在每个 Selenium Manager 版本的[changelog file](https://github.com/SeleniumHQ/selenium/blob/trunk/rust/CHANGELOG.md) 中查看随版本发布的新增功能. 
diff --git a/website_and_docs/content/documentation/test_practices/design_strategies.en.md b/website_and_docs/content/documentation/test_practices/design_strategies.en.md
index e154621960a3..517b7f0e20a3 100644
--- a/website_and_docs/content/documentation/test_practices/design_strategies.en.md
+++ b/website_and_docs/content/documentation/test_practices/design_strategies.en.md
@@ -34,7 +34,7 @@ There is currently an implementation in Java that ships as part of Selenium 2, b
 ### Simple Usage
 
 As an example of a UI that we'd like to model, take a look at 
-the [new issue](https://github.com/SeleniumHQ/selenium/issues/new) page. From the point of view of a test author, 
+the [new issue](https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=I-defect%2Cneeds-triaging&projects=&template=bug-report.yml&title=%5B%F0%9F%90%9B+Bug%5D%3A+) page. From the point of view of a test author, 
 this offers the service of being able to file a new issue. A basic Page Object would look like:
 
 ```java
@@ -52,18 +52,53 @@ public class EditIssue {
     this.driver = driver;
   }
 
-  public void setSummary(String summary) {
-    WebElement field = driver.findElement(By.name("summary"));
-    clearAndType(field, summary);
+  public void setTitle(String title) {
+    WebElement field = driver.findElement(By.id("issue_title")));
+    clearAndType(field, title);
   }
 
-  public void enterDescription(String description) {
-    WebElement field = driver.findElement(By.name("comment"));
-    clearAndType(field, description);
+  public void setBody(String body) {
+    WebElement field = driver.findElement(By.id("issue_body"));
+    clearAndType(field, body);
+  }
+
+  public void setHowToReproduce(String howToReproduce) {
+    WebElement field = driver.findElement(By.id("issue_form_repro-command"));
+    clearAndType(field, howToReproduce);
+  }
+
+  public void setLogOutput(String logOutput) {
+    WebElement field = driver.findElement(By.id("issue_form_logs"));
+    clearAndType(field, logOutput);
+  }
+
+  public void setOperatingSystem(String operatingSystem) {
+    WebElement field = driver.findElement(By.id("issue_form_operating-system"));
+    clearAndType(field, operatingSystem);
+  }
+
+  public void setSeleniumVersion(String seleniumVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_selenium-version"));
+    clearAndType(field, logOutput);
+  }
+
+  public void setBrowserVersion(String browserVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_browser-versions"));
+    clearAndType(field, browserVersion);
+  }
+
+  public void setDriverVersion(String driverVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_browser-driver-versions"));
+    clearAndType(field, driverVersion);
+  }
+
+  public void setUsingGrid(String usingGrid) {
+    WebElement field = driver.findElement(By.id("issue_form_selenium-grid-version"));
+    clearAndType(field, usingGrid);
   }
 
   public IssueList submit() {
-    driver.findElement(By.id("submit")).click();
+    driver.findElement(By.cssSelector("button[type='submit']")).click();
     return new IssueList(driver);
   }
 
@@ -90,7 +125,7 @@ By extending this base class, we need to implement two new methods:
 ```java
   @Override
   protected void load() {
-    driver.get("https://github.com/SeleniumHQ/selenium/issues/new");
+    driver.get("https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=I-defect%2Cneeds-triaging&projects=&template=bug-report.yml&title=%5B%F0%9F%90%9B+Bug%5D%3A+");
   }
 
   @Override
@@ -123,16 +158,13 @@ public class EditIssue extends LoadableComponent<EditIssue> {
   private final WebDriver driver;
   
   // By default the PageFactory will locate elements with the same name or id
-  // as the field. Since the summary element has a name attribute of "summary"
+  // as the field. Since the issue_title element has an id attribute of "issue_title"
   // we don't need any additional annotations.
-  private WebElement summary;
-  
-  // Same with the submit element, which has the ID "submit"
-  private WebElement submit;
+  private WebElement issue_title;
   
-  // But we'd prefer a different name in our code than "comment", so we use the
+  // But we'd prefer a different name in our code than "issue_body", so we use the
   // FindBy annotation to tell the PageFactory how to locate the element.
-  @FindBy(name = "comment") private WebElement description;
+  @FindBy(id = "issue_body") private WebElement body;
   
   public EditIssue(WebDriver driver) {
     this.driver = driver;
@@ -143,7 +175,7 @@ public class EditIssue extends LoadableComponent<EditIssue> {
 
   @Override
   protected void load() {
-    driver.get("https://github.com/SeleniumHQ/selenium/issues/new");
+    driver.get("https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=I-defect%2Cneeds-triaging&projects=&template=bug-report.yml&title=%5B%F0%9F%90%9B+Bug%5D%3A+");
   }
 
   @Override
@@ -151,17 +183,44 @@ public class EditIssue extends LoadableComponent<EditIssue> {
     String url = driver.getCurrentUrl();
     assertTrue("Not on the issue entry page: " + url, url.endsWith("/new"));
   }
-  
-  public void setSummary(String issueSummary) {
-    clearAndType(summary, issueSummary);
+
+  public void setHowToReproduce(String howToReproduce) {
+    WebElement field = driver.findElement(By.id("issue_form_repro-command"));
+    clearAndType(field, howToReproduce);
+  }
+
+  public void setLogOutput(String logOutput) {
+    WebElement field = driver.findElement(By.id("issue_form_logs"));
+    clearAndType(field, logOutput);
+  }
+
+  public void setOperatingSystem(String operatingSystem) {
+    WebElement field = driver.findElement(By.id("issue_form_operating-system"));
+    clearAndType(field, operatingSystem);
+  }
+
+  public void setSeleniumVersion(String seleniumVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_selenium-version"));
+    clearAndType(field, logOutput);
+  }
+
+  public void setBrowserVersion(String browserVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_browser-versions"));
+    clearAndType(field, browserVersion);
   }
 
-  public void enterDescription(String issueDescription) {
-    clearAndType(description, issueDescription);
+  public void setDriverVersion(String driverVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_browser-driver-versions"));
+    clearAndType(field, driverVersion);
+  }
+
+  public void setUsingGrid(String usingGrid) {
+    WebElement field = driver.findElement(By.id("issue_form_selenium-grid-version"));
+    clearAndType(field, usingGrid);
   }
 
   public IssueList submit() {
-    submit.click();
+    driver.findElement(By.cssSelector("button[type='submit']")).click();
     return new IssueList(driver);
   }
 
@@ -298,7 +357,7 @@ The "load" method in EditIssue now looks like:
   protected void load() {
     securedPage.get();
 
-    driver.get("https://github.com/SeleniumHQ/selenium/issues/new");
+    driver.get("https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=I-defect%2Cneeds-triaging&projects=&template=bug-report.yml&title=%5B%F0%9F%90%9B+Bug%5D%3A+");
   }
 ```
 
@@ -323,9 +382,17 @@ public class FooTest {
   public void demonstrateNestedLoadableComponents() {
     editIssue.get();
 
-    editIssue.setSummary("Summary");
-    editIssue.enterDescription("This is an example");
+    editIssue.title.sendKeys('Title');
+    editIssue.body.sendKeys('What Happened');
+    editIssue.setHowToReproduce('How to Reproduce');
+    editIssue.setLogOutput('Log Output');
+    editIssue.setOperatingSystem('Operating System');
+    editIssue.setSeleniumVersion('Selenium Version');
+    editIssue.setBrowserVersion('Browser Version');
+    editIssue.setDriverVersion('Driver Version');
+    editIssue.setUsingGrid('I Am Using Grid');
   }
+
 }
 ```
 
@@ -375,3 +442,128 @@ public class ActionBot {
 ```
 
 Once these abstractions have been built and duplication in your tests identified, it's possible to layer PageObjects on top of bots.
+
+## Example
+
+{{< tabpane text=true >}}
+{{< tab header="Python" >}}
+
+An example of `python + pytest + selenium` which implemented "**Action Bot**, **Loadable Component** and **Page Object**".
+
+A `pytest` fixture `chrome_driver`.
+
+{{< gh-codeblock path="/examples/python/tests/design_strategy/using_best_practice.py#L6-L26" >}}
+{{< /tab >}}
+{{< tab header="Java" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+"**Action Bot**" implementation.
+
+{{< tabpane text=true >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/design_strategy/using_best_practice.py#L28-L65" >}}
+{{< /tab >}}
+{{< tab header="Java" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+"**Loadable Component** definition.
+
+{{< tabpane text=true >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/design_strategy/using_best_practice.py#L67-L80" >}}
+{{< /tab >}}
+{{< tab header="Java" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+"**Loadable Component** and **Page Object**" implementation. 
+
+{{< tabpane text=true >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/design_strategy/using_best_practice.py#L82-L172" >}}
+{{< /tab >}}
+{{< tab header="Java" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+Test cases implementation.
+
+{{< tabpane text=true >}}
+{{< tab header="Python" >}}
+Test cases implementation with `pytest`.
+
+{{< gh-codeblock path="/examples/python/tests/design_strategy/using_best_practice.py#L174-L240" >}}
+{{< /tab >}}
+{{< tab header="Java" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/test_practices/design_strategies.ja.md b/website_and_docs/content/documentation/test_practices/design_strategies.ja.md
index 5ef10220466c..c351cc2a5cfe 100644
--- a/website_and_docs/content/documentation/test_practices/design_strategies.ja.md
+++ b/website_and_docs/content/documentation/test_practices/design_strategies.ja.md
@@ -30,7 +30,7 @@ LoadableComponentは、PageObjectsの作成の負担を軽減することを目
 
 ### 簡単な使用方法
 
-モデル化するUIの例として、[新しいissue](https://github.com/SeleniumHQ/selenium/issues/new)のページをご覧ください。 
+モデル化するUIの例として、[新しいissue](https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=I-defect%2Cneeds-triaging&projects=&template=bug-report.yml&title=%5B%F0%9F%90%9B+Bug%5D%3A+)のページをご覧ください。 
 テスト作成者の観点から、これは新しい問題を提出できるサービスを提供します。 
 基本的なページオブジェクトは次のようになります。
 
@@ -49,18 +49,53 @@ public class EditIssue {
     this.driver = driver;
   }
 
-  public void setSummary(String summary) {
-    WebElement field = driver.findElement(By.name("summary"));
-    clearAndType(field, summary);
+  public void setTitle(String title) {
+    WebElement field = driver.findElement(By.id("issue_title")));
+    clearAndType(field, title);
   }
 
-  public void enterDescription(String description) {
-    WebElement field = driver.findElement(By.name("comment"));
-    clearAndType(field, description);
+  public void setBody(String body) {
+    WebElement field = driver.findElement(By.id("issue_body"));
+    clearAndType(field, body);
+  }
+
+  public void setHowToReproduce(String howToReproduce) {
+    WebElement field = driver.findElement(By.id("issue_form_repro-command"));
+    clearAndType(field, howToReproduce);
+  }
+
+  public void setLogOutput(String logOutput) {
+    WebElement field = driver.findElement(By.id("issue_form_logs"));
+    clearAndType(field, logOutput);
+  }
+
+  public void setOperatingSystem(String operatingSystem) {
+    WebElement field = driver.findElement(By.id("issue_form_operating-system"));
+    clearAndType(field, operatingSystem);
+  }
+
+  public void setSeleniumVersion(String seleniumVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_selenium-version"));
+    clearAndType(field, logOutput);
+  }
+
+  public void setBrowserVersion(String browserVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_browser-versions"));
+    clearAndType(field, browserVersion);
+  }
+
+  public void setDriverVersion(String driverVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_browser-driver-versions"));
+    clearAndType(field, driverVersion);
+  }
+
+  public void setUsingGrid(String usingGrid) {
+    WebElement field = driver.findElement(By.id("issue_form_selenium-grid-version"));
+    clearAndType(field, usingGrid);
   }
 
   public IssueList submit() {
-    driver.findElement(By.id("submit")).click();
+    driver.findElement(By.cssSelector("button[type='submit']")).click();
     return new IssueList(driver);
   }
 
@@ -86,7 +121,7 @@ public class EditIssue extends LoadableComponent<EditIssue> {
 ```java
   @Override
   protected void load() {
-    driver.get("https://github.com/SeleniumHQ/selenium/issues/new");
+    driver.get("https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=I-defect%2Cneeds-triaging&projects=&template=bug-report.yml&title=%5B%F0%9F%90%9B+Bug%5D%3A+");
   }
 
   @Override
@@ -118,16 +153,13 @@ public class EditIssue extends LoadableComponent<EditIssue> {
   private final WebDriver driver;
   
   // By default the PageFactory will locate elements with the same name or id
-  // as the field. Since the summary element has a name attribute of "summary"
+  // as the field. Since the issue_title element has an id attribute of "issue_title"
   // we don't need any additional annotations.
-  private WebElement summary;
+  private WebElement issue_title;
   
-  // Same with the submit element, which has the ID "submit"
-  private WebElement submit;
-  
-  // But we'd prefer a different name in our code than "comment", so we use the
+  // But we'd prefer a different name in our code than "issue_body", so we use the
   // FindBy annotation to tell the PageFactory how to locate the element.
-  @FindBy(name = "comment") private WebElement description;
+  @FindBy(id = "issue_body") private WebElement body;
   
   public EditIssue(WebDriver driver) {
     this.driver = driver;
@@ -138,7 +170,7 @@ public class EditIssue extends LoadableComponent<EditIssue> {
 
   @Override
   protected void load() {
-    driver.get("https://github.com/SeleniumHQ/selenium/issues/new");
+    driver.get("https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=I-defect%2Cneeds-triaging&projects=&template=bug-report.yml&title=%5B%F0%9F%90%9B+Bug%5D%3A+");
   }
 
   @Override
@@ -146,17 +178,44 @@ public class EditIssue extends LoadableComponent<EditIssue> {
     String url = driver.getCurrentUrl();
     assertTrue("Not on the issue entry page: " + url, url.endsWith("/new"));
   }
-  
-  public void setSummary(String issueSummary) {
-    clearAndType(summary, issueSummary);
+
+  public void setHowToReproduce(String howToReproduce) {
+    WebElement field = driver.findElement(By.id("issue_form_repro-command"));
+    clearAndType(field, howToReproduce);
+  }
+
+  public void setLogOutput(String logOutput) {
+    WebElement field = driver.findElement(By.id("issue_form_logs"));
+    clearAndType(field, logOutput);
+  }
+
+  public void setOperatingSystem(String operatingSystem) {
+    WebElement field = driver.findElement(By.id("issue_form_operating-system"));
+    clearAndType(field, operatingSystem);
+  }
+
+  public void setSeleniumVersion(String seleniumVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_selenium-version"));
+    clearAndType(field, logOutput);
+  }
+
+  public void setBrowserVersion(String browserVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_browser-versions"));
+    clearAndType(field, browserVersion);
+  }
+
+  public void setDriverVersion(String driverVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_browser-driver-versions"));
+    clearAndType(field, driverVersion);
   }
 
-  public void enterDescription(String issueDescription) {
-    clearAndType(description, issueDescription);
+  public void setUsingGrid(String usingGrid) {
+    WebElement field = driver.findElement(By.id("issue_form_selenium-grid-version"));
+    clearAndType(field, usingGrid);
   }
 
   public IssueList submit() {
-    submit.click();
+    driver.findElement(By.cssSelector("button[type='submit']")).click();
     return new IssueList(driver);
   }
 
@@ -294,7 +353,7 @@ EditIssueの "load" メソッドは次のようになります。
   protected void load() {
     securedPage.get();
 
-    driver.get("https://github.com/SeleniumHQ/selenium/issues/new");
+    driver.get("https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=I-defect%2Cneeds-triaging&projects=&template=bug-report.yml&title=%5B%F0%9F%90%9B+Bug%5D%3A+");
   }
 ```
 
@@ -319,8 +378,15 @@ public class FooTest {
   public void demonstrateNestedLoadableComponents() {
     editIssue.get();
 
-    editIssue.setSummary("Summary");
-    editIssue.enterDescription("This is an example");
+    editIssue.title.sendKeys('Title');
+    editIssue.body.sendKeys('What Happened');
+    editIssue.setHowToReproduce('How to Reproduce');
+    editIssue.setLogOutput('Log Output');
+    editIssue.setOperatingSystem('Operating System');
+    editIssue.setSeleniumVersion('Selenium Version');
+    editIssue.setBrowserVersion('Browser Version');
+    editIssue.setDriverVersion('Driver Version');
+    editIssue.setUsingGrid('I Am Using Grid');
   }
 }
 ```
@@ -367,4 +433,130 @@ public class ActionBot {
 }
 ```
 
-これらの抽象化が構築され、テストでの重複が特定されると、ボットの上にPageObjectsを階層化することができます。
\ No newline at end of file
+これらの抽象化が構築され、テストでの重複が特定されると、ボットの上にPageObjectsを階層化することができます。
+
+## Example
+
+{{< tabpane text=true >}}
+{{< tab header="Python" >}}
+
+**Action Bot**、**Loadable Component**、および **Page Object** を実装した `python + pytest + selenium` の例です。
+
+A `pytest` fixture `chrome_driver`.
+
+{{< gh-codeblock path="/examples/python/tests/design_strategy/using_best_practice.py#L6-L26" >}}
+{{< /tab >}}
+{{< tab header="Java" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+"**Action Bot**" implementation.
+
+{{< tabpane text=true >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/design_strategy/using_best_practice.py#L28-L65" >}}
+{{< /tab >}}
+{{< tab header="Java" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+"**Loadable Component** definition.
+
+{{< tabpane text=true >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/design_strategy/using_best_practice.py#L67-L80" >}}
+{{< /tab >}}
+{{< tab header="Java" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+"**Loadable Component** and **Page Object**" implementation. 
+
+{{< tabpane text=true >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/design_strategy/using_best_practice.py#L82-L172" >}}
+{{< /tab >}}
+{{< tab header="Java" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+Test cases implementation.
+
+{{< tabpane text=true >}}
+{{< tab header="Python" >}}
+
+Test cases implementation with `pytest`.
+
+{{< gh-codeblock path="/examples/python/tests/design_strategy/using_best_practice.py#L174-L240" >}}
+{{< /tab >}}
+{{< tab header="Java" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/test_practices/design_strategies.pt-br.md b/website_and_docs/content/documentation/test_practices/design_strategies.pt-br.md
index d2174f34adaf..d45d25e41114 100644
--- a/website_and_docs/content/documentation/test_practices/design_strategies.pt-br.md
+++ b/website_and_docs/content/documentation/test_practices/design_strategies.pt-br.md
@@ -36,7 +36,7 @@ but the approach used is simple enough to be implemented in any language.
 ### Simple Usage
 
 As an example of a UI that we'd like to model, take a look at 
-the [new issue](https://github.com/SeleniumHQ/selenium/issues/new) page. From 
+the [new issue](https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=I-defect%2Cneeds-triaging&projects=&template=bug-report.yml&title=%5B%F0%9F%90%9B+Bug%5D%3A+) page. From 
 the point of view of a test author, this offers the service of being able to 
 file a new issue. A basic Page Object would look like:
 
@@ -55,18 +55,53 @@ public class EditIssue {
     this.driver = driver;
   }
 
-  public void setSummary(String summary) {
-    WebElement field = driver.findElement(By.name("summary"));
-    clearAndType(field, summary);
+  public void setTitle(String title) {
+    WebElement field = driver.findElement(By.id("issue_title")));
+    clearAndType(field, title);
   }
 
-  public void enterDescription(String description) {
-    WebElement field = driver.findElement(By.name("comment"));
-    clearAndType(field, description);
+  public void setBody(String body) {
+    WebElement field = driver.findElement(By.id("issue_body"));
+    clearAndType(field, body);
+  }
+
+  public void setHowToReproduce(String howToReproduce) {
+    WebElement field = driver.findElement(By.id("issue_form_repro-command"));
+    clearAndType(field, howToReproduce);
+  }
+
+  public void setLogOutput(String logOutput) {
+    WebElement field = driver.findElement(By.id("issue_form_logs"));
+    clearAndType(field, logOutput);
+  }
+
+  public void setOperatingSystem(String operatingSystem) {
+    WebElement field = driver.findElement(By.id("issue_form_operating-system"));
+    clearAndType(field, operatingSystem);
+  }
+
+  public void setSeleniumVersion(String seleniumVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_selenium-version"));
+    clearAndType(field, logOutput);
+  }
+
+  public void setBrowserVersion(String browserVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_browser-versions"));
+    clearAndType(field, browserVersion);
+  }
+
+  public void setDriverVersion(String driverVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_browser-driver-versions"));
+    clearAndType(field, driverVersion);
+  }
+
+  public void setUsingGrid(String usingGrid) {
+    WebElement field = driver.findElement(By.id("issue_form_selenium-grid-version"));
+    clearAndType(field, usingGrid);
   }
 
   public IssueList submit() {
-    driver.findElement(By.id("submit")).click();
+    driver.findElement(By.cssSelector("button[type='submit']")).click();
     return new IssueList(driver);
   }
 
@@ -93,7 +128,7 @@ By extending this base class, we need to implement two new methods:
 ```java
   @Override
   protected void load() {
-    driver.get("https://github.com/SeleniumHQ/selenium/issues/new");
+    driver.get("https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=I-defect%2Cneeds-triaging&projects=&template=bug-report.yml&title=%5B%F0%9F%90%9B+Bug%5D%3A+");
   }
 
   @Override
@@ -128,16 +163,13 @@ public class EditIssue extends LoadableComponent<EditIssue> {
   private final WebDriver driver;
   
   // By default the PageFactory will locate elements with the same name or id
-  // as the field. Since the summary element has a name attribute of "summary"
+  // as the field. Since the issue_title element has an id attribute of "issue_title"
   // we don't need any additional annotations.
-  private WebElement summary;
-  
-  // Same with the submit element, which has the ID "submit"
-  private WebElement submit;
+  private WebElement issue_title;
   
-  // But we'd prefer a different name in our code than "comment", so we use the
+  // But we'd prefer a different name in our code than "issue_body", so we use the
   // FindBy annotation to tell the PageFactory how to locate the element.
-  @FindBy(name = "comment") private WebElement description;
+  @FindBy(id = "issue_body") private WebElement body;
   
   public EditIssue(WebDriver driver) {
     this.driver = driver;
@@ -148,7 +180,7 @@ public class EditIssue extends LoadableComponent<EditIssue> {
 
   @Override
   protected void load() {
-    driver.get("https://github.com/SeleniumHQ/selenium/issues/new");
+    driver.get("https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=I-defect%2Cneeds-triaging&projects=&template=bug-report.yml&title=%5B%F0%9F%90%9B+Bug%5D%3A+");
   }
 
   @Override
@@ -156,17 +188,44 @@ public class EditIssue extends LoadableComponent<EditIssue> {
     String url = driver.getCurrentUrl();
     assertTrue("Not on the issue entry page: " + url, url.endsWith("/new"));
   }
-  
-  public void setSummary(String issueSummary) {
-    clearAndType(summary, issueSummary);
+
+  public void setHowToReproduce(String howToReproduce) {
+    WebElement field = driver.findElement(By.id("issue_form_repro-command"));
+    clearAndType(field, howToReproduce);
+  }
+
+  public void setLogOutput(String logOutput) {
+    WebElement field = driver.findElement(By.id("issue_form_logs"));
+    clearAndType(field, logOutput);
+  }
+
+  public void setOperatingSystem(String operatingSystem) {
+    WebElement field = driver.findElement(By.id("issue_form_operating-system"));
+    clearAndType(field, operatingSystem);
+  }
+
+  public void setSeleniumVersion(String seleniumVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_selenium-version"));
+    clearAndType(field, logOutput);
+  }
+
+  public void setBrowserVersion(String browserVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_browser-versions"));
+    clearAndType(field, browserVersion);
   }
 
-  public void enterDescription(String issueDescription) {
-    clearAndType(description, issueDescription);
+  public void setDriverVersion(String driverVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_browser-driver-versions"));
+    clearAndType(field, driverVersion);
+  }
+
+  public void setUsingGrid(String usingGrid) {
+    WebElement field = driver.findElement(By.id("issue_form_selenium-grid-version"));
+    clearAndType(field, usingGrid);
   }
 
   public IssueList submit() {
-    submit.click();
+    driver.findElement(By.cssSelector("button[type='submit']")).click();
     return new IssueList(driver);
   }
 
@@ -304,7 +363,7 @@ The "load" method in EditIssue now looks like:
   protected void load() {
     securedPage.get();
 
-    driver.get("https://github.com/SeleniumHQ/selenium/issues/new");
+    driver.get("https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=I-defect%2Cneeds-triaging&projects=&template=bug-report.yml&title=%5B%F0%9F%90%9B+Bug%5D%3A+");
   }
 ```
 
@@ -327,8 +386,15 @@ public class FooTest {
   public void demonstrateNestedLoadableComponents() {
     editIssue.get();
 
-    editIssue.setSummary("Summary");
-    editIssue.enterDescription("This is an example");
+    editIssue.title.sendKeys('Title');
+    editIssue.body.sendKeys('What Happened');
+    editIssue.setHowToReproduce('How to Reproduce');
+    editIssue.setLogOutput('Log Output');
+    editIssue.setOperatingSystem('Operating System');
+    editIssue.setSeleniumVersion('Selenium Version');
+    editIssue.setBrowserVersion('Browser Version');
+    editIssue.setDriverVersion('Driver Version');
+    editIssue.setUsingGrid('I Am Using Grid');
   }
 }
 ```
@@ -375,3 +441,128 @@ public class ActionBot {
 ```
 
 Once these abstractions have been built and duplication in your tests identified, it's possible to layer PageObjects on top of bots.
+
+
+## Example
+
+{{< tabpane text=true >}}
+{{< tab header="Python" >}}
+An example of `python + pytest + selenium` which implemented "**Action Bot**, **Loadable Component** and **Page Object**".
+
+A `pytest` fixture `chrome_driver`.
+
+{{< gh-codeblock path="/examples/python/tests/design_strategy/using_best_practice.py#L6-L26" >}}
+{{< /tab >}}
+{{< tab header="Java" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+"**Action Bot**" implementation.
+
+{{< tabpane text=true >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/design_strategy/using_best_practice.py#L28-L65" >}}
+{{< /tab >}}
+{{< tab header="Java" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+"**Loadable Component** definition.
+
+{{< tabpane text=true >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/design_strategy/using_best_practice.py#L67-L80" >}}
+{{< /tab >}}
+{{< tab header="Java" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+"**Loadable Component** and **Page Object**" implementation. 
+
+{{< tabpane text=true >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/design_strategy/using_best_practice.py#L82-L172" >}}
+{{< /tab >}}
+{{< tab header="Java" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+Test cases implementation.
+
+{{< tabpane text=true >}}
+{{< tab header="Python" >}}
+Test cases implementation with `pytest`.
+
+{{< gh-codeblock path="/examples/python/tests/design_strategy/using_best_practice.py#L174-L240" >}}
+{{< /tab >}}
+{{< tab header="Java" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/test_practices/design_strategies.zh-cn.md b/website_and_docs/content/documentation/test_practices/design_strategies.zh-cn.md
index a4c82b251a5c..0d379b4b4a36 100644
--- a/website_and_docs/content/documentation/test_practices/design_strategies.zh-cn.md
+++ b/website_and_docs/content/documentation/test_practices/design_strategies.zh-cn.md
@@ -45,7 +45,7 @@ but the approach used is simple enough to be implemented in any language.
 ### Simple Usage
 
 As an example of a UI that we'd like to model, take a look at 
-the [new issue](https://github.com/SeleniumHQ/selenium/issues/new) page. 
+the [new issue](https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=I-defect%2Cneeds-triaging&projects=&template=bug-report.yml&title=%5B%F0%9F%90%9B+Bug%5D%3A+) page. 
 From the point of view of a test author, this offers the service of being 
 able to file a new issue. A basic Page Object would look like:
 
@@ -64,18 +64,53 @@ public class EditIssue {
     this.driver = driver;
   }
 
-  public void setSummary(String summary) {
-    WebElement field = driver.findElement(By.name("summary"));
-    clearAndType(field, summary);
+  public void setTitle(String title) {
+    WebElement field = driver.findElement(By.id("issue_title")));
+    clearAndType(field, title);
   }
 
-  public void enterDescription(String description) {
-    WebElement field = driver.findElement(By.name("comment"));
-    clearAndType(field, description);
+  public void setBody(String body) {
+    WebElement field = driver.findElement(By.id("issue_body"));
+    clearAndType(field, body);
+  }
+
+  public void setHowToReproduce(String howToReproduce) {
+    WebElement field = driver.findElement(By.id("issue_form_repro-command"));
+    clearAndType(field, howToReproduce);
+  }
+
+  public void setLogOutput(String logOutput) {
+    WebElement field = driver.findElement(By.id("issue_form_logs"));
+    clearAndType(field, logOutput);
+  }
+
+  public void setOperatingSystem(String operatingSystem) {
+    WebElement field = driver.findElement(By.id("issue_form_operating-system"));
+    clearAndType(field, operatingSystem);
+  }
+
+  public void setSeleniumVersion(String seleniumVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_selenium-version"));
+    clearAndType(field, logOutput);
+  }
+
+  public void setBrowserVersion(String browserVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_browser-versions"));
+    clearAndType(field, browserVersion);
+  }
+
+  public void setDriverVersion(String driverVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_browser-driver-versions"));
+    clearAndType(field, driverVersion);
+  }
+
+  public void setUsingGrid(String usingGrid) {
+    WebElement field = driver.findElement(By.id("issue_form_selenium-grid-version"));
+    clearAndType(field, usingGrid);
   }
 
   public IssueList submit() {
-    driver.findElement(By.id("submit")).click();
+    driver.findElement(By.cssSelector("button[type='submit']")).click();
     return new IssueList(driver);
   }
 
@@ -102,7 +137,7 @@ By extending this base class, we need to implement two new methods:
 ```java
   @Override
   protected void load() {
-    driver.get("https://github.com/SeleniumHQ/selenium/issues/new");
+    driver.get("https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=I-defect%2Cneeds-triaging&projects=&template=bug-report.yml&title=%5B%F0%9F%90%9B+Bug%5D%3A+");
   }
 
   @Override
@@ -137,16 +172,13 @@ public class EditIssue extends LoadableComponent<EditIssue> {
   private final WebDriver driver;
   
   // By default the PageFactory will locate elements with the same name or id
-  // as the field. Since the summary element has a name attribute of "summary"
+  // as the field. Since the issue_title element has an id attribute of "issue_title"
   // we don't need any additional annotations.
-  private WebElement summary;
-  
-  // Same with the submit element, which has the ID "submit"
-  private WebElement submit;
+  private WebElement issue_title;
   
-  // But we'd prefer a different name in our code than "comment", so we use the
+  // But we'd prefer a different name in our code than "issue_body", so we use the
   // FindBy annotation to tell the PageFactory how to locate the element.
-  @FindBy(name = "comment") private WebElement description;
+  @FindBy(id = "issue_body") private WebElement body;
   
   public EditIssue(WebDriver driver) {
     this.driver = driver;
@@ -157,7 +189,7 @@ public class EditIssue extends LoadableComponent<EditIssue> {
 
   @Override
   protected void load() {
-    driver.get("https://github.com/SeleniumHQ/selenium/issues/new");
+    driver.get("https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=I-defect%2Cneeds-triaging&projects=&template=bug-report.yml&title=%5B%F0%9F%90%9B+Bug%5D%3A+");
   }
 
   @Override
@@ -165,17 +197,44 @@ public class EditIssue extends LoadableComponent<EditIssue> {
     String url = driver.getCurrentUrl();
     assertTrue("Not on the issue entry page: " + url, url.endsWith("/new"));
   }
-  
-  public void setSummary(String issueSummary) {
-    clearAndType(summary, issueSummary);
+
+  public void setHowToReproduce(String howToReproduce) {
+    WebElement field = driver.findElement(By.id("issue_form_repro-command"));
+    clearAndType(field, howToReproduce);
+  }
+
+  public void setLogOutput(String logOutput) {
+    WebElement field = driver.findElement(By.id("issue_form_logs"));
+    clearAndType(field, logOutput);
+  }
+
+  public void setOperatingSystem(String operatingSystem) {
+    WebElement field = driver.findElement(By.id("issue_form_operating-system"));
+    clearAndType(field, operatingSystem);
+  }
+
+  public void setSeleniumVersion(String seleniumVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_selenium-version"));
+    clearAndType(field, logOutput);
+  }
+
+  public void setBrowserVersion(String browserVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_browser-versions"));
+    clearAndType(field, browserVersion);
   }
 
-  public void enterDescription(String issueDescription) {
-    clearAndType(description, issueDescription);
+  public void setDriverVersion(String driverVersion) {
+    WebElement field = driver.findElement(By.id("issue_form_browser-driver-versions"));
+    clearAndType(field, driverVersion);
+  }
+
+  public void setUsingGrid(String usingGrid) {
+    WebElement field = driver.findElement(By.id("issue_form_selenium-grid-version"));
+    clearAndType(field, usingGrid);
   }
 
   public IssueList submit() {
-    submit.click();
+    driver.findElement(By.cssSelector("button[type='submit']")).click();
     return new IssueList(driver);
   }
 
@@ -313,7 +372,7 @@ The "load" method in EditIssue now looks like:
   protected void load() {
     securedPage.get();
 
-    driver.get("https://github.com/SeleniumHQ/selenium/issues/new");
+    driver.get("https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=I-defect%2Cneeds-triaging&projects=&template=bug-report.yml&title=%5B%F0%9F%90%9B+Bug%5D%3A+");
   }
 ```
 
@@ -337,8 +396,15 @@ public class FooTest {
   public void demonstrateNestedLoadableComponents() {
     editIssue.get();
 
-    editIssue.setSummary("Summary");
-    editIssue.enterDescription("This is an example");
+    editIssue.title.sendKeys('Title');
+    editIssue.body.sendKeys('What Happened');
+    editIssue.setHowToReproduce('How to Reproduce');
+    editIssue.setLogOutput('Log Output');
+    editIssue.setOperatingSystem('Operating System');
+    editIssue.setSeleniumVersion('Selenium Version');
+    editIssue.setBrowserVersion('Browser Version');
+    editIssue.setDriverVersion('Driver Version');
+    editIssue.setUsingGrid('I Am Using Grid');
   }
 }
 ```
@@ -390,3 +456,128 @@ public class ActionBot {
 
 Once these abstractions have been built and duplication in your tests 
 identified, it's possible to layer PageObjects on top of bots.
+
+
+## Example
+
+{{< tabpane text=true >}}
+{{< tab header="Python" >}}
+一个用例 使用 `python + pytest + selenium` 实现了设计策略 "**Action Bot**, **Loadable Component** 和 **Page Object**".
+
+A `pytest` fixture `chrome_driver`.
+
+{{< gh-codeblock path="/examples/python/tests/design_strategy/using_best_practice.py#L6-L26" >}}
+{{< /tab >}}
+{{< tab header="Java" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+"**Action Bot**" implementation.
+
+{{< tabpane text=true >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/design_strategy/using_best_practice.py#L28-L65" >}}
+{{< /tab >}}
+{{< tab header="Java" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+"**Loadable Component** definition.
+
+{{< tabpane text=true >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/design_strategy/using_best_practice.py#L67-L80" >}}
+{{< /tab >}}
+{{< tab header="Java" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+"**Loadable Component** and **Page Object**" implementation. 
+
+{{< tabpane text=true >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/design_strategy/using_best_practice.py#L82-L172" >}}
+{{< /tab >}}
+{{< tab header="Java" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+Test cases implementation.
+
+{{< tabpane text=true >}}
+{{< tab header="Python" >}}
+Test cases implementation with `pytest`.
+
+{{< gh-codeblock path="/examples/python/tests/design_strategy/using_best_practice.py#L174-L240" >}}
+{{< /tab >}}
+{{< tab header="Java" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/test_practices/discouraged/file_downloads.en.md b/website_and_docs/content/documentation/test_practices/discouraged/file_downloads.en.md
index c8c0fc639813..78a686b2125c 100644
--- a/website_and_docs/content/documentation/test_practices/discouraged/file_downloads.en.md
+++ b/website_and_docs/content/documentation/test_practices/discouraged/file_downloads.en.md
@@ -17,7 +17,7 @@ of emulating user interaction with the web platform.
 Instead, find the link using Selenium
 (and any required cookies)
 and pass it to a HTTP request library like
-[libcurl](//curl.haxx.se/libcurl/).
+[curl](https:////curl.se/).
 
 The [HtmlUnit driver](https://github.com/SeleniumHQ/htmlunit-driver) can download attachments 
 by accessing them as input streams by implementing the 
diff --git a/website_and_docs/content/documentation/test_practices/discouraged/file_downloads.ja.md b/website_and_docs/content/documentation/test_practices/discouraged/file_downloads.ja.md
index d0e6f03c10de..2f2b4ab54c0d 100644
--- a/website_and_docs/content/documentation/test_practices/discouraged/file_downloads.ja.md
+++ b/website_and_docs/content/documentation/test_practices/discouraged/file_downloads.ja.md
@@ -11,7 +11,7 @@ aliases: [
 
 Seleniumの管理下にあるブラウザーでリンクをクリックしてダウンロードを開始することは可能ですが、APIはダウンロードの進行状況を公開しないため、ダウンロードしたファイルのテストには理想的ではありません。
 これは、ファイルのダウンロードは、Webプラットフォームとのユーザーインタラクションをエミュレートする重要な側面とは見なされないためです。
-代わりに、Selenium（および必要なCookie）を使用してリンクを見つけ、 [libcurl](//curl.haxx.se/libcurl/) などのHTTPリクエストライブラリに渡します。
+代わりに、Selenium（および必要なCookie）を使用してリンクを見つけ、 [curl](https://curl.se/) などのHTTPリクエストライブラリに渡します。
 
 [HtmlUnitドライバー](https://github.com/SeleniumHQ/htmlunit-driver)は、
 [AttachmentHandler](https://htmlunit.sourceforge.io/apidocs/com/gargoylesoftware/htmlunit/attachment/AttachmentHandler.html) インターフェイスを実装することで、
diff --git a/website_and_docs/content/documentation/test_practices/discouraged/file_downloads.pt-br.md b/website_and_docs/content/documentation/test_practices/discouraged/file_downloads.pt-br.md
index 6d3d3080c005..3cc5f0a5be91 100644
--- a/website_and_docs/content/documentation/test_practices/discouraged/file_downloads.pt-br.md
+++ b/website_and_docs/content/documentation/test_practices/discouraged/file_downloads.pt-br.md
@@ -17,7 +17,7 @@ de emular a interação do usuário com a plataforma da web.
 Em vez disso, encontre o link usando Selenium
 (e todos os cookies necessários)
 e passe este cookie para uma biblioteca de solicitação HTTP como
-[libcurl](//curl.haxx.se/libcurl/).
+[curl](https://curl.se/).
 
 O [driver HtmlUnit](https://github.com/SeleniumHQ/htmlunit-driver) pode baixar 
 anexos acessando-os como fluxos de entrada, implementando o 
diff --git a/website_and_docs/content/documentation/test_practices/discouraged/file_downloads.zh-cn.md b/website_and_docs/content/documentation/test_practices/discouraged/file_downloads.zh-cn.md
index 2b1fd1c792a6..47b28975a66b 100644
--- a/website_and_docs/content/documentation/test_practices/discouraged/file_downloads.zh-cn.md
+++ b/website_and_docs/content/documentation/test_practices/discouraged/file_downloads.zh-cn.md
@@ -10,7 +10,7 @@ aliases: [
 
 
 虽然可以通过在Selenium的控制下单击浏览器的链接来开始下载, 但是API并不会暴露下载进度, 因此这是一种不理想的测试下载文件的方式.
-因为下载文件并非模拟用户与Web平台交互的重要方面. 取而代之的是, 应使用Selenium(以及任何必要的cookie)查找链接, 并将其传递给例如[libcurl](//curl.haxx.se/libcurl/)这样的HTTP请求库.
+因为下载文件并非模拟用户与Web平台交互的重要方面. 取而代之的是, 应使用Selenium(以及任何必要的cookie)查找链接, 并将其传递给例如[curl](//curl.se/)这样的HTTP请求库.
 
 
 [HtmlUnit driver](https://github.com/SeleniumHQ/htmlunit-driver) 
diff --git a/website_and_docs/content/documentation/test_practices/discouraged/link_spidering.en.md b/website_and_docs/content/documentation/test_practices/discouraged/link_spidering.en.md
index f2467d933a5b..59d35eb79f32 100644
--- a/website_and_docs/content/documentation/test_practices/discouraged/link_spidering.en.md
+++ b/website_and_docs/content/documentation/test_practices/discouraged/link_spidering.en.md
@@ -18,7 +18,7 @@ just to get to the page and traverse through the DOM.
 
 Instead of using WebDriver for this,
 you could save a ton of time
-by executing a [curl](//curl.haxx.se/) command,
+by executing a [curl](https://curl.se/) command,
 or using a library such as BeautifulSoup
 since these methods do not rely
 on creating a browser and navigating to a page.
diff --git a/website_and_docs/content/documentation/test_practices/discouraged/link_spidering.ja.md b/website_and_docs/content/documentation/test_practices/discouraged/link_spidering.ja.md
index 58b8b20f4a89..b4a6254ba37b 100644
--- a/website_and_docs/content/documentation/test_practices/discouraged/link_spidering.ja.md
+++ b/website_and_docs/content/documentation/test_practices/discouraged/link_spidering.ja.md
@@ -12,5 +12,5 @@ aliases: [
 WebDriverを使用してリンクをスパイダーすることは、実行できないためではなく、最も理想的なツールではないため明らかに推奨される方法ではありません。
 WebDriverの起動には時間が必要であり、テストの記述方法によっては、ページに到達してDOMを通過するために数秒から1分かかる場合があります。
 
-このためにWebDriverを使用する代わりに、[curl](//curl.haxx.se/) コマンドを実行するか、BeautifulSoupなどのライブラリを使用することにより、これらの方法はブラウザーの作成やページへの移動に依存しないため、時間を大幅に節約できます。
+このためにWebDriverを使用する代わりに、[curl](https://curl.se/) コマンドを実行するか、BeautifulSoupなどのライブラリを使用することにより、これらの方法はブラウザーの作成やページへの移動に依存しないため、時間を大幅に節約できます。
 このタスクにWebDriverを使用しないことで、時間を大幅に節約できます。
diff --git a/website_and_docs/content/documentation/test_practices/discouraged/link_spidering.pt-br.md b/website_and_docs/content/documentation/test_practices/discouraged/link_spidering.pt-br.md
index 8bb2ce6008af..810fa6de0b31 100644
--- a/website_and_docs/content/documentation/test_practices/discouraged/link_spidering.pt-br.md
+++ b/website_and_docs/content/documentation/test_practices/discouraged/link_spidering.pt-br.md
@@ -18,7 +18,7 @@ apenas para chegar à página e atravessar o DOM.
 
 Em vez de usar o WebDriver para isso,
 você poderia economizar muito tempo
-executando um comando [curl](//curl.haxx.se/),
+executando um comando [curl](https://curl.se/),
 ou usando uma biblioteca como BeautifulSoup
 uma vez que esses métodos não dependem
 em criar um navegador e navegar para uma página.
diff --git a/website_and_docs/content/documentation/test_practices/discouraged/link_spidering.zh-cn.md b/website_and_docs/content/documentation/test_practices/discouraged/link_spidering.zh-cn.md
index ac30f3efb1b5..0f0be9f539cf 100644
--- a/website_and_docs/content/documentation/test_practices/discouraged/link_spidering.zh-cn.md
+++ b/website_and_docs/content/documentation/test_practices/discouraged/link_spidering.zh-cn.md
@@ -14,7 +14,7 @@ WebDriver需要一些时间来启动，并且可能要花几秒钟到一分钟
 具体取决于测试的编写方式，仅仅是为了获取页面并遍历DOM.
 
 除了使用WebDriver之外，
-您还可以通过执行 [curl](//curl.haxx.se/) 命令或
+您还可以通过执行 [curl](https://curl.se/) 命令或
 使用诸如BeautifulSoup之类的库来节省大量时间，
 因为这些方法不依赖于创建浏览器和导航至页面.
 通过不使用WebDriver可以节省大量时间.
diff --git a/website_and_docs/content/documentation/test_practices/discouraged/two_factor_authentication.en.md b/website_and_docs/content/documentation/test_practices/discouraged/two_factor_authentication.en.md
index 7504f4789c4b..ebbc483b9265 100644
--- a/website_and_docs/content/documentation/test_practices/discouraged/two_factor_authentication.en.md
+++ b/website_and_docs/content/documentation/test_practices/discouraged/two_factor_authentication.en.md
@@ -18,6 +18,7 @@ Selenium tests and not as secure. So, you should avoid automating 2FA.
 
 There are few options to get around 2FA checks:
 
+* If you want the functionality to still be tested, one option is to ask your team to create a "special token" that will work in test environment. That won't require usage of a mobile device, and will ensure the test journey is covered. 
 * Disable 2FA for certain Users in the test environment, so that you can 
 use those user credentials in the automation.
 * Disable 2FA in your test environment.
diff --git a/website_and_docs/content/documentation/test_practices/encouraged/avoid_sharing_state.en.md b/website_and_docs/content/documentation/test_practices/encouraged/avoid_sharing_state.en.md
index be02b1de5833..c72f7f128477 100644
--- a/website_and_docs/content/documentation/test_practices/encouraged/avoid_sharing_state.en.md
+++ b/website_and_docs/content/documentation/test_practices/encouraged/avoid_sharing_state.en.md
@@ -21,3 +21,8 @@ test e.g. invalid order records.
 
 * Create a new WebDriver instance per test. This helps ensure test isolation
 and makes parallelization simpler.
+
+    * If you choose [pytest](https://pytest.org/) as your test runner, this can be 
+    easily done by yielding your driver in a global fixture. This way each test gets its own 
+    driver instance, and you can ensure that drivers always quit after a test is finished 
+    (pass or fail).
diff --git a/website_and_docs/content/documentation/test_practices/encouraged/avoid_sharing_state.ja.md b/website_and_docs/content/documentation/test_practices/encouraged/avoid_sharing_state.ja.md
index 46b2d439fca8..7ed49b54fc10 100644
--- a/website_and_docs/content/documentation/test_practices/encouraged/avoid_sharing_state.ja.md
+++ b/website_and_docs/content/documentation/test_practices/encouraged/avoid_sharing_state.ja.md
@@ -19,3 +19,8 @@ aliases: [
 
 * テストごとに新しいWebDriverインスタンスを作成します。
 これにより、テストの分離が保証され、並列化がより簡単になります。
+
+    * If you choose [pytest](https://pytest.org/) as your test runner, this can be 
+    easily done by yielding your driver in a global fixture. This way each test gets its own 
+    driver instance, and you can ensure that drivers always quit after a test is finished 
+    (pass or fail).
diff --git a/website_and_docs/content/documentation/test_practices/encouraged/avoid_sharing_state.pt-br.md b/website_and_docs/content/documentation/test_practices/encouraged/avoid_sharing_state.pt-br.md
index ec5e65483136..b40d8e89d3ad 100644
--- a/website_and_docs/content/documentation/test_practices/encouraged/avoid_sharing_state.pt-br.md
+++ b/website_and_docs/content/documentation/test_practices/encouraged/avoid_sharing_state.pt-br.md
@@ -21,3 +21,8 @@ teste, por exemplo registros de pedidos inválidos.
 
 * Crie uma nova instância do WebDriver por teste. Isso ajuda a garantir o isolamento do teste
 e torna a paralelização mais simples.
+
+    * If you choose [pytest](https://pytest.org/) as your test runner, this can be 
+    easily done by yielding your driver in a global fixture. This way each test gets its own 
+    driver instance, and you can ensure that drivers always quit after a test is finished 
+    (pass or fail).
diff --git a/website_and_docs/content/documentation/test_practices/encouraged/avoid_sharing_state.zh-cn.md b/website_and_docs/content/documentation/test_practices/encouraged/avoid_sharing_state.zh-cn.md
index da8115aa8f7d..b68921f15ec4 100644
--- a/website_and_docs/content/documentation/test_practices/encouraged/avoid_sharing_state.zh-cn.md
+++ b/website_and_docs/content/documentation/test_practices/encouraged/avoid_sharing_state.zh-cn.md
@@ -19,3 +19,8 @@ aliases: [
 
 * 每次测试都创建一个新的WebDriver实例. 
 这在确保测试隔离的同时可以保障并行化更为简单.
+
+    * If you choose [pytest](https://pytest.org/) as your test runner, this can be 
+    easily done by yielding your driver in a global fixture. This way each test gets its own 
+    driver instance, and you can ensure that drivers always quit after a test is finished 
+    (pass or fail).
diff --git a/website_and_docs/content/documentation/test_practices/encouraged/page_object_models.en.md b/website_and_docs/content/documentation/test_practices/encouraged/page_object_models.en.md
index 5ce6b57683a6..b8163f0edc05 100644
--- a/website_and_docs/content/documentation/test_practices/encouraged/page_object_models.en.md
+++ b/website_and_docs/content/documentation/test_practices/encouraged/page_object_models.en.md
@@ -184,7 +184,7 @@ test code.
 
 ## Assertions in Page Objects
 Page objects themselves should never make verifications or assertions. This is
-part of your test and should always be within the test’s code, never in an page
+part of your test and should always be within the test’s code, never in a page
 object. The page object will contain the representation of the page, and the
 services the page provides via methods but no code related to what is being
 tested should be within the page object.
@@ -491,4 +491,4 @@ public class LoginPage {
         return submitLogin();
     }
 }
-```
\ No newline at end of file
+```
diff --git a/website_and_docs/content/documentation/test_practices/encouraged/page_object_models.ja.md b/website_and_docs/content/documentation/test_practices/encouraged/page_object_models.ja.md
index b89069ddc72d..0d958324940a 100644
--- a/website_and_docs/content/documentation/test_practices/encouraged/page_object_models.ja.md
+++ b/website_and_docs/content/documentation/test_practices/encouraged/page_object_models.ja.md
@@ -185,7 +185,7 @@ test code.
 
 ## Assertions in Page Objects
 Page objects themselves should never make verifications or assertions. This is
-part of your test and should always be within the test’s code, never in an page
+part of your test and should always be within the test’s code, never in a page
 object. The page object will contain the representation of the page, and the
 services the page provides via methods but no code related to what is being
 tested should be within the page object.
diff --git a/website_and_docs/content/documentation/test_practices/encouraged/page_object_models.zh-cn.md b/website_and_docs/content/documentation/test_practices/encouraged/page_object_models.zh-cn.md
index ca78de7e2b93..b94ace950c19 100644
--- a/website_and_docs/content/documentation/test_practices/encouraged/page_object_models.zh-cn.md
+++ b/website_and_docs/content/documentation/test_practices/encouraged/page_object_models.zh-cn.md
@@ -185,7 +185,7 @@ test code.
 
 ## Assertions in Page Objects
 Page objects themselves should never make verifications or assertions. This is
-part of your test and should always be within the test’s code, never in an page
+part of your test and should always be within the test’s code, never in a page
 object. The page object will contain the representation of the page, and the
 services the page provides via methods but no code related to what is being
 tested should be within the page object.
diff --git a/website_and_docs/content/documentation/test_practices/overview.en.md b/website_and_docs/content/documentation/test_practices/overview.en.md
index de5475a50320..c0ca18457f91 100644
--- a/website_and_docs/content/documentation/test_practices/overview.en.md
+++ b/website_and_docs/content/documentation/test_practices/overview.en.md
@@ -33,7 +33,7 @@ Browser automation has the reputation of being “flaky”,
 but in reality, that is because users frequently demand too much of it.
 In later chapters, we will return to techniques you can use
 to mitigate apparent intermittent problems in tests,
-in particular on how to [overcome race conditions]({{< ref "/waits.md" >}})
+in particular on how to [overcome race conditions]({{< ref "waits.md" >}})
 between the browser and WebDriver.
 
 By keeping your tests short
@@ -218,7 +218,7 @@ to provide methods such as `createAdminUser()`, and `createUserWithPayment()`.
 The point is, these two lines of code do not distract you from the ultimate purpose of this test:
 configuring a unicorn.
 
-The intricacies of the [Page Object model]({{< ref "/page_object_models.md" >}})
+The intricacies of the [Page Object model]({{< ref "page_object_models.md" >}})
 will be discussed in later chapters, but we will introduce the concept here:
 
 Your tests should be composed of actions,
diff --git a/website_and_docs/content/documentation/test_practices/overview.ja.md b/website_and_docs/content/documentation/test_practices/overview.ja.md
index 6714feb51044..7b1c12df4b34 100644
--- a/website_and_docs/content/documentation/test_practices/overview.ja.md
+++ b/website_and_docs/content/documentation/test_practices/overview.ja.md
@@ -25,7 +25,7 @@ Webブラウザーのテストビジネスに参加していることを確認
 これらの手順はできるだけ短くしてください。
 ほとんどの場合、1つまたは2つの操作で十分です。
 ブラウザの自動化は"不安定"であるという評判がありますが、実際には、ユーザーが頻繁に多くを求めることが多いためです。
-後の章では、特にブラウザーとWebDriver間の[競合状態を克服する]({{< ref "/waits.md" >}})方法に関する、テストでの断続的な問題を軽減するために使用できる手法に戻ります。
+後の章では、特にブラウザーとWebDriver間の[競合状態を克服する]({{< ref "waits.md" >}})方法に関する、テストでの断続的な問題を軽減するために使用できる手法に戻ります。
 
 テストを短くして、代替手段がまったくない場合にのみWebブラウザーを使用することで、不安定さを最小限にして多くのテストを実行できます。
 
@@ -178,7 +178,7 @@ val accountPage = loginAs(user.getEmail(), user.getPassword())
 ご想像のとおり、 `UserFactory` を拡張して `createAdminUser()` や `createUserWithPayment()` などのメソッドを提供できます。
 重要なのは、これらの2行のコードは、このテストの最終目的であるユニコーンの構成からあなたをそらすものではないということです。
 
-[ページオブジェクトモデル]({{< ref "/page_object_models.md" >}})の込み入った事柄については、後の章で説明しますが、ここで概念を紹介します。
+[ページオブジェクトモデル]({{< ref "page_object_models.md" >}})の込み入った事柄については、後の章で説明しますが、ここで概念を紹介します。
 
 テストは、サイトのページのコンテキスト内で、ユーザーの観点から実行されるアクションで構成される必要があります。
 これらのページはオブジェクトとして保存され、Webページがどのように構成され、アクションがどのように実行されるかに関する特定の情報が含まれます。
diff --git a/website_and_docs/content/documentation/test_practices/overview.pt-br.md b/website_and_docs/content/documentation/test_practices/overview.pt-br.md
index 5ff1223a847e..83804203a666 100644
--- a/website_and_docs/content/documentation/test_practices/overview.pt-br.md
+++ b/website_and_docs/content/documentation/test_practices/overview.pt-br.md
@@ -33,7 +33,7 @@ A automação do navegador tem a reputação de ser "instável",
 mas, na realidade, é porque os usuários freqüentemente exigem muito dele.
 Em capítulos posteriores, retornaremos às técnicas que você pode usar
 para mitigar problemas aparentemente intermitentes nos testes,
-em particular sobre como [superar as condições de corrida]({{< ref "/waits.md" >}})
+em particular sobre como [superar as condições de corrida]({{< ref "waits.md" >}})
 entre o navegador e o WebDriver.
 
 Mantendo seus testes curtos
@@ -218,7 +218,7 @@ para fornecer métodos como `createAdminUser ()` e `createUserWithPayment ()`.
 A questão é que essas duas linhas de código não o distraem do objetivo final deste teste:
 configurando um unicórnio.
 
-Os detalhes do [modelo de objeto de página]({{< relref "/page_object_models.md" >}})
+Os detalhes do [modelo de objeto de página]({{< relref "page_object_models.md" >}})
 será discutido em capítulos posteriores, mas vamos apresentar o conceito aqui:
 
 Seus testes devem ser compostos de ações,
diff --git a/website_and_docs/content/documentation/test_practices/overview.zh-cn.md b/website_and_docs/content/documentation/test_practices/overview.zh-cn.md
index 7ab9ebedffd8..2240d389bd93 100644
--- a/website_and_docs/content/documentation/test_practices/overview.zh-cn.md
+++ b/website_and_docs/content/documentation/test_practices/overview.zh-cn.md
@@ -32,7 +32,7 @@ aliases: [
 但实际上那是因为用户经常对它要求过高。
 在后面的章节中，我们将回到您可以使用的技术，
 为了缓解测试中明显的间歇性问题，
-特别是如何克服 浏览器 和 WebDriver 之间的[竞争条件]({{< ref "/waits.md" >}})。
+特别是如何克服 浏览器 和 WebDriver 之间的[竞争条件]({{< ref "waits.md" >}})。
 
 通过保持测试简短并仅在您完全没有替代方案时使用Web浏览器，您可以用最小的代码片段来完成很多测试。
 
@@ -189,7 +189,7 @@ val accountPage = loginAs(user.getEmail(), user.getPassword())
 关键是，这两行代码不会分散您对此测试的最终目的的注意力：
 配置独角兽。
 
-[页面对象模型]({{< ref "/page_object_models.md" >}})
+[页面对象模型]({{< ref "page_object_models.md" >}})
 的复杂性将在后面的章节中讨论，但我们将在这里介绍这个概念：
 
 您的测试应该由操作组成，从用户的角度出发，在站点的页面上下文中执行。
diff --git a/website_and_docs/content/documentation/test_practices/testing_types.en.md b/website_and_docs/content/documentation/test_practices/testing_types.en.md
index 14dcd78c6d94..77b18eabd2fe 100644
--- a/website_and_docs/content/documentation/test_practices/testing_types.en.md
+++ b/website_and_docs/content/documentation/test_practices/testing_types.en.md
@@ -50,7 +50,7 @@ Integration tests verify the interactions between different components or module
 ### System Tests
 
 System Testing is a complete fully integrated product Testing. It is an end-to-end testing where in testing environment is similar to the production environment. Here, we navigate through all the features of the software and test if the end business / end feature works. We just test the end feature and don’t check for data flow or do functional testing and all.
->For example,  **_Testing the end to end flow from login to placing and order and rechecking the order in My Orders page and logoff from an ecommerce website._**
+>For example,  **_Testing the end to end flow from login to placing an order and rechecking the order in My Orders page and logoff from an ecommerce website._**
 
 ### Performance testing
 As its name indicates, performance tests are done 
@@ -63,10 +63,14 @@ Load testing is done to verify how well the
 application works under different defined loads 
 (usually a particular number of users connected at once).
 
+>For example,  **_Testing that the site can handle numerous orders/users at once._**
+
 #### Stress testing
 Stress testing is done to verify how well the
 application works under stress (or above the maximum supported load).
 
+>For example,  **_Testing that your ecommerce site can handle Black Friday_**
+
 Generally, performance tests are done by executing some 
 Selenium written tests simulating different users 
 hitting a particular function on the web app and 
@@ -76,7 +80,7 @@ This is generally done by other tools that retrieve the metrics.
 One such tool is **_JMeter_**.
 
 For a web application, details to measure include 
-throughput, latency, data loss, individual component loading times...
+throughput, latency, data loss, individual component loading times, etc.
 
 Note 1: All browsers have a performance tab in their
 developers' tools section (accessible by pressing F12)
@@ -89,6 +93,8 @@ This testing is generally done after a change, fix or feature addition.
 
 To ensure that the change has not broken any of the existing 
 functionality, some already executed tests are executed again. 
+
+>For example,  **_Testing that your new search bar doesn't break the other buttons on the menu_**
             
 The set of re-executed tests can be full or partial
 and can include several different types, depending
diff --git a/website_and_docs/content/documentation/test_practices/testing_types.ja.md b/website_and_docs/content/documentation/test_practices/testing_types.ja.md
index 95bac53e88d4..22ce4ab68585 100644
--- a/website_and_docs/content/documentation/test_practices/testing_types.ja.md
+++ b/website_and_docs/content/documentation/test_practices/testing_types.ja.md
@@ -42,9 +42,13 @@ Webアプリケーションの場合、期待されるリターンをシミュ
 #### ロードテスト
 ロードテストは、定義されたさまざまな負荷（通常、特定の数のユーザーが同時に接続されている場合）でアプリケーションがどの程度機能するかを確認するために行われます。
 
+>For example,  **_Testing that the site can handle numerous orders/users at once._**
+
 #### ストレステスト
 ストレステストは、ストレス下（またはサポートされている最大負荷以上）でアプリケーションがどの程度機能するかを確認するために行われます。
 
+>For example,  **_Testing that your ecommerce site can handle Black Friday_**
+
 一般に、パフォーマンステストは、Seleniumで書かれたテストを実行して、さまざまなユーザーがWebアプリの特定の機能を押して、意味のある測定値を取得することをシミュレートして実行されます。
 
 これは通常、メトリックを取得する他のツールによって行われます。
@@ -63,6 +67,8 @@ Webアプリケーションの場合、測定する詳細には、スループ
 
 再実行されるテストのセットは、完全または部分的なものにすることができ、アプリケーションおよび開発チームに応じて、いくつかの異なるタイプを含めることができます。
 
+>For example,  **_Testing that your new search bar doesn't break the other buttons on the menu_**
+
 ### テスト駆動開発 (TDD)
 テストタイプそのものではなく、TDDはテストが機能の設計を推進する反復的な開発方法論です。
 
diff --git a/website_and_docs/content/documentation/test_practices/testing_types.pt-br.md b/website_and_docs/content/documentation/test_practices/testing_types.pt-br.md
index ecbbbc6852ce..2e38617c401b 100644
--- a/website_and_docs/content/documentation/test_practices/testing_types.pt-br.md
+++ b/website_and_docs/content/documentation/test_practices/testing_types.pt-br.md
@@ -63,10 +63,14 @@ O teste de carga é feito para verificar o quão bem o
 aplicativo funciona sob diferentes cargas definidas
 (geralmente um determinado número de usuários conectados ao mesmo tempo).
 
+>For example,  **_Testing that the site can handle numerous orders/users at once._**
+
 #### Teste de estresse
 O teste de estresse é feito para verificar o quão bem
 a aplicação funciona sob estresse (ou acima da carga máxima suportada).
 
+>For example,  **_Testing that your ecommerce site can handle Black Friday_**
+
 Geralmente, os testes de estresse são feitos executando alguns
 testes escritos com Selenium simulando diferentes usuários
 utilizando uma função específica no aplicativo da web e
@@ -89,6 +93,8 @@ Esse teste geralmente é feito após uma alteração, correção ou adição de
 
 Para garantir que a mudança não quebrou nenhumas das
 funcionalidades, alguns testes já executados são executados novamente.
+
+>For example,  **_Testing that your new search bar doesn't break the other buttons on the menu_**
             
 O conjunto de testes re-executados pode ser total ou parcial
 e pode incluir vários tipos diferentes, dependendo
diff --git a/website_and_docs/content/documentation/test_practices/testing_types.zh-cn.md b/website_and_docs/content/documentation/test_practices/testing_types.zh-cn.md
index 34722cce6103..d5f6e939ef12 100644
--- a/website_and_docs/content/documentation/test_practices/testing_types.zh-cn.md
+++ b/website_and_docs/content/documentation/test_practices/testing_types.zh-cn.md
@@ -47,10 +47,14 @@ aliases: [
 以验证应用程序在各种特定的负载
  (通常是同时连接一定数量的用户) 下的运行状况
 
+>For example,  **_Testing that the site can handle numerous orders/users at once._**
+
 #### 压力测试
 进行压力测试, 
 以验证应用程序在压力 (或高于最大支持负载) 下的运行状况.
 
+>For example,  **_Testing that your ecommerce site can handle Black Friday_**
+
 通常, 性能测试是通过执行一些Selenium书写的测试来完成的, 
 这些测试模拟了不同的用户
 使用Web应用程序的特定功能
@@ -75,6 +79,8 @@ aliases: [
 为了确保所做的更改没有破坏任何现有功能, 
 将再次执行一些已经执行过的测试.
 
+>For example,  **_Testing that your new search bar doesn't break the other buttons on the menu_**
+
 重新执行的测试集可以是全部或部分, 
 并且可以包括几种不同的类型, 
 具体取决于具体的应用程序和开发团队.
diff --git a/website_and_docs/content/documentation/webdriver/_index.en.md b/website_and_docs/content/documentation/webdriver/_index.en.md
index 9a0a9e464ff6..4924f9fab727 100644
--- a/website_and_docs/content/documentation/webdriver/_index.en.md
+++ b/website_and_docs/content/documentation/webdriver/_index.en.md
@@ -1,16 +1,16 @@
 ---
 title: "WebDriver"
 linkTitle: "WebDriver"
-weight: 4
+weight: 2
 description: >
-  WebDriver drives a browser natively, learn more about it.
+  WebDriver drives a browser natively; learn more about it.
 aliases: ["/documentation/en/webdriver/"]
 ---
 
 
 WebDriver drives a browser natively, as a user would, either locally
-or on a remote machine using the Selenium server,
-marks a leap forward in terms of browser automation.
+or on a remote machine using the Selenium server.
+It marks a leap forward in terms of browser automation.
 
 Selenium WebDriver refers to both the language bindings
 and the implementations of the individual browser controlling code.
diff --git a/website_and_docs/content/documentation/webdriver/_index.ja.md b/website_and_docs/content/documentation/webdriver/_index.ja.md
index 381301b466f8..d5c43995b9e7 100644
--- a/website_and_docs/content/documentation/webdriver/_index.ja.md
+++ b/website_and_docs/content/documentation/webdriver/_index.ja.md
@@ -1,7 +1,7 @@
 ---
 title: "WebDriver"
 linkTitle: "WebDriver"
-weight: 4
+weight: 2
 description: >
   WebDriverはブラウザをネイティブに操作します。詳細については、こちらをご覧ください。
 aliases: ["/documentation/ja/webdriver/"]
diff --git a/website_and_docs/content/documentation/webdriver/_index.pt-br.md b/website_and_docs/content/documentation/webdriver/_index.pt-br.md
index d7db485619b5..3d7f50d6a494 100644
--- a/website_and_docs/content/documentation/webdriver/_index.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/_index.pt-br.md
@@ -1,8 +1,8 @@
 ---
 title: "WebDriver"
 linkTitle: "WebDriver"
-weight: 4
-description: WebDriver manipula um navegador nativamente, aprenda mais sobre isso.
+weight: 2
+description: WebDriver manipula um navegador nativamente; aprenda mais sobre isso.
 aliases: ["/documentation/pt-br/webdriver/"]
 ---
 
diff --git a/website_and_docs/content/documentation/webdriver/_index.zh-cn.md b/website_and_docs/content/documentation/webdriver/_index.zh-cn.md
index 941a0c488e72..7502487ca9f4 100644
--- a/website_and_docs/content/documentation/webdriver/_index.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/_index.zh-cn.md
@@ -1,9 +1,9 @@
 ---
 title: "WebDriver"
 linkTitle: "WebDriver"
-weight: 4
+weight: 2
 description: >
-  WebDriver以原生的方式驱动浏览器, 在此了解更多内容.
+  WebDriver以原生的方式驱动浏览器; 在此了解更多内容.
 aliases: ["/documentation/zh-cn/webdriver/"]
 ---
 
diff --git a/website_and_docs/content/documentation/webdriver/actions_api/_index.en.md b/website_and_docs/content/documentation/webdriver/actions_api/_index.en.md
index f601c5b7ef2e..fd581be60748 100644
--- a/website_and_docs/content/documentation/webdriver/actions_api/_index.en.md
+++ b/website_and_docs/content/documentation/webdriver/actions_api/_index.en.md
@@ -33,24 +33,24 @@ to wait a beat between actions for things to work correctly.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/ActionsTest.java#L21-L28" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/ActionsTest.java#L21-L28" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_actions.py#L13-L20" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_actions.py#L13-L20" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/ActionsTest.cs#L18-L25" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/ActionsTest.cs#L18-L25" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/actions_spec.rb#L12-L19" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/actions_spec.rb#L12-L19" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/actionsTest.spec.js#L20-L27" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/actionsTest.spec.js#L18-L25" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/ActionsTest.kt#L22-L29" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/ActionsTest.kt#L22-L29" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -66,21 +66,21 @@ it does not get executed with the perform method.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/ActionsTest.java#L46" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/ActionsTest.java#L46" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_actions.py#L37" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_actions.py#L37" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/ActionsTest.cs#L44" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/ActionsTest.cs#L44" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/actions_spec.rb#L36" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/actions_spec.rb#L36" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/actionsTest.spec.js#L44" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/actionsTest.spec.js#L42" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/ActionsTest.kt#L47" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/ActionsTest.kt#L47" >}}
 {{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/actions_api/_index.ja.md b/website_and_docs/content/documentation/webdriver/actions_api/_index.ja.md
index f601c5b7ef2e..7f23990cf685 100644
--- a/website_and_docs/content/documentation/webdriver/actions_api/_index.ja.md
+++ b/website_and_docs/content/documentation/webdriver/actions_api/_index.ja.md
@@ -1,9 +1,9 @@
 ---
-title: "Actions API"
-linkTitle: "Actions API"
+title: "アクション API"
+linkTitle: "アクション API"
 weight: 14
 description: >
-    A low-level interface for providing virtualized device input actions to the web browser.
+    仮想化されたデバイス入力アクションを Web ブラウザーに提供するための低レベルのインターフェイス。
 ---
 
 In addition to the high-level [element interactions]({{< ref "/documentation/webdriver/elements/interactions.md" >}}), 
@@ -33,24 +33,24 @@ to wait a beat between actions for things to work correctly.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/ActionsTest.java#L21-L28" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/ActionsTest.java#L21-L28" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_actions.py#L13-L20" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_actions.py#L13-L20" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/ActionsTest.cs#L18-L25" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/ActionsTest.cs#L18-L25" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/actions_spec.rb#L12-L19" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/actions_spec.rb#L12-L19" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/actionsTest.spec.js#L20-L27" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/actionsTest.spec.js#L18-L25" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/ActionsTest.kt#L22-L29" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/ActionsTest.kt#L22-L29" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -66,21 +66,21 @@ it does not get executed with the perform method.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/ActionsTest.java#L46" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/ActionsTest.java#L46" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_actions.py#L37" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_actions.py#L37" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/ActionsTest.cs#L44" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/ActionsTest.cs#L44" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/actions_spec.rb#L36" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/actions_spec.rb#L36" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/actionsTest.spec.js#L44" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/actionsTest.spec.js#L42" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/ActionsTest.kt#L47" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/ActionsTest.kt#L47" >}}
 {{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/actions_api/_index.pt-br.md b/website_and_docs/content/documentation/webdriver/actions_api/_index.pt-br.md
index 3c984391cb73..eee680b49ad8 100644
--- a/website_and_docs/content/documentation/webdriver/actions_api/_index.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/actions_api/_index.pt-br.md
@@ -19,24 +19,24 @@ Movimentos de ponteiro e rolagem da roda permitem que o usuário defina uma dura
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/ActionsTest.java#L21-L28" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/ActionsTest.java#L21-L28" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_actions.py#L13-L20" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_actions.py#L13-L20" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/ActionsTest.cs#L18-L25" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/ActionsTest.cs#L18-L25" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/actions_spec.rb#L12-L19" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/actions_spec.rb#L12-L19" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/actionsTest.spec.js#L20-L27" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/actionsTest.spec.js#L18-L25" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/ActionsTest.kt#L22-L29" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/ActionsTest.kt#L22-L29" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -48,21 +48,21 @@ Existe um método especial para liberar todas as teclas pressionadas e botões d
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/ActionsTest.java#L46" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/ActionsTest.java#L46" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_actions.py#L37" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_actions.py#L37" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/ActionsTest.cs#L44" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/ActionsTest.cs#L44" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/actions_spec.rb#L36" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/actions_spec.rb#L36" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/actionsTest.spec.js#L44" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/actionsTest.spec.js#L42" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/ActionsTest.kt#L47" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/ActionsTest.kt#L47" >}}
 {{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/actions_api/_index.zh-cn.md b/website_and_docs/content/documentation/webdriver/actions_api/_index.zh-cn.md
index 07ad565bc65f..a1702dd79030 100644
--- a/website_and_docs/content/documentation/webdriver/actions_api/_index.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/actions_api/_index.zh-cn.md
@@ -46,24 +46,24 @@ Selenium允许您构建分配给特定输入的独立操作命令,
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/ActionsTest.java#L21-L28" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/ActionsTest.java#L21-L28" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_actions.py#L13-L20" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_actions.py#L13-L20" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/ActionsTest.cs#L18-L25" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/ActionsTest.cs#L18-L25" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/actions_spec.rb#L12-L19" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/actions_spec.rb#L12-L19" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/actionsTest.spec.js#L20-L27" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/actionsTest.spec.js#L18-L25" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/ActionsTest.kt#L22-L29" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/ActionsTest.kt#L22-L29" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -81,21 +81,21 @@ Selenium允许您构建分配给特定输入的独立操作命令,
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/ActionsTest.java#L46" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/ActionsTest.java#L46" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_actions.py#L37" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_actions.py#L37" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/ActionsTest.cs#L44" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/ActionsTest.cs#L44" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/actions_spec.rb#L36" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/actions_spec.rb#L36" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/actionsTest.spec.js#L44" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/actionsTest.spec.js#L42" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/ActionsTest.kt#L47" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/ActionsTest.kt#L47" >}}
 {{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/actions_api/keyboard.en.md b/website_and_docs/content/documentation/webdriver/actions_api/keyboard.en.md
index eae8d20c87f3..57a0ca8fbb1d 100644
--- a/website_and_docs/content/documentation/webdriver/actions_api/keyboard.en.md
+++ b/website_and_docs/content/documentation/webdriver/actions_api/keyboard.en.md
@@ -47,22 +47,22 @@ Use the [Java Keys enum](https://github.com/SeleniumHQ/selenium/blob/selenium-4.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L17-L20" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_keys.py#L10-L13" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_keys.py#L10-L13" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L17-L20" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/keys_spec.rb#L13-L16" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/keys_spec.rb#L13-L16" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/keysTest.spec.js#L19-L22" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/keysTest.spec.js#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L19-L22" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L19-L22" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -70,22 +70,22 @@ Use the [Java Keys enum](https://github.com/SeleniumHQ/selenium/blob/selenium-4.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L30-L35" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L30-L35" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_keys.py#L21-L26" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_keys.py#L21-L26" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L30-L35" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L30-L35" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/keys_spec.rb#L25-L30" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/keys_spec.rb#L25-L30" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/keysTest.spec.js#L34-L39" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/keysTest.spec.js#L32-L37" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L32-L37" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L32-L37" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -99,22 +99,22 @@ primarily this gets used when needing to type multiple characters in the middle
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L45-L47" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L45-L47" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_keys.py#L34-L36" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_keys.py#L34-L36" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L45-L47" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L45-L47" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/keys_spec.rb#L39-L41" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/keys_spec.rb#L39-L41" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/keysTest.spec.js#L47-L48" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/keysTest.spec.js#L48-L50" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L47-L49" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L47-L49" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -122,23 +122,23 @@ primarily this gets used when needing to type multiple characters in the middle
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L59-L62" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L59-L62" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_keys.py#L45-L48" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_keys.py#L45-L48" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L58-L61" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L58-L61" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/keys_spec.rb#L51-L54" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/keys_spec.rb#L51-L54" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-version version="4.5.0" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/keysTest.spec.js#L61-L65" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/keysTest.spec.js#L59-L63" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L60-L63" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L60-L63" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -150,21 +150,21 @@ This code will end up with the text: `SeleniumSelenium!`
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L70-L84" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L70-L84" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_keys.py#L56-L67" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_keys.py#L56-L67" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L72-L82" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L72-L82" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/keys_spec.rb#L64-L74" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/keys_spec.rb#L64-L74" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/keysTest.spec.js#L75-L87" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/keysTest.spec.js#L73-L85" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L74-L86" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L74-L86" >}}
 {{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/actions_api/keyboard.ja.md b/website_and_docs/content/documentation/webdriver/actions_api/keyboard.ja.md
index e9bf2ad9d3a6..5b6e0334c1fe 100644
--- a/website_and_docs/content/documentation/webdriver/actions_api/keyboard.ja.md
+++ b/website_and_docs/content/documentation/webdriver/actions_api/keyboard.ja.md
@@ -47,22 +47,22 @@ Use the [Java Keys enum](https://github.com/SeleniumHQ/selenium/blob/selenium-4.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L17-L20" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_keys.py#L10-L13" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_keys.py#L10-L13" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L17-L20" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/keys_spec.rb#L13-L16" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/keys_spec.rb#L13-L16" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/keysTest.spec.js#L19-L22" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/keysTest.spec.js#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L19-L22" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L19-L22" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -70,22 +70,22 @@ Use the [Java Keys enum](https://github.com/SeleniumHQ/selenium/blob/selenium-4.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L30-L35" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L30-L35" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_keys.py#L21-L26" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_keys.py#L21-L26" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L30-L35" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L30-L35" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/keys_spec.rb#L25-L30" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/keys_spec.rb#L25-L30" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/keysTest.spec.js#L34-L39" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/keysTest.spec.js#L32-L37" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L32-L37" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L32-L37" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -99,22 +99,22 @@ primarily this gets used when needing to type multiple characters in the middle
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L45-L47" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L45-L47" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_keys.py#L34-L36" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_keys.py#L34-L36" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L45-L47" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L45-L47" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/keys_spec.rb#L39-L41" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/keys_spec.rb#L39-L41" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/keysTest.spec.js#L47-L48" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/keysTest.spec.js#L48-L50" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L47-L49" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L47-L49" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -122,23 +122,23 @@ primarily this gets used when needing to type multiple characters in the middle
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L59-L62" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L59-L62" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_keys.py#L45-L48" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_keys.py#L45-L48" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L58-L61" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L58-L61" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/keys_spec.rb#L51-L54" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/keys_spec.rb#L51-L54" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-version version="4.5.0" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/keysTest.spec.js#L61-L65" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/keysTest.spec.js#L59-L63" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L60-L63" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L60-L63" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -150,21 +150,21 @@ This code will end up with the text: `SeleniumSelenium!`
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L70-L84" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L70-L84" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_keys.py#L56-L67" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_keys.py#L56-L67" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L72-L82" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L72-L82" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/keys_spec.rb#L64-L74" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/keys_spec.rb#L64-L74" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/keysTest.spec.js#L75-L87" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/keysTest.spec.js#L73-L85" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L74-L86" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L74-L86" >}}
 {{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/actions_api/keyboard.pt-br.md b/website_and_docs/content/documentation/webdriver/actions_api/keyboard.pt-br.md
index b09e78d854fb..92546d3ffe3e 100644
--- a/website_and_docs/content/documentation/webdriver/actions_api/keyboard.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/actions_api/keyboard.pt-br.md
@@ -42,22 +42,22 @@ Use the [Java Keys enum](https://github.com/SeleniumHQ/selenium/blob/selenium-4.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L17-L20" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_keys.py#L10-L13" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_keys.py#L10-L13" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L17-L20" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/keys_spec.rb#L13-L16" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/keys_spec.rb#L13-L16" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/keysTest.spec.js#L19-L22" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/keysTest.spec.js#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L19-L22" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L19-L22" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -65,22 +65,22 @@ Use the [Java Keys enum](https://github.com/SeleniumHQ/selenium/blob/selenium-4.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L30-L35" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L30-L35" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_keys.py#L21-L26" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_keys.py#L21-L26" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L30-L35" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L30-L35" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/keys_spec.rb#L25-L30" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/keys_spec.rb#L25-L30" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/keysTest.spec.js#L34-L39" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/keysTest.spec.js#L32-L37" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L32-L37" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L32-L37" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -94,22 +94,22 @@ primarily this gets used when needing to type multiple characters in the middle
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L45-L47" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L45-L47" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_keys.py#L34-L36" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_keys.py#L34-L36" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L45-L47" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L45-L47" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/keys_spec.rb#L39-L41" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/keys_spec.rb#L39-L41" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/keysTest.spec.js#L47-L48" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/keysTest.spec.js#L48-L50" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L47-L49" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L47-L49" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -117,23 +117,23 @@ primarily this gets used when needing to type multiple characters in the middle
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L59-L62" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L59-L62" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_keys.py#L45-L48" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_keys.py#L45-L48" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L58-L61" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L58-L61" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/keys_spec.rb#L51-L54" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/keys_spec.rb#L51-L54" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-version version="4.5.0" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/keysTest.spec.js#L61-L65" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/keysTest.spec.js#L59-L63" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L60-L63" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L60-L63" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -143,21 +143,21 @@ Aqui está um exemplo de uso de todos os métodos acima para realizar uma ação
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L70-L84" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L70-L84" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_keys.py#L56-L67" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_keys.py#L56-L67" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L72-L82" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L72-L82" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/keys_spec.rb#L64-L74" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/keys_spec.rb#L64-L74" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/keysTest.spec.js#L75-L87" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/keysTest.spec.js#L73-L85" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L74-L86" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L74-L86" >}}
 {{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/actions_api/keyboard.zh-cn.md b/website_and_docs/content/documentation/webdriver/actions_api/keyboard.zh-cn.md
index 7e904a884e18..173c0ebe38f0 100644
--- a/website_and_docs/content/documentation/webdriver/actions_api/keyboard.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/actions_api/keyboard.zh-cn.md
@@ -48,22 +48,22 @@ Use the [Java Keys enum](https://github.com/SeleniumHQ/selenium/blob/selenium-4.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L17-L20" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_keys.py#L10-L13" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_keys.py#L10-L13" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L17-L20" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/keys_spec.rb#L13-L16" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/keys_spec.rb#L13-L16" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/keysTest.spec.js#L19-L22" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/keysTest.spec.js#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L19-L22" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L19-L22" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -71,22 +71,22 @@ Use the [Java Keys enum](https://github.com/SeleniumHQ/selenium/blob/selenium-4.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L30-L35" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L30-L35" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_keys.py#L21-L26" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_keys.py#L21-L26" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L30-L35" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L30-L35" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/keys_spec.rb#L25-L30" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/keys_spec.rb#L25-L30" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/keysTest.spec.js#L34-L39" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/keysTest.spec.js#L32-L37" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L32-L37" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L32-L37" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -101,22 +101,22 @@ Use the [Java Keys enum](https://github.com/SeleniumHQ/selenium/blob/selenium-4.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L45-L47" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L45-L47" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_keys.py#L34-L36" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_keys.py#L34-L36" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L45-L47" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L45-L47" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/keys_spec.rb#L39-L41" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/keys_spec.rb#L39-L41" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/keysTest.spec.js#L47-L48" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/keysTest.spec.js#L48-L50" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L47-L49" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L47-L49" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -124,23 +124,23 @@ Use the [Java Keys enum](https://github.com/SeleniumHQ/selenium/blob/selenium-4.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L59-L62" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L59-L62" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_keys.py#L45-L48" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_keys.py#L45-L48" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L58-L61" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L58-L61" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/keys_spec.rb#L51-L54" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/keys_spec.rb#L51-L54" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-version version="4.5.0" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/keysTest.spec.js#L61-L65" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/keysTest.spec.js#L59-L63" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L60-L63" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L60-L63" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -152,21 +152,21 @@ Use the [Java Keys enum](https://github.com/SeleniumHQ/selenium/blob/selenium-4.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L70-L84" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/KeysTest.java#L70-L84" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_keys.py#L56-L67" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_keys.py#L56-L67" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L72-L82" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/KeysTest.cs#L72-L82" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/keys_spec.rb#L64-L74" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/keys_spec.rb#L64-L74" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/keysTest.spec.js#L75-L87" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/keysTest.spec.js#L73-L85" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L74-L86" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/KeysTest.kt#L74-L86" >}}
 {{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/actions_api/mouse.en.md b/website_and_docs/content/documentation/webdriver/actions_api/mouse.en.md
index 5e9f5c33407d..18753781f685 100644
--- a/website_and_docs/content/documentation/webdriver/actions_api/mouse.en.md
+++ b/website_and_docs/content/documentation/webdriver/actions_api/mouse.en.md
@@ -25,7 +25,7 @@ This is useful for focusing a specific element:
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L22-L25" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L12-L15" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L14-L17" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L17-L20" >}}
@@ -34,10 +34,10 @@ This is useful for focusing a specific element:
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L11-L14" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/clickAndHold.spec.js#L16-L18" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/clickAndHold.spec.js#L14-L16" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L23-L26" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L23-L26" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -51,7 +51,7 @@ This is otherwise known as "clicking":
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L34-L37" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L24-L27" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L26-L29" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L30-L33" >}}
@@ -60,10 +60,10 @@ This is otherwise known as "clicking":
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L22-L25" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/clickAndRelease.spec.js#L16-L18" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/clickAndRelease.spec.js#L14-L16" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L35-L38" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L35-L38" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -86,7 +86,7 @@ This is otherwise known as "right-clicking":
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L46-L49" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L35-L38" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L37-L40" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L43-L46" >}}
@@ -95,10 +95,10 @@ This is otherwise known as "right-clicking":
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L34-L37" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/rightClick.spec.js#L17-L19" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/rightClick.spec.js#L15-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L47-L50" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L47-L50" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -112,7 +112,7 @@ There is no convenience method for this, it is just pressing and releasing mouse
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L49-L52" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L51-L54" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-version version="4.2" >}}
@@ -124,10 +124,10 @@ There is no convenience method for this, it is just pressing and releasing mouse
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-version version="4.5.0" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/backAndForwardClick.spec.js#L21-L22" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/backAndForwardClick.spec.js#L19-L20" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L61-L67" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L61-L67" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -141,7 +141,7 @@ There is no convenience method for this, it is just pressing and releasing mouse
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L63-L66" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L65-L68" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-version version="4.2" >}}
@@ -153,10 +153,10 @@ There is no convenience method for this, it is just pressing and releasing mouse
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-version version="4.5.0" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/backAndForwardClick.spec.js#L34-L35" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/backAndForwardClick.spec.js#L32-L33" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L79-L85" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L79-L85" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -169,7 +169,7 @@ This method combines moving to the center of an element with pressing and releas
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L93-L96" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L74-L77" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L76-L79" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L91-L94" >}}
@@ -178,10 +178,10 @@ This method combines moving to the center of an element with pressing and releas
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L73-L76" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/doubleClick.spec.js#L17-L19" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/doubleClick.spec.js#L15-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L94-L97" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L94-L97" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -196,7 +196,7 @@ Note that the element must be in the viewport or else the command will error.
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L105-L108" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L85-L88" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L87-L90" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L104-L107" >}}
@@ -205,10 +205,10 @@ Note that the element must be in the viewport or else the command will error.
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L84-L87" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveToElement.spec.js#L17-L19" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveToElement.spec.js#L15-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L106-L109" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L106-L109" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -228,7 +228,7 @@ then moves by the provided offset.
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L118-L121" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L96-L99" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L98-L101" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L132-L135" >}}
@@ -237,10 +237,10 @@ then moves by the provided offset.
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L97-L100" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js#L15-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L119-L122" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L119-L122" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -254,7 +254,7 @@ offset.
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L131-L136" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L108-L110" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L110-L112" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L146-L150" >}}
@@ -263,10 +263,10 @@ offset.
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L114-L116" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js#L29-L30" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js#L27-L28" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L132-L137" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L132-L137" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -286,7 +286,7 @@ the current mouse position.
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L153-L155" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L124-L126" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L126-L128" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L167-L169" >}}
@@ -295,10 +295,10 @@ the current mouse position.
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L128-L130" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js#L42" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js#L40" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L154-L156" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L154-L156" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -312,7 +312,7 @@ moves to the location of the target element and then releases the mouse.
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L166-L170" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L137-L141" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L139-L143" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L181-L185" >}}
@@ -321,10 +321,10 @@ moves to the location of the target element and then releases the mouse.
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L141-L145" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/dragAndDrop.spec.js#L29-L32" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/dragAndDrop.spec.js#L27-L30" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L167-L171" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L167-L171" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -337,7 +337,7 @@ This method firstly performs a click-and-hold on the source element, moves to th
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L179-L184" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L149-L154" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L151-L156" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L195-L200" >}}
@@ -346,9 +346,9 @@ This method firstly performs a click-and-hold on the source element, moves to th
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L153-L158" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/dragAndDrop.spec.js#L17-L21" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/dragAndDrop.spec.js#L15-L19" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L180-L185" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L180-L185" >}}
 {{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/actions_api/mouse.ja.md b/website_and_docs/content/documentation/webdriver/actions_api/mouse.ja.md
index c560084de5a2..6e04b0d58af8 100644
--- a/website_and_docs/content/documentation/webdriver/actions_api/mouse.ja.md
+++ b/website_and_docs/content/documentation/webdriver/actions_api/mouse.ja.md
@@ -25,7 +25,7 @@ This is useful for focusing a specific element:
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L22-L25" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L12-L15" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L14-L17" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L17-L20" >}}
@@ -34,10 +34,10 @@ This is useful for focusing a specific element:
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L11-L14" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/clickAndHold.spec.js#L16-L18" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/clickAndHold.spec.js#L14-L16" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L23-L26" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L23-L26" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -51,7 +51,7 @@ This is otherwise known as "clicking":
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L34-L37" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L24-L27" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L26-L29" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L30-L33" >}}
@@ -60,10 +60,10 @@ This is otherwise known as "clicking":
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L22-L25" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/clickAndRelease.spec.js#L16-L18" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/clickAndRelease.spec.js#L14-L16" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L35-L38" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L35-L38" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -86,7 +86,7 @@ This is otherwise known as "right-clicking":
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L46-L49" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L35-L38" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L37-L40" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L43-L46" >}}
@@ -95,10 +95,10 @@ This is otherwise known as "right-clicking":
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L34-L37" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/rightClick.spec.js#L17-L19" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/rightClick.spec.js#L15-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L47-L50" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L47-L50" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -112,7 +112,7 @@ There is no convenience method for this, it is just pressing and releasing mouse
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L49-L52" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L51-L54" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-version version="4.2" >}}
@@ -124,10 +124,10 @@ There is no convenience method for this, it is just pressing and releasing mouse
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-version version="4.5.0" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/backAndForwardClick.spec.js#L21-L22" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/backAndForwardClick.spec.js#L19-L20" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L61-L67" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L61-L67" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -141,7 +141,7 @@ There is no convenience method for this, it is just pressing and releasing mouse
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L63-L66" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L65-L68" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-version version="4.2" >}}
@@ -153,10 +153,10 @@ There is no convenience method for this, it is just pressing and releasing mouse
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-version version="4.5.0" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/backAndForwardClick.spec.js#L34-L35" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/backAndForwardClick.spec.js#L32-L33" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L79-L85" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L79-L85" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -169,7 +169,7 @@ This method combines moving to the center of an element with pressing and releas
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L93-L96" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L74-L77" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L76-L79" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L91-L94" >}}
@@ -178,10 +178,10 @@ This method combines moving to the center of an element with pressing and releas
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L73-L76" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/doubleClick.spec.js#L17-L19" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/doubleClick.spec.js#L15-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L94-L97" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L94-L97" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -196,7 +196,7 @@ Note that the element must be in the viewport or else the command will error.
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L105-L108" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L85-L88" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L87-L90" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L104-L107" >}}
@@ -205,10 +205,10 @@ Note that the element must be in the viewport or else the command will error.
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L84-L87" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveToElement.spec.js#L17-L19" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveToElement.spec.js#L15-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L106-L109" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L106-L109" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -228,7 +228,7 @@ then moves by the provided offset.
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L118-L121" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L96-L99" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L98-L101" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L132-L135" >}}
@@ -237,10 +237,10 @@ then moves by the provided offset.
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L97-L100" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js#L15-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L119-L122" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L119-L122" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -254,7 +254,7 @@ offset.
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L131-L136" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L108-L110" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L110-L112" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L146-L150" >}}
@@ -263,10 +263,10 @@ offset.
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L114-L116" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js#L29-L30" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js#L27-L28" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L132-L137" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L132-L137" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -286,7 +286,7 @@ the current mouse position.
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L153-L155" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L124-L126" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L126-L128" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L167-L169" >}}
@@ -295,10 +295,10 @@ the current mouse position.
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L128-L130" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js#L42" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js#L40" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L154-L156" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L154-L156" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -312,7 +312,7 @@ moves to the location of the target element and then releases the mouse.
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L166-L170" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L137-L141" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L139-L143" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L181-L185" >}}
@@ -321,10 +321,10 @@ moves to the location of the target element and then releases the mouse.
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L141-L145" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/dragAndDrop.spec.js#L29-L32" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/dragAndDrop.spec.js#L27-L30" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L167-L171" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L167-L171" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -337,7 +337,7 @@ This method firstly performs a click-and-hold on the source element, moves to th
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L179-L184" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L149-L154" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L151-L156" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L195-L200" >}}
@@ -346,9 +346,9 @@ This method firstly performs a click-and-hold on the source element, moves to th
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L153-L158" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/dragAndDrop.spec.js#L17-L21" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/dragAndDrop.spec.js#L15-L19" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L180-L185" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L180-L185" >}}
 {{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/actions_api/mouse.pt-br.md b/website_and_docs/content/documentation/webdriver/actions_api/mouse.pt-br.md
index 9259b152daae..8bae0d1cf3ea 100644
--- a/website_and_docs/content/documentation/webdriver/actions_api/mouse.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/actions_api/mouse.pt-br.md
@@ -22,7 +22,7 @@ Este método combina mover o mouse para o centro de um elemento com a pressão d
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L22-L25" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L12-L15" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L14-L17" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L17-L20" >}}
@@ -31,10 +31,10 @@ Este método combina mover o mouse para o centro de um elemento com a pressão d
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L11-L14" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/clickAndHold.spec.js#L16-L18" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/clickAndHold.spec.js#L14-L16" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L23-L26" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L23-L26" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -47,7 +47,7 @@ Este método combina mover o mouse para o centro de um elemento com a pressão e
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L34-L37" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L24-L27" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L26-L29" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L30-L33" >}}
@@ -56,10 +56,10 @@ Este método combina mover o mouse para o centro de um elemento com a pressão e
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L22-L25" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/clickAndRelease.spec.js#L16-L18" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/clickAndRelease.spec.js#L14-L16" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L35-L38" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L35-L38" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -72,7 +72,6 @@ Existem um total de 5 botões definidos para um mouse:
 - 3 — Botão X1 (Voltar)
 - 4 — Botão X2 (Avançar)
 
-
 ###  Context Click
 
 Este método combina mover o mouse para o centro de um elemento com a pressão e liberação do botão direito do mouse (botão 2). Isso é conhecido como "clicar com o botão direito" ou "menu de contexto"
@@ -83,7 +82,7 @@ Este método combina mover o mouse para o centro de um elemento com a pressão e
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L46-L49" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L35-L38" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L37-L40" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L43-L46" >}}
@@ -92,10 +91,10 @@ Este método combina mover o mouse para o centro de um elemento com a pressão e
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L34-L37" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/rightClick.spec.js#L17-L19" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/rightClick.spec.js#L15-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L47-L50" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L47-L50" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -109,7 +108,7 @@ Este termo pode se referir a um clique com o botão X1 (botão de voltar) do mou
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L49-L52" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L51-L54" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-version version="4.2" >}}
@@ -121,10 +120,10 @@ Este termo pode se referir a um clique com o botão X1 (botão de voltar) do mou
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-version version="4.5.0" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/backAndForwardClick.spec.js#L21-L22" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/backAndForwardClick.spec.js#L19-L20" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L61-L67" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L61-L67" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -138,7 +137,7 @@ Este termo se refere a um clique com o botão X2 (botão de avançar) do mouse.
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L63-L66" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L65-L68" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-version version="4.2" >}}
@@ -150,10 +149,10 @@ Este termo se refere a um clique com o botão X2 (botão de avançar) do mouse.
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-version version="4.5.0" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/backAndForwardClick.spec.js#L34-L35" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/backAndForwardClick.spec.js#L32-L33" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L79-L85" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L79-L85" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -166,7 +165,7 @@ Este método combina mover o mouse para o centro de um elemento com a pressão e
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L93-L96" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L74-L77" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L76-L79" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L91-L94" >}}
@@ -175,10 +174,10 @@ Este método combina mover o mouse para o centro de um elemento com a pressão e
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L73-L76" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/doubleClick.spec.js#L17-L19" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/doubleClick.spec.js#L15-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L94-L97" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L94-L97" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -191,7 +190,7 @@ Este método move o mouse para o ponto central do elemento que está visível na
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L105-L108" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L85-L88" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L87-L90" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L104-L107" >}}
@@ -200,10 +199,10 @@ Este método move o mouse para o ponto central do elemento que está visível na
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L84-L87" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveToElement.spec.js#L17-L19" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveToElement.spec.js#L15-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L106-L109" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L106-L109" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -220,7 +219,7 @@ Este método move o mouse para o ponto central do elemento visível na tela e, e
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L118-L121" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L96-L99" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L98-L101" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L132-L135" >}}
@@ -229,10 +228,10 @@ Este método move o mouse para o ponto central do elemento visível na tela e, e
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L97-L100" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js#L15-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L119-L122" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L119-L122" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -245,7 +244,7 @@ Este método move o mouse a partir do canto superior esquerdo da janela de visua
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L131-L136" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L108-L110" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L110-L112" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L146-L150" >}}
@@ -254,10 +253,10 @@ Este método move o mouse a partir do canto superior esquerdo da janela de visua
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L114-L116" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js#L29-L30" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js#L27-L28" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L132-L137" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L132-L137" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -271,7 +270,7 @@ Observe que o primeiro argumento, X, especifica o movimento para a direita quand
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L153-L155" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L124-L126" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L126-L128" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L167-L169" >}}
@@ -280,10 +279,10 @@ Observe que o primeiro argumento, X, especifica o movimento para a direita quand
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L128-L130" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js#L42" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js#L40" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L154-L156" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L154-L156" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -296,7 +295,7 @@ Este método primeiro realiza um clique e mantém pressionado no elemento de ori
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L166-L170" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L137-L141" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L139-L143" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L181-L185" >}}
@@ -305,10 +304,10 @@ Este método primeiro realiza um clique e mantém pressionado no elemento de ori
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L141-L145" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/dragAndDrop.spec.js#L29-L32" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/dragAndDrop.spec.js#L27-L30" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L167-L171" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L167-L171" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -321,7 +320,7 @@ Este método primeiro realiza um clique e mantém pressionado no elemento de ori
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L179-L184" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L149-L154" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L151-L156" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L195-L200" >}}
@@ -330,9 +329,9 @@ Este método primeiro realiza um clique e mantém pressionado no elemento de ori
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L153-L158" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/dragAndDrop.spec.js#L17-L21" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/dragAndDrop.spec.js#L15-L19" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L180-L185" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L180-L185" >}}
 {{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/actions_api/mouse.zh-cn.md b/website_and_docs/content/documentation/webdriver/actions_api/mouse.zh-cn.md
index fe0d58dc58c7..ce77a1349a26 100644
--- a/website_and_docs/content/documentation/webdriver/actions_api/mouse.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/actions_api/mouse.zh-cn.md
@@ -1,31 +1,31 @@
 ---
-title: "Mouse actions"
-linkTitle: "Mouse"
+title: "鼠标操作"
+linkTitle: "鼠标"
 weight: 4
-needsTranslation: true
 description: >
-  A representation of any pointer device for interacting with a web page.
+  任何用于与网页进行交互的指针设备的表示形式.
 aliases: [
 "/documentation/zh-cn/support_packages/mouse_and_keyboard_actions_in_detail/",
 "/zh-cn/documentation/support_packages/mouse_and_keyboard_actions_in_detail/"
 ]
 ---
 
-There are only 3 actions that can be accomplished with a mouse:
-pressing down on a button, releasing a pressed button, and moving the mouse.
-Selenium provides convenience methods that combine these actions in the most common ways.
+一个鼠标仅可以完成3个操作：
+按住按钮，松开按钮，还有移动光标。
+Selenium组合了常见的操作并提供了方便的方法。
 
-## Click and hold
 
-This method combines moving the mouse to the center of an element with pressing the left mouse button.
-This is useful for focusing a specific element:
+## 按住鼠标左键
+
+这个方法包含2个操作，首先将光标移动到被操作元素的正中心，然后按下鼠标左键不松开。
+这对于聚焦一个特殊元素很有用：
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L22-L25" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L12-L15" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L14-L17" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L17-L20" >}}
@@ -34,24 +34,24 @@ This is useful for focusing a specific element:
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L11-L14" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/clickAndHold.spec.js#L16-L18" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/clickAndHold.spec.js#L14-L16" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L23-L26" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L23-L26" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Click and release
+## 点击鼠标左键
 
-This method combines moving to the center of an element with pressing and releasing the left mouse button.
-This is otherwise known as "clicking":
+这个方法包含2个操作，首先将光标移动到被操作元素的正中心，然后按下鼠标左键后再松开。
+另一种叫法“点击”：
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L34-L37" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L24-L27" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L26-L29" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L30-L33" >}}
@@ -60,33 +60,33 @@ This is otherwise known as "clicking":
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L22-L25" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/clickAndRelease.spec.js#L16-L18" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/clickAndRelease.spec.js#L14-L16" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L35-L38" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L35-L38" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Alternate Button Clicks
+## 点击鼠标备用按钮
 
-There are a total of 5 defined buttons for a Mouse:
-* 0 — Left Button (the default)
-* 1 — Middle Button (currently unsupported)
-* 2 — Right Button
-* 3 — X1 (Back) Button
-* 4 — X2 (Forward) Button
+鼠标一共有5个定义好的按钮:
+* 0 — 左键 (默认值)
+* 1 — 中间键 (当前不支持)
+* 2 — 右键
+* 3 — X1 (返回) 按钮
+* 4 — X2 (前进) 按钮
 
-### Context Click
+### 点击鼠标右键
 
-This method combines moving to the center of an element with pressing and releasing the right mouse button (button 2).
-This is otherwise known as "right-clicking":
+这个方法包含2个操作，首先将光标移动到被操作元素的正中心，然后点击鼠标右键。
+另一种叫法“点击右键”：
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L46-L49" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L35-L38" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L37-L40" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L43-L46" >}}
@@ -95,16 +95,16 @@ This is otherwise known as "right-clicking":
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L34-L37" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/rightClick.spec.js#L17-L19" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/rightClick.spec.js#L15-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L47-L50" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L47-L50" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Back Click
+### 点击鼠标回退键
 
-There is no convenience method for this, it is just pressing and releasing mouse button 3
+除了这个没有更方便的方法，只是点击鼠标回退按钮
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
@@ -112,7 +112,7 @@ There is no convenience method for this, it is just pressing and releasing mouse
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L49-L52" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L51-L54" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-version version="4.2" >}}
@@ -124,16 +124,16 @@ There is no convenience method for this, it is just pressing and releasing mouse
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-version version="4.5.0" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/backAndForwardClick.spec.js#L21-L22" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/backAndForwardClick.spec.js#L19-L20" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L61-L67" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L61-L67" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Forward Click
+### 点击鼠标前进键
 
-There is no convenience method for this, it is just pressing and releasing mouse button 4
+除了这个没有更方便的方法，只是点击鼠标前进按钮
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
@@ -141,7 +141,7 @@ There is no convenience method for this, it is just pressing and releasing mouse
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L63-L66" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L65-L68" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-version version="4.2" >}}
@@ -153,23 +153,23 @@ There is no convenience method for this, it is just pressing and releasing mouse
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-version version="4.5.0" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/backAndForwardClick.spec.js#L34-L35" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/backAndForwardClick.spec.js#L32-L33" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L79-L85" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L79-L85" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Double click
+## 双击鼠标左键
 
-This method combines moving to the center of an element with pressing and releasing the left mouse button twice.
+这个方法包含2个操作，首先将光标移动到被操作元素的正中心，然后双击鼠标左键。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L93-L96" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L74-L77" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L76-L79" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L91-L94" >}}
@@ -178,25 +178,25 @@ This method combines moving to the center of an element with pressing and releas
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L73-L76" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/doubleClick.spec.js#L17-L19" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/doubleClick.spec.js#L15-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L94-L97" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L94-L97" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Move to element
+## 移动光标到元素上
 
-This method moves the mouse to the in-view center point of the element. 
-This is otherwise known as "hovering."
-Note that the element must be in the viewport or else the command will error.
+这个方法是将光标移动到元素的中心点。
+另一种叫法“悬停”。
+元素必须在可视窗口范围内否则这条命令将会报错。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L105-L108" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L85-L88" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L87-L90" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L104-L107" >}}
@@ -205,30 +205,28 @@ Note that the element must be in the viewport or else the command will error.
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L84-L87" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveToElement.spec.js#L17-L19" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveToElement.spec.js#L15-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L106-L109" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L106-L109" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Move by offset
+## 通过偏移量移动动光标
 
-These methods first move the mouse to the designated origin and then
-by the number of pixels in the provided offset.
-Note that the position of the mouse must be in the viewport or else the command will error.
+这些方法让光标先移动到指定的坐标原点，然后通过单位为px的偏移量进行光标相对原点的偏移移动。
+注意光标位置必须在可视窗口区域否则会报错。
 
-### Offset from Element
+### 从元素中心点（原点）偏移
 
-This method moves the mouse to the in-view center point of the element,
-then moves by the provided offset.
+这个方法是指先将光标移动到元素中心点（原点），然后通过偏移量进行光标相对原点的偏移。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L118-L121" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L96-L99" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L98-L101" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L132-L135" >}}
@@ -237,24 +235,23 @@ then moves by the provided offset.
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L97-L100" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js#L15-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L119-L122" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L119-L122" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Offset from Viewport
+### 从视窗左上角（原点）偏移
 
-This method moves the mouse from the upper left corner of the current viewport by the provided
-offset.
+这个方法是指先将光标移动到视窗左上角（原点），然后通过偏移量进行光标相对原点的偏移。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L131-L136" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L108-L110" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L110-L112" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L146-L150" >}}
@@ -263,30 +260,27 @@ offset.
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L114-L116" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js#L29-L30" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js#L27-L28" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L132-L137" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L132-L137" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Offset from Current Pointer Location
+### 从当前光标位置（原点）偏移
 
-This method moves the mouse from its current position by the offset provided by the user.
-If the mouse has not previously been moved, the position will be in the upper left
-corner of the viewport.
-Note that the pointer position does not change when the page is scrolled.
+这个方法是指光标位于当前位置（原点），然后通过偏移量进行光标相对原点的偏移。
+如果之前没有移动过光标位置，则这个位置是视窗左上角（原点）。
+注意当页面发生滚动后光标位置不会发生变化。
 
-Note that the first argument X specifies to move right when positive, while the second argument
-Y specifies to move down when positive. So `moveByOffset(30, -10)` moves right 30 and up 10 from
-the current mouse position.
+注意第一个参数指定为正数时向右移动，第二个参数指定为正数时向下移动。所以 `moveByOffset(30, -10)` 是指从当前光标位置向右移动30个像素位置和向上移动10个像素位置。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L153-L155" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L124-L126" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L126-L128" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L167-L169" >}}
@@ -295,24 +289,23 @@ the current mouse position.
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L128-L130" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js#L42" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js#L40" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L154-L156" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L154-L156" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Drag and Drop on Element
+## 拖放元素
 
-This method firstly performs a click-and-hold on the source element, 
-moves to the location of the target element and then releases the mouse.
+这个方法首先在原元素上提交执行按下鼠标左键，移动到目标元素位置后是释放鼠标左键。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L166-L170" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L137-L141" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L139-L143" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L181-L185" >}}
@@ -321,23 +314,22 @@ moves to the location of the target element and then releases the mouse.
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L141-L145" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/dragAndDrop.spec.js#L29-L32" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/dragAndDrop.spec.js#L27-L30" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L167-L171" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L167-L171" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Drag and Drop by Offset
-
-This method firstly performs a click-and-hold on the source element, moves to the given offset and then releases the mouse.
+## 通过偏移量拖放元素
+这个方法首先在原元素上提交执行按下鼠标左键，通过给出的偏移量移动元素后释放鼠标左键。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java#L179-L184" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L149-L154" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_mouse.py#L151-L156" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs#L195-L200" >}}
@@ -346,9 +338,9 @@ This method firstly performs a click-and-hold on the source element, moves to th
 {{< gh-codeblock path="/examples/ruby/spec/actions_api/mouse_spec.rb#L153-L158" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/dragAndDrop.spec.js#L17-L21" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/mouse/dragAndDrop.spec.js#L15-L19" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L180-L185" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt#L180-L185" >}}
 {{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/actions_api/pen.en.md b/website_and_docs/content/documentation/webdriver/actions_api/pen.en.md
index b979c7b6f541..29bc6f2a5b61 100644
--- a/website_and_docs/content/documentation/webdriver/actions_api/pen.en.md
+++ b/website_and_docs/content/documentation/webdriver/actions_api/pen.en.md
@@ -21,24 +21,24 @@ has 5 buttons, a pen has 3 equivalent button states:
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/PenTest.java#L26-L33" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/PenTest.java#L26-L33" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_pen.py#L12-L20" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_pen.py#L12-L20" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/PenTest.cs#L19-L28" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/PenTest.cs#L19-L28" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/pen_spec.rb#L11-L17" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/pen_spec.rb#L11-L17" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/PenTest.kt#L23-L30" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/PenTest.kt#L23-L30" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -48,22 +48,22 @@ has 5 buttons, a pen has 3 equivalent button states:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/PenTest.java#L67-L81" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/PenTest.java#L67-L81" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_pen.py#L53-L61" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_pen.py#L53-L61" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/PenTest.cs#L64-L77" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/PenTest.cs#L64-L77" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/pen_spec.rb#L50-L56" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/pen_spec.rb#L50-L56" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/PenTest.kt#L64-L78" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/PenTest.kt#L64-L78" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
diff --git a/website_and_docs/content/documentation/webdriver/actions_api/pen.ja.md b/website_and_docs/content/documentation/webdriver/actions_api/pen.ja.md
index b979c7b6f541..29bc6f2a5b61 100644
--- a/website_and_docs/content/documentation/webdriver/actions_api/pen.ja.md
+++ b/website_and_docs/content/documentation/webdriver/actions_api/pen.ja.md
@@ -21,24 +21,24 @@ has 5 buttons, a pen has 3 equivalent button states:
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/PenTest.java#L26-L33" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/PenTest.java#L26-L33" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_pen.py#L12-L20" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_pen.py#L12-L20" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/PenTest.cs#L19-L28" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/PenTest.cs#L19-L28" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/pen_spec.rb#L11-L17" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/pen_spec.rb#L11-L17" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/PenTest.kt#L23-L30" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/PenTest.kt#L23-L30" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -48,22 +48,22 @@ has 5 buttons, a pen has 3 equivalent button states:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/PenTest.java#L67-L81" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/PenTest.java#L67-L81" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_pen.py#L53-L61" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_pen.py#L53-L61" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/PenTest.cs#L64-L77" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/PenTest.cs#L64-L77" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/pen_spec.rb#L50-L56" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/pen_spec.rb#L50-L56" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/PenTest.kt#L64-L78" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/PenTest.kt#L64-L78" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
diff --git a/website_and_docs/content/documentation/webdriver/actions_api/pen.pt-br.md b/website_and_docs/content/documentation/webdriver/actions_api/pen.pt-br.md
index d112c2c30cc1..ca619091bcb6 100644
--- a/website_and_docs/content/documentation/webdriver/actions_api/pen.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/actions_api/pen.pt-br.md
@@ -19,24 +19,24 @@ Uma caneta é um tipo de entrada de ponteiro que possui a maior parte do mesmo c
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/PenTest.java#L26-L33" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/PenTest.java#L26-L33" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_pen.py#L12-L20" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_pen.py#L12-L20" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/PenTest.cs#L19-L28" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/PenTest.cs#L19-L28" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/pen_spec.rb#L11-L17" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/pen_spec.rb#L11-L17" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/PenTest.kt#L23-L30" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/PenTest.kt#L23-L30" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -46,22 +46,22 @@ Uma caneta é um tipo de entrada de ponteiro que possui a maior parte do mesmo c
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/PenTest.java#L67-L81" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/PenTest.java#L67-L81" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_pen.py#L53-L61" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_pen.py#L53-L61" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/PenTest.cs#L64-L77" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/PenTest.cs#L64-L77" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/pen_spec.rb#L50-L56" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/pen_spec.rb#L50-L56" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/PenTest.kt#L64-L78" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/PenTest.kt#L64-L78" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
diff --git a/website_and_docs/content/documentation/webdriver/actions_api/pen.zh-cn.md b/website_and_docs/content/documentation/webdriver/actions_api/pen.zh-cn.md
index b979c7b6f541..5cf7a9a2637a 100644
--- a/website_and_docs/content/documentation/webdriver/actions_api/pen.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/actions_api/pen.zh-cn.md
@@ -1,69 +1,69 @@
 ---
-title: "Pen actions"
-linkTitle: "Pen"
+title: "触控笔操作"
+linkTitle: "触控笔"
 weight: 5
 description: >
-  A representation of a pen stylus kind of pointer input for interacting with a web page.
+  一种用于与网页交互的类似笔尖的指针输入设备的表示.
 ---
 
 {{< badge-browser browser=Chromium wpt="perform_actions/pointer.py" >}}
 
-A Pen is a type of pointer input that has most of the same behavior as a mouse, but can
-also have event properties unique to a stylus. Additionally, while a mouse
-has 5 buttons, a pen has 3 equivalent button states:
+触控笔是一种指针输入设备，其行为大多与鼠标相同，
+但也可以具有触控笔特有的事件属性。
+此外，鼠标有 5 个按钮，而触控笔有 3 种等效的按钮状态:
 
-* 0 — Touch Contact (the default; equivalent to a left click)
-* 2 — Barrel Button (equivalent to a right click)
-* 5 — Eraser Button (currently unsupported by drivers)
+* 0 - 触摸接触（默认设置；相当于左键单击）
+* 2 - 桶形按钮/侧键（相当于右键点击）
+* 5 - 橡皮擦按钮（当前驱动程序不支持）
 
-## Using a Pen
+## 使用触控笔
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/PenTest.java#L26-L33" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/PenTest.java#L26-L33" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_pen.py#L12-L20" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_pen.py#L12-L20" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/PenTest.cs#L19-L28" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/PenTest.cs#L19-L28" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.2" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/pen_spec.rb#L11-L17" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/pen_spec.rb#L11-L17" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/PenTest.kt#L23-L30" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/PenTest.kt#L23-L30" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Adding Pointer Event Attributes
+## 添加指针事件属性
 
 {{< badge-version version="4.2" >}}
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/PenTest.java#L67-L81" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/PenTest.java#L67-L81" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_pen.py#L53-L61" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_pen.py#L53-L61" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/PenTest.cs#L64-L77" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/PenTest.cs#L64-L77" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/pen_spec.rb#L50-L56" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/pen_spec.rb#L50-L56" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/PenTest.kt#L64-L78" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/PenTest.kt#L64-L78" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
diff --git a/website_and_docs/content/documentation/webdriver/actions_api/wheel.en.md b/website_and_docs/content/documentation/webdriver/actions_api/wheel.en.md
index 8cb6e6f78986..512b17cb9dac 100644
--- a/website_and_docs/content/documentation/webdriver/actions_api/wheel.en.md
+++ b/website_and_docs/content/documentation/webdriver/actions_api/wheel.en.md
@@ -24,22 +24,22 @@ the viewport will be scrolled so the bottom of the element is at the bottom of t
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L17-L20" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_wheel.py#L11-L14" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_wheel.py#L11-L14" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L17-L20" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/wheel_spec.rb#L11-L14" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/wheel_spec.rb#L11-L14" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/wheelTest.spec.js#L18-L22" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/wheelTest.spec.js#L16-L19" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L18-L21" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L18-L21" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -50,22 +50,22 @@ in the right and down directions. Negative values represent left and up, respect
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L29-L33" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L29-L33" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_wheel.py#L22-L26" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_wheel.py#L22-L26" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L31-L35" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L31-L35" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/wheel_spec.rb#L22-L26" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/wheel_spec.rb#L22-L26" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/wheelTest.spec.js#L30-L35" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/wheelTest.spec.js#L26-L31" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L30-L34" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L30-L34" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -83,22 +83,22 @@ delta x and delta y values.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L42-L46" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L42-L46" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_wheel.py#L35-L39" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_wheel.py#L35-L39" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L46-L53" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L46-L53" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/wheel_spec.rb#L34-L38" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/wheel_spec.rb#L34-L38" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/wheelTest.spec.js#L45-L49" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/wheelTest.spec.js#L40-L44" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L43-L47" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L43-L47" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -122,22 +122,22 @@ it will result in an exception.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L57-L61" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L57-L61" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_wheel.py#L50-L54" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_wheel.py#L50-L54" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L66-L75" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L66-L75" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/wheel_spec.rb#L48-L52" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/wheel_spec.rb#L48-L52" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/wheelTest.spec.js#L62-L66" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/wheelTest.spec.js#L57-L61" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L59-L63" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L59-L63" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -156,21 +156,21 @@ it will result in an exception.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L73-L76" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L73-L76" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_wheel.py#L66-L70" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_wheel.py#L66-L70" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L89-L97" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L89-L97" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/wheel_spec.rb#L63-L66" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/wheel_spec.rb#L63-L66" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/wheelTest.spec.js#L80-L82" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/wheelTest.spec.js#L75-L77" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L75-L78" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L75-L78" >}}
 {{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/actions_api/wheel.ja.md b/website_and_docs/content/documentation/webdriver/actions_api/wheel.ja.md
index 8cb6e6f78986..512b17cb9dac 100644
--- a/website_and_docs/content/documentation/webdriver/actions_api/wheel.ja.md
+++ b/website_and_docs/content/documentation/webdriver/actions_api/wheel.ja.md
@@ -24,22 +24,22 @@ the viewport will be scrolled so the bottom of the element is at the bottom of t
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L17-L20" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_wheel.py#L11-L14" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_wheel.py#L11-L14" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L17-L20" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/wheel_spec.rb#L11-L14" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/wheel_spec.rb#L11-L14" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/wheelTest.spec.js#L18-L22" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/wheelTest.spec.js#L16-L19" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L18-L21" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L18-L21" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -50,22 +50,22 @@ in the right and down directions. Negative values represent left and up, respect
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L29-L33" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L29-L33" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_wheel.py#L22-L26" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_wheel.py#L22-L26" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L31-L35" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L31-L35" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/wheel_spec.rb#L22-L26" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/wheel_spec.rb#L22-L26" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/wheelTest.spec.js#L30-L35" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/wheelTest.spec.js#L26-L31" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L30-L34" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L30-L34" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -83,22 +83,22 @@ delta x and delta y values.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L42-L46" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L42-L46" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_wheel.py#L35-L39" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_wheel.py#L35-L39" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L46-L53" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L46-L53" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/wheel_spec.rb#L34-L38" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/wheel_spec.rb#L34-L38" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/wheelTest.spec.js#L45-L49" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/wheelTest.spec.js#L40-L44" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L43-L47" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L43-L47" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -122,22 +122,22 @@ it will result in an exception.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L57-L61" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L57-L61" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_wheel.py#L50-L54" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_wheel.py#L50-L54" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L66-L75" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L66-L75" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/wheel_spec.rb#L48-L52" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/wheel_spec.rb#L48-L52" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/wheelTest.spec.js#L62-L66" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/wheelTest.spec.js#L57-L61" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L59-L63" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L59-L63" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -156,21 +156,21 @@ it will result in an exception.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L73-L76" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L73-L76" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_wheel.py#L66-L70" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_wheel.py#L66-L70" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L89-L97" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L89-L97" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/wheel_spec.rb#L63-L66" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/wheel_spec.rb#L63-L66" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/wheelTest.spec.js#L80-L82" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/wheelTest.spec.js#L75-L77" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L75-L78" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L75-L78" >}}
 {{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/actions_api/wheel.pt-br.md b/website_and_docs/content/documentation/webdriver/actions_api/wheel.pt-br.md
index 134ac01f73f6..914942b58b03 100644
--- a/website_and_docs/content/documentation/webdriver/actions_api/wheel.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/actions_api/wheel.pt-br.md
@@ -21,22 +21,22 @@ Independentemente de o elemento estar acima ou abaixo da tela de visualização
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L17-L20" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_wheel.py#L11-L14" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_wheel.py#L11-L14" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L17-L20" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/wheel_spec.rb#L11-L14" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/wheel_spec.rb#L11-L14" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/wheelTest.spec.js#L18-L22" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/wheelTest.spec.js#L16-L19" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L18-L21" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L18-L21" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -46,22 +46,22 @@ Este é o segundo cenário mais comum para a rolagem. Passe um valor delta x e u
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L29-L33" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L29-L33" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_wheel.py#L22-L26" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_wheel.py#L22-L26" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L31-L35" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L31-L35" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/wheel_spec.rb#L22-L26" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/wheel_spec.rb#L22-L26" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/wheelTest.spec.js#L30-L35" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/wheelTest.spec.js#L26-L31" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L30-L34" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L30-L34" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -75,22 +75,22 @@ Se o elemento estiver fora da janela de visualização, ele será rolado para a
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L42-L46" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L42-L46" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_wheel.py#L35-L39" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_wheel.py#L35-L39" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L46-L53" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L46-L53" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/wheel_spec.rb#L34-L38" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/wheel_spec.rb#L34-L38" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/wheelTest.spec.js#L45-L49" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/wheelTest.spec.js#L40-L44" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L43-L47" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L43-L47" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -106,22 +106,22 @@ Observe que se o deslocamento a partir do centro do elemento estiver fora da jan
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L57-L61" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L57-L61" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_wheel.py#L50-L54" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_wheel.py#L50-L54" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L66-L75" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L66-L75" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/wheel_spec.rb#L48-L52" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/wheel_spec.rb#L48-L52" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/wheelTest.spec.js#L62-L66" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/wheelTest.spec.js#L57-L61" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L59-L63" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L59-L63" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -135,21 +135,21 @@ Observe que se o deslocamento a partir do canto superior esquerdo da janela de v
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L73-L76" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L73-L76" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_wheel.py#L66-L70" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_wheel.py#L66-L70" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L89-L97" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L89-L97" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/wheel_spec.rb#L63-L66" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/wheel_spec.rb#L63-L66" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/wheelTest.spec.js#L80-L82" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/wheelTest.spec.js#L75-L77" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L75-L78" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L75-L78" >}}
 {{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/actions_api/wheel.zh-cn.md b/website_and_docs/content/documentation/webdriver/actions_api/wheel.zh-cn.md
index 8cb6e6f78986..9e1e994002ad 100644
--- a/website_and_docs/content/documentation/webdriver/actions_api/wheel.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/actions_api/wheel.zh-cn.md
@@ -24,22 +24,22 @@ the viewport will be scrolled so the bottom of the element is at the bottom of t
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L17-L20" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_wheel.py#L11-L14" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_wheel.py#L11-L14" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L17-L20" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/wheel_spec.rb#L11-L14" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/wheel_spec.rb#L11-L14" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/wheelTest.spec.js#L18-L22" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/wheelTest.spec.js#L16-L19" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L18-L21" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L18-L21" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -50,22 +50,22 @@ in the right and down directions. Negative values represent left and up, respect
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L29-L33" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L29-L33" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_wheel.py#L22-L26" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_wheel.py#L22-L26" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L31-L35" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L31-L35" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/wheel_spec.rb#L22-L26" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/wheel_spec.rb#L22-L26" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/wheelTest.spec.js#L30-L35" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/wheelTest.spec.js#L26-L31" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L30-L34" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L30-L34" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -83,22 +83,22 @@ delta x and delta y values.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L42-L46" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L42-L46" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_wheel.py#L35-L39" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_wheel.py#L35-L39" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L46-L53" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L46-L53" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/wheel_spec.rb#L34-L38" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/wheel_spec.rb#L34-L38" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/wheelTest.spec.js#L45-L49" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/wheelTest.spec.js#L40-L44" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L43-L47" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L43-L47" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -122,22 +122,22 @@ it will result in an exception.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L57-L61" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L57-L61" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_wheel.py#L50-L54" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_wheel.py#L50-L54" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L66-L75" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L66-L75" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/wheel_spec.rb#L48-L52" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/wheel_spec.rb#L57-L61" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/wheelTest.spec.js#L62-L66" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/wheelTest.spec.js#L62-L66" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L59-L63" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L59-L63" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -156,21 +156,21 @@ it will result in an exception.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L73-L76" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/actions_api/WheelTest.java#L73-L76" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/actions_api/test_wheel.py#L66-L70" >}}
+{{< gh-codeblock path="/examples/python/tests/actions_api/test_wheel.py#L66-L70" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L89-L97" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/ActionsAPI/WheelTest.cs#L89-L97" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/actions_api/wheel_spec.rb#L63-L66" >}}
+{{< gh-codeblock path="/examples/ruby/spec/actions_api/wheel_spec.rb#L63-L66" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/actionsApi/wheelTest.spec.js#L80-L82" >}}
+{{< gh-codeblock path="/examples/javascript/test/actionsApi/wheelTest.spec.js#L75-L77" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L75-L78" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/actions_api/WheelTest.kt#L75-L78" >}}
 {{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/_index.en.md b/website_and_docs/content/documentation/webdriver/bidi/_index.en.md
new file mode 100644
index 000000000000..79eab30df335
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/_index.en.md
@@ -0,0 +1,67 @@
+---
+title: "BiDirectional functionality"
+linkTitle: "BiDi"
+weight: 16
+aliases: [
+"/documentation/en/webdriver/bidi_apis/",
+"/documentation/webdriver/bidi_apis/",
+"/documentation/webdriver/bidirectional/bidi_api_remotewebdriver",
+"/documentation/webdriver/bidirectional/webdriver_bidi",
+"/documentation/webdriver/bidirectional/webdriver_bidi/browsing_context",
+"/documentation/webdriver/bidirectional/webdriver_bidi/input"
+]
+---
+
+BiDirectional means that communication is happening in two directions simultaneously.
+The traditional WebDriver model involves strict request/response commands which only allows for communication to
+happen in one direction at any given time. In most cases this is what you want; it ensures that the browser is
+doing the expected things in the right order, but there are a number of interesting things that can be done with 
+asynchronous interactions.
+
+This functionality is currently available in a limited fashion with the [Chrome DevTools Protocol] (CDP), 
+but to address some of its drawbacks, the Selenium team, along with the major
+browser vendors, have worked to create the new [WebDriver BiDi Protocol](https://w3c.github.io/webdriver-bidi/).
+This specification aims to create a stable, cross-browser API that leverages bidirectional
+communication for enhanced browser automation and testing functionality, 
+including streaming events from the user agent to the controlling software via WebSockets.
+Users will be able to listen for and record or manipulate events as they happen during the course of a Selenium session.
+
+### Enabling BiDi in Selenium
+
+In order to use WebDriver BiDi, setting the capability in the browser options will enable the required functionality:
+
+{{< tabpane langEqualsHeader=true >}}
+{{< tab header="Java" >}}
+options.setCapability("webSocketUrl", true);
+{{< /tab >}}
+{{< tab header="Python" >}}
+options.enable_bidi = True
+{{% /tab %}}
+{{< tab header="CSharp" >}}
+UseWebSocketUrl = true,
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+options.web_socket_url = true
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+Options().enableBidi();
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+options.setCapability("webSocketUrl", true);
+{{< /tab >}}
+{{< /tabpane >}}
+
+This enables the WebSocket connection for bidirectional communication, 
+unlocking the full potential of the WebDriver BiDi protocol.
+
+Note that Selenium is updating its entire implementation from WebDriver Classic to WebDriver BiDi (while
+maintaining backwards compatibility as much as possible), but this section of documentation focuses on the new
+functionality that bidirectional communication allows. 
+The low-level BiDi domains will be accessible in the code to the end user, but the goal is to provide
+high-level APIs that are straightforward methods of real-world use cases. As such, the low-level
+components will not be documented, and this section will focus only on the user-friendly
+features that we encourage users to take advantage of.
+
+If there is additional functionality you'd like to see, please raise a
+[feature request](https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=&template=feature.md).
+
diff --git a/website_and_docs/content/documentation/webdriver/bidi/_index.ja.md b/website_and_docs/content/documentation/webdriver/bidi/_index.ja.md
new file mode 100644
index 000000000000..739fa0bdaa8b
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/_index.ja.md
@@ -0,0 +1,67 @@
+---
+title: "双方向機能"
+linkTitle: "BiDi"
+weight: 16
+aliases: [
+"/documentation/en/webdriver/bidi_apis/",
+"/documentation/webdriver/bidi_apis/",
+"/documentation/webdriver/bidirectional/bidi_api_remotewebdriver",
+"/documentation/webdriver/bidirectional/webdriver_bidi",
+"/documentation/webdriver/bidirectional/webdriver_bidi/browsing_context",
+"/documentation/webdriver/bidirectional/webdriver_bidi/input"
+]
+---
+
+BiDirectional means that communication is happening in two directions simultaneously.
+The traditional WebDriver model involves strict request/response commands which only allows for communication to
+happen in one direction at any given time. In most cases this is what you want; it ensures that the browser is
+doing the expected things in the right order, but there are a number of interesting things that can be done with 
+asynchronous interactions.
+
+This functionality is currently available in a limited fashion with the [Chrome DevTools Protocol] (CDP), 
+but to address some of its drawbacks, the Selenium team, along with the major
+browser vendors, have worked to create the new [WebDriver BiDi Protocol](https://w3c.github.io/webdriver-bidi/).
+This specification aims to create a stable, cross-browser API that leverages bidirectional
+communication for enhanced browser automation and testing functionality, 
+including streaming events from the user agent to the controlling software via WebSockets.
+Users will be able to listen for and record or manipulate events as they happen during the course of a Selenium session.
+
+### Enabling BiDi in Selenium
+
+In order to use WebDriver BiDi, setting the capability in the browser options will enable the required functionality:
+
+{{< tabpane langEqualsHeader=true >}}
+{{< tab header="Java" >}}
+options.setCapability("webSocketUrl", true);
+{{< /tab >}}
+{{< tab header="Python" >}}
+options.enable_bidi = True
+{{% /tab %}}
+{{< tab header="CSharp" >}}
+UseWebSocketUrl = true,
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+options.web_socket_url = true
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+Options().enableBidi();
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+options.setCapability("webSocketUrl", true);
+{{< /tab >}}
+{{< /tabpane >}}
+
+This enables the WebSocket connection for bidirectional communication, 
+unlocking the full potential of the WebDriver BiDi protocol.
+
+Note that Selenium is updating its entire implementation from WebDriver Classic to WebDriver BiDi (while
+maintaining backwards compatibility as much as possible), but this section of documentation focuses on the new
+functionality that bidirectional communication allows. 
+The low-level BiDi domains will be accessible in the code to the end user, but the goal is to provide
+high-level APIs that are straightforward methods of real-world use cases. As such, the low-level
+components will not be documented, and this section will focus only on the user-friendly
+features that we encourage users to take advantage of.
+
+If there is additional functionality you'd like to see, please raise a
+[feature request](https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=&template=feature.md).
+
diff --git a/website_and_docs/content/documentation/webdriver/bidi/_index.pt-br.md b/website_and_docs/content/documentation/webdriver/bidi/_index.pt-br.md
new file mode 100644
index 000000000000..79eab30df335
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/_index.pt-br.md
@@ -0,0 +1,67 @@
+---
+title: "BiDirectional functionality"
+linkTitle: "BiDi"
+weight: 16
+aliases: [
+"/documentation/en/webdriver/bidi_apis/",
+"/documentation/webdriver/bidi_apis/",
+"/documentation/webdriver/bidirectional/bidi_api_remotewebdriver",
+"/documentation/webdriver/bidirectional/webdriver_bidi",
+"/documentation/webdriver/bidirectional/webdriver_bidi/browsing_context",
+"/documentation/webdriver/bidirectional/webdriver_bidi/input"
+]
+---
+
+BiDirectional means that communication is happening in two directions simultaneously.
+The traditional WebDriver model involves strict request/response commands which only allows for communication to
+happen in one direction at any given time. In most cases this is what you want; it ensures that the browser is
+doing the expected things in the right order, but there are a number of interesting things that can be done with 
+asynchronous interactions.
+
+This functionality is currently available in a limited fashion with the [Chrome DevTools Protocol] (CDP), 
+but to address some of its drawbacks, the Selenium team, along with the major
+browser vendors, have worked to create the new [WebDriver BiDi Protocol](https://w3c.github.io/webdriver-bidi/).
+This specification aims to create a stable, cross-browser API that leverages bidirectional
+communication for enhanced browser automation and testing functionality, 
+including streaming events from the user agent to the controlling software via WebSockets.
+Users will be able to listen for and record or manipulate events as they happen during the course of a Selenium session.
+
+### Enabling BiDi in Selenium
+
+In order to use WebDriver BiDi, setting the capability in the browser options will enable the required functionality:
+
+{{< tabpane langEqualsHeader=true >}}
+{{< tab header="Java" >}}
+options.setCapability("webSocketUrl", true);
+{{< /tab >}}
+{{< tab header="Python" >}}
+options.enable_bidi = True
+{{% /tab %}}
+{{< tab header="CSharp" >}}
+UseWebSocketUrl = true,
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+options.web_socket_url = true
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+Options().enableBidi();
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+options.setCapability("webSocketUrl", true);
+{{< /tab >}}
+{{< /tabpane >}}
+
+This enables the WebSocket connection for bidirectional communication, 
+unlocking the full potential of the WebDriver BiDi protocol.
+
+Note that Selenium is updating its entire implementation from WebDriver Classic to WebDriver BiDi (while
+maintaining backwards compatibility as much as possible), but this section of documentation focuses on the new
+functionality that bidirectional communication allows. 
+The low-level BiDi domains will be accessible in the code to the end user, but the goal is to provide
+high-level APIs that are straightforward methods of real-world use cases. As such, the low-level
+components will not be documented, and this section will focus only on the user-friendly
+features that we encourage users to take advantage of.
+
+If there is additional functionality you'd like to see, please raise a
+[feature request](https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=&template=feature.md).
+
diff --git a/website_and_docs/content/documentation/webdriver/bidi/_index.zh-cn.md b/website_and_docs/content/documentation/webdriver/bidi/_index.zh-cn.md
new file mode 100644
index 000000000000..92e60f8d5cfc
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/_index.zh-cn.md
@@ -0,0 +1,79 @@
+---
+title: "双向功能"
+linkTitle: "BiDi"
+weight: 16
+aliases: [
+"/documentation/en/webdriver/bidi_apis/",
+"/documentation/webdriver/bidi_apis/",
+"/documentation/webdriver/bidirectional/bidi_api_remotewebdriver",
+"/documentation/webdriver/bidirectional/webdriver_bidi",
+"/documentation/webdriver/bidirectional/webdriver_bidi/browsing_context",
+"/documentation/webdriver/bidirectional/webdriver_bidi/input"
+]
+---
+
+
+双向是指通信同时在两个方向上进行. 
+传统的 WebDriver 模型涉及严格的请求/响应命令, 
+在任何时候都只允许单向通信. 
+在大多数情况下, 这正是您想要的；它能确保浏览器以正确的顺序执行预期的操作, 
+但异步交互也有许多有趣的地方. 
+
+
+目前, [Chrome DevTools Protocol] (CDP) 可以有限地提供这种功能, 
+但为了解决它的一些缺点, 
+Selenium 团队与主要浏览器供应商一起创建了新的 [WebDriver BiDi 协议](https://w3c.github.io/webdriver-bidi/).
+该规范旨在创建一个稳定的跨浏览器 API, 
+利用双向通信增强浏览器自动化和测试功能、
+包括通过 WebSockets 从用户代理到控制软件的流式事件. 
+用户将能在 Selenium 会话过程中监听、记录或操作事件. 
+
+
+### 在Selenium中启用 BiDi
+
+为了使用 WebDriver BiDi, 
+在浏览器选项中设置该功能将启用所需的功能:
+
+{{< tabpane langEqualsHeader=true >}}
+{{< tab header="Java" >}}
+options.setCapability("webSocketUrl", true);
+{{< /tab >}}
+{{< tab header="Python" >}}
+options.enable_bidi = True
+{{% /tab %}}
+{{< tab header="CSharp" >}}
+UseWebSocketUrl = true,
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+options.web_socket_url = true
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+Options().enableBidi();
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+options.setCapability("webSocketUrl", true);
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+
+这将启用用于双向通信的 WebSocket 连接、
+释放 WebDriver BiDi 协议的全部潜能. 
+
+
+
+请注意, Selenium 正在将其整个实现从 WebDriver Classic 
+升级到 WebDriver BiDi (同时尽可能保持向后兼容性) , 
+但本部分文档的重点是双向通信所允许的新功能. 
+
+
+
+终端用户可以在代码中访问低级 BiDi 域, 
+但我们的目标是提供高级应用程序接口, 
+这些应用程序接口是真实世界用例的直接方法. 
+因此, 我们将不对底层组件进行记录, 本节将只关注我们鼓励使用者利用的用户友好功能. 
+
+
+如果您希望看到其他功能, 请提出
+[功能请求](https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=&template=feature.md). 
+
diff --git a/website_and_docs/content/documentation/webdriver/bidi/cdp/_index.en.md b/website_and_docs/content/documentation/webdriver/bidi/cdp/_index.en.md
new file mode 100644
index 000000000000..198e6d8c95f2
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/cdp/_index.en.md
@@ -0,0 +1,73 @@
+---
+title: "Chrome DevTools Protocol"
+linkTitle: "CDP"
+weight: 10
+description: >
+    Examples of working with Chrome DevTools Protocol in Selenium.
+    CDP support is temporary until WebDriver BiDi has been implemented.
+aliases: [
+"/documentation/en/support_packages/chrome_devtools/",
+"/documentation/support_packages/chrome_devtools/",
+"/documentation/webdriver/bidirectional/chrome_devtools/",
+"documentation/webdriver/bidirectional/chrome_devtools/cdp_endpoint/",
+"documentation/webdriver/bidirectional/chrome_devtools/bidi_api/",
+"documentation/webdriver/bidirectional/chrome_devtools/cdp_api/",
+]
+---
+
+Many browsers provide "DevTools" -- a set of tools that are integrated with the browser that 
+developers can use to debug web apps and explore the performance of their pages. Google Chrome's 
+DevTools make use of a protocol called the Chrome DevTools Protocol (or "CDP" for short). 
+As the name suggests, this is not designed for testing, nor to have a stable API, so functionality 
+is highly dependent on the version of the browser.
+
+Selenium is working to implement a standards-based, cross-browser, stable alternative to CDP called
+[WebDriver BiDi]. Until the support for this new protocol has finished, Selenium plans to provide access
+to CDP features where applicable.
+
+### Using Chrome DevTools Protocol with Selenium
+
+Chrome and Edge have a method to send basic CDP commands. 
+This does not work for features that require bidirectional communication, and you need to know what domains to enable when
+and the exact names and types of domains/methods/parameters. 
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/CdpTest.java#L22-L27" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_cdp.py#L2-L7" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/CDPTest.cs#L14-L21" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/cdp_spec.rb#L9-L13" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+To make working with CDP easier, and to provide access to the more advanced features, Selenium bindings
+automatically generate classes and methods for the most common domains. 
+CDP methods and implementations can change from version to version, though, so you want to keep the
+version of Chrome and the version of DevTools matching. Selenium supports the 3 most
+recent versions of Chrome at any given time, 
+and tries to time releases to ensure that access to the latest versions are available.
+
+This limitation provides additional challenges for several bindings, where dynamically
+generated CDP support requires users to regularly update their code to reference the proper version of CDP.
+In some cases an idealized implementation has been created that should work for any version of CDP without the
+user needing to change their code, but that is not always available.
+
+Examples of how to use CDP in your Selenium tests can be found on the following pages, but 
+we want to call out a couple commonly cited examples that are of limited practical value.
+* **Geo Location** — almost all sites use the IP address to determine physical location, 
+so setting an emulated geolocation rarely has the desired effect.
+* **Overriding Device Metrics** — Chrome provides a great API for setting [Mobile Emulation](https://chromedriver.chromium.org/mobile-emulation)
+in the Options classes, which is generally superior to attempting to do this with CDP.
diff --git a/website_and_docs/content/documentation/webdriver/bidi/cdp/_index.ja.md b/website_and_docs/content/documentation/webdriver/bidi/cdp/_index.ja.md
new file mode 100644
index 000000000000..a154424f13cd
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/cdp/_index.ja.md
@@ -0,0 +1,82 @@
+---
+title: "Chrome DevTools Protocol"
+linkTitle: "CDP"
+weight: 10
+description: >
+    Examples of working with Chrome DevTools Protocol in Selenium.
+    CDP support is temporary until WebDriver BiDi has been implemented.
+aliases: [
+"/documentation/en/support_packages/chrome_devtools/",
+"/documentation/support_packages/chrome_devtools/",
+"/documentation/webdriver/bidirectional/chrome_devtools/",
+"documentation/webdriver/bidirectional/chrome_devtools/cdp_endpoint/",
+"documentation/webdriver/bidirectional/chrome_devtools/bidi_api/",
+"documentation/webdriver/bidirectional/chrome_devtools/cdp_api/",
+]
+---
+
+{{% pageinfo color="warning" %}}
+<p class="lead">
+   <i class="fas fa-language d-4"></i> 
+    Page being translated from English to Japanese. 
+    Do you speak Japanese? Help us to translate
+    it by sending us pull requests!
+</p>
+{{% /pageinfo %}}
+
+Many browsers provide "DevTools" -- a set of tools that are integrated with the browser that 
+developers can use to debug web apps and explore the performance of their pages. Google Chrome's 
+DevTools make use of a protocol called the Chrome DevTools Protocol (or "CDP" for short). 
+As the name suggests, this is not designed for testing, nor to have a stable API, so functionality 
+is highly dependent on the version of the browser.
+
+Selenium is working to implement a standards-based, cross-browser, stable alternative to CDP called
+[WebDriver BiDi]. Until the support for this new protocol has finished, Selenium plans to provide access
+to CDP features where applicable.
+
+### Using Chrome DevTools Protocol with Selenium
+
+Chrome and Edge have a method to send basic CDP commands. 
+This does not work for features that require bidirectional communication, and you need to know what domains to enable when
+and the exact names and types of domains/methods/parameters. 
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/CdpTest.java#L22-L27" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_cdp.py#L2-L7" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/CDPTest.cs#L14-L21" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/cdp_spec.rb#L9-L13" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+To make working with CDP easier, and to provide access to the more advanced features, Selenium bindings
+automatically generate classes and methods for the most common domains. 
+CDP methods and implementations can change from version to version, though, so you want to keep the
+version of Chrome and the version of DevTools matching. Selenium supports the 3 most
+recent versions of Chrome at any given time, 
+and tries to time releases to ensure that access to the latest versions are available.
+
+This limitation provides additional challenges for several bindings, where dynamically
+generated CDP support requires users to regularly update their code to reference the proper version of CDP.
+In some cases an idealized implementation has been created that should work for any version of CDP without the
+user needing to change their code, but that is not always available.
+
+Examples of how to use CDP in your Selenium tests can be found on the following pages, but 
+we want to call out a couple commonly cited examples that are of limited practical value.
+* **Geo Location** — almost all sites use the IP address to determine physical location, 
+so setting an emulated geolocation rarely has the desired effect.
+* **Overriding Device Metrics** — Chrome provides a great API for setting [Mobile Emulation](https://chromedriver.chromium.org/mobile-emulation)
+in the Options classes, which is generally superior to attempting to do this with CDP.
diff --git a/website_and_docs/content/documentation/webdriver/bidi/cdp/_index.pt-br.md b/website_and_docs/content/documentation/webdriver/bidi/cdp/_index.pt-br.md
new file mode 100644
index 000000000000..79ccc306a1a9
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/cdp/_index.pt-br.md
@@ -0,0 +1,82 @@
+---
+title: "Chrome DevTools Protocol"
+linkTitle: "CDP"
+weight: 10
+description: >
+    Examples of working with Chrome DevTools Protocol in Selenium.
+    CDP support is temporary until WebDriver BiDi has been implemented.
+aliases: [
+"/documentation/en/support_packages/chrome_devtools/",
+"/documentation/support_packages/chrome_devtools/",
+"/documentation/webdriver/bidirectional/chrome_devtools/",
+"documentation/webdriver/bidirectional/chrome_devtools/cdp_endpoint/",
+"documentation/webdriver/bidirectional/chrome_devtools/bidi_api/",
+"documentation/webdriver/bidirectional/chrome_devtools/cdp_api/",
+]
+---
+
+{{% pageinfo color="warning" %}}
+<p class="lead">
+   <i class="fas fa-language d-4"></i>
+   Page being translated from
+   English to Japanese. Do you speak Japanese? Help us to translate
+   it by sending us pull requests!
+</p>
+{{% /pageinfo %}}
+
+Many browsers provide "DevTools" -- a set of tools that are integrated with the browser that 
+developers can use to debug web apps and explore the performance of their pages. Google Chrome's 
+DevTools make use of a protocol called the Chrome DevTools Protocol (or "CDP" for short). 
+As the name suggests, this is not designed for testing, nor to have a stable API, so functionality 
+is highly dependent on the version of the browser.
+
+Selenium is working to implement a standards-based, cross-browser, stable alternative to CDP called
+[WebDriver BiDi]. Until the support for this new protocol has finished, Selenium plans to provide access
+to CDP features where applicable.
+
+### Using Chrome DevTools Protocol with Selenium
+
+Chrome and Edge have a method to send basic CDP commands. 
+This does not work for features that require bidirectional communication, and you need to know what domains to enable when
+and the exact names and types of domains/methods/parameters. 
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/CdpTest.java#L22-L27" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_cdp.py#L2-L7" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/CDPTest.cs#L14-L21" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/cdp_spec.rb#L9-L13" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+To make working with CDP easier, and to provide access to the more advanced features, Selenium bindings
+automatically generate classes and methods for the most common domains. 
+CDP methods and implementations can change from version to version, though, so you want to keep the
+version of Chrome and the version of DevTools matching. Selenium supports the 3 most
+recent versions of Chrome at any given time, 
+and tries to time releases to ensure that access to the latest versions are available.
+
+This limitation provides additional challenges for several bindings, where dynamically
+generated CDP support requires users to regularly update their code to reference the proper version of CDP.
+In some cases an idealized implementation has been created that should work for any version of CDP without the
+user needing to change their code, but that is not always available.
+
+Examples of how to use CDP in your Selenium tests can be found on the following pages, but 
+we want to call out a couple commonly cited examples that are of limited practical value.
+* **Geo Location** — almost all sites use the IP address to determine physical location, 
+so setting an emulated geolocation rarely has the desired effect.
+* **Overriding Device Metrics** — Chrome provides a great API for setting [Mobile Emulation](https://chromedriver.chromium.org/mobile-emulation)
+in the Options classes, which is generally superior to attempting to do this with CDP.
diff --git a/website_and_docs/content/documentation/webdriver/bidi/cdp/_index.zh-cn.md b/website_and_docs/content/documentation/webdriver/bidi/cdp/_index.zh-cn.md
new file mode 100644
index 000000000000..56482fa237e4
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/cdp/_index.zh-cn.md
@@ -0,0 +1,61 @@
+---
+title: "Chrome DevTools 协议"
+linkTitle: "CDP"
+weight: 10
+description: >
+    使用 Selenium 操作 Chrome DevTools 协议的示例。
+    CDP 的支持是临时的，直到 WebDriver BiDi 实现为止。
+aliases: [
+"/documentation/en/support_packages/chrome_devtools/",
+"/documentation/support_packages/chrome_devtools/",
+"/documentation/webdriver/bidirectional/chrome_devtools/",
+"documentation/webdriver/bidirectional/chrome_devtools/cdp_endpoint/",
+"documentation/webdriver/bidirectional/chrome_devtools/bidi_api/",
+"documentation/webdriver/bidirectional/chrome_devtools/cdp_api/",
+]
+---
+
+
+
+许多浏览器提供“开发者工具”（DevTools），这是与浏览器集成的一组工具，开发人员可以使用它们来调试网页应用程序并探索网页的性能。Google Chrome 的开发者工具使用一种称为 Chrome DevTools 协议（简称 "CDP"）的协议。顾名思义，该协议并非为测试设计，也没有稳定的 API，因此功能很大程度上取决于浏览器的版本。
+
+Selenium 正在致力于实现一种基于标准的、跨浏览器的、稳定的 CDP 替代方案，称为 [WebDriver BiDi]。在对该新协议的支持完成之前，Selenium 计划在适用的地方提供对 CDP 功能的访问。
+
+### 在 Selenium 中使用 Chrome DevTools 协议
+
+Chrome 和 Edge 提供了发送基本 CDP 命令的方法。
+但对于需要双向通信的功能，这种方法无效。你需要知道在何时启用哪些域，以及域、方法和参数的确切名称和类型。
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/CdpTest.java#L22-L27" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_cdp.py#L2-L7" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/CDPTest.cs#L14-L21" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/cdp_spec.rb#L9-L13" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+为简化 CDP 的使用并提供对更高级功能的访问，Selenium 绑定会自动为最常见的域生成类和方法。  
+不过，CDP 方法和实现可能会因版本而异，因此你需要确保 Chrome 版本和 DevTools 版本相匹配。  
+Selenium 在任何时间点支持 Chrome 的最近三个版本，并且尽量同步发布以确保可以访问最新版本。
+
+这种限制给一些绑定带来了额外的挑战，动态生成的 CDP 支持要求用户定期更新代码，以引用正确版本的 CDP。  
+在某些情况下，已创建了一个理想化的实现，它应该适用于任何版本的 CDP，而无需用户更改代码，但这并非总是可用。
+
+关于如何在 Selenium 测试中使用 CDP 的示例可以在以下页面找到，但我们想提到一些常被引用但实际价值有限的例子：
+* **地理位置** ——几乎所有网站都使用 IP 地址来确定物理位置，因此设置模拟地理位置很少能达到预期效果。
+* **覆盖设备指标** ——Chrome 提供了一个很棒的 API 来在 Options 类中设置[移动模拟](https://chromedriver.chromium.org/mobile-emulation)，这通常比尝试使用 CDP 更优越。
+
diff --git a/website_and_docs/content/documentation/webdriver/bidi/cdp/logging.en.md b/website_and_docs/content/documentation/webdriver/bidi/cdp/logging.en.md
new file mode 100644
index 000000000000..e2583b945e73
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/cdp/logging.en.md
@@ -0,0 +1,59 @@
+---
+title: "Chrome DevTools Logging Features"
+linkTitle: "Logging"
+weight: 2
+description: >
+  Logging features using CDP.
+---
+
+{{% pageinfo color="warning" %}}
+While Selenium 4 provides direct access to the Chrome DevTools Protocol, these
+methods will eventually be removed when WebDriver BiDi implemented.
+{{% /pageinfo %}}
+
+
+## Console Logs
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/LoggingTest.java#L31" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_logs.py#L11-12" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/LoggingTest.cs#L19-L25" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/logging_spec.rb#L12" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+## JavaScript Exceptions
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_logs.py#L22-L23" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/LoggingTest.cs#L41-L47" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/logging_spec.rb#L26" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/cdp/logging.ja.md b/website_and_docs/content/documentation/webdriver/bidi/cdp/logging.ja.md
new file mode 100644
index 000000000000..2654fcf63f9a
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/cdp/logging.ja.md
@@ -0,0 +1,68 @@
+---
+title: "Chrome DevTools Logging Features"
+linkTitle: "Logging"
+weight: 2
+description: >
+  Logging features using CDP.
+---
+
+{{% pageinfo color="warning" %}}
+<p class="lead">
+   <i class="fas fa-language d-4"></i> 
+    Page being translated from English to Japanese. 
+    Do you speak Japanese? Help us to translate
+    it by sending us pull requests!
+</p>
+{{% /pageinfo %}}
+
+{{% pageinfo color="warning" %}}
+While Selenium 4 provides direct access to the Chrome DevTools Protocol, these
+methods will eventually be removed when WebDriver BiDi implemented.
+{{% /pageinfo %}}
+
+
+## Console Logs
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/LoggingTest.java#L31" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_logs.py#L11-12" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/LoggingTest.cs#L19-L25" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/logging_spec.rb#L12" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+## JavaScript Exceptions
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_logs.py#L22-L23" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/LoggingTest.cs#L41-L47" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/logging_spec.rb#L26" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/cdp/logging.pt-br.md b/website_and_docs/content/documentation/webdriver/bidi/cdp/logging.pt-br.md
new file mode 100644
index 000000000000..8c000045ebbd
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/cdp/logging.pt-br.md
@@ -0,0 +1,68 @@
+---
+title: "Chrome DevTools Logging Features"
+linkTitle: "Logging"
+weight: 2
+description: >
+  Logging features using CDP.
+---
+
+{{% pageinfo color="warning" %}}
+<p class="lead">
+   <i class="fas fa-language d-4"></i>
+   Page being translated from
+   English to Japanese. Do you speak Japanese? Help us to translate
+   it by sending us pull requests!
+</p>
+{{% /pageinfo %}}
+
+{{% pageinfo color="warning" %}}
+While Selenium 4 provides direct access to the Chrome DevTools Protocol, these
+methods will eventually be removed when WebDriver BiDi implemented.
+{{% /pageinfo %}}
+
+
+## Console Logs
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/LoggingTest.java#L31" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_logs.py#L11-12" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/LoggingTest.cs#L19-L25" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/logging_spec.rb#L12" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+## JavaScript Exceptions
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_logs.py#L22-L23" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/LoggingTest.cs#L41-L47" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/logging_spec.rb#L26" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/cdp/logging.zh-cn.md b/website_and_docs/content/documentation/webdriver/bidi/cdp/logging.zh-cn.md
new file mode 100644
index 000000000000..ab59bb7aeaca
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/cdp/logging.zh-cn.md
@@ -0,0 +1,68 @@
+---
+title: "Chrome DevTools Logging Features"
+linkTitle: "Logging"
+weight: 2
+description: >
+  Logging features using CDP.
+---
+
+{{% pageinfo color="warning" %}}
+<p class="lead">
+   <i class="fas fa-language d-4"></i>
+   Page being translated from
+   English to Chinese. Do you speak Chinese? Help us to translate
+   it by sending us pull requests!
+</p>
+{{% /pageinfo %}}
+
+{{% pageinfo color="warning" %}}
+While Selenium 4 provides direct access to the Chrome DevTools Protocol, these
+methods will eventually be removed when WebDriver BiDi implemented.
+{{% /pageinfo %}}
+
+
+## Console Logs
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/LoggingTest.java#L31" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_logs.py#L11-12" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/LoggingTest.cs#L19-L25" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/logging_spec.rb#L12" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+## JavaScript Exceptions
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_logs.py#L22-L23" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/LoggingTest.cs#L41-L47" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/logging_spec.rb#L26" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/cdp/network.en.md b/website_and_docs/content/documentation/webdriver/bidi/cdp/network.en.md
new file mode 100644
index 000000000000..777c3c978709
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/cdp/network.en.md
@@ -0,0 +1,187 @@
+---
+title: "Chrome DevTools Network Features"
+linkTitle: "Network"
+weight: 4
+description: >
+  Network features using CDP.
+---
+
+{{% pageinfo color="warning" %}}
+While Selenium 4 provides direct access to the Chrome DevTools Protocol, these
+methods will eventually be removed when WebDriver BiDi implemented.
+{{% /pageinfo %}}
+
+
+## Basic authentication
+
+Some applications make use of browser authentication to secure pages.
+It used to be common to handle them in the URL, but browsers stopped supporting this.
+With this code you can insert the credentials into the header when necessary
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L41-L43" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_network.py#L13-15" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L25-L32" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L9-L11" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+## Network Interception
+
+Both requests and responses can be recorded or transformed.
+
+#### Response information
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L56-L65" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L46-L51" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L20-L24" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+#### Response transformation
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L75-L85" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L62-L73" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L31-L35" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+#### Request interception
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L97-L110" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L85-L97" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L42-L46" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+## Performance Metrics
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L125-L126" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_network.py#L26-L28" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L114-L118" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L56-L57" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+## Setting Cookies
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L142-L157" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_network.py#L37-L44" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L136-L143" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L68-L71" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+## Waiting for Downloads
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L171-L176" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L82-L88" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/cdp/network.ja.md b/website_and_docs/content/documentation/webdriver/bidi/cdp/network.ja.md
new file mode 100644
index 000000000000..1b9819ae3a21
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/cdp/network.ja.md
@@ -0,0 +1,196 @@
+---
+title: "Chrome DevTools Network Features"
+linkTitle: "Network"
+weight: 4
+description: >
+  Network features using CDP.
+---
+
+{{% pageinfo color="warning" %}}
+<p class="lead">
+   <i class="fas fa-language d-4"></i> 
+    Page being translated from English to Japanese. 
+    Do you speak Japanese? Help us to translate
+    it by sending us pull requests!
+</p>
+{{% /pageinfo %}}
+
+{{% pageinfo color="warning" %}}
+While Selenium 4 provides direct access to the Chrome DevTools Protocol, these
+methods will eventually be removed when WebDriver BiDi implemented.
+{{% /pageinfo %}}
+
+
+## Basic authentication
+
+Some applications make use of browser authentication to secure pages.
+It used to be common to handle them in the URL, but browsers stopped supporting this.
+With this code you can insert the credentials into the header when necessary
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L41-L43" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_network.py#L13-15" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L25-L32" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L9-L11" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+## Network Interception
+
+Both requests and responses can be recorded or transformed.
+
+#### Response information
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L56-L65" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L46-L51" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L20-L24" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+#### Response transformation
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L75-L85" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L62-L73" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L31-L35" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+#### Request interception
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L97-L110" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L85-L97" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L42-L46" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+## Performance Metrics
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L125-L126" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_network.py#L26-L28" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L114-L118" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L56-L57" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+## Setting Cookies
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L142-L157" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_network.py#L37-L44" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L136-L143" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L68-L71" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+## Waiting for Downloads
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L171-L176" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L82-L88" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/cdp/network.pt-br.md b/website_and_docs/content/documentation/webdriver/bidi/cdp/network.pt-br.md
new file mode 100644
index 000000000000..abcc6812d5a6
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/cdp/network.pt-br.md
@@ -0,0 +1,196 @@
+---
+title: "Chrome DevTools Network Features"
+linkTitle: "Network"
+weight: 4
+description: >
+  Network features using CDP.
+---
+
+{{% pageinfo color="warning" %}}
+<p class="lead">
+   <i class="fas fa-language d-4"></i>
+   Page being translated from
+   English to Japanese. Do you speak Japanese? Help us to translate
+   it by sending us pull requests!
+</p>
+{{% /pageinfo %}}
+
+{{% pageinfo color="warning" %}}
+While Selenium 4 provides direct access to the Chrome DevTools Protocol, these
+methods will eventually be removed when WebDriver BiDi implemented.
+{{% /pageinfo %}}
+
+
+## Basic authentication
+
+Some applications make use of browser authentication to secure pages.
+It used to be common to handle them in the URL, but browsers stopped supporting this.
+With this code you can insert the credentials into the header when necessary
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L41-L43" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_network.py#L13-15" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L25-L32" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L9-L11" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+## Network Interception
+
+Both requests and responses can be recorded or transformed.
+
+#### Response information
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L56-L65" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L46-L51" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L20-L24" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+#### Response transformation
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L75-L85" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L62-L73" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L31-L35" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+#### Request interception
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L97-L110" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L85-L97" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L42-L46" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+## Performance Metrics
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L125-L126" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_network.py#L26-L28" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L114-L118" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L56-L57" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+## Setting Cookies
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L142-L157" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_network.py#L37-L44" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L136-L143" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L68-L71" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+## Waiting for Downloads
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L171-L176" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L82-L88" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/cdp/network.zh-cn.md b/website_and_docs/content/documentation/webdriver/bidi/cdp/network.zh-cn.md
new file mode 100644
index 000000000000..1932f83c8f77
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/cdp/network.zh-cn.md
@@ -0,0 +1,196 @@
+---
+title: "Chrome DevTools Network Features"
+linkTitle: "Network"
+weight: 4
+description: >
+  Network features using CDP.
+---
+
+{{% pageinfo color="warning" %}}
+<p class="lead">
+   <i class="fas fa-language d-4"></i>
+   Page being translated from
+   English to Chinese. Do you speak Chinese? Help us to translate
+   it by sending us pull requests!
+</p>
+{{% /pageinfo %}}
+
+{{% pageinfo color="warning" %}}
+While Selenium 4 provides direct access to the Chrome DevTools Protocol, these
+methods will eventually be removed when WebDriver BiDi implemented.
+{{% /pageinfo %}}
+
+
+## Basic authentication
+
+Some applications make use of browser authentication to secure pages.
+It used to be common to handle them in the URL, but browsers stopped supporting this.
+With this code you can insert the credentials into the header when necessary
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L41-L43" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_network.py#L13-15" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L25-L32" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L9-L11" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+## Network Interception
+
+Both requests and responses can be recorded or transformed.
+
+#### Response information
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L56-L65" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L46-L51" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L20-L24" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+#### Response transformation
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L75-L85" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L62-L73" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L31-L35" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+#### Request interception
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L97-L110" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L85-L97" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L42-L46" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+## Performance Metrics
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L125-L126" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_network.py#L26-L28" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L114-L118" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L56-L57" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+## Setting Cookies
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L142-L157" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_network.py#L37-L44" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs#L136-L143" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L68-L71" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+## Waiting for Downloads
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L171-L176" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/network_spec.rb#L82-L88" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/cdp/script.en.md b/website_and_docs/content/documentation/webdriver/bidi/cdp/script.en.md
new file mode 100644
index 000000000000..b5ffc08db88b
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/cdp/script.en.md
@@ -0,0 +1,59 @@
+---
+title: "Chrome DevTools Script Features"
+linkTitle: "Script"
+weight: 6
+description: >
+  Script features using CDP.
+---
+
+{{% pageinfo color="warning" %}}
+While Selenium 4 provides direct access to the Chrome DevTools Protocol, these
+methods will eventually be removed when WebDriver BiDi implemented.
+{{% /pageinfo %}}
+
+## Script Pinning
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/ScriptTest.java#L32-L34" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/ScriptTest.cs#L21-L22" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/script_spec.rb#L12-L13" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+## DOM Mutation Handlers
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L44" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_script.py#L10-L11" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/ScriptTest.cs#L39-L46" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/script_spec.rb#L22" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/cdp/script.ja.md b/website_and_docs/content/documentation/webdriver/bidi/cdp/script.ja.md
new file mode 100644
index 000000000000..aad235f720dc
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/cdp/script.ja.md
@@ -0,0 +1,68 @@
+---
+title: "Chrome DevTools Script Features"
+linkTitle: "Script"
+weight: 6
+description: >
+  Script features using CDP.
+---
+
+{{% pageinfo color="warning" %}}
+<p class="lead">
+   <i class="fas fa-language d-4"></i> 
+    Page being translated from English to Japanese. 
+    Do you speak Japanese? Help us to translate
+    it by sending us pull requests!
+</p>
+{{% /pageinfo %}}
+
+{{% pageinfo color="warning" %}}
+While Selenium 4 provides direct access to the Chrome DevTools Protocol, these
+methods will eventually be removed when WebDriver BiDi implemented.
+{{% /pageinfo %}}
+
+## Script Pinning
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/ScriptTest.java#L32-L34" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/ScriptTest.cs#L21-L22" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/script_spec.rb#L12-L13" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+## DOM Mutation Handlers
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L44" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_script.py#L10-L11" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/ScriptTest.cs#L39-L46" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/script_spec.rb#L22" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/cdp/script.pt-br.md b/website_and_docs/content/documentation/webdriver/bidi/cdp/script.pt-br.md
new file mode 100644
index 000000000000..bc76016f1eda
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/cdp/script.pt-br.md
@@ -0,0 +1,68 @@
+---
+title: "Chrome DevTools Script Features"
+linkTitle: "Script"
+weight: 6
+description: >
+  Script features using CDP.
+---
+
+{{% pageinfo color="warning" %}}
+<p class="lead">
+   <i class="fas fa-language d-4"></i>
+   Page being translated from
+   English to Japanese. Do you speak Japanese? Help us to translate
+   it by sending us pull requests!
+</p>
+{{% /pageinfo %}}
+
+{{% pageinfo color="warning" %}}
+While Selenium 4 provides direct access to the Chrome DevTools Protocol, these
+methods will eventually be removed when WebDriver BiDi implemented.
+{{% /pageinfo %}}
+
+## Script Pinning
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/ScriptTest.java#L32-L34" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/ScriptTest.cs#L21-L22" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/script_spec.rb#L12-L13" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+## DOM Mutation Handlers
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L44" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_script.py#L10-L11" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/ScriptTest.cs#L39-L46" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/script_spec.rb#L22" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/cdp/script.zh-cn.md b/website_and_docs/content/documentation/webdriver/bidi/cdp/script.zh-cn.md
new file mode 100644
index 000000000000..f4f25d5c09b0
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/cdp/script.zh-cn.md
@@ -0,0 +1,68 @@
+---
+title: "Chrome DevTools Script Features"
+linkTitle: "Script"
+weight: 6
+description: >
+  Script features using CDP.
+---
+
+{{% pageinfo color="warning" %}}
+<p class="lead">
+   <i class="fas fa-language d-4"></i>
+   Page being translated from
+   English to Chinese. Do you speak Chinese? Help us to translate
+   it by sending us pull requests!
+</p>
+{{% /pageinfo %}}
+
+{{% pageinfo color="warning" %}}
+While Selenium 4 provides direct access to the Chrome DevTools Protocol, these
+methods will eventually be removed when WebDriver BiDi implemented.
+{{% /pageinfo %}}
+
+## Script Pinning
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/ScriptTest.java#L32-L34" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/ScriptTest.cs#L21-L22" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/script_spec.rb#L12-L13" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
+
+
+## DOM Mutation Handlers
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java#L44" >}}
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/bidi/cdp/test_script.py#L10-L11" >}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BiDi/CDP/ScriptTest.cs#L39-L46" >}}
+{{% /tab %}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/cdp/script_spec.rb#L22" >}}
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+{{< badge-implementation >}}
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+{{< badge-code >}}
+{{% /tab %}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/logging.en.md b/website_and_docs/content/documentation/webdriver/bidi/logging.en.md
new file mode 100644
index 000000000000..312123ec9737
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/logging.en.md
@@ -0,0 +1,119 @@
+---
+title: "WebDriver BiDi Logging Features"
+linkTitle: "Logging"
+weight: 1
+description: >
+  These features are related to logging. Because "logging" can refer to so many
+  different things, these methods are made available via a "script" namespace.
+aliases: [
+  "/documentation/en/webdriver/bidirectional/bidirectional_w3c/log",
+  "/documentation/webdriver/bidirectional/webdriver_bidi/log"
+]
+---
+
+Remember that to use WebDriver BiDi, you must enable it in Options. 
+For more details, see [Enabling BiDi]({{< ref "BiDi" >}})
+
+## Console Message Handlers
+
+Record or take actions on `console.log` events.
+
+### Add Handler
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/bidi/test_bidi_logging.py#L11" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/logging_spec.rb#L11" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Remove Handler
+
+You need to store the ID returned when adding the handler to delete it.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/bidi/test_bidi_logging.py#L23-24" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/logging_spec.rb#L22-L23" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## JavaScript Exception Handlers
+
+Record or take actions on JavaScript exception events.
+
+### Add Handler
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/bidi/test_bidi_logging.py#L35" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/logging_spec.rb#L33" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Remove Handler
+
+You need to store the ID returned when adding the handler to delete it.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/bidi/test_bidi_logging.py#L47-48" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/logging_spec.rb#L44-L45" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/logging.ja.md b/website_and_docs/content/documentation/webdriver/bidi/logging.ja.md
new file mode 100644
index 000000000000..ae23c7a6412b
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/logging.ja.md
@@ -0,0 +1,119 @@
+---
+title: "WebDriver BiDi Logging Features"
+linkTitle: "Logging"
+weight: 1
+description: >
+  These features are related to logging. Because "logging" can refer to so many
+  different things, these methods are made available via a "script" namespace.
+aliases: [
+  "/documentation/ja/webdriver/bidirectional/bidirectional_w3c/log",
+  "/documentation/webdriver/bidirectional/webdriver_bidi/log"
+]
+---
+
+Remember that to use WebDriver BiDi, you must enable it in Options. 
+For more details, see [Enabling BiDi]({{< ref "BiDi" >}})
+
+## Console Message Handlers
+
+Record or take actions on `console.log` events.
+
+### Add Handler
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/bidi/test_bidi_logging.py#L11" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/logging_spec.rb#L11" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Remove Handler
+
+You need to store the ID returned when adding the handler to delete it.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/bidi/test_bidi_logging.py#L23-24" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/logging_spec.rb#L22-L23" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## JavaScript Exception Handlers
+
+Record or take actions on JavaScript exception events.
+
+### Add Handler
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/bidi/test_bidi_logging.py#L35" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/logging_spec.rb#L33" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Remove Handler
+
+You need to store the ID returned when adding the handler to delete it.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/bidi/test_bidi_logging.py#L47-48" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/logging_spec.rb#L44-L45" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/logging.pt-br.md b/website_and_docs/content/documentation/webdriver/bidi/logging.pt-br.md
new file mode 100644
index 000000000000..8109898135fd
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/logging.pt-br.md
@@ -0,0 +1,119 @@
+---
+title: "WebDriver BiDi Logging Features"
+linkTitle: "Logging"
+weight: 1
+description: >
+  These features are related to logging. Because "logging" can refer to so many
+  different things, these methods are made available via a "script" namespace.
+aliases: [
+  "/documentation/zh-cn/webdriver/bidirectional/bidirectional_w3c/log",
+  "/documentation/webdriver/bidirectional/webdriver_bidi/log"
+]
+---
+
+Remember that to use WebDriver BiDi, you must enable it in Options. 
+For more details, see [Enabling BiDi]({{< ref "BiDi" >}})
+
+## Console Message Handlers
+
+Record or take actions on `console.log` events.
+
+### Add Handler
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/bidi/test_bidi_logging.py#L11" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/logging_spec.rb#L11" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Remove Handler
+
+You need to store the ID returned when adding the handler to delete it.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/bidi/test_bidi_logging.py#L23-24" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/logging_spec.rb#L22-L23" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## JavaScript Exception Handlers
+
+Record or take actions on JavaScript exception events.
+
+### Add Handler
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/bidi/test_bidi_logging.py#L35" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/logging_spec.rb#L33" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Remove Handler
+
+You need to store the ID returned when adding the handler to delete it.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/bidi/test_bidi_logging.py#L47-48" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/logging_spec.rb#L44-L45" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/logging.zh-cn.md b/website_and_docs/content/documentation/webdriver/bidi/logging.zh-cn.md
new file mode 100644
index 000000000000..682b8dc2f866
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/logging.zh-cn.md
@@ -0,0 +1,121 @@
+---
+title: "WebDriver BiDi 日志功能"
+linkTitle: "日志"
+weight: 1
+description: >
+  这些功能与日志记录有关。
+  由于"logging"可以指代许多不同的事物,
+  因此这些方法通过"script"命名空间提供.
+aliases: [
+  "/documentation/zh-cn/webdriver/bidirectional/bidirectional_w3c/log",
+  "/documentation/webdriver/bidirectional/webdriver_bidi/log"
+]
+---
+
+请记住, 要使用 WebDriver BiDi,
+您必须在选项中启用它. 
+更多详情, 请参阅 [启用 BiDi]({{< ref "BiDi" >}}) .
+
+## 控制台消息处理程序
+
+记录或对 `console.log` 事件采取行动.
+
+### 添加处理程序
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/bidi/test_bidi_logging.py#L11" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/logging_spec.rb#L11" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### 删除处理程序
+
+您需要存储添加处理程序时返回的 ID 以便将其删除.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/bidi/test_bidi_logging.py#L23-24" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/logging_spec.rb#L22-L23" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## JavaScript 异常处理程序
+
+记录或对 JavaScript 异常事件采取行动.
+
+### 添加处理程序
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/bidi/test_bidi_logging.py#L35" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/logging_spec.rb#L33" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### 删除处理程序
+
+您需要存储添加处理程序时返回的 ID 以便将其删除.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/bidi/test_bidi_logging.py#L47-48" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="/examples/ruby/spec/bidi/logging_spec.rb#L44-L45" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/network.en.md b/website_and_docs/content/documentation/webdriver/bidi/network.en.md
new file mode 100644
index 000000000000..1cb55e097150
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/network.en.md
@@ -0,0 +1,117 @@
+---
+title: "WebDriver BiDi Network Features"
+linkTitle: "Network"
+weight: 1
+description: >
+  These features are related to networking, and are made available via a "network" namespace.
+aliases: [
+  "/documentation/en/webdriver/bidirectional/bidirectional_w3c/network",
+  "/documentation/webdriver/bidirectional/webdriver_bidi/network"
+]
+---
+
+The implementation of these features is being tracked here: [#13993](https://github.com/SeleniumHQ/selenium/issues/13993)
+
+Remember that to use WebDriver BiDi, you must enable it in Options.
+For more details, see [Enabling BiDi]({{< ref "BiDi" >}})
+
+## Authentication Handlers
+
+Authentication handlers enable you to intercept authentication requests that occur during a network interaction. 
+These handlers are useful for automating scenarios involving authentication prompts, such as Basic Auth or Digest Auth. 
+They allow you to programmatically provide credentials or modify the authentication flow.
+
+### Add Handler
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="examples/ruby/spec/bidi/network_spec.rb#L7-L11" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Request Handlers
+
+Request handlers allow you to intercept and manipulate outgoing network requests before they are sent to the server. 
+This can be used to modify request headers, change the request body, or block specific requests. 
+Request handlers are essential for testing and debugging scenarios where you need control over outgoing traffic.
+
+### Add Handler
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Response Handlers
+
+Response handlers enable you to intercept and manipulate incoming responses from the server. 
+They are particularly useful for testing scenarios involving response data, such as verifying or modifying response headers, status codes, or content before it reaches the browser.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Remove Handler
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Clear Handlers
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/network.ja.md b/website_and_docs/content/documentation/webdriver/bidi/network.ja.md
new file mode 100644
index 000000000000..95a81f748645
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/network.ja.md
@@ -0,0 +1,117 @@
+---
+title: "WebDriver BiDi Network Features"
+linkTitle: "Network"
+weight: 1
+description: >
+  These features are related to networking, and are made available via a "network" namespace.
+aliases: [
+  "/documentation/en/webdriver/bidirectional/bidirectional_w3c/network",
+  "/documentation/webdriver/bidirectional/webdriver_bidi/network"
+]
+---
+
+The implementation of these features is being tracked here: [#13993](https://github.com/SeleniumHQ/selenium/issues/13993)
+
+Remember that to use WebDriver BiDi, you must enable it in Options.
+For more details, see [Enabling BiDi]({{< ref "BiDi" >}})
+
+## Authentication Handlers
+
+Authentication handlers enable you to intercept authentication requests that occur during a network interaction.
+These handlers are useful for automating scenarios involving authentication prompts, such as Basic Auth or Digest Auth.
+They allow you to programmatically provide credentials or modify the authentication flow.
+
+### Add Handler
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="examples/ruby/spec/bidi/network_spec.rb#L7-L11" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Request Handlers
+
+Request handlers allow you to intercept and manipulate outgoing network requests before they are sent to the server.
+This can be used to modify request headers, change the request body, or block specific requests.
+Request handlers are essential for testing and debugging scenarios where you need control over outgoing traffic.
+
+### Add Handler
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Response Handlers
+
+Response handlers enable you to intercept and manipulate incoming responses from the server.
+They are particularly useful for testing scenarios involving response data, such as verifying or modifying response headers, status codes, or content before it reaches the browser.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Remove Handler
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Clear Handlers
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/network.pt-br.md b/website_and_docs/content/documentation/webdriver/bidi/network.pt-br.md
new file mode 100644
index 000000000000..95a81f748645
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/network.pt-br.md
@@ -0,0 +1,117 @@
+---
+title: "WebDriver BiDi Network Features"
+linkTitle: "Network"
+weight: 1
+description: >
+  These features are related to networking, and are made available via a "network" namespace.
+aliases: [
+  "/documentation/en/webdriver/bidirectional/bidirectional_w3c/network",
+  "/documentation/webdriver/bidirectional/webdriver_bidi/network"
+]
+---
+
+The implementation of these features is being tracked here: [#13993](https://github.com/SeleniumHQ/selenium/issues/13993)
+
+Remember that to use WebDriver BiDi, you must enable it in Options.
+For more details, see [Enabling BiDi]({{< ref "BiDi" >}})
+
+## Authentication Handlers
+
+Authentication handlers enable you to intercept authentication requests that occur during a network interaction.
+These handlers are useful for automating scenarios involving authentication prompts, such as Basic Auth or Digest Auth.
+They allow you to programmatically provide credentials or modify the authentication flow.
+
+### Add Handler
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="examples/ruby/spec/bidi/network_spec.rb#L7-L11" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Request Handlers
+
+Request handlers allow you to intercept and manipulate outgoing network requests before they are sent to the server.
+This can be used to modify request headers, change the request body, or block specific requests.
+Request handlers are essential for testing and debugging scenarios where you need control over outgoing traffic.
+
+### Add Handler
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Response Handlers
+
+Response handlers enable you to intercept and manipulate incoming responses from the server.
+They are particularly useful for testing scenarios involving response data, such as verifying or modifying response headers, status codes, or content before it reaches the browser.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Remove Handler
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Clear Handlers
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/network.zh-cn.md b/website_and_docs/content/documentation/webdriver/bidi/network.zh-cn.md
new file mode 100644
index 000000000000..95a81f748645
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/network.zh-cn.md
@@ -0,0 +1,117 @@
+---
+title: "WebDriver BiDi Network Features"
+linkTitle: "Network"
+weight: 1
+description: >
+  These features are related to networking, and are made available via a "network" namespace.
+aliases: [
+  "/documentation/en/webdriver/bidirectional/bidirectional_w3c/network",
+  "/documentation/webdriver/bidirectional/webdriver_bidi/network"
+]
+---
+
+The implementation of these features is being tracked here: [#13993](https://github.com/SeleniumHQ/selenium/issues/13993)
+
+Remember that to use WebDriver BiDi, you must enable it in Options.
+For more details, see [Enabling BiDi]({{< ref "BiDi" >}})
+
+## Authentication Handlers
+
+Authentication handlers enable you to intercept authentication requests that occur during a network interaction.
+These handlers are useful for automating scenarios involving authentication prompts, such as Basic Auth or Digest Auth.
+They allow you to programmatically provide credentials or modify the authentication flow.
+
+### Add Handler
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="examples/ruby/spec/bidi/network_spec.rb#L7-L11" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Request Handlers
+
+Request handlers allow you to intercept and manipulate outgoing network requests before they are sent to the server.
+This can be used to modify request headers, change the request body, or block specific requests.
+Request handlers are essential for testing and debugging scenarios where you need control over outgoing traffic.
+
+### Add Handler
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Response Handlers
+
+Response handlers enable you to intercept and manipulate incoming responses from the server.
+They are particularly useful for testing scenarios involving response data, such as verifying or modifying response headers, status codes, or content before it reaches the browser.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Remove Handler
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Clear Handlers
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/script.en.md b/website_and_docs/content/documentation/webdriver/bidi/script.en.md
new file mode 100644
index 000000000000..32bac136952c
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/script.en.md
@@ -0,0 +1,22 @@
+---
+title: "WebDriver BiDi Script Features"
+linkTitle: "Script"
+weight: 1
+description: >
+  These features are related to scripts, and are made available via a "script" namespace.
+aliases: [
+  "/documentation/en/webdriver/bidirectional/bidirectional_w3c/script",
+  "/documentation/webdriver/bidirectional/webdriver_bidi/script"
+]
+---
+
+The implementation of these features is being tracked here: [#13992](https://github.com/SeleniumHQ/selenium/issues/13992)
+
+Remember that to use WebDriver BiDi, you must enable it in Options.
+For more details, see [Enabling BiDi]({{< ref "BiDi" >}})
+
+## Script Pinning
+
+## Execute Script
+
+## DOM Mutation Handlers
diff --git a/website_and_docs/content/documentation/webdriver/bidi/script.ja.md b/website_and_docs/content/documentation/webdriver/bidi/script.ja.md
new file mode 100644
index 000000000000..879d595decea
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/script.ja.md
@@ -0,0 +1,22 @@
+---
+title: "WebDriver BiDi Script Features"
+linkTitle: "Script"
+weight: 1
+description: >
+  These features are related to scripts, and are made available via a "script" namespace.
+aliases: [
+  "/documentation/ja/webdriver/bidirectional/bidirectional_w3c/script",
+  "/documentation/webdriver/bidirectional/webdriver_bidi/script"
+]
+---
+
+The implementation of these features is being tracked here: [#13992](https://github.com/SeleniumHQ/selenium/issues/13992)
+
+Remember that to use WebDriver BiDi, you must enable it in Options.
+For more details, see [Enabling BiDi]({{< ref "BiDi" >}})
+
+## Script Pinning
+
+## Execute Script
+
+## DOM Mutation Handlers
diff --git a/website_and_docs/content/documentation/webdriver/bidi/script.pt-br.md b/website_and_docs/content/documentation/webdriver/bidi/script.pt-br.md
new file mode 100644
index 000000000000..30710f7a1a4d
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/script.pt-br.md
@@ -0,0 +1,22 @@
+---
+title: "WebDriver BiDi Script Features"
+linkTitle: "Script"
+weight: 1
+description: >
+  These features are related to scripts, and are made available via a "script" namespace.
+aliases: [
+  "/documentation/pt-br/webdriver/bidirectional/bidirectional_w3c/script",
+  "/documentation/webdriver/bidirectional/webdriver_bidi/script"
+]
+---
+
+The implementation of these features is being tracked here: [#13992](https://github.com/SeleniumHQ/selenium/issues/13992)
+
+Remember that to use WebDriver BiDi, you must enable it in Options.
+For more details, see [Enabling BiDi]({{< ref "BiDi" >}})
+
+## Script Pinning
+
+## Execute Script
+
+## DOM Mutation Handlers
diff --git a/website_and_docs/content/documentation/webdriver/bidi/script.zh-cn.md b/website_and_docs/content/documentation/webdriver/bidi/script.zh-cn.md
new file mode 100644
index 000000000000..a5f6cc05a82e
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/script.zh-cn.md
@@ -0,0 +1,22 @@
+---
+title: "WebDriver BiDi Script Features"
+linkTitle: "Script"
+weight: 1
+description: >
+  These features are related to scripts, and are made available via a "script" namespace.
+aliases: [
+  "/documentation/zh-cn/webdriver/bidirectional/bidirectional_w3c/script",
+  "/documentation/webdriver/bidirectional/webdriver_bidi/script"
+]
+---
+
+The implementation of these features is being tracked here: [#13992](https://github.com/SeleniumHQ/selenium/issues/13992)
+
+Remember that to use WebDriver BiDi, you must enable it in Options.
+For more details, see [Enabling BiDi]({{< ref "BiDi" >}})
+
+## Script Pinning
+
+## Execute Script
+
+## DOM Mutation Handlers
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/_index.en.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/_index.en.md
similarity index 80%
rename from website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/_index.en.md
rename to website_and_docs/content/documentation/webdriver/bidi/w3c/_index.en.md
index 09f9e815d024..6e7cbe79eebb 100644
--- a/website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/_index.en.md
+++ b/website_and_docs/content/documentation/webdriver/bidi/w3c/_index.en.md
@@ -1,7 +1,10 @@
 ---
 title: "BiDirectional API (W3C compliant)"
-linkTitle: "WebDriver-BiDi"
+linkTitle: "W3C"
 weight: 16
+description: >
+    Examples of working with Chrome DevTools Protocol in Selenium.
+    CDP support is temporary until WebDriver BiDi has been implemented.
 aliases: [
 "/documentation/en/webdriver/bidirectional/bidirectional_w3c",
 "/documentation/en/webdriver/bidi_apis/bidi_w3c",
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/_index.ja.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/_index.ja.md
similarity index 100%
rename from website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/_index.ja.md
rename to website_and_docs/content/documentation/webdriver/bidi/w3c/_index.ja.md
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/_index.pt-br.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/_index.pt-br.md
similarity index 100%
rename from website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/_index.pt-br.md
rename to website_and_docs/content/documentation/webdriver/bidi/w3c/_index.pt-br.md
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/_index.zh-cn.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/_index.zh-cn.md
similarity index 100%
rename from website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/_index.zh-cn.md
rename to website_and_docs/content/documentation/webdriver/bidi/w3c/_index.zh-cn.md
diff --git a/website_and_docs/content/documentation/webdriver/bidi/w3c/browsing_context.en.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/browsing_context.en.md
new file mode 100644
index 000000000000..3ad6765f49b1
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/w3c/browsing_context.en.md
@@ -0,0 +1,599 @@
+---
+title: "Browsing Context"
+linkTitle: "Browsing Context"
+weight: 1
+aliases: [
+  "/documentation/en/webdriver/bidirectional/bidirectional_w3c/browsing_context",
+]
+---
+
+## Commands 
+This section contains the APIs related to browsing context commands. 
+
+### Open a new window
+
+Creates a new browsing context in a new window.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L44-L47" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L33-L35" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Open a new tab
+
+Creates a new browsing context in a new tab.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L58-L61" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L48-L50" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Use existing window handle
+
+Creates a browsing context for the existing tab/window to run commands.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L37-L41" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L25-L28" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+### Open a window with a reference browsing context
+A reference browsing context is a [top-level browsing context](https://html.spec.whatwg.org/multipage/document-sequences.html#top-level-browsing-context). 
+The API allows to pass the reference browsing context, which is used to create a new window. The implementation is operating system specific.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L50-L55" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L40-L43" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Open a tab with a reference browsing context
+A reference browsing context is a [top-level browsing context](https://html.spec.whatwg.org/multipage/document-sequences.html#top-level-browsing-context). 
+The API allows to pass the reference browsing context, which is used to create a new tab. The implementation is operating system specific.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L64-L69" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L55-L58" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Navigate to a URL
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L72-L80" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L67" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Navigate to a URL with readiness state
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L83-L92" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L79-L82" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get browsing context tree
+
+Provides a tree of all browsing contexts descending from the parent browsing context, including the parent browsing context.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L95-L108" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L90-L96" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get browsing context tree with depth
+
+Provides a tree of all browsing contexts descending from the parent browsing context, including the parent browsing context upto the depth value passed.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L111-L123" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L103-L109" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get All Top level browsing contexts
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L126-L133" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.20.0" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L426-L431" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Close a tab/window
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L136-L153" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L115-L118" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Activate a browsing context
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.14.1" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L157-L161" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L192-L194" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L204" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+### Reload a browsing context
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.13.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L169-L173" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L351" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Handle user prompt
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.13.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L220-L228" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L301" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Capture Screenshot
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.13.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L248-L252" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L362" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Capture Viewport Screenshot
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.14.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L259-L268" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L165-L169" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Capture Element Screenshot
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.14.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L275-L280" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L184" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Set Viewport
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.14.1" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L304-L307" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L335" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+### Print page
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.14.1" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L317-L322" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L145-L157" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Navigate back
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L330-L336" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L396" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Navigate forward
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L342-L352" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L420" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Traverse history
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L359-L365" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L378" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Events 
+This section contains the APIs related to browsing context events. 
+
+### Browsing Context Created Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L34-L41" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9.2" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContextInspector.spec.js#L23-L28" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Dom Content loaded Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L54-L63" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9.2" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContextInspector.spec.js#L53-L62" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Browsing Context Loaded Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L81-88" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9.2" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContextInspector.spec.js#L70-L78" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Navigated Started Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L97-104" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Fragment Navigated Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L113-123" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15.0" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContextInspector.spec.js#L86-L97" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### User Prompt Opened Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L113-123" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### User Prompt Closed Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L150-163" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Browsing Context Destroyed Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L170-L181" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.18.0" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContextInspector.spec.js#L105-L113" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/w3c/browsing_context.ja.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/browsing_context.ja.md
new file mode 100644
index 000000000000..9fc23ca162ff
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/w3c/browsing_context.ja.md
@@ -0,0 +1,605 @@
+---
+title: "Browsing Context"
+linkTitle: "Browsing Context"
+weight: 1
+---
+
+{{% pageinfo color="warning" %}}
+<p class="lead">
+   <i class="fas fa-language d-4"></i>
+   Page being translated from
+   English to Japanese. Do you speak Japanese? Help us to translate
+   it by sending us pull requests!
+</p>
+{{% /pageinfo %}}
+
+## Commands 
+This section contains the APIs related to browsing context commands. 
+
+### Open a new window
+
+Creates a new browsing context in a new window.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L44-L47" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L33-L35" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Open a new tab
+
+Creates a new browsing context in a new tab.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L58-L61" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L48-L50" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Use existing window handle
+
+Creates a browsing context for the existing tab/window to run commands.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L37-L41" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L25-L28" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+### Open a window with a reference browsing context
+A reference browsing context is a [top-level browsing context](https://html.spec.whatwg.org/multipage/document-sequences.html#top-level-browsing-context). 
+The API allows to pass the reference browsing context, which is used to create a new window. The implementation is operating system specific.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L50-L55" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L40-L43" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Open a tab with a reference browsing context
+A reference browsing context is a [top-level browsing context](https://html.spec.whatwg.org/multipage/document-sequences.html#top-level-browsing-context). 
+The API allows to pass the reference browsing context, which is used to create a new tab. The implementation is operating system specific.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L64-L69" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L55-L58" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Navigate to a URL
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L72-L80" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L67" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Navigate to a URL with readiness state
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L83-L92" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L79-L82" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get browsing context tree
+
+Provides a tree of all browsing contexts descending from the parent browsing context, including the parent browsing context.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L95-L108" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L90-L96" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get browsing context tree with depth
+
+Provides a tree of all browsing contexts descending from the parent browsing context, including the parent browsing context upto the depth value passed.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L111-L123" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L103-L109" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get All Top level browsing contexts
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L126-L133" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.20.0" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L426-L431" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Close a tab/window
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L136-L153" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L115-L118" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Activate a browsing context
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.14.1" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L157-L161" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L192-L194" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L204" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+### Reload a browsing context
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.13.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L169-L173" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L351" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Handle user prompt
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.13.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L220-L228" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L301" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Capture Screenshot
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.13.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L248-L252" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L362" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Capture Viewport Screenshot
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.14.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L259-L268" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L165-L169" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Capture Element Screenshot
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.14.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L275-L280" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L184" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Set Viewport
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.14.1" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L304-L307" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L335" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+### Print page
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.14.1" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L317-L322" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L145-L157" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Navigate back
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L330-L336" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L396" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Navigate forward
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L342-L352" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L420" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Traverse history
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L359-L365" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L378" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Events 
+This section contains the APIs related to browsing context events. 
+
+### Browsing Context Created Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L34-L41" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9.2" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContextInspector.spec.js#L23-L28" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Dom Content loaded Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L54-L63" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9.2" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContextInspector.spec.js#L53-L62" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Browsing Context Loaded Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L81-88" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9.2" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContextInspector.spec.js#L70-L78" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Navigated Started Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L97-104" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Fragment Navigated Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L113-123" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15.0" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContextInspector.spec.js#L86-L97" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### User Prompt Opened Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L113-123" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### User Prompt Closed Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L150-163" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Browsing Context Destroyed Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L170-L181" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.18.0" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContextInspector.spec.js#L105-L113" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
\ No newline at end of file
diff --git a/website_and_docs/content/documentation/webdriver/bidi/w3c/browsing_context.pt-br.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/browsing_context.pt-br.md
new file mode 100644
index 000000000000..bb7067d8016e
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/w3c/browsing_context.pt-br.md
@@ -0,0 +1,605 @@
+---
+title: "Browsing Context"
+linkTitle: "Browsing Context"
+weight: 1
+---
+
+{{% pageinfo color="warning" %}}
+<p class="lead">
+   <i class="fas fa-language d-4"></i>
+   Page being translated from
+   English to Portuguese. Do you speak Portuguese? Help us to translate
+   it by sending us pull requests!
+</p>
+{{% /pageinfo %}}
+
+## Commands 
+This section contains the APIs related to browsing context commands. 
+
+### Open a new window
+
+Creates a new browsing context in a new window.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L44-L47" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L33-L35" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Open a new tab
+
+Creates a new browsing context in a new tab.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L58-L61" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L48-L50" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Use existing window handle
+
+Creates a browsing context for the existing tab/window to run commands.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L37-L41" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L25-L28" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+### Open a window with a reference browsing context
+A reference browsing context is a [top-level browsing context](https://html.spec.whatwg.org/multipage/document-sequences.html#top-level-browsing-context). 
+The API allows to pass the reference browsing context, which is used to create a new window. The implementation is operating system specific.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L50-L55" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L40-L43" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Open a tab with a reference browsing context
+A reference browsing context is a [top-level browsing context](https://html.spec.whatwg.org/multipage/document-sequences.html#top-level-browsing-context). 
+The API allows to pass the reference browsing context, which is used to create a new tab. The implementation is operating system specific.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L64-L69" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L55-L58" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Navigate to a URL
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L72-L80" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L67" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Navigate to a URL with readiness state
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L83-L92" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L79-L82" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get browsing context tree
+
+Provides a tree of all browsing contexts descending from the parent browsing context, including the parent browsing context.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L95-L108" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L103-L109" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get browsing context tree with depth
+
+Provides a tree of all browsing contexts descending from the parent browsing context, including the parent browsing context upto the depth value passed.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L111-L123" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L103-L109" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get All Top level browsing contexts
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L126-L133" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.20.0" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L426-L431" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Close a tab/window
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L136-L153" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L115-L118" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Activate a browsing context
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.14.1" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L157-L161" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L192-L194" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L204" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+### Reload a browsing context
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.13.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L169-L173" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L351" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Handle user prompt
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.13.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L220-L228" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L301" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Capture Screenshot
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.13.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L248-L252" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L362" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Capture Viewport Screenshot
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.14.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L259-L268" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L165-L169" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Capture Element Screenshot
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.14.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L275-L280" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L184" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Set Viewport
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.14.1" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L304-L307" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L335" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+### Print page
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.14.1" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L317-L322" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L145-L157" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Navigate back
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L330-L336" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L396" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Navigate forward
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L342-L352" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L420" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Traverse history
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L359-L365" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L378" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Events 
+This section contains the APIs related to browsing context events. 
+
+### Browsing Context Created Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L34-L41" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9.2" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContextInspector.spec.js#L23-L28" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Dom Content loaded Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L54-L63" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9.2" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContextInspector.spec.js#L53-L62" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Browsing Context Loaded Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L81-88" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9.2" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContextInspector.spec.js#L70-L78" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Navigated Started Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L97-104" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Fragment Navigated Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L113-123" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15.0" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContextInspector.spec.js#L86-L97" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### User Prompt Opened Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L113-123" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### User Prompt Closed Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L150-163" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Browsing Context Destroyed Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L170-L181" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.18.0" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContextInspector.spec.js#L105-L113" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/w3c/browsing_context.zh-cn.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/browsing_context.zh-cn.md
new file mode 100644
index 000000000000..de74cabe8f79
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/w3c/browsing_context.zh-cn.md
@@ -0,0 +1,605 @@
+---
+title: "Browsing Context"
+linkTitle: "Browsing Context"
+weight: 1
+---
+
+{{% pageinfo color="warning" %}}
+<p class="lead">
+   <i class="fas fa-language d-4"></i>
+   Page being translated from
+   English to Chinese. Do you speak Chinese? Help us to translate
+   it by sending us pull requests!
+</p>
+{{% /pageinfo %}}
+
+## Commands 
+This section contains the APIs related to browsing context commands. 
+
+### Open a new window
+
+Creates a new browsing context in a new window.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L44-L47" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L33-L35" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Open a new tab
+
+Creates a new browsing context in a new tab.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L58-L61" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L48-L50" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Use existing window handle
+
+Creates a browsing context for the existing tab/window to run commands.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L37-L41" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L25-L28" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+### Open a window with a reference browsing context
+A reference browsing context is a [top-level browsing context](https://html.spec.whatwg.org/multipage/document-sequences.html#top-level-browsing-context). 
+The API allows to pass the reference browsing context, which is used to create a new window. The implementation is operating system specific.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L50-L55" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L40-L43" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Open a tab with a reference browsing context
+A reference browsing context is a [top-level browsing context](https://html.spec.whatwg.org/multipage/document-sequences.html#top-level-browsing-context). 
+The API allows to pass the reference browsing context, which is used to create a new tab. The implementation is operating system specific.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L64-L69" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L55-L58" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Navigate to a URL
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L72-L80" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L67" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Navigate to a URL with readiness state
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L83-L92" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L79-L82" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get browsing context tree
+
+Provides a tree of all browsing contexts descending from the parent browsing context, including the parent browsing context.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L95-L108" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L90-L96" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get browsing context tree with depth
+
+Provides a tree of all browsing contexts descending from the parent browsing context, including the parent browsing context upto the depth value passed.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L111-L123" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L103-L109" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get All Top level browsing contexts
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L126-L133" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.20.0" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L426-L431" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Close a tab/window
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L136-L153" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L115-L118" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Activate a browsing context
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.14.1" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L157-L161" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L192-L194" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L204" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+### Reload a browsing context
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.13.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L169-L173" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L351" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Handle user prompt
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.13.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L220-L228" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L301" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Capture Screenshot
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.13.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L248-L252" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L362" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Capture Viewport Screenshot
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.14.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L259-L268" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L165-L169" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Capture Element Screenshot
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.14.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L275-L280" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L184" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Set Viewport
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.14.1" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L304-L307" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L335" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+### Print page
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.14.1" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L317-L322" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L145-L157" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Navigate back
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L330-L336" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L396" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Navigate forward
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L342-L352" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L420" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Traverse history
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16.0" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L359-L365" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContext.spec.js#L378" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Events 
+This section contains the APIs related to browsing context events. 
+
+### Browsing Context Created Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L34-L41" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9.2" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContextInspector.spec.js#L23-L28" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Dom Content loaded Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L54-L63" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9.2" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContextInspector.spec.js#L53-L62" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Browsing Context Loaded Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L81-88" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9.2" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContextInspector.spec.js#L70-L78" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Navigated Started Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L97-104" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Fragment Navigated Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L113-123" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.15.0" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContextInspector.spec.js#L86-L97" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### User Prompt Opened Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L113-123" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### User Prompt Closed Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L150-163" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Browsing Context Destroyed Event
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextInspectorTest.java#L170-L181" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.18.0" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/browsingContextInspector.spec.js#L105-L113" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/w3c/input.en.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/input.en.md
new file mode 100644
index 000000000000..478895416373
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/w3c/input.en.md
@@ -0,0 +1,48 @@
+---
+title: "Input"
+linkTitle: "Input"
+weight: 1
+aliases: [
+  "/documentation/en/webdriver/bidirectional/bidirectional_w3c/input",
+]
+---
+
+This section contains the APIs related to input commands. 
+
+## Perform Actions
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ActionsTest.java#L41-L44" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/input.spec.js#L27-L29" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Release Actions
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ActionsTest.java#L59-L65" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/input.spec.js#L55" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
\ No newline at end of file
diff --git a/website_and_docs/content/documentation/webdriver/bidi/w3c/input.ja.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/input.ja.md
new file mode 100644
index 000000000000..6391982cba1e
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/w3c/input.ja.md
@@ -0,0 +1,57 @@
+---
+title: "Browsing Context"
+linkTitle: "Browsing Context"
+weight: 1
+aliases: [
+  "/documentation/en/webdriver/bidirectional/bidirectional_w3c/browsing_context",
+]
+---
+
+{{% pageinfo color="warning" %}}
+<p class="lead">
+   <i class="fas fa-language d-4"></i>
+   Page being translated from
+   English to Japanese. Do you speak Japanese? Help us to translate
+   it by sending us pull requests!
+</p>
+{{% /pageinfo %}}
+
+This section contains the APIs related to input commands. 
+
+## Perform Actions
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ActionsTest.java#L41-L44" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/input.spec.js#L27-L29" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Release Actions
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ActionsTest.java#L59-L65" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/input.spec.js#L55" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
\ No newline at end of file
diff --git a/website_and_docs/content/documentation/webdriver/bidi/w3c/input.pt-br.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/input.pt-br.md
new file mode 100644
index 000000000000..32bab0079996
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/w3c/input.pt-br.md
@@ -0,0 +1,57 @@
+---
+title: "Browsing Context"
+linkTitle: "Browsing Context"
+weight: 1
+aliases: [
+  "/documentation/en/webdriver/bidirectional/bidirectional_w3c/browsing_context",
+]
+---
+
+{{% pageinfo color="warning" %}}
+<p class="lead">
+   <i class="fas fa-language d-4"></i>
+   Page being translated from
+   English to Portuguese. Do you speak Portuguese? Help us to translate
+   it by sending us pull requests!
+</p>
+{{% /pageinfo %}}
+
+This section contains the APIs related to input commands. 
+
+## Perform Actions
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ActionsTest.java#L41-L44" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/input.spec.js#L27-L29" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Release Actions
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ActionsTest.java#L59-L65" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/input.spec.js#L55" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
\ No newline at end of file
diff --git a/website_and_docs/content/documentation/webdriver/bidi/w3c/input.zh-cn.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/input.zh-cn.md
new file mode 100644
index 000000000000..00ed5f397b12
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/w3c/input.zh-cn.md
@@ -0,0 +1,57 @@
+---
+title: "Browsing Context"
+linkTitle: "Browsing Context"
+weight: 1
+aliases: [
+  "/documentation/en/webdriver/bidirectional/bidirectional_w3c/browsing_context",
+]
+---
+
+{{% pageinfo color="warning" %}}
+<p class="lead">
+   <i class="fas fa-language d-4"></i>
+   Page being translated from
+   English to Chinese. Do you speak Chinese? Help us to translate
+   it by sending us pull requests!
+</p>
+{{% /pageinfo %}}
+
+This section contains the APIs related to input commands. 
+
+## Perform Actions
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ActionsTest.java#L41-L44" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/input.spec.js#L27-L29" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Release Actions
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ActionsTest.java#L59-L65" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/input.spec.js#L55" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
\ No newline at end of file
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/log.en.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/log.en.md
similarity index 91%
rename from website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/log.en.md
rename to website_and_docs/content/documentation/webdriver/bidi/w3c/log.en.md
index 8ae3eb9e6d02..8cd08ba25321 100644
--- a/website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/log.en.md
+++ b/website_and_docs/content/documentation/webdriver/bidi/w3c/log.en.md
@@ -16,7 +16,7 @@ Listen to the `console.log` events and register callbacks to process the event.
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L31-L38" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L33-L39" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
@@ -36,7 +36,7 @@ and register callbacks to process the exception details.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L70-L77" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L73-L78" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
@@ -56,7 +56,7 @@ Listen to all JS logs at all levels and register callbacks to process the log.
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L52-L59" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L55-L60" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/log.ja.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/log.ja.md
similarity index 91%
rename from website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/log.ja.md
rename to website_and_docs/content/documentation/webdriver/bidi/w3c/log.ja.md
index 7b94be6de2f8..4d4480e4f92c 100644
--- a/website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/log.ja.md
+++ b/website_and_docs/content/documentation/webdriver/bidi/w3c/log.ja.md
@@ -22,7 +22,7 @@ Listen to the `console.log` events and register callbacks to process the event.
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L31-L38" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L33-L39" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
@@ -42,7 +42,7 @@ and register callbacks to process the exception details.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L70-L77" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L73-L78" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
@@ -62,7 +62,7 @@ Listen to all JS logs at all levels and register callbacks to process the log.
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L52-L59" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L55-L60" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/log.pt-br.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/log.pt-br.md
similarity index 91%
rename from website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/log.pt-br.md
rename to website_and_docs/content/documentation/webdriver/bidi/w3c/log.pt-br.md
index be0814eaa07a..739d7a2e68f2 100644
--- a/website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/log.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/bidi/w3c/log.pt-br.md
@@ -22,7 +22,7 @@ Listen to the `console.log` events and register callbacks to process the event.
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L31-L38" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L33-L39" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
@@ -42,7 +42,7 @@ and register callbacks to process the exception details.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L70-L77" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L73-L78" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
@@ -62,7 +62,7 @@ Listen to all JS logs at all levels and register callbacks to process the log.
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L52-L59" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L55-L60" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/log.zh-cn.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/log.zh-cn.md
similarity index 91%
rename from website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/log.zh-cn.md
rename to website_and_docs/content/documentation/webdriver/bidi/w3c/log.zh-cn.md
index 240ac370a900..fc02584fe050 100644
--- a/website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/log.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/bidi/w3c/log.zh-cn.md
@@ -22,13 +22,13 @@ Listen to the `console.log` events and register callbacks to process the event.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L31-L38" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L33-L39" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-version version="4.8" >}}
 {{< gh-codeblock path="/examples/javascript/test/bidirectional/logInspector.spec.js#L23-37" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
@@ -43,13 +43,12 @@ and register callbacks to process the exception details.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L70-L77" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L73-L78" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-version version="4.8" >}}
 {{< gh-codeblock path="/examples/javascript/test/bidirectional/logInspector.spec.js#L44-54" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
@@ -63,7 +62,8 @@ Listen to all JS logs at all levels and register callbacks to process the log.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L52-L59" >}}
+{{< badge-version version="4.8" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/LogTest.java#L55-L60" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/browsing_context.en.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/network.en.md
similarity index 50%
rename from website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/browsing_context.en.md
rename to website_and_docs/content/documentation/webdriver/bidi/w3c/network.en.md
index f2f0523e2fd7..b4310a46c3d1 100644
--- a/website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/browsing_context.en.md
+++ b/website_and_docs/content/documentation/webdriver/bidi/w3c/network.en.md
@@ -1,121 +1,116 @@
 ---
-title: "Browsing Context"
-linkTitle: "Browsing Context"
+title: "Network"
+linkTitle: "Network"
 weight: 1
 aliases: [
-  "/documentation/en/webdriver/bidirectional/bidirectional_w3c/browsing_context",
+  "/documentation/en/webdriver/bidirectional/bidirectional_w3c/network",
 ]
 ---
+## Commands
 
-This section contains the APIs related to browsing context commands. 
+This section contains the APIs related to network commands. 
 
-## Open a new window
-
-Creates a new browsing context in a new window.
+### Add network intercept
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L35" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L36-L38" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_commands.spec.js#L29" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Open a new tab
-
-Creates a new browsing context in a new tab.
+### Remove network intercept
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L49" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L46-L50" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_commands.spec.js#L34-L35" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Use existing window handle
-
-Creates a browsing context for the existing tab/window to run commands.
+### Continue request blocked at authRequired phase with credentials
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L28-L29" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L57-L64" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_commands.spec.js#L42-L46" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-
-## Open a window with a reference browsing context
-A reference browsing context is a [top-level browsing context](https://html.spec.whatwg.org/multipage/document-sequences.html#top-level-browsing-context). 
-The API allows to pass the reference browsing context, which is used to create a new window. The implementation is operating system specific.
+### Continue request blocked at authRequired phase without credentials
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L41-L43" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L74-L80" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_commands.spec.js#L56-L60" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Open a tab with a reference browsing context
-A reference browsing context is a [top-level browsing context](https://html.spec.whatwg.org/multipage/document-sequences.html#top-level-browsing-context). 
-The API allows to pass the reference browsing context, which is used to create a new tab. The implementation is operating system specific.
+### Cancel request blocked at authRequired phase
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L55-L57" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L90-L96" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_commands.spec.js#L71-L75" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Navigate to a URL
+### Fail request
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L63-L65" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L104-L108" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
@@ -128,70 +123,73 @@ The API allows to pass the reference browsing context, which is used to create a
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Navigate to a URL with readiness state
+## Events
+
+This section contains the APIs related to network events. 
+
+### Before Request Sent
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L74-L77" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkEventsTest.java#L30-L35" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_events.spec.js#L23-L29" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Get browsing context tree
-
-Provides a tree of all browsing contexts descending from the parent browsing context, including the parent browsing context.
+### Response Started
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L86-L91" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkEventsTest.java#L45-L51" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_events.spec.js#L82-L88" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Get browsing context tree with depth
-
-Provides a tree of all browsing contexts descending from the parent browsing context, including the parent browsing context upto the depth value passed.
+### Response Completed
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L102-L105" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkEventsTest.java#L62-L68" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_events.spec.js#L96-L102" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Get All Top level browsing contexts
+### Auth Required
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L117-L120" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkEventsTest.java#L101-L106" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
@@ -204,20 +202,4 @@ Provides a tree of all browsing contexts descending from the parent browsing con
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Close a tab/window
 
-{{< tabpane text=true >}}
-{{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L127-L130" >}}
-{{< /tab >}}
-{{< tab header="Ruby" >}}
-{{< badge-code >}}
-{{< /tab >}}
-{{< tab header="JavaScript" >}}
-{{< badge-code >}}
-{{< /tab >}}
-{{< tab header="Kotlin" >}}
-{{< badge-code >}}
-{{< /tab >}}
-{{< /tabpane >}}
\ No newline at end of file
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/browsing_context.ja.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/network.ja.md
similarity index 52%
rename from website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/browsing_context.ja.md
rename to website_and_docs/content/documentation/webdriver/bidi/w3c/network.ja.md
index a56c12c24198..b8b76a827b99 100644
--- a/website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/browsing_context.ja.md
+++ b/website_and_docs/content/documentation/webdriver/bidi/w3c/network.ja.md
@@ -1,7 +1,10 @@
 ---
-title: "Browsing Context"
-linkTitle: "Browsing Context"
+title: "Network"
+linkTitle: "Network"
 weight: 1
+aliases: [
+  "/documentation/en/webdriver/bidirectional/bidirectional_w3c/network",
+]
 ---
 
 {{% pageinfo color="warning" %}}
@@ -13,115 +16,111 @@ weight: 1
 </p>
 {{% /pageinfo %}}
 
-This section contains the APIs related to browsing context commands. 
+# Commands
 
-## Open a new window
+This section contains the APIs related to network commands. 
 
-Creates a new browsing context in a new window.
+### Add network intercept
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L35" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L36-L38" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_commands.spec.js#L29" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Open a new tab
-
-Creates a new browsing context in a new tab.
+### Remove network intercept
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L49" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L46-L50" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_commands.spec.js#L34-L35" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Use existing window handle
-
-Creates a browsing context for the existing tab/window to run commands.
+### Continue request blocked at authRequired phase with credentials
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L28-L29" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L57-L64" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_commands.spec.js#L42-L46" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-
-## Open a window with a reference browsing context
-A reference browsing context is a [top-level browsing context](https://html.spec.whatwg.org/multipage/document-sequences.html#top-level-browsing-context). 
-The API allows to pass the reference browsing context, which is used to create a new window. The implementation is operating system specific.
+### Continue request blocked at authRequired phase without credentials
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L41-L43" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L74-L80" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_commands.spec.js#L56-L60" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Open a tab with a reference browsing context
-A reference browsing context is a [top-level browsing context](https://html.spec.whatwg.org/multipage/document-sequences.html#top-level-browsing-context). 
-The API allows to pass the reference browsing context, which is used to create a new tab. The implementation is operating system specific.
+### Cancel request blocked at authRequired phase
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L55-L57" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L90-L96" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_commands.spec.js#L71-L75" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Navigate to a URL
+### Fail request
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L63-L65" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L104-L108" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
@@ -134,88 +133,73 @@ The API allows to pass the reference browsing context, which is used to create a
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Navigate to a URL with readiness state
+## Events
 
-{{< tabpane text=true >}}
-{{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L74-L77" >}}
-{{< /tab >}}
-{{< tab header="Ruby" >}}
-{{< badge-code >}}
-{{< /tab >}}
-{{< tab header="JavaScript" >}}
-{{< badge-code >}}
-{{< /tab >}}
-{{< tab header="Kotlin" >}}
-{{< badge-code >}}
-{{< /tab >}}
-{{< /tabpane >}}
+This section contains the APIs related to network events. 
 
-## Get browsing context tree
-
-Provides a tree of all browsing contexts descending from the parent browsing context, including the parent browsing context.
+### Before Request Sent
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L86-L91" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkEventsTest.java#L30-L35" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_events.spec.js#L23-L29" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Get browsing context tree with depth
-
-Provides a tree of all browsing contexts descending from the parent browsing context, including the parent browsing context upto the depth value passed.
+### Response Started
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L102-L105" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkEventsTest.java#L45-L51" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_events.spec.js#L82-L88" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Get All Top level browsing contexts
+### Response Completed
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L117-L120" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkEventsTest.java#L62-L68" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_events.spec.js#L96-L102" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Close a tab/window
+### Auth Required
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L127-L130" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkEventsTest.java#L101-L106" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
@@ -226,4 +210,4 @@ Provides a tree of all browsing contexts descending from the parent browsing con
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
-{{< /tabpane >}}
\ No newline at end of file
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/browsing_context.pt-br.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/network.pt-br.md
similarity index 52%
rename from website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/browsing_context.pt-br.md
rename to website_and_docs/content/documentation/webdriver/bidi/w3c/network.pt-br.md
index fe0a59287f07..ce3f5d5508e5 100644
--- a/website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/browsing_context.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/bidi/w3c/network.pt-br.md
@@ -1,7 +1,10 @@
 ---
-title: "Browsing Context"
-linkTitle: "Browsing Context"
+title: "Network"
+linkTitle: "Network"
 weight: 1
+aliases: [
+  "/documentation/en/webdriver/bidirectional/bidirectional_w3c/network",
+]
 ---
 
 {{% pageinfo color="warning" %}}
@@ -13,115 +16,111 @@ weight: 1
 </p>
 {{% /pageinfo %}}
 
-This section contains the APIs related to browsing context commands. 
+# Commands
 
-## Open a new window
+This section contains the APIs related to network commands. 
 
-Creates a new browsing context in a new window.
+### Add network intercept
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L35" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L36-L38" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_commands.spec.js#L29" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Open a new tab
-
-Creates a new browsing context in a new tab.
+### Remove network intercept
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L49" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L46-L50" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_commands.spec.js#L34-L35" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Use existing window handle
-
-Creates a browsing context for the existing tab/window to run commands.
+### Continue request blocked at authRequired phase with credentials
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L28-L29" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L57-L64" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_commands.spec.js#L42-L46" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-
-## Open a window with a reference browsing context
-A reference browsing context is a [top-level browsing context](https://html.spec.whatwg.org/multipage/document-sequences.html#top-level-browsing-context). 
-The API allows to pass the reference browsing context, which is used to create a new window. The implementation is operating system specific.
+### Continue request blocked at authRequired phase without credentials
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L41-L43" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L74-L80" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_commands.spec.js#L56-L60" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Open a tab with a reference browsing context
-A reference browsing context is a [top-level browsing context](https://html.spec.whatwg.org/multipage/document-sequences.html#top-level-browsing-context). 
-The API allows to pass the reference browsing context, which is used to create a new tab. The implementation is operating system specific.
+### Cancel request blocked at authRequired phase
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L55-L57" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L90-L96" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_commands.spec.js#L71-L75" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Navigate to a URL
+### Fail request
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L63-L65" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L104-L108" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
@@ -134,88 +133,73 @@ The API allows to pass the reference browsing context, which is used to create a
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Navigate to a URL with readiness state
-
-{{< tabpane text=true >}}
-{{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L74-L77" >}}
-{{< /tab >}}
-{{< tab header="Ruby" >}}
-{{< badge-code >}}
-{{< /tab >}}
-{{< tab header="JavaScript" >}}
-{{< badge-code >}}
-{{< /tab >}}
-{{< tab header="Kotlin" >}}
-{{< badge-code >}}
-{{< /tab >}}
-{{< /tabpane >}}
+## Events
 
-## Get browsing context tree
+This section contains the APIs related to network events. 
 
-Provides a tree of all browsing contexts descending from the parent browsing context, including the parent browsing context.
+### Before Request Sent
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L86-L91" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkEventsTest.java#L30-L35" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_events.spec.js#L23-L29" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Get browsing context tree with depth
-
-Provides a tree of all browsing contexts descending from the parent browsing context, including the parent browsing context upto the depth value passed.
+### Response Started
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L102-L105" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkEventsTest.java#L45-L51" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_events.spec.js#L82-L88" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Get All Top level browsing contexts
+### Response Completed
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L117-L120" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkEventsTest.java#L62-L68" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_events.spec.js#L96-L102" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Close a tab/window
+### Auth Required
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L127-L130" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkEventsTest.java#L101-L106" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
@@ -226,4 +210,5 @@ Provides a tree of all browsing contexts descending from the parent browsing con
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
-{{< /tabpane >}}
\ No newline at end of file
+{{< /tabpane >}}
+
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/browsing_context.zh-cn.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/network.zh-cn.md
similarity index 52%
rename from website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/browsing_context.zh-cn.md
rename to website_and_docs/content/documentation/webdriver/bidi/w3c/network.zh-cn.md
index fa2c6d9773bb..7788c2d76396 100644
--- a/website_and_docs/content/documentation/webdriver/bidirectional/webdriver_bidi/browsing_context.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/bidi/w3c/network.zh-cn.md
@@ -1,7 +1,10 @@
 ---
-title: "Browsing Context"
-linkTitle: "Browsing Context"
+title: "Network"
+linkTitle: "Network"
 weight: 1
+aliases: [
+  "/documentation/en/webdriver/bidirectional/bidirectional_w3c/network",
+]
 ---
 
 {{% pageinfo color="warning" %}}
@@ -13,115 +16,111 @@ weight: 1
 </p>
 {{% /pageinfo %}}
 
-This section contains the APIs related to browsing context commands. 
+## Commands
 
-## Open a new window
+This section contains the APIs related to network commands. 
 
-Creates a new browsing context in a new window.
+### Add network intercept
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L35" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L36-L38" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_commands.spec.js#L29" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Open a new tab
-
-Creates a new browsing context in a new tab.
+### Remove network intercept
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L49" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L46-L50" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_commands.spec.js#L34-L35" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Use existing window handle
-
-Creates a browsing context for the existing tab/window to run commands.
+### Continue request blocked at authRequired phase with credentials
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L28-L29" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L57-L64" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_commands.spec.js#L42-L46" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-
-## Open a window with a reference browsing context
-A reference browsing context is a [top-level browsing context](https://html.spec.whatwg.org/multipage/document-sequences.html#top-level-browsing-context). 
-The API allows to pass the reference browsing context, which is used to create a new window. The implementation is operating system specific.
+### Continue request blocked at authRequired phase without credentials
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L41-L43" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L74-L80" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_commands.spec.js#L56-L60" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Open a tab with a reference browsing context
-A reference browsing context is a [top-level browsing context](https://html.spec.whatwg.org/multipage/document-sequences.html#top-level-browsing-context). 
-The API allows to pass the reference browsing context, which is used to create a new tab. The implementation is operating system specific.
+### Cancel request blocked at authRequired phase
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L55-L57" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L90-L96" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_commands.spec.js#L71-L75" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Navigate to a URL
+### Fail request
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L63-L65" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkCommandsTest.java#L104-L108" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
@@ -134,88 +133,73 @@ The API allows to pass the reference browsing context, which is used to create a
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Navigate to a URL with readiness state
+## Events
 
-{{< tabpane text=true >}}
-{{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L74-L77" >}}
-{{< /tab >}}
-{{< tab header="Ruby" >}}
-{{< badge-code >}}
-{{< /tab >}}
-{{< tab header="JavaScript" >}}
-{{< badge-code >}}
-{{< /tab >}}
-{{< tab header="Kotlin" >}}
-{{< badge-code >}}
-{{< /tab >}}
-{{< /tabpane >}}
+This section contains the APIs related to network events. 
 
-## Get browsing context tree
-
-Provides a tree of all browsing contexts descending from the parent browsing context, including the parent browsing context.
+### Before Request Sent
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L86-L91" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkEventsTest.java#L30-L35" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_events.spec.js#L23-L29" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Get browsing context tree with depth
-
-Provides a tree of all browsing contexts descending from the parent browsing context, including the parent browsing context upto the depth value passed.
+### Response Started
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L102-L105" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkEventsTest.java#L45-L51" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_events.spec.js#L82-L88" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Get All Top level browsing contexts
+### Response Completed
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L117-L120" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkEventsTest.java#L62-L68" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/network_events.spec.js#L96-L102" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Close a tab/window
+### Auth Required
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-version version="4.8" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/BrowsingContextTest.java#L127-L130" >}}
+{{< badge-version version="4.17" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/NetworkEventsTest.java#L101-L106" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
@@ -226,4 +210,4 @@ Provides a tree of all browsing contexts descending from the parent browsing con
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
-{{< /tabpane >}}
\ No newline at end of file
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/w3c/script.en.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/script.en.md
new file mode 100644
index 000000000000..f49919513e7f
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/w3c/script.en.md
@@ -0,0 +1,339 @@
+---
+title: "Script"
+linkTitle: "Script"
+weight: 1
+aliases: [
+  "/documentation/en/webdriver/bidirectional/bidirectional_w3c/script",
+]
+---
+
+## Commands
+This section contains the APIs related to script commands. 
+
+### Call function in a browsing context
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L52-L75" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L32-L53" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Call function in a sandbox
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L201-L210" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L202-L204" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Call function in a realm
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L219-L229" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L222-L227" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Evaluate script in a browsing context
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L239-L242" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L237-L239" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Evaluate script in a sandbox
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L280-L283" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L279-L283" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Evaluate script in a realm
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L293-L299" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L292-L299" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Disown handles in a browsing context
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L322-L322" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L330-L330" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Disown handles in a realm
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L375-L375" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L372-L372" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get all realms
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L391-L392" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L383-L385" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get realm by type
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L401-402" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L393-L395" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get browsing context realms
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L411-412" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L403-L405" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get browsing context realms by type
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L422-423" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L416-L416" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Preload a script 
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L463-463" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L424-L426" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Remove a preloaded script 
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L486-486" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L471-L471" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Events
+This section contains the APIs related to script events. 
+
+### Message
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptEventsTest.java#L37-L51" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_events.spec.js#L26-L43" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Realm Created 
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptEventsTest.java#L58-L68" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_events.spec.js#L52-L65" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Realm Destroyed
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptEventsTest.java#L75-L85" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.19" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_events.spec.js#L73-L86" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+
diff --git a/website_and_docs/content/documentation/webdriver/bidi/w3c/script.ja.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/script.ja.md
new file mode 100644
index 000000000000..6e599f05818c
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/w3c/script.ja.md
@@ -0,0 +1,347 @@
+---
+title: "Script"
+linkTitle: "Script"
+weight: 1
+aliases: [
+  "/documentation/en/webdriver/bidirectional/bidirectional_w3c/script",
+]
+---
+
+{{% pageinfo color="warning" %}}
+<p class="lead">
+   <i class="fas fa-language d-4"></i>
+   Page being translated from
+   English to Japanese. Do you speak Japanese? Help us to translate
+   it by sending us pull requests!
+</p>
+{{% /pageinfo %}}
+
+
+## Commands
+This section contains the APIs related to script commands. 
+
+### Call function in a browsing context
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L52-L75" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L32-L53" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Call function in a sandbox
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L201-L210" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L202-L204" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Call function in a realm
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L219-L229" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L222-L227" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Evaluate script in a browsing context
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L239-L242" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L237-L239" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Evaluate script in a sandbox
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L280-L283" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L279-L283" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Evaluate script in a realm
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L293-L299" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L292-L299" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Disown handles in a browsing context
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L322-L322" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L330-L330" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Disown handles in a realm
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L375-L375" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L372-L372" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get all realms
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L391-L392" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L383-L385" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get realm by type
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L401-402" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L393-L395" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get browsing context realms
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L411-412" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L403-L405" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get browsing context realms by type
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L422-423" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L416-L416" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Preload a script 
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L463-463" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L424-L426" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Remove a preloaded script 
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L486-486" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L471-L471" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Events
+This section contains the APIs related to script events. 
+
+### Message
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptEventsTest.java#L37-L51" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_events.spec.js#L26-L43" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Realm Created 
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptEventsTest.java#L58-L68" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_events.spec.js#L52-L65" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Realm Destroyed
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptEventsTest.java#L75-L85" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.19" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_events.spec.js#L73-L86" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/w3c/script.pt-br.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/script.pt-br.md
new file mode 100644
index 000000000000..8d2aa29c98d5
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/w3c/script.pt-br.md
@@ -0,0 +1,347 @@
+---
+title: "Script"
+linkTitle: "Script"
+weight: 1
+aliases: [
+  "/documentation/en/webdriver/bidirectional/bidirectional_w3c/script",
+]
+---
+
+{{% pageinfo color="warning" %}}
+<p class="lead">
+   <i class="fas fa-language d-4"></i>
+   Page being translated from
+   English to Portuguese. Do you speak Portuguese? Help us to translate
+   it by sending us pull requests!
+</p>
+{{% /pageinfo %}}
+
+
+## Commands
+This section contains the APIs related to script commands. 
+
+### Call function in a browsing context
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L52-L75" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L32-L53" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Call function in a sandbox
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L201-L210" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L202-L204" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Call function in a realm
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L219-L229" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L222-L227" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Evaluate script in a browsing context
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L239-L242" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L237-L239" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Evaluate script in a sandbox
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L280-L283" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L279-L283" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Evaluate script in a realm
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L293-L299" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L292-L299" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Disown handles in a browsing context
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L322-L322" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L330-L330" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Disown handles in a realm
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L375-L375" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L372-L372" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get all realms
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L391-L392" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L383-L385" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get realm by type
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L401-402" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L393-L395" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get browsing context realms
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L411-412" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L403-L405" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get browsing context realms by type
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L422-423" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L416-L416" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Preload a script 
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L463-463" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L424-L426" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Remove a preloaded script 
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L486-486" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L471-L471" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Events
+This section contains the APIs related to script events. 
+
+### Message
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptEventsTest.java#L37-L51" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_events.spec.js#L26-L43" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Realm Created 
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptEventsTest.java#L58-L68" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_events.spec.js#L52-L65" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Realm Destroyed
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptEventsTest.java#L75-L85" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.19" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_events.spec.js#L73-L86" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidi/w3c/script.zh-cn.md b/website_and_docs/content/documentation/webdriver/bidi/w3c/script.zh-cn.md
new file mode 100644
index 000000000000..82dfefda80d8
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/bidi/w3c/script.zh-cn.md
@@ -0,0 +1,347 @@
+---
+title: "Script"
+linkTitle: "Script"
+weight: 1
+aliases: [
+  "/documentation/en/webdriver/bidirectional/bidirectional_w3c/script",
+]
+---
+
+{{% pageinfo color="warning" %}}
+<p class="lead">
+   <i class="fas fa-language d-4"></i>
+   Page being translated from
+   English to Chinese. Do you speak Chinese? Help us to translate
+   it by sending us pull requests!
+</p>
+{{% /pageinfo %}}
+
+
+## Commands
+This section contains the APIs related to script commands. 
+
+### Call function in a browsing context
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L52-L75" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L32-L53" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Call function in a sandbox
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L201-L210" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L202-L204" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Call function in a realm
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L219-L229" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L222-L227" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Evaluate script in a browsing context
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L239-L242" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L237-L239" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Evaluate script in a sandbox
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L280-L283" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L279-L283" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Evaluate script in a realm
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L293-L299" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L292-L299" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Disown handles in a browsing context
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L322-L322" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L330-L330" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Disown handles in a realm
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L375-L375" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L372-L372" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get all realms
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L391-L392" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L383-L385" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get realm by type
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L401-402" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L393-L395" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get browsing context realms
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L411-412" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L403-L405" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Get browsing context realms by type
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L422-423" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.9" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L416-L416" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Preload a script 
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L463-463" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L424-L426" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Remove a preloaded script 
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.15" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptTest.java#L486-486" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.10" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_commands.spec.js#L471-L471" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Events
+This section contains the APIs related to script events. 
+
+### Message
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptEventsTest.java#L37-L51" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_events.spec.js#L26-L43" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Realm Created 
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptEventsTest.java#L58-L68" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.18" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_events.spec.js#L52-L65" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Realm Destroyed
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< badge-version version="4.16" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/webdriver_bidi/ScriptEventsTest.java#L75-L85" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-version version="4.19" >}}
+{{< gh-codeblock path="/examples/javascript/test/bidirectional/script_events.spec.js#L73-L86" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/_index.en.md b/website_and_docs/content/documentation/webdriver/bidirectional/_index.en.md
deleted file mode 100644
index 2582c19467ee..000000000000
--- a/website_and_docs/content/documentation/webdriver/bidirectional/_index.en.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-title: "BiDirectional functionality"
-linkTitle: "BiDirectional"
-weight: 16
-aliases: [
-"/documentation/en/webdriver/bidi_apis/",
-"/documentation/webdriver/bidi_apis/",
-"/documentation/webdriver/bidirectional/bidi_api_remotewebdriver"
-]
----
-
-Selenium is working with browser vendors to create the
-[WebDriver BiDirectional Protocol](https://w3c.github.io/webdriver-bidi/)
-as a means to provide a stable, cross-browser API that uses the bidirectional
-functionality useful for both browser automation generally and testing specifically.
-Before now, users seeking this functionality have had to rely on CDP (Chrome DevTools Protocol)
-with all of its frustrations and limitations.
-
-The traditional WebDriver model of strict request/response commands will be supplemented
-with the ability to stream events from the user agent to the controlling software via WebSockets,
-better matching the evented nature of the browser DOM.
-
-As it is not a good idea to tie your tests to a specific version of any browser, the
-Selenium project recommends using WebDriver BiDi wherever possible.
-
-While the specification is in works, the browser vendors are parallely implementing
-the [WebDriver BiDirectional Protocol](https://w3c.github.io/webdriver-bidi/).
-Refer [web-platform-tests dashboard](https://wpt.fyi/results/webdriver/tests/bidi?label=experimental&label=master&aligned&view=subtest)
-to see how far along the browser vendors are. 
-Selenium is trying to keep up with the browser vendors and has started implementing W3C BiDi APIs.
-The goal is to ensure APIs are W3C compliant and uniform among the different language bindings.
-
-However, until the specification and corresponding Selenium implementation is complete there are many useful things that 
-CDP offers. Selenium offers some useful helper classes that use CDP.
\ No newline at end of file
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/_index.ja.md b/website_and_docs/content/documentation/webdriver/bidirectional/_index.ja.md
deleted file mode 100644
index 39b4dfdadd99..000000000000
--- a/website_and_docs/content/documentation/webdriver/bidirectional/_index.ja.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: "BiDirectional Functionality"
-linkTitle: "BiDirectional"
-weight: 16
-aliases: [
-"/documentation/ja/webdriver/bidi_apis/",
-"/ja/documentation/webdriver/bidi_apis/",
-"/ja/documentation/webdriver/bidirectional/bidi_api_remotewebdriver"
-]
----
-
-{{% pageinfo color="warning" %}}
-<p class="lead">
-   <i class="fas fa-language d-4"></i> 
-    Page being translated from English to Japanese. 
-    Do you speak Japanese? Help us to translate
-    it by sending us pull requests!
-</p>
-{{% /pageinfo %}}
-
-Selenium is working with browser vendors to create the
-[WebDriver BiDirectional Protocol](https://w3c.github.io/webdriver-bidi/)
-as a means to provide a stable, cross-browser API that uses the bidirectional
-functionality useful for both browser automation generally and testing specifically.
-Before now, users seeking this functionality have had to rely on
-with all of its frustrations and limitations.
-
-The traditional WebDriver model of strict request/response commands will be supplemented
-with the ability to stream events from the user agent to the controlling software via WebSockets,
-better matching the evented nature of the browser DOM.
-
-As it is not a good idea to tie your tests to a specific version of any browser, the
-Selenium project recommends using WebDriver BiDi wherever possible.
-
-While the specification is in works, the browser vendors are parallely implementing
-the [WebDriver BiDirectional Protocol](https://w3c.github.io/webdriver-bidi/).
-Refer [web-platform-tests dashboard](https://wpt.fyi/results/webdriver/tests/bidi?label=experimental&label=master&aligned&view=subtest)
-to see how far along the browser vendors are.
-Selenium is trying to keep up with the browser vendors and has started implementing W3C BiDi APIs.
-The goal is to ensure APIs are W3C compliant and uniform among the different language bindings.
-
-However, until the specification and corresponding Selenium implementation is complete there are many useful things that
-CDP offers. Selenium offers some useful helper classes that use CDP.
\ No newline at end of file
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/_index.pt-br.md b/website_and_docs/content/documentation/webdriver/bidirectional/_index.pt-br.md
deleted file mode 100644
index 218ad8df93a3..000000000000
--- a/website_and_docs/content/documentation/webdriver/bidirectional/_index.pt-br.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: "BiDirectional Functionality"
-linkTitle: "BiDirectional"
-weight: 16
-aliases: [
-"/documentation/pt-br/webdriver/bidi_apis/",
-"/pt-br/documentation/webdriver/bidi_apis/",
-"/pt-br/documentation/webdriver/bidirectional/bidi_api_remotewebdriver"
-]
----
-
-{{% pageinfo color="warning" %}}
-<p class="lead">
-   <i class="fas fa-language d-4"></i>
-   Page being translated from
-   English to Portuguese. Do you speak Portuguese? Help us to translate
-   it by sending us pull requests!
-</p>
-{{% /pageinfo %}}
-
-Selenium is working with browser vendors to create the
-[WebDriver BiDirectional Protocol](https://w3c.github.io/webdriver-bidi/)
-as a means to provide a stable, cross-browser API that uses the bidirectional
-functionality useful for both browser automation generally and testing specifically.
-Before now, users seeking this functionality have had to rely on
-with all of its frustrations and limitations.
-
-The traditional WebDriver model of strict request/response commands will be supplemented
-with the ability to stream events from the user agent to the controlling software via WebSockets,
-better matching the evented nature of the browser DOM.
-
-As it is not a good idea to tie your tests to a specific version of any browser, the
-Selenium project recommends using WebDriver BiDi wherever possible.
-
-While the specification is in works, the browser vendors are parallely implementing
-the [WebDriver BiDirectional Protocol](https://w3c.github.io/webdriver-bidi/).
-Refer [web-platform-tests dashboard](https://wpt.fyi/results/webdriver/tests/bidi?label=experimental&label=master&aligned&view=subtest)
-to see how far along the browser vendors are.
-Selenium is trying to keep up with the browser vendors and has started implementing W3C BiDi APIs.
-The goal is to ensure APIs are W3C compliant and uniform among the different language bindings.
-
-However, until the specification and corresponding Selenium implementation is complete there are many useful things that
-CDP offers. Selenium offers some useful helper classes that use CDP.
\ No newline at end of file
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/_index.zh-cn.md b/website_and_docs/content/documentation/webdriver/bidirectional/_index.zh-cn.md
deleted file mode 100644
index 731e9555de00..000000000000
--- a/website_and_docs/content/documentation/webdriver/bidirectional/_index.zh-cn.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-title: "双向协议"
-linkTitle: "双向协议"
-weight: 16
-aliases: [
-"/documentation/zh-cn/webdriver/bidi_apis/",
-"/zh-cn/documentation/webdriver/bidi_apis/",
-"/zh-cn/documentation/webdriver/bidirectional/bidi_api_remotewebdriver"
-]
----
-
-Selenium正在与浏览器供应商合作创建
-[WebDriver双向协议](https://w3c.github.io/webdriver-bidi/) ,
-作为一种提供稳定的跨浏览器API的方法,
-该API使用双向协议处理
-各种浏览器的通用自动化以及特定测试的需求.
-在此之前, 寻求此功能的用户
-必须忍受当前实现的全部问题和局限.
-
-
-严格限制请求响应命令的传统WebDriver模型, 
-将从user agent转变为基于WebSockets的软件控制, 
-通过这样完善流事件的能力, 
-以便更好地匹配浏览器DOM的事件性质.
-
-While the specification is in works, the browser vendors are parallely implementing
-the [WebDriver BiDirectional Protocol](https://w3c.github.io/webdriver-bidi/).
-Refer [web-platform-tests dashboard](https://wpt.fyi/results/webdriver/tests/bidi?label=experimental&label=master&aligned&view=subtest)
-to see how far along the browser vendors are.
-Selenium is trying to keep up with the browser vendors and has started implementing W3C BiDi APIs.
-The goal is to ensure APIs are W3C compliant and uniform among the different language bindings.
-
-However, until the specification and corresponding Selenium implementation is complete there are many useful things that
-CDP offers. Selenium offers some useful helper classes that use CDP.
\ No newline at end of file
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/_index.en.md b/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/_index.en.md
deleted file mode 100644
index 6965c884fc70..000000000000
--- a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/_index.en.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-title: "Chrome DevTools"
-linkTitle: "Chrome DevTools"
-weight: 2
-aliases: [
-"/documentation/en/support_packages/chrome_devtools/",
-"/documentation/support_packages/chrome_devtools/"
-]
----
-
-Many browsers provide "DevTools" -- a set of tools that are integrated with the browser that 
-developers can use to debug web apps and explore the performance of their pages. Google Chrome's 
-DevTools make use of a protocol called the Chrome DevTools Protocol (or "CDP" for short). 
-As the name suggests, this is not designed for testing, nor to have a stable API, so functionality 
-is highly dependent on the version of the browser.
-
-The [WebDriver BiDirectional Protocol](https://w3c.github.io/webdriver-bidi/) is the next generation of the 
-W3C WebDriver protocol and aims to provide a stable API implemented by all browsers, but it's not yet complete. 
-Until it is, Selenium provides access to 
-the CDP for those browsers that implement it (such as Google Chrome, or Microsoft Edge, and 
-Firefox), allowing you to enhance your tests in interesting ways. Some examples of what you can 
-do with it are given below.
-
-### Ways to Use Chrome DevTools With Selenium
-There are three different ways to access Chrome DevTools in Selenium. If you look for other examples online,
-you will likely see each of these mixed and matched.
-
-* The [CDP Endpoint]({{< ref "cdp_endpoint.md" >}}) was the first option available to users.
-It only works for the most simple things (setting state, getting basic information), and you
-have to know the "magic strings" for the domain and methods and key value pairs. 
-For basic requirements, this might be simpler than the other options. These methods are only temporarily supported.
-* The [CDP API]({{< ref "cdp_api.md" >}}) is an improvement on just using the endpoint because you can set
-do things asynchronously. Instead of a String and a Map, you can access the supported classes, 
-methods and parameters in the code. These methods are also only temporarily supported.
-* The [BiDi API]({{< ref "bidi_api.md" >}}) option should be used whenever possible because it
-abstracts away the implementation details entirely and will work with either CDP or WebDriver-BiDi
-when Selenium moves away from CDP.
-
-### Examples With Limited Value
-
-There are a number of commonly cited examples for using CDP that are of limited practical value.
-* **Geo Location** — almost all sites use the IP address to determine physical location, 
-so setting an emulated geolocation rarely has the desired effect.
-* **Overriding Device Metrics** — Chrome provides a great API for setting [Mobile Emulation](https://chromedriver.chromium.org/mobile-emulation)
-in the Options classes, which is generally superior to attempting to do this with CDP.
-
-Check out the examples in these documents for ways to do additional useful things:
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/_index.ja.md b/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/_index.ja.md
deleted file mode 100644
index 17b043d19b0f..000000000000
--- a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/_index.ja.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-title: "Chrome DevTools"
-linkTitle: "Chrome DevTools"
-weight: 2
-aliases: [
-"/documentation/ja/support_packages/chrome_devtools/",
-"/ja/documentation/support_packages/chrome_devtools/"
-]
----
-
-Many browsers provide "DevTools" -- a set of tools that are integrated with the browser that 
-developers can use to debug web apps and explore the performance of their pages. Google Chrome's 
-DevTools make use of a protocol called the Chrome DevTools Protocol (or "CDP" for short). 
-As the name suggests, this is not designed for testing, nor to have a stable API, so functionality 
-is highly dependent on the version of the browser.
-
-The [WebDriver BiDirectional Protocol](https://w3c.github.io/webdriver-bidi/) is the next generation of the 
-W3C WebDriver protocol and aims to provide a stable API implemented by all browsers, but it's not yet complete. 
-Until it is, Selenium provides access to 
-the CDP for those browsers that implement it (such as Google Chrome, or Microsoft Edge, and 
-Firefox), allowing you to enhance your tests in interesting ways. Some examples of what you can 
-do with it are given below.
-
-### Ways to Use Chrome DevTools With Selenium
-There are three different ways to access Chrome DevTools in Selenium. If you look for other examples online,
-you will likely see each of these mixed and matched.
-
-* The [CDP Endpoint]({{< ref "cdp_endpoint.md" >}}) was the first option available to users.
-It only works for the most simple things (setting state, getting basic information), and you
-have to know the "magic strings" for the domain and methods and key value pairs. 
-For basic requirements, this might be simpler than the other options. These methods are only temporarily supported.
-* The [CDP API]({{< ref "cdp_api.md" >}}) is an improvement on just using the endpoint because you can set
-do things asynchronously. Instead of a String and a Map, you can access the supported classes, 
-methods and parameters in the code. These methods are also only temporarily supported.
-* The [BiDi API]({{< ref "bidi_api.md" >}}) option should be used whenever possible because it
-abstracts away the implementation details entirely and will work with either CDP or WebDriver-BiDi
-when Selenium moves away from CDP.
-
-### Examples With Limited Value
-
-There are a number of commonly cited examples for using CDP that are of limited practical value.
-* **Geo Location** — almost all sites use the IP address to determine physical location, 
-so setting an emulated geolocation rarely has the desired effect.
-* **Overriding Device Metrics** — Chrome provides a great API for setting [Mobile Emulation](https://chromedriver.chromium.org/mobile-emulation)
-in the Options classes, which is generally superior to attempting to do this with CDP.
-
-Check out the examples in these documents for ways to do additional useful things:
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/_index.pt-br.md b/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/_index.pt-br.md
deleted file mode 100644
index d9256c366fe6..000000000000
--- a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/_index.pt-br.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-title: "Chrome DevTools"
-linkTitle: "Chrome DevTools"
-weight: 2
-aliases: [
-"/documentation/pt-br/support_packages/chrome_devtools/",
-"/pt-br/documentation/support_packages/chrome_devtools/"
-]
----
-
-Many browsers provide "DevTools" -- a set of tools that are integrated with the browser that 
-developers can use to debug web apps and explore the performance of their pages. Google Chrome's 
-DevTools make use of a protocol called the Chrome DevTools Protocol (or "CDP" for short). 
-As the name suggests, this is not designed for testing, nor to have a stable API, so functionality 
-is highly dependent on the version of the browser.
-
-The [WebDriver BiDirectional Protocol](https://w3c.github.io/webdriver-bidi/) is the next generation of the 
-W3C WebDriver protocol and aims to provide a stable API implemented by all browsers, but it's not yet complete. 
-Until it is, Selenium provides access to 
-the CDP for those browsers that implement it (such as Google Chrome, or Microsoft Edge, and 
-Firefox), allowing you to enhance your tests in interesting ways. Some examples of what you can 
-do with it are given below.
-
-### Ways to Use Chrome DevTools With Selenium
-There are three different ways to access Chrome DevTools in Selenium. If you look for other examples online,
-you will likely see each of these mixed and matched.
-
-* The [CDP Endpoint]({{< ref "cdp_endpoint.md" >}}) was the first option available to users.
-It only works for the most simple things (setting state, getting basic information), and you
-have to know the "magic strings" for the domain and methods and key value pairs. 
-For basic requirements, this might be simpler than the other options. These methods are only temporarily supported.
-* The [CDP API]({{< ref "cdp_api.md" >}}) is an improvement on just using the endpoint because you can set
-do things asynchronously. Instead of a String and a Map, you can access the supported classes, 
-methods and parameters in the code. These methods are also only temporarily supported.
-* The [BiDi API]({{< ref "bidi_api.md" >}}) option should be used whenever possible because it
-abstracts away the implementation details entirely and will work with either CDP or WebDriver-BiDi
-when Selenium moves away from CDP.
-
-### Examples With Limited Value
-
-There are a number of commonly cited examples for using CDP that are of limited practical value.
-* **Geo Location** — almost all sites use the IP address to determine physical location, 
-so setting an emulated geolocation rarely has the desired effect.
-* **Overriding Device Metrics** — Chrome provides a great API for setting [Mobile Emulation](https://chromedriver.chromium.org/mobile-emulation)
-in the Options classes, which is generally superior to attempting to do this with CDP.
-
-Check out the examples in these documents for ways to do additional useful things:
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/_index.zh-cn.md b/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/_index.zh-cn.md
deleted file mode 100644
index 0ad7b3c715f7..000000000000
--- a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/_index.zh-cn.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-title: "Chrome DevTools"
-linkTitle: "Chrome DevTools"
-weight: 2
-aliases: [
-"/documentation/zh-cn/support_packages/chrome_devtools/",
-"/zh-cn/documentation/support_packages/chrome_devtools/"
-]
----
-
-Many browsers provide "DevTools" -- a set of tools that are integrated with the browser that 
-developers can use to debug web apps and explore the performance of their pages. Google Chrome's 
-DevTools make use of a protocol called the Chrome DevTools Protocol (or "CDP" for short). 
-As the name suggests, this is not designed for testing, nor to have a stable API, so functionality 
-is highly dependent on the version of the browser.
-
-The [WebDriver BiDirectional Protocol](https://w3c.github.io/webdriver-bidi/) is the next generation of the 
-W3C WebDriver protocol and aims to provide a stable API implemented by all browsers, but it's not yet complete. 
-Until it is, Selenium provides access to 
-the CDP for those browsers that implement it (such as Google Chrome, or Microsoft Edge, and 
-Firefox), allowing you to enhance your tests in interesting ways. Some examples of what you can 
-do with it are given below.
-
-### Ways to Use Chrome DevTools With Selenium
-There are three different ways to access Chrome DevTools in Selenium. If you look for other examples online,
-you will likely see each of these mixed and matched.
-
-* The [CDP Endpoint]({{< ref "cdp_endpoint.md" >}}) was the first option available to users.
-It only works for the most simple things (setting state, getting basic information), and you
-have to know the "magic strings" for the domain and methods and key value pairs. 
-For basic requirements, this might be simpler than the other options. These methods are only temporarily supported.
-* The [CDP API]({{< ref "cdp_api.md" >}}) is an improvement on just using the endpoint because you can set
-do things asynchronously. Instead of a String and a Map, you can access the supported classes, 
-methods and parameters in the code. These methods are also only temporarily supported.
-* The [BiDi API]({{< ref "bidi_api.md" >}}) option should be used whenever possible because it
-abstracts away the implementation details entirely and will work with either CDP or WebDriver-BiDi
-when Selenium moves away from CDP.
-
-### Examples With Limited Value
-
-There are a number of commonly cited examples for using CDP that are of limited practical value.
-* **Geo Location** — almost all sites use the IP address to determine physical location, 
-so setting an emulated geolocation rarely has the desired effect.
-* **Overriding Device Metrics** — Chrome provides a great API for setting [Mobile Emulation](https://chromedriver.chromium.org/mobile-emulation)
-in the Options classes, which is generally superior to attempting to do this with CDP.
-
-Check out the examples in these documents for ways to do additional useful things:
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/bidi_api.en.md b/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/bidi_api.en.md
deleted file mode 100644
index da625febd386..000000000000
--- a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/bidi_api.en.md
+++ /dev/null
@@ -1,359 +0,0 @@
----
-title: "Chrome Devtools Protocol with BiDi API"
-linkTitle: "BiDi API"
-weight: 6
-description: >
-  These examples are currently implemented with CDP, but the same code should work when the functionality
-  is re-implemented with WebDriver-BiDi.
----
-
-## Usage
-
-The following list of APIs will be growing as the Selenium
-project works through supporting real world use cases. If there
-is additional functionality you'd like to see, please raise a
-[feature request](https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=&template=feature.md).
-
-As these examples are re-implemented with the [WebDriver-Bidi](https://w3c.github.io/webdriver-bidi) protocol, they will
-be moved to the [WebDriver Bidi]({{< ref "../webdriver_bidi/" >}}) pages.
-
-## Examples
-
-### Basic authentication
-
-Some applications make use of browser authentication to secure pages.
-It used to be common to handle them in the URL, but browser stopped supporting this.
-With BiDi, you can now provide the credentials when necessary
-
-Alternate implementations can be found at
-[CDP Endpoint Basic Authentication]({{< ref "cdp_endpoint#basic-authentication" >}})
-and [CDP API Basic Authentication]({{< ref "cdp_api#basic-authentication" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java#L36-L39" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-An alternate implementation may be found at
-[CDP Endpoint Basic Authentication]({{< ref "cdp_endpoint#basic-authentication" >}})
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L18-L27" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L9-L11" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-examples >}}
-```js
-const {Builder} = require('selenium-webdriver');
-
-(async function example() {
-  try {
-    let driver = await new Builder()
-      .forBrowser('chrome')
-      .build();
-
-    const pageCdpConnection = await driver.createCDPConnection('page');
-    await driver.register('username', 'password', pageCdpConnection);
-    await driver.get('https://the-internet.herokuapp.com/basic_auth');
-    await driver.quit();
-  }catch (e){
-    console.log(e)
-  }
-}())
-```
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-examples >}}
-```java
-val uriPredicate = Predicate { uri: URI ->
-        uri.host.contains("your-domain.com")
-    }
-(driver as HasAuthentication).register(uriPredicate, UsernameAndPassword.of("admin", "password"))
-driver.get("https://your-domain.com/login")
-```
-{{% /tab %}}
-{{< /tabpane >}}
-
-
-### Pin scripts
-
-This can be especially useful when executing on a remote server. For example,
-whenever you check the visibility of an element, or whenever you use
-the classic get attribute method, Selenium is sending the contents of a js file
-to the script execution endpoint. These files are each about 50kB, which adds up.
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L41-L43" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L22-L23" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-
-### Mutation observation
-
-Mutation Observation is the ability to capture events via
-WebDriver BiDi when there are DOM mutations on a specific
-element in the DOM.
-
-{{< tabpane text=true >}}
-  {{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java#L64-L65" >}}
-  {{% /tab %}}
-  {{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_bidi_api.py#L9-L11" >}}
-  {{% /tab %}}
-  {{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L59-L68" >}}
-  {{% /tab %}}
-  {{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L31-L32" >}}
-  {{< /tab >}}
-  {{% tab header="JavaScript" %}}
-  {{< badge-examples >}}
-```js
-const {Builder, until} = require('selenium-webdriver');
-const assert = require("assert");
-
-(async function example() {
-  try {
-    let driver = await new Builder()
-      .forBrowser('chrome')
-      .build();
-
-    const cdpConnection = await driver.createCDPConnection('page');
-    await driver.logMutationEvents(cdpConnection, event => {
-      assert.deepStrictEqual(event['attribute_name'], 'style');
-      assert.deepStrictEqual(event['current_value'], "");
-      assert.deepStrictEqual(event['old_value'], "display:none;");
-    });
-
-    await driver.get('dynamic.html');
-    await driver.findElement({id: 'reveal'}).click();
-    let revealed = driver.findElement({id: 'revealed'});
-    await driver.wait(until.elementIsVisible(revealed), 5000);
-    await driver.quit();
-  }catch (e){
-    console.log(e)
-  }
-}())
-```
-{{% /tab %}}
-  {{< tab header="Kotlin" >}}
-{{< badge-code >}}
-  {{< /tab >}}
-{{< /tabpane >}}
-
-
-### Console logs and errors
-
-Listen to the `console.log` events and register callbacks to process the event.
-
-[CDP API Console logs]({{< ref "cdp_api#console-logs-and-errors" >}})
-and [WebDriver BiDi Console logs]({{< ref "../webdriver_bidi/log#console-logs" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-Use the [WebDriver BiDi Console logs]({{< ref "../webdriver_bidi/log#console-logs" >}}) implementation. `HasLogEvents`
-will likely end up deprecated because it does not implement `Closeable`.
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java#L77-L78" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_bidi_api.py#L23-L26" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L85-L92" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L43-L44" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-examples >}}
-```js
-const {Builder} = require('selenium-webdriver');
-(async () => {
-  try {
-    let driver = new Builder()
-      .forBrowser('chrome')
-      .build();
-
-    const cdpConnection = await driver.createCDPConnection('page');
-    await driver.onLogEvent(cdpConnection, function (event) {
-      console.log(event['args'][0]['value']);
-    });
-    await driver.executeScript('console.log("here")');
-    await driver.quit();
-  }catch (e){
-    console.log(e);
-  }
-})()
-```
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-examples >}}
-```java
-fun kotlinConsoleLogExample() {
-    val driver = ChromeDriver()
-    val devTools = driver.devTools
-    devTools.createSession()
-
-    val logConsole = { c: ConsoleEvent -> print("Console log message is: " + c.messages)}
-    devTools.domains.events().addConsoleListener(logConsole)
-
-    driver.get("https://www.google.com")
-
-    val executor = driver as JavascriptExecutor
-    executor.executeScript("console.log('Hello World')")
-
-    val input = driver.findElement(By.name("q"))
-    input.sendKeys("Selenium 4")
-    input.sendKeys(Keys.RETURN)
-    driver.quit()
-}
-```
-{{% /tab %}}
-{{< /tabpane >}}
-
-
-### JavaScript exceptions
-
-Listen to the JS Exceptions
-and register callbacks to process the exception details.
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-Use the [WebDriver BiDi JavaScript exceptions]({{< ref "../webdriver_bidi/log#javascript-exceptions" >}}) implementation
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_bidi_api.py#L36-L39" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L107-L114" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L57-L58" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-
-### Network Interception
-
-Both requests and responses can be recorded or transformed.
-
-#### Response information
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java#L90-L101" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L125-L133" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L67-L72" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-#### Response transformation
-
-{{< tabpane text=true >}}
-{{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java#L111-L121" >}}
-{{< /tab >}}
-{{< tab header="Python" >}}
-{{< badge-implementation >}}
-{{< /tab >}}
-{{< tab header="CSharp" >}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L143-L156" >}}
-{{< /tab >}}
-{{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L79-L83" >}}
-{{< /tab >}}
-{{% tab header="JavaScript" %}}
-{{< badge-examples >}}
-```js
-const connection = await driver.createCDPConnection('page')
-let url = fileServer.whereIs("/cheese")
-let httpResponse = new HttpResponse(url)
-httpResponse.addHeaders("Content-Type", "UTF-8")
-httpResponse.body = "sausages"
-await driver.onIntercept(connection, httpResponse, async function () {
-  let body = await driver.getPageSource()
-  assert.strictEqual(body.includes("sausages"), true, `Body contains: ${body}`)
-})
-driver.get(url)
-```
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-examples >}}
-```java
-val driver = ChromeDriver()
-val interceptor = new NetworkInterceptor(
-      driver,
-      Route.matching(req -> true)
-        .to(() -> req -> new HttpResponse()
-          .setStatus(200)
-          .addHeader("Content-Type", MediaType.HTML_UTF_8.toString())
-          .setContent(utf8String("Creamy, delicious cheese!"))))
-
-    driver.get(appServer.whereIs("/cheese"))
-
-    String source = driver.getPageSource()
-```
-{{% /tab %}}
-{{< /tabpane >}}
-
-#### Request interception
-
-{{< tabpane text=true >}}
-{{< tab header="Java" >}}
-{{< badge-implementation >}}
-{{< /tab >}}
-{{< tab header="Python" >}}
-{{< badge-implementation >}}
-{{< /tab >}}
-{{< tab header="CSharp" >}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L167-L181" >}}
-{{< /tab >}}
-{{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L90-L94" >}}
-{{< /tab >}}
-{{< tab header="JavaScript" >}}
-{{< badge-code >}}
-{{< /tab >}}
-{{< tab header="Kotlin" >}}
-{{< badge-code >}}
-{{< /tab >}}
-{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/bidi_api.ja.md b/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/bidi_api.ja.md
deleted file mode 100644
index 659735eeaae2..000000000000
--- a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/bidi_api.ja.md
+++ /dev/null
@@ -1,361 +0,0 @@
----
-title: "Chrome Devtools Protocol with BiDi API"
-linkTitle: "BiDi API"
-weight: 6
-description: >
-  These examples are currently implemented with CDP, but the same code should work when the functionality
-  is re-implemented with WebDriver-BiDi.
----
-
-## Usage
-
-The following list of APIs will be growing as the Selenium
-project works through supporting real world use cases. If there
-is additional functionality you'd like to see, please raise a
-[feature request](https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=&template=feature.md).
-
-As these examples are re-implemented with the [WebDriver-Bidi](https://w3c.github.io/webdriver-bidi) protocol, they will
-be moved to the [WebDriver Bidi]({{< ref "../webdriver_bidi/" >}}) pages.
-
-## Examples
-
-### Basic authentication
-
-Some applications make use of browser authentication to secure pages.
-It used to be common to handle them in the URL, but browser stopped supporting this.
-With BiDi, you can now provide the credentials when necessary
-
-Alternate implementations can be found at
-[CDP Endpoint Basic Authentication]({{< ref "cdp_endpoint#basic-authentication" >}})
-and [CDP API Basic Authentication]({{< ref "cdp_api#basic-authentication" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java#L36-L39" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-An alternate implementation may be found at
-[CDP Endpoint Basic Authentication]({{< ref "cdp_endpoint#basic-authentication" >}})
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L18-L27" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L9-L11" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-examples >}}
-
-```js
-const {Builder} = require('selenium-webdriver');
-
-(async function example() {
-  try {
-    let driver = await new Builder()
-      .forBrowser('chrome')
-      .build();
-
-    const pageCdpConnection = await driver.createCDPConnection('page');
-    await driver.register('username', 'password', pageCdpConnection);
-    await driver.get('https://the-internet.herokuapp.com/basic_auth');
-    await driver.quit();
-  }catch (e){
-    console.log(e)
-  }
-}())
-```
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-examples >}}
-
-```java
-val uriPredicate = Predicate { uri: URI ->
-        uri.host.contains("your-domain.com")
-    }
-(driver as HasAuthentication).register(uriPredicate, UsernameAndPassword.of("admin", "password"))
-driver.get("https://your-domain.com/login")
-```
-{{% /tab %}}
-{{< /tabpane >}}
-
-
-### Pin scripts
-
-This can be especially useful when executing on a remote server. For example,
-whenever you check the visibility of an element, or whenever you use
-the classic get attribute method, Selenium is sending the contents of a js file
-to the script execution endpoint. These files are each about 50kB, which adds up.
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L41-L43" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L22-L23" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-
-### Mutation observation
-
-Mutation Observation is the ability to capture events via
-WebDriver BiDi when there are DOM mutations on a specific
-element in the DOM.
-
-{{< tabpane text=true >}}
-  {{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java#L64-L65" >}}
-  {{% /tab %}}
-  {{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_bidi_api.py#L9-L11" >}}
-  {{% /tab %}}
-  {{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L59-L68" >}}
-  {{% /tab %}}
-  {{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L31-L32" >}}
-  {{< /tab >}}
-  {{% tab header="JavaScript" %}}
-  {{< badge-examples >}}
-```js
-const {Builder, until} = require('selenium-webdriver');
-const assert = require("assert");
-
-(async function example() {
-  try {
-    let driver = await new Builder()
-      .forBrowser('chrome')
-      .build();
-
-    const cdpConnection = await driver.createCDPConnection('page');
-    await driver.logMutationEvents(cdpConnection, event => {
-      assert.deepStrictEqual(event['attribute_name'], 'style');
-      assert.deepStrictEqual(event['current_value'], "");
-      assert.deepStrictEqual(event['old_value'], "display:none;");
-    });
-
-    await driver.get('dynamic.html');
-    await driver.findElement({id: 'reveal'}).click();
-    let revealed = driver.findElement({id: 'revealed'});
-    await driver.wait(until.elementIsVisible(revealed), 5000);
-    await driver.quit();
-  }catch (e){
-    console.log(e)
-  }
-}())
-```
-{{% /tab %}}
-  {{< tab header="Kotlin" >}}
-{{< badge-code >}}
-  {{< /tab >}}
-{{< /tabpane >}}
-
-
-### Console logs and errors
-
-Listen to the `console.log` events and register callbacks to process the event.
-
-[CDP API Console logs]({{< ref "cdp_api#console-logs-and-errors" >}})
-and [WebDriver BiDi Console logs]({{< ref "../webdriver_bidi/log#console-logs" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-Use the [WebDriver BiDi Console logs]({{< ref "../webdriver_bidi/log#console-logs" >}}) implementation. `HasLogEvents`
-will likely end up deprecated because it does not implement `Closeable`.
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java#L77-L78" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_bidi_api.py#L23-L26" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L85-L92" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L43-L44" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-examples >}}
-```js
-const {Builder} = require('selenium-webdriver');
-(async () => {
-  try {
-    let driver = new Builder()
-      .forBrowser('chrome')
-      .build();
-
-    const cdpConnection = await driver.createCDPConnection('page');
-    await driver.onLogEvent(cdpConnection, function (event) {
-      console.log(event['args'][0]['value']);
-    });
-    await driver.executeScript('console.log("here")');
-    await driver.quit();
-  }catch (e){
-    console.log(e);
-  }
-})()
-```
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-examples >}}
-```java
-fun kotlinConsoleLogExample() {
-    val driver = ChromeDriver()
-    val devTools = driver.devTools
-    devTools.createSession()
-
-    val logConsole = { c: ConsoleEvent -> print("Console log message is: " + c.messages)}
-    devTools.domains.events().addConsoleListener(logConsole)
-
-    driver.get("https://www.google.com")
-
-    val executor = driver as JavascriptExecutor
-    executor.executeScript("console.log('Hello World')")
-
-    val input = driver.findElement(By.name("q"))
-    input.sendKeys("Selenium 4")
-    input.sendKeys(Keys.RETURN)
-    driver.quit()
-}
-```
-{{% /tab %}}
-{{< /tabpane >}}
-
-
-### JavaScript exceptions
-
-Listen to the JS Exceptions
-and register callbacks to process the exception details.
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-Use the [WebDriver BiDi JavaScript exceptions]({{< ref "../webdriver_bidi/log#javascript-exceptions" >}}) implementation
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_bidi_api.py#L36-L39" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L107-L114" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L57-L58" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-
-### Network Interception
-
-Both requests and responses can be recorded or transformed.
-
-#### Response information
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java#L90-L101" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L125-L133" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L67-L72" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-#### Response transformation
-
-{{< tabpane text=true >}}
-{{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java#L111-L121" >}}
-{{< /tab >}}
-{{< tab header="Python" >}}
-{{< badge-implementation >}}
-{{< /tab >}}
-{{< tab header="CSharp" >}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L143-L156" >}}
-{{< /tab >}}
-{{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L79-L83" >}}
-{{< /tab >}}
-{{% tab header="JavaScript" %}}
-{{< badge-examples >}}
-```js
-const connection = await driver.createCDPConnection('page')
-let url = fileServer.whereIs("/cheese")
-let httpResponse = new HttpResponse(url)
-httpResponse.addHeaders("Content-Type", "UTF-8")
-httpResponse.body = "sausages"
-await driver.onIntercept(connection, httpResponse, async function () {
-  let body = await driver.getPageSource()
-  assert.strictEqual(body.includes("sausages"), true, `Body contains: ${body}`)
-})
-driver.get(url)
-```
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-examples >}}
-```java
-val driver = ChromeDriver()
-val interceptor = new NetworkInterceptor(
-      driver,
-      Route.matching(req -> true)
-        .to(() -> req -> new HttpResponse()
-          .setStatus(200)
-          .addHeader("Content-Type", MediaType.HTML_UTF_8.toString())
-          .setContent(utf8String("Creamy, delicious cheese!"))))
-
-    driver.get(appServer.whereIs("/cheese"))
-
-    String source = driver.getPageSource()
-```
-{{% /tab %}}
-{{< /tabpane >}}
-
-#### Request interception
-
-{{< tabpane text=true >}}
-{{< tab header="Java" >}}
-{{< badge-implementation >}}
-{{< /tab >}}
-{{< tab header="Python" >}}
-{{< badge-implementation >}}
-{{< /tab >}}
-{{< tab header="CSharp" >}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L167-L181" >}}
-{{< /tab >}}
-{{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L90-L94" >}}
-{{< /tab >}}
-{{< tab header="JavaScript" >}}
-{{< badge-code >}}
-{{< /tab >}}
-{{< tab header="Kotlin" >}}
-{{< badge-code >}}
-{{< /tab >}}
-{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/bidi_api.pt-br.md b/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/bidi_api.pt-br.md
deleted file mode 100644
index b0174aef9bb8..000000000000
--- a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/bidi_api.pt-br.md
+++ /dev/null
@@ -1,350 +0,0 @@
----
-title: "Chrome Devtools Protocol with BiDi API"
-linkTitle: "BiDi API"
-weight: 6
-description: >
-  These examples are currently implemented with CDP, but the same code should work when the functionality
-  is re-implemented with WebDriver-BiDi.
----
-
-## Usage
-
-A seguinte lista de APIs crescerá à medida que o projeto Selenium se prepara
-para suportar casos de uso do mundo real. Se houver funcionalidades adicionais que você gostaria de ver, por favor, levante uma [solicitação de recurso](https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=&template=feature.md).
-
-As these examples are re-implemented with the [WebDriver-Bidi](https://w3c.github.io/webdriver-bidi) protocol, they will
-be moved to the [WebDriver Bidi]({{< ref "../webdriver_bidi/" >}}) pages.
-
-## Examples
-
-### Basic authentication
-
-Alguns aplicativos fazem o uso da autenticação do navegador para proteger suas páginas. Com o Selenium, você pode automatizar a entrada de credenciais básicas de autenticação sempre que for necessário.
-
-Alternate implementations can be found at
-[CDP Endpoint Basic Authentication]({{< ref "cdp_endpoint#basic-authentication" >}})
-and [CDP API Basic Authentication]({{< ref "cdp_api#basic-authentication" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java#L36-L39" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-An alternate implementation may be found at
-[CDP Endpoint Basic Authentication]({{< ref "cdp_endpoint#basic-authentication" >}})
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L18-L27" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L9-L11" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-examples >}}
-```js
-const {Builder} = require('selenium-webdriver');
-
-(async function example() {
-  try {
-    let driver = await new Builder()
-      .forBrowser('chrome')
-      .build();
-
-    const pageCdpConnection = await driver.createCDPConnection('page');
-    await driver.register('username', 'password', pageCdpConnection);
-    await driver.get('https://the-internet.herokuapp.com/basic_auth');
-    await driver.quit();
-  }catch (e){
-    console.log(e)
-  }
-}())
-```
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-examples >}}
-```java
-val uriPredicate = Predicate { uri: URI ->
-        uri.host.contains("your-domain.com")
-    }
-(driver as HasAuthentication).register(uriPredicate, UsernameAndPassword.of("admin", "password"))
-driver.get("https://your-domain.com/login")
-```
-{{% /tab %}}
-{{< /tabpane >}}
-
-
-### Pin scripts
-This can be especially useful when executing on a remote server. For example,
-whenever you check the visibility of an element, or whenever you use
-the classic get attribute method, Selenium is sending the contents of a js file
-to the script execution endpoint. These files are each about 50kB, which adds up.
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L41-L43" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L22-L23" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-
-### Mutation observation
-
-Mutation Observation(Observação de Mutação) é a capacidade de capturar eventos via WebDriver BiDi quando há mutações DOM em um elemento específico no DOM.
-
-{{< tabpane text=true >}}
-  {{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java#L64-L65" >}}
-  {{% /tab %}}
-  {{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_bidi_api.py#L9-L11" >}}
-  {{% /tab %}}
-  {{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L59-L68" >}}
-  {{% /tab %}}
-  {{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L31-L32" >}}
-  {{< /tab >}}
-  {{% tab header="JavaScript" %}}
-  {{< badge-examples >}}
-```js
-const {Builder, until} = require('selenium-webdriver');
-const assert = require("assert");
-
-(async function example() {
-  try {
-    let driver = await new Builder()
-      .forBrowser('chrome')
-      .build();
-
-    const cdpConnection = await driver.createCDPConnection('page');
-    await driver.logMutationEvents(cdpConnection, event => {
-      assert.deepStrictEqual(event['attribute_name'], 'style');
-      assert.deepStrictEqual(event['current_value'], "");
-      assert.deepStrictEqual(event['old_value'], "display:none;");
-    });
-
-    await driver.get('dynamic.html');
-    await driver.findElement({id: 'reveal'}).click();
-    let revealed = driver.findElement({id: 'revealed'});
-    await driver.wait(until.elementIsVisible(revealed), 5000);
-    await driver.quit();
-  }catch (e){
-    console.log(e)
-  }
-}())
-```
-{{% /tab %}}
-  {{< tab header="Kotlin" >}}
-{{< badge-code >}}
-  {{< /tab >}}
-{{< /tabpane >}}
-
-
-### Console logs and errors
-Vigie os eventos `console.log` e registre os callbacks(retornos de chamada) para processar o evento.
-
-[CDP API Console logs]({{< ref "cdp_api#console-logs-and-errors" >}})
-and [WebDriver BiDi Console logs]({{< ref "../webdriver_bidi/log#console-logs" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-Use the [WebDriver BiDi Console logs]({{< ref "../webdriver_bidi/log#console-logs" >}}) implementation. `HasLogEvents`
-will likely end up deprecated because it does not implement `Closeable`.
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java#L77-L78" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_bidi_api.py#L23-L26" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L85-L92" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L43-L44" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-examples >}}
-```js
-const {Builder} = require('selenium-webdriver');
-(async () => {
-  try {
-    let driver = new Builder()
-      .forBrowser('chrome')
-      .build();
-
-    const cdpConnection = await driver.createCDPConnection('page');
-    await driver.onLogEvent(cdpConnection, function (event) {
-      console.log(event['args'][0]['value']);
-    });
-    await driver.executeScript('console.log("here")');
-    await driver.quit();
-  }catch (e){
-    console.log(e);
-  }
-})()
-```
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-examples >}}
-```java
-fun kotlinConsoleLogExample() {
-    val driver = ChromeDriver()
-    val devTools = driver.devTools
-    devTools.createSession()
-
-    val logConsole = { c: ConsoleEvent -> print("Console log message is: " + c.messages)}
-    devTools.domains.events().addConsoleListener(logConsole)
-
-    driver.get("https://www.google.com")
-
-    val executor = driver as JavascriptExecutor
-    executor.executeScript("console.log('Hello World')")
-
-    val input = driver.findElement(By.name("q"))
-    input.sendKeys("Selenium 4")
-    input.sendKeys(Keys.RETURN)
-    driver.quit()
-}
-```
-{{% /tab %}}
-{{< /tabpane >}}
-
-### JavaScript exceptions
-
-Vigie as exceções JS
-e registre callbacks(retornos de chamada) para processar os detalhes da exceção.
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-Use the [WebDriver BiDi JavaScript exceptions]({{< ref "../webdriver_bidi/log#javascript-exceptions" >}}) implementation
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_bidi_api.py#L36-L39" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L107-L114" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L57-L58" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-
-### Interceptação de Rede
-
-Both requests and responses can be recorded or transformed.
-
-#### Response information
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java#L90-L101" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L125-L133" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L67-L72" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-#### Response transformation
-
-{{< tabpane text=true >}}
-{{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java#L111-L121" >}}
-{{< /tab >}}
-{{< tab header="Python" >}}
-{{< badge-implementation >}}
-{{< /tab >}}
-{{< tab header="CSharp" >}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L143-L156" >}}
-{{< /tab >}}
-{{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L79-L83" >}}
-{{< /tab >}}
-{{% tab header="JavaScript" %}}
-{{< badge-examples >}}
-```js
-const connection = await driver.createCDPConnection('page')
-let url = fileServer.whereIs("/cheese")
-let httpResponse = new HttpResponse(url)
-httpResponse.addHeaders("Content-Type", "UTF-8")
-httpResponse.body = "sausages"
-await driver.onIntercept(connection, httpResponse, async function () {
-  let body = await driver.getPageSource()
-  assert.strictEqual(body.includes("sausages"), true, `Body contains: ${body}`)
-})
-driver.get(url)
-```
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-examples >}}
-```java
-val driver = ChromeDriver()
-val interceptor = new NetworkInterceptor(
-      driver,
-      Route.matching(req -> true)
-        .to(() -> req -> new HttpResponse()
-          .setStatus(200)
-          .addHeader("Content-Type", MediaType.HTML_UTF_8.toString())
-          .setContent(utf8String("Creamy, delicious cheese!"))))
-
-    driver.get(appServer.whereIs("/cheese"))
-
-    String source = driver.getPageSource()
-```
-{{% /tab %}}
-{{< /tabpane >}}
-
-#### Request interception
-
-{{< tabpane text=true >}}
-{{< tab header="Java" >}}
-{{< badge-implementation >}}
-{{< /tab >}}
-{{< tab header="Python" >}}
-{{< badge-implementation >}}
-{{< /tab >}}
-{{< tab header="CSharp" >}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L167-L181" >}}
-{{< /tab >}}
-{{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L90-L94" >}}
-{{< /tab >}}
-{{< tab header="JavaScript" >}}
-{{< badge-code >}}
-{{< /tab >}}
-{{< tab header="Kotlin" >}}
-{{< badge-code >}}
-{{< /tab >}}
-{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/bidi_api.zh-cn.md b/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/bidi_api.zh-cn.md
deleted file mode 100644
index da625febd386..000000000000
--- a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/bidi_api.zh-cn.md
+++ /dev/null
@@ -1,359 +0,0 @@
----
-title: "Chrome Devtools Protocol with BiDi API"
-linkTitle: "BiDi API"
-weight: 6
-description: >
-  These examples are currently implemented with CDP, but the same code should work when the functionality
-  is re-implemented with WebDriver-BiDi.
----
-
-## Usage
-
-The following list of APIs will be growing as the Selenium
-project works through supporting real world use cases. If there
-is additional functionality you'd like to see, please raise a
-[feature request](https://github.com/SeleniumHQ/selenium/issues/new?assignees=&labels=&template=feature.md).
-
-As these examples are re-implemented with the [WebDriver-Bidi](https://w3c.github.io/webdriver-bidi) protocol, they will
-be moved to the [WebDriver Bidi]({{< ref "../webdriver_bidi/" >}}) pages.
-
-## Examples
-
-### Basic authentication
-
-Some applications make use of browser authentication to secure pages.
-It used to be common to handle them in the URL, but browser stopped supporting this.
-With BiDi, you can now provide the credentials when necessary
-
-Alternate implementations can be found at
-[CDP Endpoint Basic Authentication]({{< ref "cdp_endpoint#basic-authentication" >}})
-and [CDP API Basic Authentication]({{< ref "cdp_api#basic-authentication" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java#L36-L39" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-An alternate implementation may be found at
-[CDP Endpoint Basic Authentication]({{< ref "cdp_endpoint#basic-authentication" >}})
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L18-L27" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L9-L11" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-examples >}}
-```js
-const {Builder} = require('selenium-webdriver');
-
-(async function example() {
-  try {
-    let driver = await new Builder()
-      .forBrowser('chrome')
-      .build();
-
-    const pageCdpConnection = await driver.createCDPConnection('page');
-    await driver.register('username', 'password', pageCdpConnection);
-    await driver.get('https://the-internet.herokuapp.com/basic_auth');
-    await driver.quit();
-  }catch (e){
-    console.log(e)
-  }
-}())
-```
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-examples >}}
-```java
-val uriPredicate = Predicate { uri: URI ->
-        uri.host.contains("your-domain.com")
-    }
-(driver as HasAuthentication).register(uriPredicate, UsernameAndPassword.of("admin", "password"))
-driver.get("https://your-domain.com/login")
-```
-{{% /tab %}}
-{{< /tabpane >}}
-
-
-### Pin scripts
-
-This can be especially useful when executing on a remote server. For example,
-whenever you check the visibility of an element, or whenever you use
-the classic get attribute method, Selenium is sending the contents of a js file
-to the script execution endpoint. These files are each about 50kB, which adds up.
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L41-L43" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L22-L23" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-
-### Mutation observation
-
-Mutation Observation is the ability to capture events via
-WebDriver BiDi when there are DOM mutations on a specific
-element in the DOM.
-
-{{< tabpane text=true >}}
-  {{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java#L64-L65" >}}
-  {{% /tab %}}
-  {{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_bidi_api.py#L9-L11" >}}
-  {{% /tab %}}
-  {{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L59-L68" >}}
-  {{% /tab %}}
-  {{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L31-L32" >}}
-  {{< /tab >}}
-  {{% tab header="JavaScript" %}}
-  {{< badge-examples >}}
-```js
-const {Builder, until} = require('selenium-webdriver');
-const assert = require("assert");
-
-(async function example() {
-  try {
-    let driver = await new Builder()
-      .forBrowser('chrome')
-      .build();
-
-    const cdpConnection = await driver.createCDPConnection('page');
-    await driver.logMutationEvents(cdpConnection, event => {
-      assert.deepStrictEqual(event['attribute_name'], 'style');
-      assert.deepStrictEqual(event['current_value'], "");
-      assert.deepStrictEqual(event['old_value'], "display:none;");
-    });
-
-    await driver.get('dynamic.html');
-    await driver.findElement({id: 'reveal'}).click();
-    let revealed = driver.findElement({id: 'revealed'});
-    await driver.wait(until.elementIsVisible(revealed), 5000);
-    await driver.quit();
-  }catch (e){
-    console.log(e)
-  }
-}())
-```
-{{% /tab %}}
-  {{< tab header="Kotlin" >}}
-{{< badge-code >}}
-  {{< /tab >}}
-{{< /tabpane >}}
-
-
-### Console logs and errors
-
-Listen to the `console.log` events and register callbacks to process the event.
-
-[CDP API Console logs]({{< ref "cdp_api#console-logs-and-errors" >}})
-and [WebDriver BiDi Console logs]({{< ref "../webdriver_bidi/log#console-logs" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-Use the [WebDriver BiDi Console logs]({{< ref "../webdriver_bidi/log#console-logs" >}}) implementation. `HasLogEvents`
-will likely end up deprecated because it does not implement `Closeable`.
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java#L77-L78" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_bidi_api.py#L23-L26" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L85-L92" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L43-L44" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-examples >}}
-```js
-const {Builder} = require('selenium-webdriver');
-(async () => {
-  try {
-    let driver = new Builder()
-      .forBrowser('chrome')
-      .build();
-
-    const cdpConnection = await driver.createCDPConnection('page');
-    await driver.onLogEvent(cdpConnection, function (event) {
-      console.log(event['args'][0]['value']);
-    });
-    await driver.executeScript('console.log("here")');
-    await driver.quit();
-  }catch (e){
-    console.log(e);
-  }
-})()
-```
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-examples >}}
-```java
-fun kotlinConsoleLogExample() {
-    val driver = ChromeDriver()
-    val devTools = driver.devTools
-    devTools.createSession()
-
-    val logConsole = { c: ConsoleEvent -> print("Console log message is: " + c.messages)}
-    devTools.domains.events().addConsoleListener(logConsole)
-
-    driver.get("https://www.google.com")
-
-    val executor = driver as JavascriptExecutor
-    executor.executeScript("console.log('Hello World')")
-
-    val input = driver.findElement(By.name("q"))
-    input.sendKeys("Selenium 4")
-    input.sendKeys(Keys.RETURN)
-    driver.quit()
-}
-```
-{{% /tab %}}
-{{< /tabpane >}}
-
-
-### JavaScript exceptions
-
-Listen to the JS Exceptions
-and register callbacks to process the exception details.
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-Use the [WebDriver BiDi JavaScript exceptions]({{< ref "../webdriver_bidi/log#javascript-exceptions" >}}) implementation
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_bidi_api.py#L36-L39" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L107-L114" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L57-L58" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-
-### Network Interception
-
-Both requests and responses can be recorded or transformed.
-
-#### Response information
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java#L90-L101" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L125-L133" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L67-L72" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-implementation >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-#### Response transformation
-
-{{< tabpane text=true >}}
-{{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/BidiApiTest.java#L111-L121" >}}
-{{< /tab >}}
-{{< tab header="Python" >}}
-{{< badge-implementation >}}
-{{< /tab >}}
-{{< tab header="CSharp" >}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L143-L156" >}}
-{{< /tab >}}
-{{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L79-L83" >}}
-{{< /tab >}}
-{{% tab header="JavaScript" %}}
-{{< badge-examples >}}
-```js
-const connection = await driver.createCDPConnection('page')
-let url = fileServer.whereIs("/cheese")
-let httpResponse = new HttpResponse(url)
-httpResponse.addHeaders("Content-Type", "UTF-8")
-httpResponse.body = "sausages"
-await driver.onIntercept(connection, httpResponse, async function () {
-  let body = await driver.getPageSource()
-  assert.strictEqual(body.includes("sausages"), true, `Body contains: ${body}`)
-})
-driver.get(url)
-```
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-examples >}}
-```java
-val driver = ChromeDriver()
-val interceptor = new NetworkInterceptor(
-      driver,
-      Route.matching(req -> true)
-        .to(() -> req -> new HttpResponse()
-          .setStatus(200)
-          .addHeader("Content-Type", MediaType.HTML_UTF_8.toString())
-          .setContent(utf8String("Creamy, delicious cheese!"))))
-
-    driver.get(appServer.whereIs("/cheese"))
-
-    String source = driver.getPageSource()
-```
-{{% /tab %}}
-{{< /tabpane >}}
-
-#### Request interception
-
-{{< tabpane text=true >}}
-{{< tab header="Java" >}}
-{{< badge-implementation >}}
-{{< /tab >}}
-{{< tab header="Python" >}}
-{{< badge-implementation >}}
-{{< /tab >}}
-{{< tab header="CSharp" >}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/BidiApiTest.cs#L167-L181" >}}
-{{< /tab >}}
-{{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/bidi_api_spec.rb#L90-L94" >}}
-{{< /tab >}}
-{{< tab header="JavaScript" >}}
-{{< badge-code >}}
-{{< /tab >}}
-{{< tab header="Kotlin" >}}
-{{< badge-code >}}
-{{< /tab >}}
-{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_api.en.md b/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_api.en.md
deleted file mode 100644
index 54cb54f6c961..000000000000
--- a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_api.en.md
+++ /dev/null
@@ -1,208 +0,0 @@
----
-title: "Chrome DevTools Protocol API"
-linkTitle: "CDP API"
-weight: 4
-description: >
-  Each of the Selenium bindings dynamically generates classes and methods for the various CDP domains and features;
-  these are tied to specific versions of Chrome.
----
-
-{{% pageinfo color="warning" %}}
-While Selenium 4 provides direct access to the Chrome DevTools Protocol (CDP), these
-methods will eventually be removed. It is recommended to use the [WebDriver Bidi APIs]({{< ref "bidi_api.md" >}}) 
-methods where possible to ensure future compatibility.
-{{% /pageinfo %}}
-
-## Usage
-
-If your use case has been implemented by [WebDriver Bidi]({{< ref "../webdriver_bidi/" >}}) or
-the [BiDi API]({{< ref "bidi_api.md" >}}), you should use those implementations instead of this one.
-Generally you should prefer this approach over executing with the [CDP Endpoint]({{< ref "cdp_endpoint.md" >}}),
-especially in Ruby.
-
-
-## Examples
-
-### Set Cookie
-
-An alternate implementation can be found at [CDP Endpoint Set Cookie]({{< ref "cdp_endpoint#set-cookie" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-Because Java requires using all the parameters example, the Map approach used in
-[CDP Endpoint Set Cookie]({{< ref "cdp_endpoint#set-cookie" >}}) might be more simple.
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L47-L65" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-Because Python requires using async methods for this example, the synchronous approach found in
-[CDP Endpoint Set Cookie]({{< ref "cdp_endpoint#set-cookie" >}}) might be easier.
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_api.py#L10-L18" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-Due to the added complexity in .NET of obtaining the domains and executing with awaits, the
-[CDP Endpoint Set Cookie]({{< ref "cdp_endpoint#set-cookie" >}}) might be easier.
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpApiTest.cs#L25-L37" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb#L9-L12" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Performance Metrics
-
-An alternate implementation can be found at [CDP Endpoint Performance Metrics]({{< ref "cdp_endpoint#performance-metrics" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L77-L81" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-Because Python requires using async methods for this example, the synchronous approach found in
-[CDP Endpoint Performance Metrics]({{< ref "cdp_endpoint#performance-metrics" >}}) might be easier.
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_api.py#L30-L33" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-Due to the added complexity in .NET of obtaining the domains and executing with awaits, the
-[CDP Endpoint Performance Metrics]({{< ref "cdp_endpoint#performance-metrics" >}}) might be easier.
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpApiTest.cs#L49-L56" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb#L23-L25" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Basic authentication
-
-Alternate implementations can be found at 
-[CDP Endpoint Basic Authentication]({{< ref "cdp_endpoint#basic-authentication" >}}) 
-and [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-The [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L94-L101" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-Because Python requires using async methods for this example, the synchronous approach found in
-[CDP Endpoint Basic Authentication]({{< ref "cdp_endpoint#basic-authentication" >}}) might be easier.
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_api.py#L43-L49" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-Due to the added complexity in .NET of obtaining the domains and executing with awaits, the
-[CDP Endpoint Basic Authentication]({{< ref "cdp_endpoint#basic-authentication" >}}) might be easier.
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpApiTest.cs#L70-L83" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-The [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb#L36-L40" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Console logs
-
-Because reading console logs requires setting an event listener,
-this cannot be done with a CDP Endpoint implementation
-Alternate implementations can be found at
-[BiDi API Console logs and errors]({{< ref "bidi_api#console-logs-and-errors" >}})
-and [WebDriver BiDi Console logs]({{< ref "../webdriver_bidi/log#console-logs" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-Use the [WebDriver BiDi Console logs]({{< ref "../webdriver_bidi/log#console-logs" >}}) implementation
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L114-L121" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-Use the [BiDi API Console logs and errors]({{< ref "bidi_api#console-logs-and-errors" >}}) implementation
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-Use the [BiDi API Console logs and errors]({{< ref "bidi_api#console-logs-and-errors" >}}) implementation
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-The [BiDi API Console logs and errors]({{< ref "bidi_api#console-logs-and-errors" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb#L50-L55" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### JavaScript exceptions
-
-Similar to console logs, but this listens for actual javascript exceptions not just logged errors
-Alternate implementations can be found at
-[BiDi API JavaScript exceptions]({{< ref "bidi_api#javascript-exceptions" >}})
-and [WebDriver BiDi JavaScript exceptions]({{< ref "../webdriver_bidi/log#javascript-exceptions" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-Use the [WebDriver BiDi JavaScript exceptions]({{< ref "../webdriver_bidi/log#javascript-exceptions" >}}) implementation
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L133-L138" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-Use the [BiDi API JavaScript exceptions]({{< ref "bidi_api#javascript-exceptions" >}}) implementation
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-Use the [BiDi API JavaScript exceptions]({{< ref "bidi_api#javascript-exceptions" >}}) implementation
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-Use the [BiDi API JavaScript exceptions]({{< ref "bidi_api#javascript-exceptions" >}}) implementation
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Download complete
-
-Wait for a download to finish before continuing.
-Because getting download status requires setting a listener, this cannot be done with a CDP Endpoint implementation.
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L150-L162" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb#L66-L72" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_api.ja.md b/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_api.ja.md
deleted file mode 100644
index 54cb54f6c961..000000000000
--- a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_api.ja.md
+++ /dev/null
@@ -1,208 +0,0 @@
----
-title: "Chrome DevTools Protocol API"
-linkTitle: "CDP API"
-weight: 4
-description: >
-  Each of the Selenium bindings dynamically generates classes and methods for the various CDP domains and features;
-  these are tied to specific versions of Chrome.
----
-
-{{% pageinfo color="warning" %}}
-While Selenium 4 provides direct access to the Chrome DevTools Protocol (CDP), these
-methods will eventually be removed. It is recommended to use the [WebDriver Bidi APIs]({{< ref "bidi_api.md" >}}) 
-methods where possible to ensure future compatibility.
-{{% /pageinfo %}}
-
-## Usage
-
-If your use case has been implemented by [WebDriver Bidi]({{< ref "../webdriver_bidi/" >}}) or
-the [BiDi API]({{< ref "bidi_api.md" >}}), you should use those implementations instead of this one.
-Generally you should prefer this approach over executing with the [CDP Endpoint]({{< ref "cdp_endpoint.md" >}}),
-especially in Ruby.
-
-
-## Examples
-
-### Set Cookie
-
-An alternate implementation can be found at [CDP Endpoint Set Cookie]({{< ref "cdp_endpoint#set-cookie" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-Because Java requires using all the parameters example, the Map approach used in
-[CDP Endpoint Set Cookie]({{< ref "cdp_endpoint#set-cookie" >}}) might be more simple.
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L47-L65" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-Because Python requires using async methods for this example, the synchronous approach found in
-[CDP Endpoint Set Cookie]({{< ref "cdp_endpoint#set-cookie" >}}) might be easier.
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_api.py#L10-L18" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-Due to the added complexity in .NET of obtaining the domains and executing with awaits, the
-[CDP Endpoint Set Cookie]({{< ref "cdp_endpoint#set-cookie" >}}) might be easier.
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpApiTest.cs#L25-L37" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb#L9-L12" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Performance Metrics
-
-An alternate implementation can be found at [CDP Endpoint Performance Metrics]({{< ref "cdp_endpoint#performance-metrics" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L77-L81" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-Because Python requires using async methods for this example, the synchronous approach found in
-[CDP Endpoint Performance Metrics]({{< ref "cdp_endpoint#performance-metrics" >}}) might be easier.
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_api.py#L30-L33" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-Due to the added complexity in .NET of obtaining the domains and executing with awaits, the
-[CDP Endpoint Performance Metrics]({{< ref "cdp_endpoint#performance-metrics" >}}) might be easier.
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpApiTest.cs#L49-L56" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb#L23-L25" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Basic authentication
-
-Alternate implementations can be found at 
-[CDP Endpoint Basic Authentication]({{< ref "cdp_endpoint#basic-authentication" >}}) 
-and [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-The [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L94-L101" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-Because Python requires using async methods for this example, the synchronous approach found in
-[CDP Endpoint Basic Authentication]({{< ref "cdp_endpoint#basic-authentication" >}}) might be easier.
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_api.py#L43-L49" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-Due to the added complexity in .NET of obtaining the domains and executing with awaits, the
-[CDP Endpoint Basic Authentication]({{< ref "cdp_endpoint#basic-authentication" >}}) might be easier.
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpApiTest.cs#L70-L83" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-The [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb#L36-L40" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Console logs
-
-Because reading console logs requires setting an event listener,
-this cannot be done with a CDP Endpoint implementation
-Alternate implementations can be found at
-[BiDi API Console logs and errors]({{< ref "bidi_api#console-logs-and-errors" >}})
-and [WebDriver BiDi Console logs]({{< ref "../webdriver_bidi/log#console-logs" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-Use the [WebDriver BiDi Console logs]({{< ref "../webdriver_bidi/log#console-logs" >}}) implementation
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L114-L121" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-Use the [BiDi API Console logs and errors]({{< ref "bidi_api#console-logs-and-errors" >}}) implementation
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-Use the [BiDi API Console logs and errors]({{< ref "bidi_api#console-logs-and-errors" >}}) implementation
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-The [BiDi API Console logs and errors]({{< ref "bidi_api#console-logs-and-errors" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb#L50-L55" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### JavaScript exceptions
-
-Similar to console logs, but this listens for actual javascript exceptions not just logged errors
-Alternate implementations can be found at
-[BiDi API JavaScript exceptions]({{< ref "bidi_api#javascript-exceptions" >}})
-and [WebDriver BiDi JavaScript exceptions]({{< ref "../webdriver_bidi/log#javascript-exceptions" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-Use the [WebDriver BiDi JavaScript exceptions]({{< ref "../webdriver_bidi/log#javascript-exceptions" >}}) implementation
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L133-L138" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-Use the [BiDi API JavaScript exceptions]({{< ref "bidi_api#javascript-exceptions" >}}) implementation
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-Use the [BiDi API JavaScript exceptions]({{< ref "bidi_api#javascript-exceptions" >}}) implementation
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-Use the [BiDi API JavaScript exceptions]({{< ref "bidi_api#javascript-exceptions" >}}) implementation
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Download complete
-
-Wait for a download to finish before continuing.
-Because getting download status requires setting a listener, this cannot be done with a CDP Endpoint implementation.
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L150-L162" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb#L66-L72" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_api.pt-br.md b/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_api.pt-br.md
deleted file mode 100644
index 54cb54f6c961..000000000000
--- a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_api.pt-br.md
+++ /dev/null
@@ -1,208 +0,0 @@
----
-title: "Chrome DevTools Protocol API"
-linkTitle: "CDP API"
-weight: 4
-description: >
-  Each of the Selenium bindings dynamically generates classes and methods for the various CDP domains and features;
-  these are tied to specific versions of Chrome.
----
-
-{{% pageinfo color="warning" %}}
-While Selenium 4 provides direct access to the Chrome DevTools Protocol (CDP), these
-methods will eventually be removed. It is recommended to use the [WebDriver Bidi APIs]({{< ref "bidi_api.md" >}}) 
-methods where possible to ensure future compatibility.
-{{% /pageinfo %}}
-
-## Usage
-
-If your use case has been implemented by [WebDriver Bidi]({{< ref "../webdriver_bidi/" >}}) or
-the [BiDi API]({{< ref "bidi_api.md" >}}), you should use those implementations instead of this one.
-Generally you should prefer this approach over executing with the [CDP Endpoint]({{< ref "cdp_endpoint.md" >}}),
-especially in Ruby.
-
-
-## Examples
-
-### Set Cookie
-
-An alternate implementation can be found at [CDP Endpoint Set Cookie]({{< ref "cdp_endpoint#set-cookie" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-Because Java requires using all the parameters example, the Map approach used in
-[CDP Endpoint Set Cookie]({{< ref "cdp_endpoint#set-cookie" >}}) might be more simple.
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L47-L65" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-Because Python requires using async methods for this example, the synchronous approach found in
-[CDP Endpoint Set Cookie]({{< ref "cdp_endpoint#set-cookie" >}}) might be easier.
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_api.py#L10-L18" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-Due to the added complexity in .NET of obtaining the domains and executing with awaits, the
-[CDP Endpoint Set Cookie]({{< ref "cdp_endpoint#set-cookie" >}}) might be easier.
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpApiTest.cs#L25-L37" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb#L9-L12" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Performance Metrics
-
-An alternate implementation can be found at [CDP Endpoint Performance Metrics]({{< ref "cdp_endpoint#performance-metrics" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L77-L81" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-Because Python requires using async methods for this example, the synchronous approach found in
-[CDP Endpoint Performance Metrics]({{< ref "cdp_endpoint#performance-metrics" >}}) might be easier.
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_api.py#L30-L33" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-Due to the added complexity in .NET of obtaining the domains and executing with awaits, the
-[CDP Endpoint Performance Metrics]({{< ref "cdp_endpoint#performance-metrics" >}}) might be easier.
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpApiTest.cs#L49-L56" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb#L23-L25" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Basic authentication
-
-Alternate implementations can be found at 
-[CDP Endpoint Basic Authentication]({{< ref "cdp_endpoint#basic-authentication" >}}) 
-and [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-The [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L94-L101" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-Because Python requires using async methods for this example, the synchronous approach found in
-[CDP Endpoint Basic Authentication]({{< ref "cdp_endpoint#basic-authentication" >}}) might be easier.
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_api.py#L43-L49" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-Due to the added complexity in .NET of obtaining the domains and executing with awaits, the
-[CDP Endpoint Basic Authentication]({{< ref "cdp_endpoint#basic-authentication" >}}) might be easier.
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpApiTest.cs#L70-L83" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-The [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb#L36-L40" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Console logs
-
-Because reading console logs requires setting an event listener,
-this cannot be done with a CDP Endpoint implementation
-Alternate implementations can be found at
-[BiDi API Console logs and errors]({{< ref "bidi_api#console-logs-and-errors" >}})
-and [WebDriver BiDi Console logs]({{< ref "../webdriver_bidi/log#console-logs" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-Use the [WebDriver BiDi Console logs]({{< ref "../webdriver_bidi/log#console-logs" >}}) implementation
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L114-L121" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-Use the [BiDi API Console logs and errors]({{< ref "bidi_api#console-logs-and-errors" >}}) implementation
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-Use the [BiDi API Console logs and errors]({{< ref "bidi_api#console-logs-and-errors" >}}) implementation
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-The [BiDi API Console logs and errors]({{< ref "bidi_api#console-logs-and-errors" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb#L50-L55" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### JavaScript exceptions
-
-Similar to console logs, but this listens for actual javascript exceptions not just logged errors
-Alternate implementations can be found at
-[BiDi API JavaScript exceptions]({{< ref "bidi_api#javascript-exceptions" >}})
-and [WebDriver BiDi JavaScript exceptions]({{< ref "../webdriver_bidi/log#javascript-exceptions" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-Use the [WebDriver BiDi JavaScript exceptions]({{< ref "../webdriver_bidi/log#javascript-exceptions" >}}) implementation
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L133-L138" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-Use the [BiDi API JavaScript exceptions]({{< ref "bidi_api#javascript-exceptions" >}}) implementation
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-Use the [BiDi API JavaScript exceptions]({{< ref "bidi_api#javascript-exceptions" >}}) implementation
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-Use the [BiDi API JavaScript exceptions]({{< ref "bidi_api#javascript-exceptions" >}}) implementation
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Download complete
-
-Wait for a download to finish before continuing.
-Because getting download status requires setting a listener, this cannot be done with a CDP Endpoint implementation.
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L150-L162" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb#L66-L72" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_api.zh-cn.md b/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_api.zh-cn.md
deleted file mode 100644
index 54cb54f6c961..000000000000
--- a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_api.zh-cn.md
+++ /dev/null
@@ -1,208 +0,0 @@
----
-title: "Chrome DevTools Protocol API"
-linkTitle: "CDP API"
-weight: 4
-description: >
-  Each of the Selenium bindings dynamically generates classes and methods for the various CDP domains and features;
-  these are tied to specific versions of Chrome.
----
-
-{{% pageinfo color="warning" %}}
-While Selenium 4 provides direct access to the Chrome DevTools Protocol (CDP), these
-methods will eventually be removed. It is recommended to use the [WebDriver Bidi APIs]({{< ref "bidi_api.md" >}}) 
-methods where possible to ensure future compatibility.
-{{% /pageinfo %}}
-
-## Usage
-
-If your use case has been implemented by [WebDriver Bidi]({{< ref "../webdriver_bidi/" >}}) or
-the [BiDi API]({{< ref "bidi_api.md" >}}), you should use those implementations instead of this one.
-Generally you should prefer this approach over executing with the [CDP Endpoint]({{< ref "cdp_endpoint.md" >}}),
-especially in Ruby.
-
-
-## Examples
-
-### Set Cookie
-
-An alternate implementation can be found at [CDP Endpoint Set Cookie]({{< ref "cdp_endpoint#set-cookie" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-Because Java requires using all the parameters example, the Map approach used in
-[CDP Endpoint Set Cookie]({{< ref "cdp_endpoint#set-cookie" >}}) might be more simple.
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L47-L65" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-Because Python requires using async methods for this example, the synchronous approach found in
-[CDP Endpoint Set Cookie]({{< ref "cdp_endpoint#set-cookie" >}}) might be easier.
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_api.py#L10-L18" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-Due to the added complexity in .NET of obtaining the domains and executing with awaits, the
-[CDP Endpoint Set Cookie]({{< ref "cdp_endpoint#set-cookie" >}}) might be easier.
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpApiTest.cs#L25-L37" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb#L9-L12" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Performance Metrics
-
-An alternate implementation can be found at [CDP Endpoint Performance Metrics]({{< ref "cdp_endpoint#performance-metrics" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L77-L81" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-Because Python requires using async methods for this example, the synchronous approach found in
-[CDP Endpoint Performance Metrics]({{< ref "cdp_endpoint#performance-metrics" >}}) might be easier.
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_api.py#L30-L33" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-Due to the added complexity in .NET of obtaining the domains and executing with awaits, the
-[CDP Endpoint Performance Metrics]({{< ref "cdp_endpoint#performance-metrics" >}}) might be easier.
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpApiTest.cs#L49-L56" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb#L23-L25" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Basic authentication
-
-Alternate implementations can be found at 
-[CDP Endpoint Basic Authentication]({{< ref "cdp_endpoint#basic-authentication" >}}) 
-and [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-The [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L94-L101" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-Because Python requires using async methods for this example, the synchronous approach found in
-[CDP Endpoint Basic Authentication]({{< ref "cdp_endpoint#basic-authentication" >}}) might be easier.
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_api.py#L43-L49" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-Due to the added complexity in .NET of obtaining the domains and executing with awaits, the
-[CDP Endpoint Basic Authentication]({{< ref "cdp_endpoint#basic-authentication" >}}) might be easier.
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpApiTest.cs#L70-L83" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-The [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb#L36-L40" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Console logs
-
-Because reading console logs requires setting an event listener,
-this cannot be done with a CDP Endpoint implementation
-Alternate implementations can be found at
-[BiDi API Console logs and errors]({{< ref "bidi_api#console-logs-and-errors" >}})
-and [WebDriver BiDi Console logs]({{< ref "../webdriver_bidi/log#console-logs" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-Use the [WebDriver BiDi Console logs]({{< ref "../webdriver_bidi/log#console-logs" >}}) implementation
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L114-L121" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-Use the [BiDi API Console logs and errors]({{< ref "bidi_api#console-logs-and-errors" >}}) implementation
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-Use the [BiDi API Console logs and errors]({{< ref "bidi_api#console-logs-and-errors" >}}) implementation
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-The [BiDi API Console logs and errors]({{< ref "bidi_api#console-logs-and-errors" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb#L50-L55" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### JavaScript exceptions
-
-Similar to console logs, but this listens for actual javascript exceptions not just logged errors
-Alternate implementations can be found at
-[BiDi API JavaScript exceptions]({{< ref "bidi_api#javascript-exceptions" >}})
-and [WebDriver BiDi JavaScript exceptions]({{< ref "../webdriver_bidi/log#javascript-exceptions" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-Use the [WebDriver BiDi JavaScript exceptions]({{< ref "../webdriver_bidi/log#javascript-exceptions" >}}) implementation
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L133-L138" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-Use the [BiDi API JavaScript exceptions]({{< ref "bidi_api#javascript-exceptions" >}}) implementation
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-Use the [BiDi API JavaScript exceptions]({{< ref "bidi_api#javascript-exceptions" >}}) implementation
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-Use the [BiDi API JavaScript exceptions]({{< ref "bidi_api#javascript-exceptions" >}}) implementation
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Download complete
-
-Wait for a download to finish before continuing.
-Because getting download status requires setting a listener, this cannot be done with a CDP Endpoint implementation.
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpApiTest.java#L150-L162" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_api_spec.rb#L66-L72" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_endpoint.en.md b/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_endpoint.en.md
deleted file mode 100644
index b388d2ccdbb7..000000000000
--- a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_endpoint.en.md
+++ /dev/null
@@ -1,108 +0,0 @@
----
-title: "Chrome DevTools Protocol Endpoint"
-linkTitle: "CDP Endpoint"
-weight: 2
-description: >
-  Google provides a `/cdp/execute` endpoint that can be accessed directly. Each Selenium binding provides a method that
-  allows you to pass the CDP domain as a String, and the required parameters as a simple Map.
----
-
-{{% pageinfo color="warning" %}}
-These methods will eventually be removed. It is recommended to use the [WebDriver-BiDi]({{< ref "../webdriver_bidi/" >}}) or [WebDriver Bidi APIs]({{< ref "bidi_api.md" >}}) 
-methods where possible to ensure future compatibility.
-{{% /pageinfo %}}
-
-
-## Usage
-
-Generally you should prefer the use of the [CDP API]({{< ref "cdp_api.md" >}}) over this approach,
-but sometimes the syntax is cleaner or significantly more simple.
-
-Limitations include:
-* It only works for use cases that are limited to setting or getting information; 
-any actual asynchronous interactions require another implementation 
-* You have to know the exactly correct "magic strings" for domains and keys
-* It is possible that an update to Chrome will change the required parameters
-
-## Examples
-
-### Set Cookie
-
-An alternate implementation can be found at [CDP API Set Cookie]({{< ref "cdp_api#set-cookie" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpEndpointTest.java#L26-32" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_endpoint.py#L7-L12" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpEndpointTest.cs#L25-L33" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-The [CDP API Set Cookie]({{< ref "cdp_api#set-cookie" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_endpoint_spec.rb#L9-L14" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Performance Metrics
-
-An alternate implementation can be found at [CDP API Performance Metrics]({{< ref "cdp_api#performance-metrics" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-The [CDP API Performance Metrics]({{< ref "cdp_api#performance-metrics" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpEndpointTest.java#L43-L46" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_endpoint.py#L23-L25" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpEndpointTest.cs#L46-L49" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-The [CDP API Performance Metrics]({{< ref "cdp_api#performance-metrics" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_endpoint_spec.rb#L25-L27" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Basic authentication
-
-Alternate implementations can be found at [CDP API Basic Authentication]({{< ref "cdp_api#basic-authentication" >}})
-and [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-The [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpEndpointTest.java#L60-L66" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_endpoint.py#L34-L39" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpEndpointTest.cs#L65-L73" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-The [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_endpoint_spec.rb#L38-L43" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_endpoint.ja.md b/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_endpoint.ja.md
deleted file mode 100644
index b388d2ccdbb7..000000000000
--- a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_endpoint.ja.md
+++ /dev/null
@@ -1,108 +0,0 @@
----
-title: "Chrome DevTools Protocol Endpoint"
-linkTitle: "CDP Endpoint"
-weight: 2
-description: >
-  Google provides a `/cdp/execute` endpoint that can be accessed directly. Each Selenium binding provides a method that
-  allows you to pass the CDP domain as a String, and the required parameters as a simple Map.
----
-
-{{% pageinfo color="warning" %}}
-These methods will eventually be removed. It is recommended to use the [WebDriver-BiDi]({{< ref "../webdriver_bidi/" >}}) or [WebDriver Bidi APIs]({{< ref "bidi_api.md" >}}) 
-methods where possible to ensure future compatibility.
-{{% /pageinfo %}}
-
-
-## Usage
-
-Generally you should prefer the use of the [CDP API]({{< ref "cdp_api.md" >}}) over this approach,
-but sometimes the syntax is cleaner or significantly more simple.
-
-Limitations include:
-* It only works for use cases that are limited to setting or getting information; 
-any actual asynchronous interactions require another implementation 
-* You have to know the exactly correct "magic strings" for domains and keys
-* It is possible that an update to Chrome will change the required parameters
-
-## Examples
-
-### Set Cookie
-
-An alternate implementation can be found at [CDP API Set Cookie]({{< ref "cdp_api#set-cookie" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpEndpointTest.java#L26-32" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_endpoint.py#L7-L12" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpEndpointTest.cs#L25-L33" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-The [CDP API Set Cookie]({{< ref "cdp_api#set-cookie" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_endpoint_spec.rb#L9-L14" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Performance Metrics
-
-An alternate implementation can be found at [CDP API Performance Metrics]({{< ref "cdp_api#performance-metrics" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-The [CDP API Performance Metrics]({{< ref "cdp_api#performance-metrics" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpEndpointTest.java#L43-L46" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_endpoint.py#L23-L25" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpEndpointTest.cs#L46-L49" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-The [CDP API Performance Metrics]({{< ref "cdp_api#performance-metrics" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_endpoint_spec.rb#L25-L27" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Basic authentication
-
-Alternate implementations can be found at [CDP API Basic Authentication]({{< ref "cdp_api#basic-authentication" >}})
-and [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-The [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpEndpointTest.java#L60-L66" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_endpoint.py#L34-L39" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpEndpointTest.cs#L65-L73" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-The [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_endpoint_spec.rb#L38-L43" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_endpoint.pt-br.md b/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_endpoint.pt-br.md
deleted file mode 100644
index b388d2ccdbb7..000000000000
--- a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_endpoint.pt-br.md
+++ /dev/null
@@ -1,108 +0,0 @@
----
-title: "Chrome DevTools Protocol Endpoint"
-linkTitle: "CDP Endpoint"
-weight: 2
-description: >
-  Google provides a `/cdp/execute` endpoint that can be accessed directly. Each Selenium binding provides a method that
-  allows you to pass the CDP domain as a String, and the required parameters as a simple Map.
----
-
-{{% pageinfo color="warning" %}}
-These methods will eventually be removed. It is recommended to use the [WebDriver-BiDi]({{< ref "../webdriver_bidi/" >}}) or [WebDriver Bidi APIs]({{< ref "bidi_api.md" >}}) 
-methods where possible to ensure future compatibility.
-{{% /pageinfo %}}
-
-
-## Usage
-
-Generally you should prefer the use of the [CDP API]({{< ref "cdp_api.md" >}}) over this approach,
-but sometimes the syntax is cleaner or significantly more simple.
-
-Limitations include:
-* It only works for use cases that are limited to setting or getting information; 
-any actual asynchronous interactions require another implementation 
-* You have to know the exactly correct "magic strings" for domains and keys
-* It is possible that an update to Chrome will change the required parameters
-
-## Examples
-
-### Set Cookie
-
-An alternate implementation can be found at [CDP API Set Cookie]({{< ref "cdp_api#set-cookie" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpEndpointTest.java#L26-32" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_endpoint.py#L7-L12" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpEndpointTest.cs#L25-L33" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-The [CDP API Set Cookie]({{< ref "cdp_api#set-cookie" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_endpoint_spec.rb#L9-L14" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Performance Metrics
-
-An alternate implementation can be found at [CDP API Performance Metrics]({{< ref "cdp_api#performance-metrics" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-The [CDP API Performance Metrics]({{< ref "cdp_api#performance-metrics" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpEndpointTest.java#L43-L46" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_endpoint.py#L23-L25" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpEndpointTest.cs#L46-L49" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-The [CDP API Performance Metrics]({{< ref "cdp_api#performance-metrics" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_endpoint_spec.rb#L25-L27" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Basic authentication
-
-Alternate implementations can be found at [CDP API Basic Authentication]({{< ref "cdp_api#basic-authentication" >}})
-and [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-The [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpEndpointTest.java#L60-L66" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_endpoint.py#L34-L39" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpEndpointTest.cs#L65-L73" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-The [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_endpoint_spec.rb#L38-L43" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_endpoint.zh-cn.md b/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_endpoint.zh-cn.md
deleted file mode 100644
index b388d2ccdbb7..000000000000
--- a/website_and_docs/content/documentation/webdriver/bidirectional/chrome_devtools/cdp_endpoint.zh-cn.md
+++ /dev/null
@@ -1,108 +0,0 @@
----
-title: "Chrome DevTools Protocol Endpoint"
-linkTitle: "CDP Endpoint"
-weight: 2
-description: >
-  Google provides a `/cdp/execute` endpoint that can be accessed directly. Each Selenium binding provides a method that
-  allows you to pass the CDP domain as a String, and the required parameters as a simple Map.
----
-
-{{% pageinfo color="warning" %}}
-These methods will eventually be removed. It is recommended to use the [WebDriver-BiDi]({{< ref "../webdriver_bidi/" >}}) or [WebDriver Bidi APIs]({{< ref "bidi_api.md" >}}) 
-methods where possible to ensure future compatibility.
-{{% /pageinfo %}}
-
-
-## Usage
-
-Generally you should prefer the use of the [CDP API]({{< ref "cdp_api.md" >}}) over this approach,
-but sometimes the syntax is cleaner or significantly more simple.
-
-Limitations include:
-* It only works for use cases that are limited to setting or getting information; 
-any actual asynchronous interactions require another implementation 
-* You have to know the exactly correct "magic strings" for domains and keys
-* It is possible that an update to Chrome will change the required parameters
-
-## Examples
-
-### Set Cookie
-
-An alternate implementation can be found at [CDP API Set Cookie]({{< ref "cdp_api#set-cookie" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpEndpointTest.java#L26-32" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_endpoint.py#L7-L12" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpEndpointTest.cs#L25-L33" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-The [CDP API Set Cookie]({{< ref "cdp_api#set-cookie" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_endpoint_spec.rb#L9-L14" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Performance Metrics
-
-An alternate implementation can be found at [CDP API Performance Metrics]({{< ref "cdp_api#performance-metrics" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-The [CDP API Performance Metrics]({{< ref "cdp_api#performance-metrics" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpEndpointTest.java#L43-L46" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_endpoint.py#L23-L25" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpEndpointTest.cs#L46-L49" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-The [CDP API Performance Metrics]({{< ref "cdp_api#performance-metrics" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_endpoint_spec.rb#L25-L27" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
-
-### Basic authentication
-
-Alternate implementations can be found at [CDP API Basic Authentication]({{< ref "cdp_api#basic-authentication" >}})
-and [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}})
-
-{{< tabpane text=true >}}
-{{% tab header="Java" %}}
-The [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/bidirectional/chrome_devtools/CdpEndpointTest.java#L60-L66" >}}
-{{% /tab %}}
-{{% tab header="Python" %}}
-{{< gh-codeblock path="/examples/python/tests/bidirectional/chrome_devtools/test_cdp_endpoint.py#L34-L39" >}}
-{{% /tab %}}
-{{% tab header="CSharp" %}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Bidirectional/ChromeDevtools/CdpEndpointTest.cs#L65-L73" >}}
-{{% /tab %}}
-{{% tab header="Ruby" %}}
-The [BiDi API Basic Authentication]({{< ref "bidi_api#basic-authentication" >}}) implementation should be preferred
-{{< gh-codeblock path="/examples/ruby/spec/bidirectional/chrome_devtools/cdp_endpoint_spec.rb#L38-L43" >}}
-{{% /tab %}}
-{{% tab header="JavaScript" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{% tab header="Kotlin" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/browsers/_index.ja.md b/website_and_docs/content/documentation/webdriver/browsers/_index.ja.md
index a9f70336eb02..e02362bd530a 100644
--- a/website_and_docs/content/documentation/webdriver/browsers/_index.ja.md
+++ b/website_and_docs/content/documentation/webdriver/browsers/_index.ja.md
@@ -11,4 +11,4 @@ aliases: [
 ]
 ---
 
-各ブラウザには、カスタムCapabilityと固有の機能があります。
\ No newline at end of file
+各ブラウザにはカスタム機能とユニークな特徴があります。
\ No newline at end of file
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 84b3e1b3877b..b88f79e5db20 100644
--- a/website_and_docs/content/documentation/webdriver/browsers/chrome.en.md
+++ b/website_and_docs/content/documentation/webdriver/browsers/chrome.en.md
@@ -23,7 +23,7 @@ Starting a Chrome session with basic defined options looks like this:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L37-L38" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L36-L37" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L9-L10" >}}
@@ -55,7 +55,7 @@ Add an argument to options:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L45" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L44" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L18" >}}
@@ -83,7 +83,7 @@ Add a browser location to options:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L54" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L53" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L29">}}
@@ -92,7 +92,7 @@ Add a browser location to options:
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L49" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L25" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L29" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< gh-codeblock path="/examples/javascript/test/browser/chromeSpecificCaps.spec.js#L41-L44">}}
@@ -112,16 +112,16 @@ Add an extension to options:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L65" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L64" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L40">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L61" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L62-67" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L34" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L38" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< gh-codeblock path="/examples/javascript/test/browser/chromeSpecificCaps.spec.js#L62-L66">}}
@@ -147,7 +147,7 @@ so long as the quit command is not sent to the driver.
 **Note**: This is already the default behavior in .NET.
 {{% /tab %}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L45" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L49" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< gh-codeblock path="/examples/javascript/test/browser/chromeSpecificCaps.spec.js#L29-L32">}}
@@ -175,10 +175,10 @@ Set excluded arguments on options:
 {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L62" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L76" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L82" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L53" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L57" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< gh-codeblock path="/examples/javascript/test/browser/chromeSpecificCaps.spec.js#L19-L22">}}
@@ -205,21 +205,21 @@ To change the logging output to save to a specific file:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L100-L101" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L100-L101" >}}
 **Note**: Java also allows setting file output by System Property:\
 Property key: `ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY`\
 Property value: String representing path to log file
 {{% /tab %}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_chrome.py#L71" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L71" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L86" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L86" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/chrome_spec.rb#L67" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L71" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -236,14 +236,14 @@ To change the logging output to display in the console as STDOUT:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L114-L115" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L114-L115" >}}
 **Note**: Java also allows setting console output by System Property;\
 Property key: `ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY`\
 Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{% /tab %}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_chrome.py#L82" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L82" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
@@ -251,7 +251,7 @@ Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{% tab header="Ruby" %}}
 `$stdout` and `$stderr` are both valid values
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/chrome_spec.rb#L76" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L80" >}}
 {{% /tab %}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -269,21 +269,21 @@ so this example is just setting the log level generically:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L129-L130" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L129-L130" >}}
 **Note**: Java also allows setting log level by System Property:\
 Property key: `ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY`\
 Property value: String representation of `ChromiumDriverLogLevel` enum
 {{% /tab %}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_chrome.py#L93" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L93" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/chrome_spec.rb#L87" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L91" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -304,20 +304,20 @@ The log output will be managed by the driver, not the process, so minor differen
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L147-L148" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L147-L148" >}}
 **Note**: Java also allows toggling these features by System Property:\
 Property keys: `ChromeDriverService.CHROME_DRIVER_APPEND_LOG_PROPERTY` and `ChromeDriverService.CHROME_DRIVER_READABLE_TIMESTAMP`\
 Property value: `"true"` or `"false"`
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_chrome.py#L104" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L104" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/chrome_spec.rb#L97-L98" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L101-L102" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -336,21 +336,21 @@ Note that this is an unsupported feature, and bugs will not be investigated.
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L166-L167" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L166-L167" >}}
 **Note**: Java also allows disabling build checks by System Property:\
 Property key: `ChromeDriverService.CHROME_DRIVER_DISABLE_BUILD_CHECK`\
 Property value: `"true"` or `"false"`
 {{% /tab %}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_chrome.py#L115" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L115" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L155" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L155" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/chrome_spec.rb#L108" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L112" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -370,16 +370,16 @@ You can drive Chrome Cast devices, including sharing tabs
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L230-L235" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L170-L174" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L123-L128" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -396,16 +396,16 @@ You can simulate various network conditions.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L204-L210" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L129-L135" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L133" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -419,16 +419,16 @@ You can simulate various network conditions.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L247" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L186" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L145" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -442,16 +442,16 @@ You can simulate various network conditions.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L189" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L149" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L153-L154" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -463,4 +463,4 @@ You can simulate various network conditions.
 
 ### DevTools
 
-See the [Chrome DevTools]({{< ref "../bidirectional/chrome_devtools/cdp_api.md" >}}) section for more information about using Chrome DevTools
+See the [Chrome DevTools]({{< ref "../bidi/cdp/" >}}) section for more information about using Chrome DevTools
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 0199e6ca2605..8f450852f3ea 100644
--- a/website_and_docs/content/documentation/webdriver/browsers/chrome.ja.md
+++ b/website_and_docs/content/documentation/webdriver/browsers/chrome.ja.md
@@ -3,26 +3,26 @@ title: "Chrome固有の機能"
 linkTitle: "Chrome"
 weight: 4
 description: >-
-    これらは、Google Chrome ブラウザに固有のCapabilityです。
+    これらは、Google Chromeブラウザに特有の機能と機能です。
 aliases: [
 "/ja/documentation/capabilities/chromium"
 ]
 ---
 
-デフォルトでは、Selenium 4 は Chrome v75 以降と互換性があります。 
-Chromeブラウザのバージョンと chromedriverのバージョンは、メジャーバージョンと一致する必要があることに注意してください。
+これらは、Google Chromeブラウザに特有の機能と機能です。
+デフォルトでは、Selenium 4はChrome v75以上と互換性があります。Chromeブラウザのバージョンとchromedriverのバージョンは、メジャーバージョンが一致する必要があることに注意してください。
 
 ## Options
 
-全てのブラウザに共通のCapabilityについては、[オプション ページ]({{< ref "../drivers/options.md" >}})で説明しています。
+すべてのブラウザに共通する機能は [オプション ページ]({{< ref "../drivers/options.md" >}})に記載されています。
 
-Chrome に固有のCapabilityは、Google の[Capabilities & ChromeOptions](https://chromedriver.chromium.org/capabilities)ページにあります。
+ChromeおよびChromiumに特有の機能は、Googleの [Capabilities & ChromeOptions](https://chromedriver.chromium.org/capabilities)のページにドキュメントされています。
 
-基本的な定義済みオプションを使用してChromeセッションを開始すると、次のようになります。
+基本的に定義されたオプションでChromeセッションを開始する場合は、次のようになります：
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L37-L38" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L36-L37" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L9-L10" >}}
@@ -41,22 +41,20 @@ Chrome に固有のCapabilityは、Google の[Capabilities & ChromeOptions](http
 {{< /tab >}}
 {{< /tabpane >}}
 
-さまざまなCapabilityを備えた一般的な使用例をいくつか示します。
 
 ### 引数
 
-The `args` parameter is for a list of command line switches to be used when starting the browser.
-There are two excellent resources for investigating these arguments:
-* [Chrome Flags for Tooling](https://github.com/GoogleChrome/chrome-launcher/blob/main/docs/chrome-flags-for-tools.md)
-* [List of Chromium Command Line Switches](https://peter.sh/experiments/chromium-command-line-switches/)
+`args` パラメータは、ブラウザを起動する際に使用するコマンドラインスイッチのリストです。これらの引数を調査するための優れたリソースが2つあります：
+* [Chromeツール用フラグ](https://github.com/GoogleChrome/chrome-launcher/blob/main/docs/chrome-flags-for-tools.md)
+* [Chromiumコマンドラインスイッチの一覧](https://peter.sh/experiments/chromium-command-line-switches/)
 
-Commonly used args include `--start-maximized`, `--headless=new` and `--user-data-dir=...`
+一般的に使用されるargsには以下が含まれます：`--start-maximized`, `--headless=new` and `--user-data-dir=...`
 
-Add an argument to options:
+オプションに引数を追加：
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L45" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L44" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L18" >}}
@@ -84,7 +82,7 @@ Add an argument to options:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L54" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L53" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L29">}}
@@ -93,7 +91,7 @@ Add an argument to options:
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L49" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L25" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L27" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< gh-codeblock path="/examples/javascript/test/browser/chromeSpecificCaps.spec.js#L41-L44">}}
@@ -107,24 +105,22 @@ Add an argument to options:
 
 `extensions` パラメーターはcrxファイルを受け入れます
 
-The `extensions` parameter accepts crx files. As for unpacked directories,
-please use the `load-extension` argument instead, as mentioned in
-[this post](https://chromedriver.chromium.org/extensions).
+The `extensions` パラメータはcrxファイルを受け入れます。解凍されたディレクトリについては、代わりに `load-extension` 引数を使用してください。[この投稿](https://chromedriver.chromium.org/extensions)で述べたように。
 
 オプションに拡張機能を追加します。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L65" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L64" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L40">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L61" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L62-67" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L34" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L36" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< gh-codeblock path="/examples/javascript/test/browser/chromeSpecificCaps.spec.js#L62-L66">}}
@@ -140,13 +136,13 @@ please use the `load-extension` argument instead, as mentioned in
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
-**Note**: This is already the default behavior in Java.
+**注意**: これはすでにJavaのデフォルトの動作です。
 {{% /tab %}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L51" >}}
 {{% /tab %}}
 {{% tab header="CSharp" %}}
-**Note**: This is already the default behavior in .NET.
+**注意**: これはすでに.NETのデフォルトの動作です。
 {{% /tab %}}
 {{< tab header="Ruby" >}}
 {{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L45" >}}
@@ -165,9 +161,8 @@ Chrome はさまざまな引数を追加します。
 これらの引数を追加したくない場合は、それらを `excludeSwitches` に渡します。 
 一般的な例は、ポップアップブロッカーをオンに設定することです。
 
-A full list of default arguments
-can be parsed from the
-[Chromium Source Code](https://source.chromium.org/chromium/chromium/src/+/main:chrome/test/chromedriver/chrome_launcher.cc)
+デフォルトの引数の完全なリストは、
+[Chromium Source Code](https://source.chromium.org/chromium/chromium/src/+/main:chrome/test/chromedriver/chrome_launcher.cc)から解析できます。
 
 オプションに除外された引数を設定します。
 
@@ -179,7 +174,7 @@ can be parsed from the
 {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L62" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L76" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L82" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L53" >}}
@@ -193,37 +188,35 @@ can be parsed from the
 {{< /tabpane >}}
 
 
-## Service
+## サービス
 
-Examples for creating a default Service object, and for setting driver location and port
-can be found on the [Driver Service]({{< ref "../drivers/service.md" >}}) page.
+デフォルトのServiceオブジェクトを作成するための例や、ドライバーの場所とポートを設定する方法は、[Driver Service]({{< ref "../drivers/service.md" >}})ページにあります。
 
-### Log output
+### ログ出力
 
-Getting driver logs can be helpful for debugging issues. The Service class lets you
-direct where the logs will go. Logging output is ignored unless the user directs it somewhere.
+ドライバーログを取得することは、問題のデバッグに役立ちます。Serviceクラスを使用すると、ログの出力先を指定できます。ユーザーがどこかにログを指示しない限り、ログ出力は無視されます。
 
-#### File output
+#### ファイル出力
 
-To change the logging output to save to a specific file:
+ログ出力を特定のファイルに保存するように変更するには：
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L100-L101" >}}
-**Note**: Java also allows setting file output by System Property:\
-Property key: `ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY`\
-Property value: String representing path to log file
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L100-L101" >}}
+**注意**: Javaでは、システムプロパティによってファイル出力を設定することもできます：\
+プロパティキー: `ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY`\
+プロパティ値: ログファイルへのパスを表す文字列
 {{% /tab %}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_chrome.py#L71" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L71" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L86" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L86" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/chrome_spec.rb#L67" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L67" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -233,29 +226,29 @@ Property value: String representing path to log file
 {{< /tab >}}
 {{< /tabpane >}}
 
-#### Console output
+#### コンソール出力
 
-To change the logging output to display in the console as STDOUT:
+ログ出力をコンソールにSTDOUTとして表示するように変更するには：
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L114-L115" >}}
-**Note**: Java also allows setting console output by System Property;\
-Property key: `ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY`\
-Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L114-L115" >}}
+**注意**: Javaでは、システムプロパティによってコンソール出力を設定することもできます。\
+プロパティキー: `ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY`\
+プロパティ値: `DriverService.LOG_STDOUT` または `DriverService.LOG_STDERR`
 {{% /tab %}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_chrome.py#L82" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L82" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{% tab header="Ruby" %}}
-`$stdout` and `$stderr` are both valid values
+`$stdout` と `$stderr` はどちらも有効な値です。
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/chrome_spec.rb#L76" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L76" >}}
 {{% /tab %}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -265,29 +258,27 @@ Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Log level
-There are 6 available log levels: `ALL`, `DEBUG`, `INFO`, `WARNING`, `SEVERE`, and `OFF`.
-Note that `--verbose` is equivalent to `--log-level=ALL` and `--silent` is equivalent to `--log-level=OFF`,
-so this example is just setting the log level generically:
+### ログレベル
+利用可能なログレベルは6つあります：`ALL`, `DEBUG`, `INFO`, `WARNING`, `SEVERE`, そして `OFF`。`--verbose` は `--log-level=ALL` と同等であり、`--silent` は `--log-level=OFF`と同等であることに注意してください。このため、この例ではログレベルを一般的に設定しています：
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L129-L130" >}}
-**Note**: Java also allows setting log level by System Property:\
-Property key: `ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY`\
-Property value: String representation of `ChromiumDriverLogLevel` enum
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L129-L130" >}}
+**注意**: Javaでは、システムプロパティによってログレベルを設定することもできます：\
+プロパティキー: `ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY`\
+プロパティ値: `ChromiumDriverLogLevel` 列挙型の文字列表現
 {{% /tab %}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_chrome.py#L93" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L93" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/chrome_spec.rb#L87" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L87" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -297,31 +288,30 @@ Property value: String representation of `ChromiumDriverLogLevel` enum
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Log file features
-There are 2 features that are only available when logging to a file:
-* append log
-* readable timestamps
+### ログファイル機能
+ファイルにログを記録する際にのみ利用できる2つの機能があります：
+* ログの追加
+* 読みやすいタイムスタンプ
 
-To use them, you need to also explicitly specify the log path and log level.
-The log output will be managed by the driver, not the process, so minor differences may be seen.
+これらを使用するには、ログパスとログレベルも明示的に指定する必要があります。ログ出力はプロセスではなくドライバーによって管理されるため、若干の違いが見られる場合があります。
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L147-L148" >}}
-**Note**: Java also allows toggling these features by System Property:\
-Property keys: `ChromeDriverService.CHROME_DRIVER_APPEND_LOG_PROPERTY` and `ChromeDriverService.CHROME_DRIVER_READABLE_TIMESTAMP`\
-Property value: `"true"` or `"false"`
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L147-L148" >}}
+**注意**: Javaでは、これらの機能をシステムプロパティによって切り替えることもできます：\
+プロパティキー: `ChromeDriverService.CHROME_DRIVER_APPEND_LOG_PROPERTY` および`ChromeDriverService.CHROME_DRIVER_READABLE_TIMESTAMP`\
+プロパティ値: `"true"` または `"false"`
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_chrome.py#L104" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L104" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/chrome_spec.rb#L97-L98" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L97-L98" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -331,30 +321,28 @@ Property value: `"true"` or `"false"`
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Disabling build check
+### ビルドチェックの無効化
 
-Chromedriver and Chrome browser versions should match, and if they don't the driver will error.
-If you disable the build check, you can force the driver to be used with any version of Chrome.
-Note that this is an unsupported feature, and bugs will not be investigated.
+ChromedriverとChromeブラウザのバージョンは一致する必要があり、一致しない場合、ドライバーはエラーを返します。ビルドチェックを無効にすると、任意のバージョンのChromeでドライバーを強制的に使用できます。ただし、これはサポートされていない機能であり、バグは調査されません。
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L166-L167" >}}
-**Note**: Java also allows disabling build checks by System Property:\
-Property key: `ChromeDriverService.CHROME_DRIVER_DISABLE_BUILD_CHECK`\
-Property value: `"true"` or `"false"`
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L166-L167" >}}
+**注意**: Javaでは、システムプロパティによってビルドチェックを無効にすることもできます：\
+プロパティキー: `ChromeDriverService.CHROME_DRIVER_DISABLE_BUILD_CHECK`\
+プロパティ値: `"true"` または `"false"`
 {{% /tab %}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_chrome.py#L115" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L115" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L155" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L155" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/chrome_spec.rb#L108" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L108" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -365,24 +353,26 @@ Property value: `"true"` or `"false"`
 {{< /tabpane >}}
 
 
-## Special Features
+## 特別な機能
+
+一部のブラウザは、それぞれに特有の追加機能を実装しています。
 
 ### キャスティング
 
-タブの共有など、Chrome Castデバイスを操作できます。
+Chrome Castデバイスを操作することができ、タブの共有も含まれます。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L230-L235" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L170-L174" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L119-L124" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -396,22 +386,20 @@ Property value: `"true"` or `"false"`
 
 さまざまなネットワークの状態をシミュレートできます。
 
-The following examples are for local webdrivers. For remote webdrivers,
-please refer to the
-[Remote WebDriver]({{< ref "../drivers/remote_webdriver" >}}) page.
+以下の例はローカルWebDriver用です。リモートWebDriverについては、[リモートWebDriver]({{< ref "../drivers/remote_webdriver" >}})ページを参照してください。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L204-L210" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L129-L135" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L129" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -425,16 +413,16 @@ please refer to the
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L247" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L186" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L141" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -448,16 +436,16 @@ please refer to the
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L189" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L149" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L149-L150" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -469,4 +457,4 @@ please refer to the
 
 ### デベロッパー ツール
 
-Chromeデベロッパーツールの使用に関する詳細については、[Chromeデベロッパー ツール]({{< ref "../bidirectional/chrome_devtools/cdp_api.md" >}})セクションを参照してください。
+Chromeデベロッパーツールの使用に関する詳細については、[Chromeデベロッパー ツール] セクションを参照してください。
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 22c396d89995..9b151e60da8d 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
@@ -21,7 +21,7 @@ Este é um exemplo de como iniciar uma sessão Chrome com um conjunto de opçõe
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L37-L38" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L36-L37" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L9-L10" >}}
@@ -55,7 +55,7 @@ Add an argument to options:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L45" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L44" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L18" >}}
@@ -80,7 +80,7 @@ Adicionar uma localização:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L54" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L53" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L29">}}
@@ -111,13 +111,13 @@ Adicionar uma extensão:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L65" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L64" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L40">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L61" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L62-67">}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L34" >}}
@@ -176,7 +176,7 @@ Exclua parametros:
 {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L62" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L76" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L82" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L53" >}}
@@ -206,21 +206,21 @@ To change the logging output to save to a specific file:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L100-L101" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L100-L101" >}}
 **Note**: Java also allows setting file output by System Property:\
 Property key: `ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY`\
 Property value: String representing path to log file
 {{% /tab %}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_chrome.py#L71" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L71" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L86" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L86" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/chrome_spec.rb#L67" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L67" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -237,14 +237,14 @@ To change the logging output to display in the console as STDOUT:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L114-L115" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L114-L115" >}}
 **Note**: Java also allows setting console output by System Property;\
 Property key: `ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY`\
 Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{% /tab %}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_chrome.py#L82" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L82" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
@@ -252,7 +252,7 @@ Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{% tab header="Ruby" %}}
 `$stdout` and `$stderr` are both valid values
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/chrome_spec.rb#L76" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L76" >}}
 {{% /tab %}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -270,21 +270,21 @@ so this example is just setting the log level generically:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L129-L130" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L129-L130" >}}
 **Note**: Java also allows setting log level by System Property:\
 Property key: `ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY`\
 Property value: String representation of `ChromiumDriverLogLevel` enum
 {{% /tab %}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_chrome.py#L93" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L93" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/chrome_spec.rb#L87" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L87" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -305,20 +305,20 @@ The log output will be managed by the driver, not the process, so minor differen
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L147-L148" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L147-L148" >}}
 **Note**: Java also allows toggling these features by System Property:\
 Property keys: `ChromeDriverService.CHROME_DRIVER_APPEND_LOG_PROPERTY` and `ChromeDriverService.CHROME_DRIVER_READABLE_TIMESTAMP`\
 Property value: `"true"` or `"false"`
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_chrome.py#L104" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L104" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/chrome_spec.rb#L97-L98" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L97-L98" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -337,21 +337,21 @@ Note that this is an unsupported feature, and bugs will not be investigated.
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L166-L167" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L166-L167" >}}
 **Note**: Java also allows disabling build checks by System Property:\
 Property key: `ChromeDriverService.CHROME_DRIVER_DISABLE_BUILD_CHECK`\
 Property value: `"true"` or `"false"`
 {{% /tab %}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_chrome.py#L115" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L115" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L155" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L155" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/chrome_spec.rb#L108" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L108" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -370,16 +370,16 @@ Pode comandar dispositivos Chrome Cast, incluindo partilhar abas
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L230-L235" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L170-L174" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L119-L124" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -399,16 +399,16 @@ please refer to the
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L204-L210" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L129-L135" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L129" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -422,16 +422,16 @@ please refer to the
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L247" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L186" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L141" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -445,16 +445,16 @@ please refer to the
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L189" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L149" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L149-L150" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -466,4 +466,4 @@ please refer to the
 
 ### DevTools
 
-Veja a secção [Chrome DevTools]({{< ref "../bidirectional/chrome_devtools/cdp_api.md" >}}) para mais informação em como usar Chrome DevTools
+Veja a secção [Chrome DevTools] para mais informação em como usar Chrome DevTools
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 f246d9956cd4..5632581c396b 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
@@ -1,9 +1,9 @@
 ---
-title: "Chrome specific functionality"
+title: "Chrome 特定功能"
 linkTitle: "Chrome"
 weight: 4
 description: >-
-    These are capabilities and features specific to Google Chrome browsers.
+    特定于 Google Chrome 浏览器的功能和特性.
 aliases: [
 "/zh-cn/documentation/capabilities/chromium"
 ]
@@ -21,7 +21,7 @@ Chrome浏览器的特有功能可以在谷歌的页面找到: [Capabilities & Ch
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L37-L38" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L36-L37" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L9-L10" >}}
@@ -44,18 +44,18 @@ Chrome浏览器的特有功能可以在谷歌的页面找到: [Capabilities & Ch
 
 ### 参数
 
-The `args` parameter is for a list of command line switches to be used when starting the browser.
-There are two excellent resources for investigating these arguments:
+`args` 参数用于启动浏览器时要使用的命令行开关列表.
+有两个很好的资源可以用于研究这些参数:
 * [Chrome Flags for Tooling](https://github.com/GoogleChrome/chrome-launcher/blob/main/docs/chrome-flags-for-tools.md)
 * [List of Chromium Command Line Switches](https://peter.sh/experiments/chromium-command-line-switches/)
 
-Commonly used args include `--start-maximized`, `--headless=new` and `--user-data-dir=...`
+常用的参数包括 `--start-maximized`, `--headless=new` 以及 `--user-data-dir=...`
 
-Add an argument to options:
+向选项添加参数:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L45" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L44" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L18" >}}
@@ -82,7 +82,7 @@ Add an argument to options:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L54" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L53" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L29">}}
@@ -103,21 +103,21 @@ Add an argument to options:
 
 ### 添加扩展程序
 
-`extensions` 参数接受crx文件. As for unpacked directories,
-please use the `load-extension` argument instead, as mentioned in
-[this post](https://chromedriver.chromium.org/extensions).
+`extensions` 参数接受crx文件. 至于解压的目录,
+请使用 `load-extension` 参数代替,
+正如 [这篇文章](https://chromedriver.chromium.org/extensions) 所示.
 
 添加一个扩展程序到选项中:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L65" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L64" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L40">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L61" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L62-67" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L34" >}}
@@ -161,9 +161,8 @@ please use the `load-extension` argument instead, as mentioned in
 
 Chrome 添加了各种参数，如果你不希望添加某些参数，可以将其传入 `excludeSwitches`.
 一个常见的例子是重新打开弹出窗口阻止程序.
-A full list of default arguments
-can be parsed from the
-[Chromium Source Code](https://source.chromium.org/chromium/chromium/src/+/main:chrome/test/chromedriver/chrome_launcher.cc)
+默认参数的完整列表可以参考
+[Chromium 源码](https://source.chromium.org/chromium/chromium/src/+/main:chrome/test/chromedriver/chrome_launcher.cc)
 
 设置排除参数至选项中:
 
@@ -175,7 +174,7 @@ can be parsed from the
 {{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L62" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L76" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L82" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L53" >}}
@@ -189,37 +188,39 @@ can be parsed from the
 {{< /tabpane >}}
 
 
-## Service
+## 服务
 
-Examples for creating a default Service object, and for setting driver location and port
-can be found on the [Driver Service]({{< ref "../drivers/service.md" >}}) page.
+创建默认 Service 对象的示例,
+以及用于设置驱动程序位置和端口
+可以参考 [驱动服务]({{< ref "../drivers/service.md" >}}) 页面.
 
-### Log output
+### 日志输出
 
-Getting driver logs can be helpful for debugging issues. The Service class lets you
-direct where the logs will go. Logging output is ignored unless the user directs it somewhere.
+获取驱动程序日志有助于调试问题.
+使用 Service 类, 可以指明日志的路径.
+除非用户将其定向到某个位置, 否则将忽略日志记录输出.
 
-#### File output
+#### 文件输出
 
-To change the logging output to save to a specific file:
+更改日志记录输出以保存到特定文件:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L100-L101" >}}
-**Note**: Java also allows setting file output by System Property:\
-Property key: `ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY`\
-Property value: String representing path to log file
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L100-L101" >}}
+**注意**: Java 还允许通过系统属性设置文件输出:\
+属性键: `ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY`\
+属性值: 表示日志文件路径的字符串
 {{% /tab %}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_chrome.py#L71" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L71" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L86" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L86" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/chrome_spec.rb#L67" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L67" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -229,21 +230,21 @@ Property value: String representing path to log file
 {{< /tab >}}
 {{< /tabpane >}}
 
-#### Console output
+#### 命令行输出
 
-To change the logging output to display in the console as STDOUT:
+更改日志记录输出以在控制台中显示为标准输出:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L114-L115" >}}
-**Note**: Java also allows setting console output by System Property;\
-Property key: `ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY`\
-Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L114-L115" >}}
+**注意**: Java 还允许通过系统属性设置控制台输出;\
+属性键: `ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY`\
+属性值: `DriverService.LOG_STDOUT` 或 `DriverService.LOG_STDERR`
 {{% /tab %}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_chrome.py#L82" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L82" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
@@ -251,7 +252,7 @@ Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{% tab header="Ruby" %}}
 `$stdout` and `$stderr` are both valid values
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/chrome_spec.rb#L76" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L76" >}}
 {{% /tab %}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -261,29 +262,29 @@ Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Log level
-There are 6 available log levels: `ALL`, `DEBUG`, `INFO`, `WARNING`, `SEVERE`, and `OFF`.
-Note that `--verbose` is equivalent to `--log-level=ALL` and `--silent` is equivalent to `--log-level=OFF`,
-so this example is just setting the log level generically:
+### 日志级别
+共有六种日志级别: `ALL`, `DEBUG`, `INFO`, `WARNING`, `SEVERE`, 以及 `OFF`.
+注意 `--verbose` 等效于 `--log-level=ALL` 以及 `--silent` 等效于 `--log-level=OFF`,
+因此, 此示例只是通用地设置日志级别:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L129-L130" >}}
-**Note**: Java also allows setting log level by System Property:\
-Property key: `ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY`\
-Property value: String representation of `ChromiumDriverLogLevel` enum
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L129-L130" >}}
+**注意**: Java 还允许通过系统属性设置日志级别:\
+属性键: `ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY`\
+属性值: `ChromiumDriverLogLevel` 枚举的字面值
 {{% /tab %}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_chrome.py#L93" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L93" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/chrome_spec.rb#L87" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L87" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -293,31 +294,32 @@ Property value: String representation of `ChromiumDriverLogLevel` enum
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Log file features
-There are 2 features that are only available when logging to a file:
-* append log
-* readable timestamps
+### 日志文件功能
+有 2 个功能仅在写入文件时可用:
+* 追加日志
+* 可读时间戳
 
-To use them, you need to also explicitly specify the log path and log level.
-The log output will be managed by the driver, not the process, so minor differences may be seen.
+要使用它们, 您还需要显式指定日志路径和日志级别.
+日志输出将由驱动程序管理,
+而不是由进程管理, 因此可能会看到细微的差异.
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L147-L148" >}}
-**Note**: Java also allows toggling these features by System Property:\
-Property keys: `ChromeDriverService.CHROME_DRIVER_APPEND_LOG_PROPERTY` and `ChromeDriverService.CHROME_DRIVER_READABLE_TIMESTAMP`\
-Property value: `"true"` or `"false"`
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L147-L148" >}}
+**注意**: Java 还允许通过系统属性切换这些功能:\
+属性键: `ChromeDriverService.CHROME_DRIVER_APPEND_LOG_PROPERTY` 以及 `ChromeDriverService.CHROME_DRIVER_READABLE_TIMESTAMP`\
+属性值: `"true"` 或 `"false"`
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_chrome.py#L104" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L104" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/chrome_spec.rb#L97-L98" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L97-L98" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -327,30 +329,30 @@ Property value: `"true"` or `"false"`
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Disabling build check
+### 禁用构建检查
 
-Chromedriver and Chrome browser versions should match, and if they don't the driver will error.
-If you disable the build check, you can force the driver to be used with any version of Chrome.
-Note that this is an unsupported feature, and bugs will not be investigated.
+Chromedriver 和 Chrome 浏览器版本应该匹配, 如果它们不匹配, 驱动程序将出错.
+如果您停用构建检查功能, 则可以强制将驱动程序与任何版本的 Chrome 一起使用.
+请注意, 这是一项不受支持的功能, 并且不会调查 bug.
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L166-L167" >}}
-**Note**: Java also allows disabling build checks by System Property:\
-Property key: `ChromeDriverService.CHROME_DRIVER_DISABLE_BUILD_CHECK`\
-Property value: `"true"` or `"false"`
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L166-L167" >}}
+**注意**: Java 还允许通过系统属性禁用构建检查:\
+属性键: `ChromeDriverService.CHROME_DRIVER_DISABLE_BUILD_CHECK`\
+属性值: `"true"` 或 `"false"`
 {{% /tab %}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_chrome.py#L115" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L115" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L155" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/ChromeTest.cs#L155" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/chrome_spec.rb#L108" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L108" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -361,7 +363,7 @@ Property value: `"true"` or `"false"`
 {{< /tabpane >}}
 
 
-## Special Features
+## 特殊功能
 
 ### Casting
 
@@ -369,16 +371,15 @@ Property value: `"true"` or `"false"`
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L230-L235" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
-{{< tab header="CSharp" >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L170-L174" >}}
+{{< /tab >}}{{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L119-L124" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -392,22 +393,22 @@ Property value: `"true"` or `"false"`
 
 您可以模拟各种网络条件.
 
-The following examples are for local webdrivers. For remote webdrivers,
-please refer to the
-[Remote WebDriver]({{< ref "../drivers/remote_webdriver" >}}) page.
+以下示例适用于本地 webdrivers. 针对远程 webdrivers,
+请参考
+[Remote WebDriver]({{< ref "../drivers/remote_webdriver" >}}) 页面.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L204-L210" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L129-L135" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L129" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -417,20 +418,20 @@ please refer to the
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Logs
+### 日志
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L247" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L186" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L141" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -440,20 +441,20 @@ please refer to the
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Permissions
+### 权限
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L189" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_chrome.py#L149" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/chrome_spec.rb#L149-L150" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -465,4 +466,4 @@ please refer to the
 
 ### DevTools
 
-See the [Chrome DevTools]({{< ref "../bidirectional/chrome_devtools/cdp_api.md" >}}) section for more information about using Chrome DevTools
+详见 [Chrome DevTools]({{< ref "../bidi/cdp/" >}})  部分以获取有关使用Chrome DevTools的更多信息
diff --git a/website_and_docs/content/documentation/webdriver/browsers/edge.en.md b/website_and_docs/content/documentation/webdriver/browsers/edge.en.md
index 2e5679a74e6b..3376972d5835 100644
--- a/website_and_docs/content/documentation/webdriver/browsers/edge.en.md
+++ b/website_and_docs/content/documentation/webdriver/browsers/edge.en.md
@@ -20,7 +20,7 @@ Starting an Edge session with basic defined options looks like this:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L37-L38" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L38-L39" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L9-L10" >}}
@@ -52,7 +52,7 @@ Add an argument to options:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L45" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L46" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L18" >}}
@@ -64,7 +64,7 @@ Add an argument to options:
 {{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L17" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/edgeSpecificCaps.spec.js#L12">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -80,7 +80,7 @@ Add a browser location to options:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L54" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L55" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L29">}}
@@ -109,7 +109,7 @@ Add an extension to options:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L65" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L66" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L40" >}}
@@ -121,7 +121,7 @@ Add an extension to options:
 {{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L34" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/edgeSpecificCaps.spec.js#L55">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -147,7 +147,7 @@ so long as the quit command is not sent to the driver.
 {{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L45" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/edgeSpecificCaps.spec.js#L32">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -166,7 +166,7 @@ Set excluded arguments on options:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L78" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L79" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L62" >}}
@@ -178,7 +178,7 @@ Set excluded arguments on options:
 {{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L53" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/edgeSpecificCaps.spec.js#L22">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -203,20 +203,20 @@ To change the logging output to save to a specific file:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L100" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L101" >}}
 **Note**: Java also allows setting file output by System Property:\
 Property key: `EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY`\
 Property value: String representing path to log file
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_edge.py#L71" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L71" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs#L86" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs#L86" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/edge_spec.rb#L67" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L67" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -233,13 +233,14 @@ To change the logging output to display in the console as STDOUT:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L113" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L114" >}}
 **Note**: Java also allows setting console output by System Property;\
 Property key: `EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY`\
 Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< badge-implementation >}}
+{{< badge-version version="4.11" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L82" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
@@ -247,7 +248,7 @@ Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{% tab header="Ruby" %}}
 `$stdout` and `$stderr` are both valid values
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/edge_spec.rb#L76" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L76" >}}
 {{% /tab %}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -265,20 +266,20 @@ so this example is just setting the log level generically:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L126-L127" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L127-L128" >}}
 **Note**: Java also allows setting log level by System Property:\
 Property key: `EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY`\
 Property value: String representation of `ChromiumDriverLogLevel` enum
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_edge.py#L93" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L93" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/edge_spec.rb#L87" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L87" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -299,20 +300,20 @@ The log output will be managed by the driver, not the process, so minor differen
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L142-L143" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L143-L144" >}}
 **Note**: Java also allows toggling these features by System Property:\
 Property keys: `EdgeDriverService.EDGE_DRIVER_APPEND_LOG_PROPERTY` and `EdgeDriverService.EDGE_DRIVER_READABLE_TIMESTAMP`\
 Property value: `"true"` or `"false"`
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_edge.py#L104" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L104" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/edge_spec.rb#L97-L98" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L97-L98" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -331,20 +332,20 @@ Note that this is an unsupported feature, and bugs will not be investigated.
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L160-L161" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L161-L162" >}}
 **Note**: Java also allows disabling build checks by System Property:\
 Property key: `EdgeDriverService.EDGE_DRIVER_DISABLE_BUILD_CHECK`\
 Property value: `"true"` or `"false"`
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_edge.py#L115" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L115" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs#L155" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs#L155" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/edge_spec.rb#L108" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L108" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -371,16 +372,16 @@ You can drive Chrome Cast devices with Edge, including sharing tabs
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L225-L230" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L170-L174" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L119-L123" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -396,16 +397,16 @@ You can simulate various network conditions.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L198-L204" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L129-L135" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L129" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -419,16 +420,16 @@ You can simulate various network conditions.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L242" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L186" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L141" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -442,16 +443,16 @@ You can simulate various network conditions.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L184" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L149" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L149-L150" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -463,4 +464,4 @@ You can simulate various network conditions.
 
 ### DevTools
 
-See the [Chrome DevTools]({{< ref "../bidirectional/chrome_devtools/cdp_api.md" >}}) section for more information about using DevTools in Edge
+See the [Chrome DevTools]({{< ref "../bidi/cdp/" >}}) section for more information about using DevTools in Edge
diff --git a/website_and_docs/content/documentation/webdriver/browsers/edge.ja.md b/website_and_docs/content/documentation/webdriver/browsers/edge.ja.md
index 0d56efb251c8..28879dbf9552 100644
--- a/website_and_docs/content/documentation/webdriver/browsers/edge.ja.md
+++ b/website_and_docs/content/documentation/webdriver/browsers/edge.ja.md
@@ -13,16 +13,15 @@ Chromeと同様に、edgedriverのメジャー バージョン番号は、Edge
 
 ## オプション
 
-Capabilities common to all browsers are described on the [Options page]({{< ref "../drivers/options.md" >}}).
+すべてのブラウザに共通する機能は[オプション ページ]({{< ref "../drivers/options.md" >}})に記載されています。
 
-Capabilities unique to Chromium are documented at Google's page for
-[Capabilities & ChromeOptions](https://chromedriver.chromium.org/capabilities)
+Chromiumに特有の機能は、Googleの[Capabilities & ChromeOptions](https://chromedriver.chromium.org/capabilities)ページに文書化されています。
 
 基本的な定義済みオプションを使用して Edgeセッションを開始すると、次のようになります。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L37-L38" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L38-L38" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L9-L10" >}}
@@ -43,10 +42,9 @@ Capabilities unique to Chromium are documented at Google's page for
 
 ### 引数
 
-The `args` parameter is for a list of command line switches to be used when starting the browser.
-There are two excellent resources for investigating these arguments:
-* [Chrome Flags for Tooling](https://github.com/GoogleChrome/chrome-launcher/blob/main/docs/chrome-flags-for-tools.md)
-* [List of Chromium Command Line Switches](https://peter.sh/experiments/chromium-command-line-switches/)
+`args` パラメータは、ブラウザを起動する際に使用されるコマンドラインスイッチのリストです。これらの引数を調査するための優れたリソースが2つあります：
+* [ツール用のChromeフラグ](https://github.com/GoogleChrome/chrome-launcher/blob/main/docs/chrome-flags-for-tools.md)
+* [Chromiumコマンドラインスイッチのリスト](https://peter.sh/experiments/chromium-command-line-switches/)
 
 一般的に使用される引数には、`--start-maximized` および `--headless=new` が含まれます。 and `--user-data-dir=...`
 
@@ -54,7 +52,7 @@ There are two excellent resources for investigating these arguments:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L45" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L46" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L18" >}}
@@ -66,23 +64,22 @@ There are two excellent resources for investigating these arguments:
 {{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L17" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/edgeSpecificCaps.spec.js#L12">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Start browser in a specified location
+### 指定された場所でブラウザを起動する
 
-The `binary` parameter takes the path of an alternate location of browser to use. With this parameter you can
-use chromedriver to drive various Chromium based browsers.
+`binary` パラメータは、使用するブラウザの代替位置のパスを指定します。このパラメータを使用すると、chromedriverを利用してさまざまなChromiumベースのブラウザを操作できます。
 
-Add a browser location to options:
+オプションにブラウザの場所を追加する：
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L54" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L55" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L29">}}
@@ -101,17 +98,15 @@ Add a browser location to options:
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Add extensions
+### 拡張機能を追加する
 
-The `extensions` parameter accepts crx files. As for unpacked directories,
-please use the `load-extension` argument instead, as mentioned in
-[this post](https://chromedriver.chromium.org/extensions).
+`extensions` パラメータは、crxファイルを受け入れます。展開されたディレクトリについては、`load-extension` 引数を使用してください。このことは[この投稿](https://chromedriver.chromium.org/extensions)で言及されています。
 
-Add an extension to options:
+オプションに拡張機能を追加する：
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L65" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L66" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L40" >}}
@@ -123,52 +118,47 @@ Add an extension to options:
 {{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L34" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/edgeSpecificCaps.spec.js#L55">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Keeping browser open
+### ブラウザを開いたままにする
 
-Setting the `detach` parameter to true will keep the browser open after the process has ended,
-so long as the quit command is not sent to the driver.
+`detach` パラメータをtrue に設定すると、プロセスが終了した後でもブラウザが開いたままになります。ただし、quit コマンドがドライバーに送信されない限り、ブラウザは開いたままになります。
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
-**Note**: This is already the default behavior in Java.
+**注意**: これはすでにJavaのデフォルトの動作です。
 {{% /tab %}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L51" >}}
 {{% /tab %}}
 {{% tab header="CSharp" %}}
-**Note**: This is already the default behavior in .NET.
+**注意**: これはすでに.NETのデフォルトの動作です。
 {{% /tab %}}
 {{< tab header="Ruby" >}}
 {{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L45" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/edgeSpecificCaps.spec.js#L32">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Excluding arguments
+### 引数を除外する
 
-MSEdgedriver has several default arguments it uses to start the browser.
-If you do not want those arguments added, pass them into `excludeSwitches`.
-A common example is to turn the popup blocker back on. A full list of default arguments
-can be parsed from the
-[Chromium Source Code](https://source.chromium.org/chromium/chromium/src/+/main:chrome/test/chromedriver/chrome_launcher.cc)
+MSEdgedriverには、ブラウザを起動するために使用されるいくつかのデフォルト引数があります。それらの引数を追加したくない場合は、`excludeSwitches`に渡してください。一般的な例は、ポップアップブロッカーを再度オンにすることです。デフォルト引数の完全なリストは[Chromium Source Code](https://source.chromium.org/chromium/chromium/src/+/main:chrome/test/chromedriver/chrome_launcher.cc)から解析できます。
 
-Set excluded arguments on options:
+オプションに除外された引数を設定する:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L78" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L79" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L62" >}}
@@ -180,7 +170,7 @@ Set excluded arguments on options:
 {{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L53" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/edgeSpecificCaps.spec.js#L22">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -188,37 +178,35 @@ Set excluded arguments on options:
 {{< /tabpane >}}
 
 
-## Service
+## サービス
 
-Examples for creating a default Service object, and for setting driver location and port
-can be found on the [Driver Service]({{< ref "../drivers/service.md" >}}) page.
+デフォルトのサービスオブジェクトを作成するための例や、ドライバの場所とポートを設定する例は、[Driver Service]({{< ref "../drivers/service.md" >}}) ページにあります。
 
-### Log output
+### ログ出力
 
-Getting driver logs can be helpful for debugging issues. The Service class lets you
-direct where the logs will go. Logging output is ignored unless the user directs it somewhere.
+ドライバのログを取得することは、問題をデバッグするのに役立ちます。サービスクラスを使用すると、ログの出力先を指定できます。ユーザーがどこかにログを指示しない限り、ログ出力は無視されます。
 
-#### File output
+#### ファイル出力
 
-To change the logging output to save to a specific file:
+特定のファイルに保存するようにログ出力を変更するには、以下のようにします:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L100" >}}
-**Note**: Java also allows setting file output by System Property:\
-Property key: `EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY`\
-Property value: String representing path to log file
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L101" >}}
+**注意**: Javaでもシステムプロパティを使用してファイル出力を設定できます:\
+プロパティキー: `EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY`\
+プロパティ値: ログファイルのパスを表す文字列
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_edge.py#L71" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L71" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs#L86" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs#L86" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/edge_spec.rb#L67" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L67" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -228,28 +216,29 @@ Property value: String representing path to log file
 {{< /tab >}}
 {{< /tabpane >}}
 
-#### Console output
+#### コンソール出力
 
-To change the logging output to display in the console as STDOUT:
+ログ出力をコンソールにSTDOUTとして表示するには:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L113" >}}
-**Note**: Java also allows setting console output by System Property;\
-Property key: `EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY`\
-Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L114" >}}
+**注**: Javaでは、システムプロパティを使用してコンソール出力を設定することもできます。\
+プロパティキー: `EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY`\
+プロパティ値:`DriverService.LOG_STDOUT` または  `DriverService.LOG_STDERR`
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< badge-implementation >}}
+{{< badge-version version="4.11" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L82" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{% tab header="Ruby" %}}
-`$stdout` and `$stderr` are both valid values
+`$stdout` と `$stderr`はどちらも有効な値です。
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/edge_spec.rb#L76" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L76" >}}
 {{% /tab %}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -259,28 +248,26 @@ Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Log level
-There are 6 available log levels: `ALL`, `DEBUG`, `INFO`, `WARNING`, `SEVERE`, and `OFF`.
-Note that `--verbose` is equivalent to `--log-level=ALL` and `--silent` is equivalent to `--log-level=OFF`,
-so this example is just setting the log level generically:
+### ログレベル
+利用可能なログレベルは6つあります：`ALL`, `DEBUG`, `INFO`, `WARNING`, `SEVERE`および  `OFF`。`--verbose` は `--log-level=ALL` と同等であり、`--silent` は`--log-level=OFF`と同等です。したがって、この例ではログレベルを一般的に設定しています：
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L126-L127" >}}
-**Note**: Java also allows setting log level by System Property:\
-Property key: `EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY`\
-Property value: String representation of `ChromiumDriverLogLevel` enum
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L127-L128" >}}
+**注意**: Javaでは、システムプロパティを使用してログレベルを設定することもできます：\
+プロパティキー: `EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY`\
+プロパティ値:`ChromiumDriverLogLevel` 列挙型の文字列表現
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_edge.py#L93" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L93" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/edge_spec.rb#L87" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L87" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -290,31 +277,30 @@ Property value: String representation of `ChromiumDriverLogLevel` enum
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Log file features
-There are 2 features that are only available when logging to a file:
-* append log
-* readable timestamps
+### ログファイルの機能
+ファイルにログを記録する際にのみ利用可能な2つの機能があります：
+* ログの追加
+* 読みやすいタイムスタンプ
 
-To use them, you need to also explicitly specify the log path and log level.
-The log output will be managed by the driver, not the process, so minor differences may be seen.
+これらを使用するには、ログパスとログレベルも明示的に指定する必要があります。ログ出力はプロセスではなくドライバによって管理されるため、若干の違いが見られることがあります。
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L142-L143" >}}
-**Note**: Java also allows toggling these features by System Property:\
-Property keys: `EdgeDriverService.EDGE_DRIVER_APPEND_LOG_PROPERTY` and `EdgeDriverService.EDGE_DRIVER_READABLE_TIMESTAMP`\
-Property value: `"true"` or `"false"`
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L143-L144" >}}
+**注意**: Javaでは、これらの機能をSystem Propertyによって切り替えることもできます：\
+プロパティキー:`EdgeDriverService.EDGE_DRIVER_APPEND_LOG_PROPERTY` および `EdgeDriverService.EDGE_DRIVER_READABLE_TIMESTAMP`\
+プロパティ値: `"true"` または  `"false"`
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_edge.py#L104" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L104" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/edge_spec.rb#L97-L98" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L97-L98" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -324,29 +310,28 @@ Property value: `"true"` or `"false"`
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Disabling build check
+### ビルドチェックの無効化
 
-Edge browser and msedgedriver versions should match, and if they don't the driver will error.
-If you disable the build check, you can force the driver to be used with any version of Edge.
-Note that this is an unsupported feature, and bugs will not be investigated.
+Edge ブラウザとmsedgedriverのバージョンは一致する必要があり、一致しない場合はドライバにエラーが表示されます。ビルドチェックを無効にすると、任意のバージョンのEdgeでドライバを強制的に使用できます。
+この機能はサポートされていないことに注意してください。バグは調査されません。
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L160-L161" >}}
-**Note**: Java also allows disabling build checks by System Property:\
-Property key: `EdgeDriverService.EDGE_DRIVER_DISABLE_BUILD_CHECK`\
-Property value: `"true"` or `"false"`
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L161-L162" >}}
+**注**: Javaでは、システムプロパティを使用してビルドチェックを無効にすることもできます：\
+プロパティキー:`EdgeDriverService.EDGE_DRIVER_DISABLE_BUILD_CHECK`\
+プロパティ値: `"true"` または  `"false"`
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_edge.py#L115" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L115" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs#L155" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs#L155" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/edge_spec.rb#L108" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L108" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -364,25 +349,25 @@ Microsoft Edge は、Internet Explorer ドライバークラスを Microsoft Edg
 詳細については、[Internet Explorerページ]({{< ref "internet_explorer.md" >}})を参照してください。
 
 
-## Special Features
-Some browsers have implemented additional features that are unique to them.
+## 特別な機能
+一部のブラウザは、それぞれ特有の追加機能を実装しています。
 
-### Casting
+### キャスティング
 
-You can drive Chrome Cast devices with Edge, including sharing tabs
+Edge を使用して Chrome Cast デバイスを操作し、タブを共有することができます。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L225-L230" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L170-L174" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L119-L123" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -392,22 +377,22 @@ You can drive Chrome Cast devices with Edge, including sharing tabs
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Network conditions
+### ネットワーク条件
 
-You can simulate various network conditions.
+さまざまなネットワーク条件をシミュレートすることができます。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L198-L204" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L129-L135" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L129" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -417,20 +402,20 @@ You can simulate various network conditions.
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Logs
+### ログ
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L242" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L186" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L141" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -440,20 +425,20 @@ You can simulate various network conditions.
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Permissions
+### 権限
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L184" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L149" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L149-L150" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -465,4 +450,4 @@ You can simulate various network conditions.
 
 ### DevTools
 
-See the [Chrome DevTools]({{< ref "../bidirectional/chrome_devtools/cdp_api.md" >}}) section for more information about using DevTools in Edge
+EdgeでDevToolsを使用する際の詳細については、[Chrome DevTools]セクションを参照してください。
diff --git a/website_and_docs/content/documentation/webdriver/browsers/edge.pt-br.md b/website_and_docs/content/documentation/webdriver/browsers/edge.pt-br.md
index 7c4b11adf00a..e88a45237f61 100644
--- a/website_and_docs/content/documentation/webdriver/browsers/edge.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/browsers/edge.pt-br.md
@@ -22,7 +22,7 @@ Este é um exemplo de como iniciar uma sessão Edge com um conjunto de opções
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L37-L38" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L38-L39" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L9-L10" >}}
@@ -54,7 +54,7 @@ Adicione uma opção:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L45" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L46" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L18" >}}
@@ -66,7 +66,7 @@ Adicione uma opção:
 {{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L17" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/edgeSpecificCaps.spec.js#L12">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -111,7 +111,7 @@ Add an extension to options:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L65" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L66" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L40" >}}
@@ -123,7 +123,7 @@ Add an extension to options:
 {{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L34" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/edgeSpecificCaps.spec.js#L55">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -149,7 +149,7 @@ so long as the quit command is not sent to the driver.
 {{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L45" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/edgeSpecificCaps.spec.js#L32">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -168,7 +168,7 @@ Set excluded arguments on options:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L78" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L79" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L62" >}}
@@ -180,7 +180,7 @@ Set excluded arguments on options:
 {{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L53" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/edgeSpecificCaps.spec.js#L22">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -205,20 +205,20 @@ To change the logging output to save to a specific file:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L100" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L101" >}}
 **Note**: Java also allows setting file output by System Property:\
 Property key: `EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY`\
 Property value: String representing path to log file
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_edge.py#L71" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L71" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs#L86" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs#L86" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/edge_spec.rb#L67" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L67" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -235,13 +235,14 @@ To change the logging output to display in the console as STDOUT:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L113" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L114" >}}
 **Note**: Java also allows setting console output by System Property;\
 Property key: `EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY`\
 Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< badge-implementation >}}
+{{< badge-version version="4.11" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L82" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
@@ -249,7 +250,7 @@ Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{% tab header="Ruby" %}}
 `$stdout` and `$stderr` are both valid values
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/edge_spec.rb#L76" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L76" >}}
 {{% /tab %}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -267,20 +268,20 @@ so this example is just setting the log level generically:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L126-L127" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L127-L128" >}}
 **Note**: Java also allows setting log level by System Property:\
 Property key: `EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY`\
 Property value: String representation of `ChromiumDriverLogLevel` enum
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_edge.py#L93" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L93" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/edge_spec.rb#L87" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L87" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -301,20 +302,20 @@ The log output will be managed by the driver, not the process, so minor differen
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L142-L143" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L143-L144" >}}
 **Note**: Java also allows toggling these features by System Property:\
 Property keys: `EdgeDriverService.EDGE_DRIVER_APPEND_LOG_PROPERTY` and `EdgeDriverService.EDGE_DRIVER_READABLE_TIMESTAMP`\
 Property value: `"true"` or `"false"`
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_edge.py#L104" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L104" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/edge_spec.rb#L97-L98" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L97-L98" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -333,20 +334,20 @@ Note that this is an unsupported feature, and bugs will not be investigated.
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L160-L161" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L161-L162" >}}
 **Note**: Java also allows disabling build checks by System Property:\
 Property key: `EdgeDriverService.EDGE_DRIVER_DISABLE_BUILD_CHECK`\
 Property value: `"true"` or `"false"`
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_edge.py#L115" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L115" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs#L155" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs#L155" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/edge_spec.rb#L108" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L108" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -373,16 +374,16 @@ You can drive Chrome Cast devices with Edge, including sharing tabs
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L225-L230" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L170-L174" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L119-L123" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -398,16 +399,16 @@ You can simulate various network conditions.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L198-L204" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L129-L135" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L129" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -421,16 +422,16 @@ You can simulate various network conditions.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L242" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L186" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L141" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -444,16 +445,16 @@ You can simulate various network conditions.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L184" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L149" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L149-L150" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -465,4 +466,4 @@ You can simulate various network conditions.
 
 ### DevTools
 
-See the [Chrome DevTools]({{< ref "../bidirectional/chrome_devtools/cdp_api.md" >}}) section for more information about using DevTools in Edge
+See the [Chrome DevTools] section for more information about using DevTools in Edge
diff --git a/website_and_docs/content/documentation/webdriver/browsers/edge.zh-cn.md b/website_and_docs/content/documentation/webdriver/browsers/edge.zh-cn.md
index bbaa39595323..bc794dae76cf 100644
--- a/website_and_docs/content/documentation/webdriver/browsers/edge.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/browsers/edge.zh-cn.md
@@ -6,23 +6,23 @@ description: >-
     这些是特定于微软Edge浏览器的功能和特性.
 ---
 
-微软Edge是用Chromium实现的，最早支持版本是v79.
+微软Edge是用Chromium实现的, 最早支持版本是v79.
 与Chrome类似, Edge驱动的主版本号必须与Edge浏览器的主要版本匹配.
 
 在 [Chrome 页面]({{< ref "chrome.md" >}}) 上找到的所有capabilities和选项也适用于Edge.
 
 ## 选项
 
-Capabilities common to all browsers are described on the [Options page]({{< ref "../drivers/options.md" >}}).
+所有浏览器的共有功能在 [Options 页面]({{< ref "../drivers/options.md" >}}).
 
-Capabilities unique to Chromium are documented at Google's page for
+Chromium独有的功能记录在谷歌的
 [Capabilities & ChromeOptions](https://chromedriver.chromium.org/capabilities)
 
 使用基本定义的选项启动 Edge 会话如下所示:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L37-L38" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L38-L39" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L9-L10" >}}
@@ -41,20 +41,20 @@ Capabilities unique to Chromium are documented at Google's page for
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Arguments
+### 参数
 
-The `args` parameter is for a list of command line switches to be used when starting the browser.
-There are two excellent resources for investigating these arguments:
+`args` 参数用于列出启动浏览器时使用的命令行开关.
+有两个很好的资源可用于研究这些参数:
 * [Chrome Flags for Tooling](https://github.com/GoogleChrome/chrome-launcher/blob/main/docs/chrome-flags-for-tools.md)
 * [List of Chromium Command Line Switches](https://peter.sh/experiments/chromium-command-line-switches/)
 
-Commonly used args include `--start-maximized` and `--headless=new` and `--user-data-dir=...`
+常用参数包括 `--start-maximized` 、 `--headless=new` 和 `--user-data-dir=...`
 
-Add an argument to options:
+为options添加参数:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L45" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L46" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L18" >}}
@@ -66,23 +66,23 @@ Add an argument to options:
 {{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L17" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/edgeSpecificCaps.spec.js#L12">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Start browser in a specified location
+### 在指定位置启动浏览器
 
-The `binary` parameter takes the path of an alternate location of browser to use. With this parameter you can
-use chromedriver to drive various Chromium based browsers.
+`binary` 参数包含要使用的浏览器备用位置的路径.
+使用此参数, 您可以使用 chromedriver 驱动各种基于 Chromium 的浏览器.
 
-Add a browser location to options:
+在options中添加浏览器位置:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L54" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L55" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L29">}}
@@ -101,17 +101,19 @@ Add a browser location to options:
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Add extensions
+### 添加扩展
+
+
+`extensions`参数接受 crx 文件.
+至于已解压的目录、中提到, 
+请使用[本文](https://chromedriver.chromium.org/extensions)中提及的 `load-extension`.
 
-The `extensions` parameter accepts crx files. As for unpacked directories,
-please use the `load-extension` argument instead, as mentioned in
-[this post](https://chromedriver.chromium.org/extensions).
 
-Add an extension to options:
+在options中添加扩展:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L65" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L66" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L40" >}}
@@ -123,17 +125,18 @@ Add an extension to options:
 {{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L34" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/edgeSpecificCaps.spec.js#L55">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Keeping browser open
+### 保持浏览器打开
 
-Setting the `detach` parameter to true will keep the browser open after the process has ended,
-so long as the quit command is not sent to the driver.
+将 `detach` 参数设置为 true后, 
+只要不向driver发送退出命令, 
+就可以在进程结束后保持浏览器打开.
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
@@ -149,26 +152,26 @@ so long as the quit command is not sent to the driver.
 {{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L45" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/edgeSpecificCaps.spec.js#L32">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Excluding arguments
+### 排除参数
 
-MSEdgedriver has several default arguments it uses to start the browser.
-If you do not want those arguments added, pass them into `excludeSwitches`.
-A common example is to turn the popup blocker back on. A full list of default arguments
-can be parsed from the
+MSEdgedriver 有几个用于启动浏览器的默认参数.
+如果不希望添加这些参数, 可将它们传递到 `excludeSwitches` 中.
+一个常见的例子就是重新打开弹出窗口拦截器.
+默认参数的完整列表参考
 [Chromium Source Code](https://source.chromium.org/chromium/chromium/src/+/main:chrome/test/chromedriver/chrome_launcher.cc)
 
-Set excluded arguments on options:
+在options中设置排除参数:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L78" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L79" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L62" >}}
@@ -180,7 +183,7 @@ Set excluded arguments on options:
 {{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L53" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/edgeSpecificCaps.spec.js#L22">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -188,37 +191,38 @@ Set excluded arguments on options:
 {{< /tabpane >}}
 
 
-## Service
+## 服务
 
-Examples for creating a default Service object, and for setting driver location and port
-can be found on the [Driver Service]({{< ref "../drivers/service.md" >}}) page.
+创建默认服务对象, 设置驱动程序位置和端口的示例可以参考
+[Driver服务]({{< ref "../drivers/service.md" >}}) 页面.
 
-### Log output
+### 日志输出
 
-Getting driver logs can be helpful for debugging issues. The Service class lets you
-direct where the logs will go. Logging output is ignored unless the user directs it somewhere.
+获取驱动程序日志有助于调试问题。
+服务类可让您配置日志的输出。
+日志输出会被忽略, 除非用户显示指定.
 
-#### File output
+#### 文件输出
 
-To change the logging output to save to a specific file:
+更改日志输出以保存到特定文件:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L100" >}}
-**Note**: Java also allows setting file output by System Property:\
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L101" >}}
+**注意**: Java同样允许在系统属性中配置文件输出:\
 Property key: `EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY`\
 Property value: String representing path to log file
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_edge.py#L71" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L71" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs#L86" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs#L86" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/edge_spec.rb#L67" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L67" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -228,20 +232,21 @@ Property value: String representing path to log file
 {{< /tab >}}
 {{< /tabpane >}}
 
-#### Console output
+#### 控制台输出
 
-To change the logging output to display in the console as STDOUT:
+要更改日志输出, 使其在控制台中显示为标准输出:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L113" >}}
-**Note**: Java also allows setting console output by System Property;\
-Property key: `EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY`\
-Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L114" >}}
+**注意**: Java同样允许在系统属性中配置控制台输出:\
+属性键: `EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY`\
+属性值: `DriverService.LOG_STDOUT` 或 `DriverService.LOG_STDERR`
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< badge-implementation >}}
+{{< badge-version version="4.11" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L82" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
@@ -249,7 +254,7 @@ Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{% tab header="Ruby" %}}
 `$stdout` and `$stderr` are both valid values
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/edge_spec.rb#L76" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L76" >}}
 {{% /tab %}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -259,28 +264,29 @@ Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Log level
-There are 6 available log levels: `ALL`, `DEBUG`, `INFO`, `WARNING`, `SEVERE`, and `OFF`.
-Note that `--verbose` is equivalent to `--log-level=ALL` and `--silent` is equivalent to `--log-level=OFF`,
-so this example is just setting the log level generically:
+### 日志级别
+
+有 6 种可用的日志级别: `ALL`, `DEBUG`, `INFO`, `WARNING`, `SEVERE`, 以及 `OFF`.
+请注意,  `--verbose` 等同于 `--log-level=ALL` , 而 `--silent` 等同于 `--log-level=OFF`,
+因此, 本例只是一般性地设置日志级别:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L126-L127" >}}
-**Note**: Java also allows setting log level by System Property:\
-Property key: `EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY`\
-Property value: String representation of `ChromiumDriverLogLevel` enum
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L127-L128" >}}
+**注意**: Java同样允许在系统属性中配置日志级别:\
+属性键: `EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY`\
+属性值: String representation of `ChromiumDriverLogLevel` enum
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_edge.py#L93" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L93" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/edge_spec.rb#L87" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L87" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -290,31 +296,31 @@ Property value: String representation of `ChromiumDriverLogLevel` enum
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Log file features
-There are 2 features that are only available when logging to a file:
-* append log
-* readable timestamps
+### 日志文件功能
+有 2 项功能只有在记录到文件时才可用:
+* 追加日志
+* 可读时间戳
 
-To use them, you need to also explicitly specify the log path and log level.
-The log output will be managed by the driver, not the process, so minor differences may be seen.
+要使用它们, 还需要明确指定日志路径和日志级别.
+日志输出将由driver而非进程管理, 因此可能会出现细微差别.
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L142-L143" >}}
-**Note**: Java also allows toggling these features by System Property:\
-Property keys: `EdgeDriverService.EDGE_DRIVER_APPEND_LOG_PROPERTY` and `EdgeDriverService.EDGE_DRIVER_READABLE_TIMESTAMP`\
-Property value: `"true"` or `"false"`
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L143-L144" >}}
+**注意**: Java同样允许在系统属性中配置开闭这些功能:\
+属性键: `EdgeDriverService.EDGE_DRIVER_APPEND_LOG_PROPERTY` 以及 `EdgeDriverService.EDGE_DRIVER_READABLE_TIMESTAMP`\
+属性值: `"true"` 或 `"false"`
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_edge.py#L104" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L104" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/edge_spec.rb#L97-L98" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L97-L98" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -324,29 +330,30 @@ Property value: `"true"` or `"false"`
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Disabling build check
+### 禁用构建检查
 
-Edge browser and msedgedriver versions should match, and if they don't the driver will error.
-If you disable the build check, you can force the driver to be used with any version of Edge.
-Note that this is an unsupported feature, and bugs will not be investigated.
+Edge 浏览器和 msedgedriver 版本应该匹配, 
+如果不匹配, 驱动程序就会出错.
+如果禁用构建检查, 则可以强制驱动程序与任何版本的 Edge 一起使用.
+请注意, 这是一项不受支持的功能, 而且不会对错误进行调查.
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L160-L161" >}}
-**Note**: Java also allows disabling build checks by System Property:\
-Property key: `EdgeDriverService.EDGE_DRIVER_DISABLE_BUILD_CHECK`\
-Property value: `"true"` or `"false"`
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L161-L162" >}}
+**注意**: Java同样允许在系统属性中配置禁用构建检查:\
+属性键:  `EdgeDriverService.EDGE_DRIVER_DISABLE_BUILD_CHECK`\
+属性值:  `"true"` 或 `"false"`
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_edge.py#L115" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L115" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs#L155" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs#L155" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/edge_spec.rb#L108" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L108" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -359,30 +366,30 @@ Property value: `"true"` or `"false"`
 
 ## Internet Explorer 兼容模式
 
-微软Edge可以被"Internet Explorer兼容模式"驱动, 
+微软Edge可以被"Internet Explorer兼容模式"驱动,
 该模式使用Internet Explorer驱动类与微软Edge结合使用.
 阅读 [Internet Explorer 页面]({{< ref "internet_explorer.md" >}}) 了解更多详情.
 
 
-## Special Features
-Some browsers have implemented additional features that are unique to them.
+## 特殊功能
+某些浏览器实现了其特有的附加功能.
 
-### Casting
+### Cast
 
-You can drive Chrome Cast devices with Edge, including sharing tabs
+您可以使用 Edge 驱动 Chrome Cast 设备, 包括共享标签页
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L225-L230" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L170-L174" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L119-L123" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -392,22 +399,22 @@ You can drive Chrome Cast devices with Edge, including sharing tabs
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Network conditions
+### 网络状况
 
-You can simulate various network conditions.
+您可以模拟各种网络状况.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L198-L204" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L129-L135" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L129" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -417,20 +424,20 @@ You can simulate various network conditions.
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Logs
+### 日志
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L242" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L186" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L141" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -440,20 +447,20 @@ You can simulate various network conditions.
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Permissions
+### 权限
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java#L184" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_edge.py#L149" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/edge_spec.rb#L149-L150" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -463,6 +470,6 @@ You can simulate various network conditions.
 {{< /tab >}}
 {{< /tabpane >}}
 
-### DevTools
+### 开发者工具
 
-See the [Chrome DevTools]({{< ref "../bidirectional/chrome_devtools/cdp_api.md" >}}) section for more information about using DevTools in Edge
+有关在 Edge 中使用 DevTools 的更多信息, 请参阅 [Chrome DevTools] 部分.
diff --git a/website_and_docs/content/documentation/webdriver/browsers/firefox.en.md b/website_and_docs/content/documentation/webdriver/browsers/firefox.en.md
index 5e9fc7b21587..a6483a59a0f6 100644
--- a/website_and_docs/content/documentation/webdriver/browsers/firefox.en.md
+++ b/website_and_docs/content/documentation/webdriver/browsers/firefox.en.md
@@ -61,7 +61,7 @@ Add an argument to options:
 {{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L17" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.js#L12-L14">}}
+{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.spec.js#L12">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -102,31 +102,20 @@ There are several ways to work with Firefox profiles.
 
 {{< tabpane langEqualsHeader=true >}}
 {{< badge-examples >}}
-  {{< tab header="Java" >}}
-FirefoxProfile profile = new FirefoxProfile();
-FirefoxOptions options = new FirefoxOptions();
-options.setProfile(profile);
-driver = new FirefoxDriver(options);
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium.webdriver.firefox.options import Options
-from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
-options=Options()
-firefox_profile = FirefoxProfile()
-firefox_profile.set_preference("javascript.enabled", False)
-options.profile = firefox_profile
-  {{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L211-L216" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L160-L168" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
 var options = new FirefoxOptions();
 var profile = new FirefoxProfile();
 options.Profile = profile;
 var driver = new FirefoxDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-profile = Selenium::WebDriver::Firefox::Profile.new
-profile['browser.download.dir'] = "/tmp/webdriver-downloads"
-options = Selenium::WebDriver::Firefox::Options.new(profile: profile)
-driver = Selenium::WebDriver.for :firefox, options: options
+  {{< tab header="Ruby" text=true >}}
+  {{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L139-L141" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
 const { Builder } = require("selenium-webdriver");
@@ -146,7 +135,16 @@ options.profile = FirefoxProfile()
 driver = FirefoxDriver(options)
   {{< /tab >}}
 {{< /tabpane >}}
+**Note**: Whether you create an empty `FirefoxProfile` or point it to the directory of your own profile, Selenium
+will create a temporary directory to store either the data of the new profile or a copy of your existing one. Every
+time you run your program, a different temporary directory will be created. These directories are not cleaned up
+explicitly by Selenium, they should eventually get removed by the operating system. However, if you want to remove
+the copy manually (e.g. if your profile is large in size), the path of the copy is exposed by the `FirefoxProfile`
+object. Check the language specific implementation to see how to retrieve that location.
 
+If you want to use an existing Firefox profile, you can pass in the path to that profile. Please refer to the official
+[Firefox documentation](https://support.mozilla.org/en-US/kb/profiles-where-firefox-stores-user-data#w_how-do-i-find-my-profile)
+for instructions on how to find the directory of your profile.
 
 ## Service
 
@@ -163,7 +161,7 @@ To change the logging output to save to a specific file:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L62-L63" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L62-L63" >}}
 **Note**: Java also allows setting file output by System Property:\
 Property key: `GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY`\
 Property value: String representing path to log file
@@ -177,7 +175,7 @@ Property value: String representing path to log file
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/firefox_spec.rb#L43" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L43" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -194,7 +192,7 @@ To change the logging output to display in the console:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L76-L77" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L76-L77" >}}
 **Note**: Java also allows setting console output by System Property;\
 Property key: `GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY`\
 Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
@@ -208,7 +206,7 @@ Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/firefox_spec.rb#L52" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L52" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -228,7 +226,7 @@ so this examples is just for setting the log level generically:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L90-L91" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L90-L91" >}}
 **Note**: Java also allows setting log level by System Property:\
 Property key: `GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY`\
 Property value: String representation of `FirefoxDriverLogLevel` enum
@@ -242,7 +240,7 @@ Property value: String representation of `FirefoxDriverLogLevel` enum
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/firefox_spec.rb#L63" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L63" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -260,7 +258,7 @@ Firefox truncates lines by default. To turn off truncation:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L106-L107" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L106-L107" >}}
 **Note**: Java also allows setting log level by System Property:\
 Property key: `GeckoDriverService.GECKO_DRIVER_LOG_NO_TRUNCATE`\
 Property value: `"true"` or `"false"`
@@ -274,7 +272,7 @@ Property value: `"true"` or `"false"`
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/firefox_spec.rb#L72" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L72" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -292,20 +290,20 @@ or want profiles to be created some place specific, you can change the profile r
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L118-L119" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L118-L119" >}}
 **Note**: Java also allows setting log level by System Property:\
 Property key: `GeckoDriverService.GECKO_DRIVER_PROFILE_ROOT`\
 Property value: String representing path to profile root directory
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_firefox.py#L81" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L81" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/firefox_spec.rb#L81" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L81" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -335,7 +333,7 @@ A signed xpi file you would get from [Mozilla Addon page](https://addons.mozilla
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L132" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L133" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L94" >}}
@@ -347,7 +345,7 @@ A signed xpi file you would get from [Mozilla Addon page](https://addons.mozilla
 {{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L95" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.js#L22-L24">}}
+{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.spec.js#L25">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -360,7 +358,7 @@ Uninstalling an addon requires knowing its id. The id can be obtained from the r
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L146" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L148" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L106" >}}
@@ -373,7 +371,7 @@ Uninstalling an addon requires knowing its id. The id can be obtained from the r
 {{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L106" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.js#L22-L25">}}
+{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.spec.js#L26">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -388,7 +386,7 @@ example with a directory:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L157" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L160" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L115" >}}
@@ -402,7 +400,7 @@ example with a directory:
 {{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L115" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.spec.js#L41">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -417,16 +415,16 @@ please refer to the
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L181" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L139" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L125" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -444,16 +442,16 @@ please refer to the
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L197-L198" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L151-L152" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L132" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -462,3 +460,5 @@ please refer to the
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
+
+**Note**: As of Firefox 138, geckodriver needs to be started with the argument `--allow-system-access` to switch the context to `CHROME`.
diff --git a/website_and_docs/content/documentation/webdriver/browsers/firefox.ja.md b/website_and_docs/content/documentation/webdriver/browsers/firefox.ja.md
index 7f0d1b997994..7d03c5a17d60 100644
--- a/website_and_docs/content/documentation/webdriver/browsers/firefox.ja.md
+++ b/website_and_docs/content/documentation/webdriver/browsers/firefox.ja.md
@@ -1,9 +1,9 @@
 ---
-title: "Firefox 固有のCapability"
+title: "Firefox特有の機能"
 linkTitle: "Firefox"
 weight: 6
 description: >-
-    Mozilla Firefox ブラウザーに固有のCapabilityです。
+    これらは、Mozilla Firefoxブラウザに特有の機能と機能です。
 aliases: [
 "/ja/documentation/capabilities/firefox"
 ]
@@ -64,7 +64,7 @@ Firefox に固有のCapabilityは、Mozilla のページの [firefoxOptions](htt
 {{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L17" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.js#L12-L14">}}
+{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.spec.js#L12">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -106,31 +106,20 @@ Firefoxプロファイルを操作するにはいくつかの方法がありま
 
 <div>
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-FirefoxProfile profile = new FirefoxProfile();
-FirefoxOptions options = new FirefoxOptions();
-options.setProfile(profile);
-driver = new RemoteWebDriver(options);
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium.webdriver.firefox.options import Options
-from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
-options=Options()
-firefox_profile = FirefoxProfile()
-firefox_profile.set_preference("javascript.enabled", False)
-options.profile = firefox_profile
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L211-L216" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L160-L168" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
 var options = new FirefoxOptions();
 var profile = new FirefoxProfile();
 options.Profile = profile;
 var driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-profile = Selenium::WebDriver::Firefox::Profile.new
-profile['browser.download.dir'] = "/tmp/webdriver-downloads"
-options = Selenium::WebDriver::Firefox::Options.new(profile: profile)
-driver = Selenium::WebDriver.for :firefox, options: options
+  {{< tab header="Ruby" text=true >}}
+  {{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L139-L141" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
 const { Builder } = require("selenium-webdriver");
@@ -152,26 +141,35 @@ driver = RemoteWebDriver(options)
 {{< /tabpane >}}
 </div>
 
+**Note**: Whether you create an empty `FirefoxProfile` or point it to the directory of your own profile, Selenium
+will create a temporary directory to store either the data of the new profile or a copy of your existing one. Every
+time you run your program, a different temporary directory will be created. These directories are not cleaned up
+explicitly by Selenium, they should eventually get removed by the operating system. However, if you want to remove
+the copy manually (e.g. if your profile is large in size), the path of the copy is exposed by the `FirefoxProfile`
+object. Check the language specific implementation to see how to retrieve that location.
 
-## Service
+If you want to use an existing Firefox profile, you can pass in the path to that profile. Please refer to the official
+[Firefox documentation](https://support.mozilla.org/en-US/kb/profiles-where-firefox-stores-user-data#w_how-do-i-find-my-profile)
+for instructions on how to find the directory of your profile.
 
-Service settings common to all browsers are described on the [Service page]({{< ref "../drivers/service.md" >}}).
+## サービス
 
-### Log output
+すべてのブラウザに共通するサービス設定は、[Service page]({{< ref "../drivers/service.md" >}})に記載されています。
 
-Getting driver logs can be helpful for debugging various issues. The Service class lets you
-direct where the logs will go. Logging output is ignored unless the user directs it somewhere.
+### ログ出力
 
-#### File output
+ドライバーログを取得することは、さまざまな問題のデバッグに役立ちます。サービスクラスを使用すると、ログの保存先を指定できます。ログ出力は、ユーザーがどこかに指定しない限り無視されます。
 
-To change the logging output to save to a specific file:
+#### ファイル出力
+
+特定のファイルにログ出力を保存するには:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L62-L63" >}}
-**Note**: Java also allows setting file output by System Property:\
-Property key: `GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY`\
-Property value: String representing path to log file
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L62-L63" >}}
+**注**: Java では、システムプロパティによってファイル出力を設定することもできます。\
+プロパティキー:`GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY`\
+プロパティ値: ログファイルへのパスを表す文字列
 {{% /tab %}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
@@ -182,7 +180,7 @@ Property value: String representing path to log file
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/firefox_spec.rb#L43" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L43" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -192,17 +190,17 @@ Property value: String representing path to log file
 {{< /tab >}}
 {{< /tabpane >}}
 
-#### Console output
+#### コンソール出力
 
-To change the logging output to display in the console:
+ログ出力をコンソールに表示するには、以下のようにします:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L76-L77" >}}
-**Note**: Java also allows setting console output by System Property;\
-Property key: `GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY`\
-Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L76-L77" >}}
+**注意**: Javaは、システムプロパティを使用してコンソール出力を設定することもできます;\
+プロパティキー: `GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY`\
+プロパティ値: `DriverService.LOG_STDOUT` または `DriverService.LOG_STDERR`
 {{% /tab %}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
@@ -213,7 +211,7 @@ Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/firefox_spec.rb#L52" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L52" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -223,20 +221,20 @@ Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Log level
-There are 7 available log levels: `fatal`, `error`, `warn`, `info`, `config`, `debug`, `trace`.
-If logging is specified the level defaults to `info`.
+### ログレベル
+利用可能なログレベルは7つあります: `fatal`, `error`, `warn`, `info`, `config`, `debug`, `trace`。
+ロギングが指定されている場合、デフォルトのレベルは `info`になります。
 
-Note that `-v` is equivalent to `-log debug` and `-vv` is equivalent to `log trace`,
-so this examples is just for setting the log level generically:
+`-v` iは `-log debug` と同等であり、`-vv` は `log trace`と同等です。
+したがって、この例は一般的にログレベルを設定するためのものです:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L90-L91" >}}
-**Note**: Java also allows setting log level by System Property:\
-Property key: `GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY`\
-Property value: String representation of `FirefoxDriverLogLevel` enum
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L90-L91" >}}
+**注意**: Javaは、システムプロパティによってログレベルの設定も可能です:\
+プロパティキー: `GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY`\
+プロパティ値:`FirefoxDriverLogLevel`列挙型の文字列表現
 {{% /tab %}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
@@ -247,7 +245,7 @@ Property value: String representation of `FirefoxDriverLogLevel` enum
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/firefox_spec.rb#L63" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L63" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -257,18 +255,17 @@ Property value: String representation of `FirefoxDriverLogLevel` enum
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Truncated Logs
+### トランケートログ
 
-The driver logs everything that gets sent to it, including string representations of large binaries, so
-Firefox truncates lines by default. To turn off truncation:
+ドライバーは、大きなバイナリの文字列表現を含む、送信されたすべてのものをログに記録します。そのため、Firefoxではデフォルトで行が切り捨てられます。切り捨てを無効にするには:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L106-L107" >}}
-**Note**: Java also allows setting log level by System Property:\
-Property key: `GeckoDriverService.GECKO_DRIVER_LOG_NO_TRUNCATE`\
-Property value: `"true"` or `"false"`
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L106-L107" >}}
+**注意**: Javaでは、システムプロパティによってログレベルを設定することもできます。\
+プロパティキー: `GeckoDriverService.GECKO_DRIVER_LOG_NO_TRUNCATE`\
+プロパティ値: `"true"` または `"false"`
 {{% /tab %}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
@@ -279,7 +276,7 @@ Property value: `"true"` or `"false"`
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/firefox_spec.rb#L72" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L72" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -289,28 +286,27 @@ Property value: `"true"` or `"false"`
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Profile Root
+### プロファイルルート
 
-The default directory for profiles is the system temporary directory. If you do not have access to that directory,
-or want profiles to be created some place specific, you can change the profile root directory:
+プロファイルのデフォルトディレクトリは、システムの一時ディレクトリです。そのディレクトリにアクセスできない場合や、特定の場所にプロファイルを作成したい場合は、プロファイルルートディレクトリを変更できます:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L118-L119" >}}
-**Note**: Java also allows setting log level by System Property:\
-Property key: `GeckoDriverService.GECKO_DRIVER_PROFILE_ROOT`\
-Property value: String representing path to profile root directory
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L118-L119" >}}
+**注意**: Javaでは、システムプロパティを使用してログレベルを設定することもできます：  \
+プロパティキー: `GeckoDriverService.GECKO_DRIVER_PROFILE_ROOT`\
+プロパティ値: プロファイルルートディレクトリへのパスを表す文字列
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_firefox.py#L81" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L81" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/firefox_spec.rb#L81" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L81" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -321,19 +317,15 @@ Property value: String representing path to profile root directory
 {{< /tabpane >}}
 
 
-## Special Features
+## 特別な機能
 
 ### アドオン
 
 Chromeとは異なり、Firefoxの拡張機能はCapabilityの一部として追加されるのではなく、ドライバーの起動後に作成されます。
 
-Unlike Chrome, Firefox extensions are not added as part of capabilities as mentioned in
-[this issue](https://github.com/mozilla/geckodriver/issues/1476),
-they are created after starting the driver.
+Chromeとは異なり、Firefoxの拡張機能は[この問題](https://github.com/mozilla/geckodriver/issues/1476)に記載されているように、機能の一部として追加されるのではなく、ドライバーの起動後に作成されます。
 
-The following examples are for local webdrivers. For remote webdrivers,
-please refer to the
-[Remote WebDriver]({{< ref "../drivers/remote_webdriver" >}}) page.
+T以下の例はローカルWebDriver用です。リモートWebDriverについては、[Remote WebDriver]({{< ref "../drivers/remote_webdriver" >}})ページを参照してください。
 
 #### インストール
 
@@ -341,7 +333,7 @@ please refer to the
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L132" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L133" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L94" >}}
@@ -353,7 +345,7 @@ please refer to the
 {{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L95" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.js#L22-L24">}}
+{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.spec.js#L25">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -367,7 +359,7 @@ IDはアドオンインストール時の戻り値から取得できます。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L146" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L148" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L106" >}}
@@ -380,7 +372,7 @@ IDはアドオンインストール時の戻り値から取得できます。
 {{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L106" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.js#L22-L25">}}
+{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.spec.js#L26">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -395,7 +387,7 @@ IDはアドオンインストール時の戻り値から取得できます。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L157" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L160" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L115" >}}
@@ -409,7 +401,7 @@ IDはアドオンインストール時の戻り値から取得できます。
 {{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L115" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.spec.js#L41">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -418,22 +410,20 @@ IDはアドオンインストール時の戻り値から取得できます。
 
 ### ページ全体のスクリーンショット
 
-The following examples are for local webdrivers. For remote webdrivers,
-please refer to the
-[Remote WebDriver]({{< ref "../drivers/remote_webdriver" >}}) page.
+以下の例はローカルWebDriver用です。リモートWebDriverについては、[Remote WebDriver]({{< ref "../drivers/remote_webdriver" >}})ページを参照してください。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L181" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L139" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L125" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -445,22 +435,20 @@ please refer to the
 
 ### コンテキスト
 
-The following examples are for local webdrivers. For remote webdrivers,
-please refer to the
-[Remote WebDriver]({{< ref "../drivers/remote_webdriver" >}}) page.
+以下の例はローカルWebDriver用です。リモートWebDriverについては、[Remote WebDriver]({{< ref "../drivers/remote_webdriver" >}})ページを参照してください。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L197-L198" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L151-L152" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L132" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -469,3 +457,5 @@ please refer to the
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
+
+**Note**: As of Firefox 138, geckodriver needs to be started with the argument `--allow-system-access` to switch the context to `CHROME`.
diff --git a/website_and_docs/content/documentation/webdriver/browsers/firefox.pt-br.md b/website_and_docs/content/documentation/webdriver/browsers/firefox.pt-br.md
index 96c58326ec53..45f30fe5b7db 100644
--- a/website_and_docs/content/documentation/webdriver/browsers/firefox.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/browsers/firefox.pt-br.md
@@ -63,7 +63,7 @@ Adicione uma opção:
 {{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L17" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.js#L12-L14">}}
+{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.spec.js#L12">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -105,31 +105,20 @@ Existem várias formas de trabalhar com perfis Firefox
 
 <div>
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-FirefoxProfile profile = new FirefoxProfile();
-FirefoxOptions options = new FirefoxOptions();
-options.setProfile(profile);
-driver = new RemoteWebDriver(options);
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium.webdriver.firefox.options import Options
-from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
-options=Options()
-firefox_profile = FirefoxProfile()
-firefox_profile.set_preference("javascript.enabled", False)
-options.profile = firefox_profile
-  {{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L211-L216" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L160-L168" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
 var options = new FirefoxOptions();
 var profile = new FirefoxProfile();
 options.Profile = profile;
 var driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-profile = Selenium::WebDriver::Firefox::Profile.new
-profile['browser.download.dir'] = "/tmp/webdriver-downloads"
-options = Selenium::WebDriver::Firefox::Options.new(profile: profile)
-driver = Selenium::WebDriver.for :firefox, options: options
+  {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L139-L141" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
 const { Builder } = require("selenium-webdriver");
@@ -151,6 +140,16 @@ driver = RemoteWebDriver(options)
 {{< /tabpane >}}
 </div>
 
+**Note**: Whether you create an empty `FirefoxProfile` or point it to the directory of your own profile, Selenium
+will create a temporary directory to store either the data of the new profile or a copy of your existing one. Every
+time you run your program, a different temporary directory will be created. These directories are not cleaned up
+explicitly by Selenium, they should eventually get removed by the operating system. However, if you want to remove
+the copy manually (e.g. if your profile is large in size), the path of the copy is exposed by the `FirefoxProfile`
+object. Check the language specific implementation to see how to retrieve that location.
+
+If you want to use an existing Firefox profile, you can pass in the path to that profile. Please refer to the official
+[Firefox documentation](https://support.mozilla.org/en-US/kb/profiles-where-firefox-stores-user-data#w_how-do-i-find-my-profile)
+for instructions on how to find the directory of your profile.
 
 ## Service
 
@@ -167,7 +166,7 @@ To change the logging output to save to a specific file:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L62-L63" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L62-L63" >}}
 **Note**: Java also allows setting file output by System Property:\
 Property key: `GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY`\
 Property value: String representing path to log file
@@ -181,7 +180,7 @@ Property value: String representing path to log file
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/firefox_spec.rb#L43" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L43" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -198,7 +197,7 @@ To change the logging output to display in the console:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L76-L77" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L76-L77" >}}
 **Note**: Java also allows setting console output by System Property;\
 Property key: `GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY`\
 Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
@@ -212,7 +211,7 @@ Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/firefox_spec.rb#L52" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L52" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -232,7 +231,7 @@ so this examples is just for setting the log level generically:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L90-L91" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L90-L91" >}}
 **Note**: Java also allows setting log level by System Property:\
 Property key: `GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY`\
 Property value: String representation of `FirefoxDriverLogLevel` enum
@@ -246,7 +245,7 @@ Property value: String representation of `FirefoxDriverLogLevel` enum
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/firefox_spec.rb#L63" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L63" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -264,7 +263,7 @@ Firefox truncates lines by default. To turn off truncation:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L106-L107" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L106-L107" >}}
 **Note**: Java also allows setting log level by System Property:\
 Property key: `GeckoDriverService.GECKO_DRIVER_LOG_NO_TRUNCATE`\
 Property value: `"true"` or `"false"`
@@ -278,7 +277,7 @@ Property value: `"true"` or `"false"`
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/firefox_spec.rb#L72" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L72" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -296,20 +295,20 @@ or want profiles to be created some place specific, you can change the profile r
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L118-L119" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L118-L119" >}}
 **Note**: Java also allows setting log level by System Property:\
 Property key: `GeckoDriverService.GECKO_DRIVER_PROFILE_ROOT`\
 Property value: String representing path to profile root directory
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_firefox.py#L81" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L81" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/firefox_spec.rb#L81" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L81" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -340,7 +339,7 @@ Um arquivo xpi que pode ser obtido da [página Mozilla Extras](https://addons.mo
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L132" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L133" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L94" >}}
@@ -352,7 +351,7 @@ Um arquivo xpi que pode ser obtido da [página Mozilla Extras](https://addons.mo
 {{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L95" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.js#L22-L24">}}
+{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.spec.js#L25">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -365,7 +364,7 @@ Desinstalar uma extensão implica saber o seu id que pode ser obtido como valor
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L146" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L148" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L106" >}}
@@ -378,7 +377,7 @@ Desinstalar uma extensão implica saber o seu id que pode ser obtido como valor
 {{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L106" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.js#L22-L25">}}
+{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.spec.js#L26">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -393,7 +392,7 @@ uma pasta, este é um exemplo com uma pasta:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L157" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L160" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L115" >}}
@@ -407,7 +406,7 @@ uma pasta, este é um exemplo com uma pasta:
 {{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L115" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.spec.js#L41">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -422,16 +421,16 @@ please refer to the
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L181" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L139" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L125" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -449,16 +448,16 @@ please refer to the
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L197-L198" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L151-L152" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L132" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -467,3 +466,5 @@ please refer to the
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
+
+**Note**: As of Firefox 138, geckodriver needs to be started with the argument `--allow-system-access` to switch the context to `CHROME`.
diff --git a/website_and_docs/content/documentation/webdriver/browsers/firefox.zh-cn.md b/website_and_docs/content/documentation/webdriver/browsers/firefox.zh-cn.md
index e99b3c7a49a9..07457aee69d9 100644
--- a/website_and_docs/content/documentation/webdriver/browsers/firefox.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/browsers/firefox.zh-cn.md
@@ -63,7 +63,7 @@ Add an argument to options:
 {{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L17" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.js#L12-L14">}}
+{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.spec.js#L12">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -104,31 +104,20 @@ There are several ways to work with Firefox profiles
 
 <div>
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-FirefoxProfile profile = new FirefoxProfile();
-FirefoxOptions options = new FirefoxOptions();
-options.setProfile(profile);
-driver = new RemoteWebDriver(options);
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium.webdriver.firefox.options import Options
-from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
-options=Options()
-firefox_profile = FirefoxProfile()
-firefox_profile.set_preference("javascript.enabled", False)
-options.profile = firefox_profile
-  {{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L211-L216" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L160-L168" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
 var options = new FirefoxOptions();
 var profile = new FirefoxProfile();
 options.Profile = profile;
 var driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-profile = Selenium::WebDriver::Firefox::Profile.new
-profile['browser.download.dir'] = "/tmp/webdriver-downloads"
-options = Selenium::WebDriver::Firefox::Options.new(profile: profile)
-driver = Selenium::WebDriver.for :firefox, options: options
+  {{< tab header="Ruby" text=true >}}
+    {{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L139-L141" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
 const { Builder } = require("selenium-webdriver");
@@ -150,6 +139,16 @@ driver = RemoteWebDriver(options)
 {{< /tabpane >}}
 </div>
 
+**Note**: Whether you create an empty `FirefoxProfile` or point it to the directory of your own profile, Selenium
+will create a temporary directory to store either the data of the new profile or a copy of your existing one. Every
+time you run your program, a different temporary directory will be created. These directories are not cleaned up
+explicitly by Selenium, they should eventually get removed by the operating system. However, if you want to remove
+the copy manually (e.g. if your profile is large in size), the path of the copy is exposed by the `FirefoxProfile`
+object. Check the language specific implementation to see how to retrieve that location.
+
+If you want to use an existing Firefox profile, you can pass in the path to that profile. Please refer to the official
+[Firefox documentation](https://support.mozilla.org/en-US/kb/profiles-where-firefox-stores-user-data#w_how-do-i-find-my-profile)
+for instructions on how to find the directory of your profile.
 
 ## Service
 
@@ -166,7 +165,7 @@ To change the logging output to save to a specific file:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L62-L63" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L62-L63" >}}
 **Note**: Java also allows setting file output by System Property:\
 Property key: `GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY`\
 Property value: String representing path to log file
@@ -180,7 +179,7 @@ Property value: String representing path to log file
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/firefox_spec.rb#L43" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L43" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -197,7 +196,7 @@ To change the logging output to display in the console:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L76-L77" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L76-L77" >}}
 **Note**: Java also allows setting console output by System Property;\
 Property key: `GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY`\
 Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
@@ -211,7 +210,7 @@ Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/firefox_spec.rb#L52" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L52" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -231,7 +230,7 @@ so this examples is just for setting the log level generically:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L90-L91" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L90-L91" >}}
 **Note**: Java also allows setting log level by System Property:\
 Property key: `GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY`\
 Property value: String representation of `FirefoxDriverLogLevel` enum
@@ -245,7 +244,7 @@ Property value: String representation of `FirefoxDriverLogLevel` enum
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/firefox_spec.rb#L63" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L63" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -263,7 +262,7 @@ Firefox truncates lines by default. To turn off truncation:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L106-L107" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L106-L107" >}}
 **Note**: Java also allows setting log level by System Property:\
 Property key: `GeckoDriverService.GECKO_DRIVER_LOG_NO_TRUNCATE`\
 Property value: `"true"` or `"false"`
@@ -277,7 +276,7 @@ Property value: `"true"` or `"false"`
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/firefox_spec.rb#L72" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L72" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -295,20 +294,20 @@ or want profiles to be created some place specific, you can change the profile r
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L118-L119" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L118-L119" >}}
 **Note**: Java also allows setting log level by System Property:\
 Property key: `GeckoDriverService.GECKO_DRIVER_PROFILE_ROOT`\
 Property value: String representing path to profile root directory
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_firefox.py#L81" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L81" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/firefox_spec.rb#L81" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L81" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -337,7 +336,7 @@ A signed xpi file you would get from [Mozilla Addon page](https://addons.mozilla
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L132" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L133" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L94" >}}
@@ -349,7 +348,7 @@ A signed xpi file you would get from [Mozilla Addon page](https://addons.mozilla
 {{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L95" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.js#L22-L24">}}
+{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.spec.js#L25">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -362,7 +361,7 @@ Uninstalling an addon requires knowing its id. The id can be obtained from the r
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L146" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L148" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L106" >}}
@@ -375,7 +374,7 @@ Uninstalling an addon requires knowing its id. The id can be obtained from the r
 {{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L106" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.js#L22-L25">}}
+{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.spec.js#L26">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -390,7 +389,7 @@ example with a directory:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L157" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L160" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L115" >}}
@@ -404,7 +403,7 @@ example with a directory:
 {{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L115" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/firefoxSpecificFunctionalities.spec.js#L41">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -419,16 +418,16 @@ please refer to the
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L181" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L139" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L125" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -446,16 +445,16 @@ please refer to the
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/FirefoxTest.java#L197-L198" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_firefox.py#L151-L152" >}}
 {{< /tab >}}
-{{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/firefox_spec.rb#L132" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -464,3 +463,5 @@ please refer to the
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
+
+**Note**: As of Firefox 138, geckodriver needs to be started with the argument `--allow-system-access` to switch the context to `CHROME`.
diff --git a/website_and_docs/content/documentation/webdriver/browsers/internet_explorer.en.md b/website_and_docs/content/documentation/webdriver/browsers/internet_explorer.en.md
index ed5ec54df34e..1a80fdc5103e 100644
--- a/website_and_docs/content/documentation/webdriver/browsers/internet_explorer.en.md
+++ b/website_and_docs/content/documentation/webdriver/browsers/internet_explorer.en.md
@@ -38,7 +38,7 @@ Starting a Microsoft Edge browser in Internet Explorer Compatibility mode with b
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L35-L38" >}}
 {{% /tab %}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L10-L13" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -68,7 +68,7 @@ So, if IE is not on the system, you only need:
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L44-L45" >}}
 {{% /tab %}}
 {{< tab header="Ruby" text=true >}}
-{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L17-L18" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L24-L25" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let driver = await new Builder()
@@ -97,26 +97,16 @@ InternetExplorerOptions options = new InternetExplorerOptions();
 options.waitForUploadDialogUpTo(Duration.ofSeconds(2));
 WebDriver driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.file_upload_dialog_timeout = 2000
-driver = webdriver.Ie(options=options)
-
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L28-L29" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 var options = new InternetExplorerOptions();
 options.FileUploadDialogTimeout = TimeSpan.FromMilliseconds(2000);
 var driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-options = Selenium::WebDriver::IE::Options.new
-options.file_upload_dialog_timeout = 2000
-driver = Selenium::WebDriver.for(:ie, options: options)
+  {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L29" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
@@ -152,26 +142,16 @@ InternetExplorerOptions options = new InternetExplorerOptions();
 options.destructivelyEnsureCleanSession();
 WebDriver driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.ensure_clean_session = True
-driver = webdriver.Ie(options=options)
-
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L38-L39" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 var options = new InternetExplorerOptions();
 options.EnsureCleanSession = true;
 var driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-options = Selenium::WebDriver::IE::Options.new
-options.ensure_clean_session = true
-driver = Selenium::WebDriver.for(:ie, options: options)
+  {{< tab header="Ruby" text=true >}}
+    {{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L35" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
@@ -202,27 +182,17 @@ InternetExplorerOptions options = new InternetExplorerOptions();
 options.ignoreZoomSettings();
 WebDriver driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.ignore_zoom_level = True
-driver = webdriver.Ie(options=options)
-
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L48-L49" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 var options = new InternetExplorerOptions();
 options.IgnoreZoomLevel = true;
 var driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-options = Selenium::WebDriver::IE::Options.new
-options.ignore_zoom_level = true
-driver = Selenium::WebDriver.for(:ie, options: options)
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+    {{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L41" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
 let options = new ie.Options().ignoreZoomSetting(true);
@@ -262,27 +232,17 @@ InternetExplorerOptions options = new InternetExplorerOptions();
 options.introduceFlakinessByIgnoringSecurityDomains();
 WebDriver driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.ignore_protected_mode_settings = True
-driver = webdriver.Ie(options=options)
-
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L58-L59" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 var options = new InternetExplorerOptions();
 options.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
 var driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-options = Selenium::WebDriver::IE::Options.new
-options.ignore_protected_mode_settings = true
-driver = Selenium::WebDriver.for(:ie, options: options)
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+    {{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L47" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
 let options = new ie.Options().introduceFlakinessByIgnoringProtectedModeSettings(true);
@@ -311,25 +271,17 @@ InternetExplorerOptions options = new InternetExplorerOptions();
 options.setCapability("silent", true);
 WebDriver driver = new InternetExplorerDriver(options);
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.set_capability("silent", True)
-driver = webdriver.Ie(options=options)
-
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L68-L69" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 InternetExplorerOptions options = new InternetExplorerOptions();
 options.AddAdditionalInternetExplorerOption("silent", true);
 IWebDriver driver = new InternetExplorerDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    {{< badge-code >}}
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+    {{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L53" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const {Builder,By, Capabilities} = require('selenium-webdriver');
 let caps = Capabilities.ie();
@@ -408,17 +360,8 @@ public class ieTest {
     }
 }
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.add_argument('-private')
-options.force_create_process_api = True
-driver = webdriver.Ie(options=options)
-
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L76-L79" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 using System;
@@ -437,20 +380,9 @@ namespace ieTest {
  }
 }
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-options = Selenium::WebDriver::IE::Options.new
-options.force_create_process_api = true
-options.add_argument('-k')
-driver = Selenium::WebDriver.for(:ie, options: options)
-
-begin
-  driver.get 'https://google.com'
-  puts(driver.capabilities.to_json)
-ensure
-  driver.quit
-end
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+    {{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L58" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
 let options = new ie.Options();
@@ -514,16 +446,8 @@ public class ieTest {
     }
 }
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.force_create_process_api = True
-driver = webdriver.Ie(options=options)
-
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L87-L90" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 using System;
@@ -541,19 +465,9 @@ namespace ieTest {
  }
 }
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-options = Selenium::WebDriver::IE::Options.new
-options.force_create_process_api = true
-driver = Selenium::WebDriver.for(:ie, options: options)
-
-begin
-  driver.get 'https://google.com'
-  puts(driver.capabilities.to_json)
-ensure
-  driver.quit
-end
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+    {{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L63" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
 let options = new ie.Options();
@@ -599,20 +513,20 @@ To change the logging output to save to a specific file:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L53" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L53" >}}
 **Note**: Java also allows setting file output by System Property:\
 Property key: `InternetExplorerDriverService.IE_DRIVER_LOGFILE_PROPERTY`\
 Property value: String representing path to log file
 {{% /tab %}}
-{{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_internet_explorer.py#L29" >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L97-L99" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/internet_explorer_spec.rb#L34" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L82" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -629,21 +543,21 @@ To change the logging output to display in the console as STDOUT:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L67" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L67" >}}
 **Note**: Java also allows setting console output by System Property;\
 Property key: `InternetExplorerDriverService.IE_DRIVER_LOGFILE_PROPERTY`\
 Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{% /tab %}}
-{{< tab header="Python" >}}
+{{< tab header="Python" text=true >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_internet_explorer.py#L41" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L109-L111" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/internet_explorer_spec.rb#L43" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L91" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -659,20 +573,20 @@ If logging output is specified, the default level is `FATAL`
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L82" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L82" >}}
 **Note**: Java also allows setting log level by System Property:\
 Property key: `InternetExplorerDriverService.IE_DRIVER_LOGLEVEL_PROPERTY`\
 Property value: String representation of `InternetExplorerDriverLogLevel.DEBUG.toString()` enum
 {{% /tab %}}
-{{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_internet_explorer.py#L53" >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L121-L123" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L85" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L85" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/internet_explorer_spec.rb#L54" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L102" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -686,21 +600,21 @@ Property value: String representation of `InternetExplorerDriverLogLevel.DEBUG.t
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L94" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L94" >}}
 **Note**: Java also allows setting log level by System Property:\
 Property key: `InternetExplorerDriverService.IE_DRIVER_EXTRACT_PATH_PROPERTY`\
 Property value: String representing path to supporting files directory
 {{< /tab >}}
-{{< tab header="Python" >}}
+{{< tab header="Python" text=true >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_internet_explorer.py#L65" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L133-L135" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L98" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L98" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/internet_explorer_spec.rb#L64" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L112" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/browsers/internet_explorer.ja.md b/website_and_docs/content/documentation/webdriver/browsers/internet_explorer.ja.md
index e7d30dca1f96..c6c116958167 100644
--- a/website_and_docs/content/documentation/webdriver/browsers/internet_explorer.ja.md
+++ b/website_and_docs/content/documentation/webdriver/browsers/internet_explorer.ja.md
@@ -1,9 +1,9 @@
 ---
-title: "IE specific functionality"
+title: "IE特有の機能"
 linkTitle: "Internet Explorer"
 weight: 8
 description: >-
-    These are capabilities and features specific to Microsoft Internet Explorer browsers.
+    これらは、Microsoft Internet Explorerブラウザに特有の機能と機能です。
 aliases: [
 "/ja/documentation/capabilities/internet_explorer"
 ]
@@ -38,7 +38,7 @@ Starting a Microsoft Edge browser in Internet Explorer Compatibility mode with b
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L35-L38" >}}
 {{% /tab %}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L10-L13" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -67,7 +67,7 @@ So, if IE is not on the system, you only need:
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L44-L45" >}}
 {{% /tab %}}
 {{< tab header="Ruby" text=true >}}
-{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L17-L18" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L24-L25" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let driver = await new Builder()
@@ -94,26 +94,16 @@ InternetExplorerOptions options = new InternetExplorerOptions();
 options.waitForUploadDialogUpTo(Duration.ofSeconds(2));
 WebDriver driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.file_upload_dialog_timeout = 2000
-driver = webdriver.Ie(options=options)
-
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L28-L29" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 var options = new InternetExplorerOptions();
 options.FileUploadDialogTimeout = TimeSpan.FromMilliseconds(2000);
 var driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-options = Selenium::WebDriver::IE::Options.new
-options.file_upload_dialog_timeout = 2000
-driver = Selenium::WebDriver.for(:ie, options: options)
+  {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L29" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
@@ -146,27 +136,17 @@ InternetExplorerOptions options = new InternetExplorerOptions();
 options.destructivelyEnsureCleanSession();
 WebDriver driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.ensure_clean_session = True
-driver = webdriver.Ie(options=options)
-
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L38-L39" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 var options = new InternetExplorerOptions();
 options.EnsureCleanSession = true;
 var driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-options = Selenium::WebDriver::IE::Options.new
-options.ensure_clean_session = true
-driver = Selenium::WebDriver.for(:ie, options: options)
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L35" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
 let options = new ie.Options().ensureCleanSession(true);
@@ -195,27 +175,17 @@ InternetExplorerOptions options = new InternetExplorerOptions();
 options.ignoreZoomSettings();
 WebDriver driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.ignore_zoom_level = True
-driver = webdriver.Ie(options=options)
-
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L48-L49" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 var options = new InternetExplorerOptions();
 options.IgnoreZoomLevel = true;
 var driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-options = Selenium::WebDriver::IE::Options.new
-options.ignore_zoom_level = true
-driver = Selenium::WebDriver.for(:ie, options: options)
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L41" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
 let options = new ie.Options().ignoreZoomSetting(true);
@@ -251,27 +221,17 @@ InternetExplorerOptions options = new InternetExplorerOptions();
 options.introduceFlakinessByIgnoringSecurityDomains();
 WebDriver driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.ignore_protected_mode_settings = True
-driver = webdriver.Ie(options=options)
-
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L58-L59" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 var options = new InternetExplorerOptions();
 options.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
 var driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-options = Selenium::WebDriver::IE::Options.new
-options.ignore_protected_mode_settings = true
-driver = Selenium::WebDriver.for(:ie, options: options)
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L47" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
 let options = new ie.Options().introduceFlakinessByIgnoringProtectedModeSettings(true);
@@ -298,25 +258,17 @@ InternetExplorerOptions options = new InternetExplorerOptions();
 options.setCapability("silent", true);
 WebDriver driver = new InternetExplorerDriver(options);
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.set_capability("silent", True)
-driver = webdriver.Ie(options=options)
-
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L68-L69" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 InternetExplorerOptions options = new InternetExplorerOptions();
 options.AddAdditionalInternetExplorerOption("silent", true);
 IWebDriver driver = new InternetExplorerDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    {{< badge-code >}}
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L53" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const {Builder,By, Capabilities} = require('selenium-webdriver');
 let caps = Capabilities.ie();
@@ -395,17 +347,8 @@ public class ieTest {
     }
 }
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.add_argument('-private')
-options.force_create_process_api = True
-driver = webdriver.Ie(options=options)
-
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L76-L79" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 using System;
@@ -424,20 +367,9 @@ namespace ieTest {
  }
 }
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-options = Selenium::WebDriver::IE::Options.new
-options.force_create_process_api = true
-options.add_argument('-k')
-driver = Selenium::WebDriver.for(:ie, options: options)
-
-begin
-  driver.get 'https://google.com'
-  puts(driver.capabilities.to_json)
-ensure
-  driver.quit
-end
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L58" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
 let options = new ie.Options();
@@ -499,16 +431,8 @@ public class ieTest {
     }
 }
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.force_create_process_api = True
-driver = webdriver.Ie(options=options)
-
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L87-L90" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 using System;
@@ -526,19 +450,9 @@ namespace ieTest {
  }
 }
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-options = Selenium::WebDriver::IE::Options.new
-options.force_create_process_api = true
-driver = Selenium::WebDriver.for(:ie, options: options)
-
-begin
-  driver.get 'https://google.com'
-  puts(driver.capabilities.to_json)
-ensure
-  driver.quit
-end
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L63" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
 let options = new ie.Options();
@@ -587,20 +501,20 @@ To change the logging output to save to a specific file:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L53" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L53" >}}
 **Note**: Java also allows setting file output by System Property:\
 Property key: `InternetExplorerDriverService.IE_DRIVER_LOGFILE_PROPERTY`\
 Property value: String representing path to log file
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_internet_explorer.py#L29" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L97-L99" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/internet_explorer_spec.rb#L34" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L82" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -617,21 +531,21 @@ To change the logging output to display in the console as STDOUT:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L67" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L67" >}}
 **Note**: Java also allows setting console output by System Property;\
 Property key: `InternetExplorerDriverService.IE_DRIVER_LOGFILE_PROPERTY`\
 Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{% /tab %}}
-{{< tab header="Python" >}}
+{{< tab header="Python" text=true >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_internet_explorer.py#L41" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L109-L111" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/internet_explorer_spec.rb#L43" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L91" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -647,20 +561,20 @@ If logging output is specified, the default level is `FATAL`
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L82" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L82" >}}
 **Note**: Java also allows setting log level by System Property:\
 Property key: `InternetExplorerDriverService.IE_DRIVER_LOGLEVEL_PROPERTY`\
 Property value: String representation of `InternetExplorerDriverLogLevel.DEBUG.toString()` enum
 {{% /tab %}}
-{{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_internet_explorer.py#L53" >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L121-L123" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L85" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L85" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/internet_explorer_spec.rb#L54" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L102" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -674,21 +588,21 @@ Property value: String representation of `InternetExplorerDriverLogLevel.DEBUG.t
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L94" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L94" >}}
 **Note**: Java also allows setting log level by System Property:\
 Property key: `InternetExplorerDriverService.IE_DRIVER_EXTRACT_PATH_PROPERTY`\
 Property value: String representing path to supporting files directory
 {{< /tab >}}
-{{< tab header="Python" >}}
+{{< tab header="Python" text=true >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_internet_explorer.py#L65" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L133-L135" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L98" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L98" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/internet_explorer_spec.rb#L64" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L112" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/browsers/internet_explorer.pt-br.md b/website_and_docs/content/documentation/webdriver/browsers/internet_explorer.pt-br.md
index b877e65ae56b..6b824b744520 100644
--- a/website_and_docs/content/documentation/webdriver/browsers/internet_explorer.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/browsers/internet_explorer.pt-br.md
@@ -38,7 +38,7 @@ usando um conjunto de opções básicas:
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L35-L38" >}}
 {{% /tab %}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L10-L13" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -68,7 +68,7 @@ So, if IE is not on the system, you only need:
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L44-L45" >}}
 {{% /tab %}}
 {{< tab header="Ruby" text=true >}}
-{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L17-L18" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L24-L25" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let driver = await new Builder()
@@ -97,27 +97,16 @@ InternetExplorerOptions options = new InternetExplorerOptions();
 options.waitForUploadDialogUpTo(Duration.ofSeconds(2));
 WebDriver driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.file_upload_dialog_timeout = 2000
-driver = webdriver.Ie(options=options)
-
-# Navegar para Url
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L28-L29" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 var options = new InternetExplorerOptions();
 options.FileUploadDialogTimeout = TimeSpan.FromMilliseconds(2000);
 var driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-options = Selenium::WebDriver::IE::Options.new
-options.file_upload_dialog_timeout = 2000
-driver = Selenium::WebDriver.for(:ie, options: options)
+  {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L29" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
@@ -152,28 +141,17 @@ InternetExplorerOptions options = new InternetExplorerOptions();
 options.destructivelyEnsureCleanSession();
 WebDriver driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.ensure_clean_session = True
-driver = webdriver.Ie(options=options)
-
-# Navegar para Url
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L38-L39" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 var options = new InternetExplorerOptions();
 options.EnsureCleanSession = true;
 var driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-options = Selenium::WebDriver::IE::Options.new
-options.ensure_clean_session = true
-driver = Selenium::WebDriver.for(:ie, options: options)
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L35" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
 let options = new ie.Options().ensureCleanSession(true);
@@ -202,28 +180,17 @@ InternetExplorerOptions options = new InternetExplorerOptions();
 options.ignoreZoomSettings();
 WebDriver driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.ignore_zoom_level = True
-driver = webdriver.Ie(options=options)
-
-# Navegar para Url
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L48-L49" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 var options = new InternetExplorerOptions();
 options.IgnoreZoomLevel = true;
 var driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-options = Selenium::WebDriver::IE::Options.new
-options.ignore_zoom_level = true
-driver = Selenium::WebDriver.for(:ie, options: options)
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L41" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
 let options = new ie.Options().ignoreZoomSetting(true);
@@ -262,28 +229,17 @@ InternetExplorerOptions options = new InternetExplorerOptions();
 options.introduceFlakinessByIgnoringSecurityDomains();
 WebDriver driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.ignore_protected_mode_settings = True
-driver = webdriver.Ie(options=options)
-
-# Navegar para Url
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L58-L59" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 var options = new InternetExplorerOptions();
 options.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
 var driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-options = Selenium::WebDriver::IE::Options.new
-options.ignore_protected_mode_settings = true
-driver = Selenium::WebDriver.for(:ie, options: options)
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L47" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
 let options = new ie.Options().introduceFlakinessByIgnoringProtectedModeSettings(true);
@@ -311,26 +267,17 @@ InternetExplorerOptions options = new InternetExplorerOptions();
 options.setCapability("silent", true);
 WebDriver driver = new InternetExplorerDriver(options);
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.set_capability("silent", True)
-driver = webdriver.Ie(options=options)
-
-# Navegar para Url
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L68-L69" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 InternetExplorerOptions options = new InternetExplorerOptions();
 options.AddAdditionalInternetExplorerOption("silent", true);
 IWebDriver driver = new InternetExplorerDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Por favor inclua um PR para adicionar uma amostra de código
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L53" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const {Builder,By, Capabilities} = require('selenium-webdriver');
 let caps = Capabilities.ie();
@@ -408,18 +355,8 @@ public class ieTest {
     }
 }
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.add_argument('-private')
-options.force_create_process_api = True
-driver = webdriver.Ie(options=options)
-
-# Navegar para Url
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L76-L79" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 using System;
@@ -438,21 +375,9 @@ namespace ieTest {
  }
 }
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-options = Selenium::WebDriver::IE::Options.new
-options.force_create_process_api = true
-options.add_argument('-k')
-driver = Selenium::WebDriver.for(:ie, options: options)
-
-begin
-  # Navegar para URL
-  driver.get 'https://google.com'
-  puts(driver.capabilities.to_json)
-ensure
-  driver.quit
-end
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L58" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
 let options = new ie.Options();
@@ -515,17 +440,8 @@ public class ieTest {
     }
 }
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.force_create_process_api = True
-driver = webdriver.Ie(options=options)
-
-# Navegar para Url
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L87-L90" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 using System;
@@ -543,20 +459,9 @@ namespace ieTest {
  }
 }
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-options = Selenium::WebDriver::IE::Options.new
-options.force_create_process_api = true
-driver = Selenium::WebDriver.for(:ie, options: options)
-
-begin
-  # Navegar para Url
-  driver.get 'https://google.com'
-  puts(driver.capabilities.to_json)
-ensure
-  driver.quit
-end
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L63" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
 let options = new ie.Options();
@@ -604,20 +509,20 @@ To change the logging output to save to a specific file:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L53" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L53" >}}
 **Note**: Java also allows setting file output by System Property:\
 Property key: `InternetExplorerDriverService.IE_DRIVER_LOGFILE_PROPERTY`\
 Property value: String representing path to log file
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_internet_explorer.py#L29" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L97-L99" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/internet_explorer_spec.rb#L34" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L82" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -634,21 +539,21 @@ To change the logging output to display in the console as STDOUT:
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L67" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L67" >}}
 **Note**: Java also allows setting console output by System Property;\
 Property key: `InternetExplorerDriverService.IE_DRIVER_LOGFILE_PROPERTY`\
 Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{% /tab %}}
-{{< tab header="Python" >}}
+{{< tab header="Python" text=true >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_internet_explorer.py#L41" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L109-L111" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/internet_explorer_spec.rb#L43" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L91" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -664,20 +569,20 @@ If logging output is specified, the default level is `FATAL`
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L82" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L82" >}}
 **Note**: Java also allows setting log level by System Property:\
 Property key: `InternetExplorerDriverService.IE_DRIVER_LOGLEVEL_PROPERTY`\
 Property value: String representation of `InternetExplorerDriverLogLevel.DEBUG.toString()` enum
 {{% /tab %}}
-{{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_internet_explorer.py#L53" >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L121-123" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L85" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L85" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/internet_explorer_spec.rb#L54" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L102" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -691,21 +596,21 @@ Property value: String representation of `InternetExplorerDriverLogLevel.DEBUG.t
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L94" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L94" >}}
 **Note**: Java also allows setting log level by System Property:\
 Property key: `InternetExplorerDriverService.IE_DRIVER_EXTRACT_PATH_PROPERTY`\
 Property value: String representing path to supporting files directory
 {{< /tab >}}
-{{< tab header="Python" >}}
+{{< tab header="Python" text=true >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_internet_explorer.py#L65" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L133-135" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L98" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L98" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/internet_explorer_spec.rb#L64" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L112" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/browsers/internet_explorer.zh-cn.md b/website_and_docs/content/documentation/webdriver/browsers/internet_explorer.zh-cn.md
index 7a038cb2579d..d70a20d28d1c 100644
--- a/website_and_docs/content/documentation/webdriver/browsers/internet_explorer.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/browsers/internet_explorer.zh-cn.md
@@ -1,31 +1,34 @@
 ---
-title: "IE specific functionality"
+title: "IE 特定功能"
 linkTitle: "Internet Explorer"
 weight: 8
 description: >-
-    These are capabilities and features specific to Microsoft Internet Explorer browsers.
+    这些是 Microsoft Internet Explorer 浏览器特有的功能和特性.
 aliases: [
 "/zh-cn/documentation/capabilities/internet_explorer"
 ]
 ---
 
-As of June 2022, Selenium officially no longer supports standalone Internet Explorer.
-The Internet Explorer driver still supports running Microsoft Edge in "IE Compatibility Mode."
+自2022年6月起, Selenium 正式不再支持独立的 Internet Explorer.
+Internet Explorer 驱动程序仍支持在 "IE 兼容模式" 下运行 Microsoft Edge.
 
-## Special considerations
+## 特别注意事项
 
-The IE Driver is the only driver maintained by the Selenium Project directly.
-While binaries for both the 32-bit and 64-bit
-versions of Internet Explorer are available, there are some
-[known limitations](//jimevansmusic.blogspot.co.uk/2014/09/screenshots-sendkeys-and-sixty-four.html)
-with the 64-bit driver. As such it is recommended to use the 32-bit driver.
+IE 驱动程序是 Selenium 项目直接维护的唯一驱动程序.
+虽然 32 位和 64 位版本的版本的二进制文件, 
+但有一些64位驱动程序的
+[已知限制](//jimevansmusic.blogspot.co.uk/2014/09/screenshots-sendkeys-and-sixty-four.html).
+因此, 建议使用 32 位驱动程序.
 
-Additional information about using Internet Explorer can be found on the
-[IE Driver Server page]({{< ref "/documentation/ie_driver_server/" >}})
+有关使用 Internet Explorer 的其他信息, 请参见
+[IE 驱动程序服务器页面]({{< ref "/documentation/ie_driver_server/" >}})
 
-## Options
+## 选项
+
+在 Internet Explorer 兼容模式下启动 Microsoft Edge 浏览器, 
+并使用基本定义的选项, 
+看起来就像这样:
 
-Starting a Microsoft Edge browser in Internet Explorer Compatibility mode with basic defined options looks like this:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
@@ -38,7 +41,7 @@ Starting a Microsoft Edge browser in Internet Explorer Compatibility mode with b
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L35-L38" >}}
 {{% /tab %}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L10-L13" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L17-L20" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -48,13 +51,14 @@ Starting a Microsoft Edge browser in Internet Explorer Compatibility mode with b
 {{< /tab >}}
 {{< /tabpane >}}
 
-As of Internet Explorer Driver v4.5.0:
-* If IE is not present on the system (default in Windows 11), you do not need to 
-use the two parameters above. IE Driver will use Edge and will automatically locate it. 
-* If IE and Edge are both present on the system, you only need to set attaching to Edge,
-IE Driver will automatically locate Edge on your system.
 
-So, if IE is not on the system, you only need:
+截至 Internet Explorer 驱动程序 v4.5.0:
+* 如果系统中没有 IE（Windows 11 中的默认设置）, 则无需使用上述两个参数.
+  使用上述两个参数.IE 驱动程序将使用 Edge, 并自动对其进行定位.
+* 如果系统上同时存在 IE 和 Edge, 则只需设置附加到 Edge、
+  IE 驱动程序将自动在系统中定位 Edge.
+
+因此, 如果系统中没有 IE, 您只需要:
 
 {{< tabpane langEqualsHeader=true >}}
 {{< tab header="Java" text=true >}}
@@ -67,7 +71,7 @@ So, if IE is not on the system, you only need:
 {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L44-L45" >}}
 {{% /tab %}}
 {{< tab header="Ruby" text=true >}}
-{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L17-L18" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L24-L25" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let driver = await new Builder()
@@ -82,7 +86,8 @@ val driver = InternetExplorerDriver(options)
 {{< /tab >}}
 {{< /tabpane >}}
 
-Here are a few common use cases with different capabilities:
+
+以下是几种具有不同功能的常见用例:
 
 ### fileUploadDialogTimeout
 
@@ -94,26 +99,16 @@ InternetExplorerOptions options = new InternetExplorerOptions();
 options.waitForUploadDialogUpTo(Duration.ofSeconds(2));
 WebDriver driver = new RemoteWebDriver(options); 
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.file_upload_dialog_timeout = 2000
-driver = webdriver.Ie(options=options)
-
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L28-L29" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 var options = new InternetExplorerOptions();
 options.FileUploadDialogTimeout = TimeSpan.FromMilliseconds(2000);
 var driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-options = Selenium::WebDriver::IE::Options.new
-options.file_upload_dialog_timeout = 2000
-driver = Selenium::WebDriver.for(:ie, options: options)
+  {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L29" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
@@ -135,7 +130,7 @@ val driver = RemoteWebDriver(options)
 此功能将清除InternetExplorer所有正在运行实例的
  _缓存, 浏览器历史记录和Cookies_ 
  (包括手动启动或由驱动程序启动的实例) .
-默认情况下，此设置为 `false`.
+默认情况下, 此设置为 `false`.
 
 使用此功能将导致启动浏览器时性能下降, 
 因为驱动程序将等待直到缓存清除后再启动IE浏览器.   
@@ -148,27 +143,17 @@ InternetExplorerOptions options = new InternetExplorerOptions();
 options.destructivelyEnsureCleanSession();
 WebDriver driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.ensure_clean_session = True
-driver = webdriver.Ie(options=options)
-
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L38-L39" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 var options = new InternetExplorerOptions();
 options.EnsureCleanSession = true;
 var driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-options = Selenium::WebDriver::IE::Options.new
-options.ensure_clean_session = true
-driver = Selenium::WebDriver.for(:ie, options: options)
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L35" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
 let options = new ie.Options().ensureCleanSession(true);
@@ -198,27 +183,17 @@ InternetExplorerOptions options = new InternetExplorerOptions();
 options.ignoreZoomSettings();
 WebDriver driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.ignore_zoom_level = True
-driver = webdriver.Ie(options=options)
-
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L48-L49" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 var options = new InternetExplorerOptions();
 options.IgnoreZoomLevel = true;
 var driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-options = Selenium::WebDriver::IE::Options.new
-options.ignore_zoom_level = true
-driver = Selenium::WebDriver.for(:ie, options: options)
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L41" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
 let options = new ie.Options().ignoreZoomSetting(true);
@@ -246,7 +221,7 @@ val driver = RemoteWebDriver(options)
 但是, 到目前为止, 
 这仍然是第二好的选择, 
 并且第一选择应该 *始终* 是手动实际设置每个区域的保护模式设置.
-如果用户正在使用此属性，
+如果用户正在使用此属性, 
 则只会给予 "尽力而为" 的支持.
 
 此功能接受一个布尔值作为参数. 
@@ -257,27 +232,17 @@ InternetExplorerOptions options = new InternetExplorerOptions();
 options.introduceFlakinessByIgnoringSecurityDomains();
 WebDriver driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.ignore_protected_mode_settings = True
-driver = webdriver.Ie(options=options)
-
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L58-L59" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 var options = new InternetExplorerOptions();
 options.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
 var driver = new RemoteWebDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-options = Selenium::WebDriver::IE::Options.new
-options.ignore_protected_mode_settings = true
-driver = Selenium::WebDriver.for(:ie, options: options)
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L47" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
 let options = new ie.Options().introduceFlakinessByIgnoringProtectedModeSettings(true);
@@ -305,25 +270,17 @@ InternetExplorerOptions options = new InternetExplorerOptions();
 options.setCapability("silent", true);
 WebDriver driver = new InternetExplorerDriver(options);
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.set_capability("silent", True)
-driver = webdriver.Ie(options=options)
-
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L68-L69" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 InternetExplorerOptions options = new InternetExplorerOptions();
 options.AddAdditionalInternetExplorerOption("silent", true);
 IWebDriver driver = new InternetExplorerDriver(options);
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    {{< badge-code >}}
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L53" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const {Builder,By, Capabilities} = require('selenium-webdriver');
 let caps = Capabilities.ie();
@@ -405,17 +362,8 @@ public class ieTest {
     }
 }
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.add_argument('-private')
-options.force_create_process_api = True
-driver = webdriver.Ie(options=options)
-
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L76-L79" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 using System;
@@ -434,20 +382,9 @@ namespace ieTest {
  }
 }
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-options = Selenium::WebDriver::IE::Options.new
-options.force_create_process_api = true
-options.add_argument('-k')
-driver = Selenium::WebDriver.for(:ie, options: options)
-
-begin
-  driver.get 'https://google.com'
-  puts(driver.capabilities.to_json)
-ensure
-  driver.quit
-end
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L58" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
 let options = new ie.Options();
@@ -510,16 +447,8 @@ public class ieTest {
     }
 }
   {{< /tab >}}
-  {{< tab header="Python" >}}
-from selenium import webdriver
-
-options = webdriver.IeOptions()
-options.force_create_process_api = True
-driver = webdriver.Ie(options=options)
-
-driver.get("http://www.google.com")
-
-driver.quit()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L87-L90" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 using System;
@@ -537,19 +466,9 @@ namespace ieTest {
  }
 }
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-options = Selenium::WebDriver::IE::Options.new
-options.force_create_process_api = true
-driver = Selenium::WebDriver.for(:ie, options: options)
-
-begin
-  driver.get 'https://google.com'
-  puts(driver.capabilities.to_json)
-ensure
-  driver.quit
-end
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L63" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const ie = require('selenium-webdriver/ie');
 let options = new ie.Options();
@@ -581,36 +500,40 @@ fun main() {
 
 
 
-## Service
+## 服务
 
-Service settings common to all browsers are described on the [Service page]({{< ref "../drivers/service.md" >}}).
+[Service page]({{< ref "../drivers/service.md" >}})
+描述了所有浏览器通用的服务设置.
 
-### Log output
+### 日志输出
 
-Getting driver logs can be helpful for debugging various issues. The Service class lets you
-direct where the logs will go. Logging output is ignored unless the user directs it somewhere.
+获取驱动程序日志有助于调试各种问题.
+服务类可让您指示日志的去向.
+除非用户指定了日志输出的位置, 
+否则日志输出将被忽略.
 
-#### File output
+#### 文件输出
+
+更改日志输出以保存到特定文件:
 
-To change the logging output to save to a specific file:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L53" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L53" >}}
 **Note**: Java also allows setting file output by System Property:\
 Property key: `InternetExplorerDriverService.IE_DRIVER_LOGFILE_PROPERTY`\
 Property value: String representing path to log file
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_internet_explorer.py#L29" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L97-L99" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/internet_explorer_spec.rb#L34" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L82" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -620,28 +543,31 @@ Property value: String representing path to log file
 {{< /tab >}}
 {{< /tabpane >}}
 
-#### Console output
+#### 控制台输出
+
+
+要更改日志输出, 使其在控制台中显示为标准输出:
+
 
-To change the logging output to display in the console as STDOUT:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L67" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L67" >}}
 **Note**: Java also allows setting console output by System Property;\
 Property key: `InternetExplorerDriverService.IE_DRIVER_LOGFILE_PROPERTY`\
 Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{% /tab %}}
-{{< tab header="Python" >}}
+{{< tab header="Python" text=true >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_internet_explorer.py#L41" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L109-L111" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/internet_explorer_spec.rb#L43" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L91" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -651,26 +577,29 @@ Property value: `DriverService.LOG_STDOUT` or `DriverService.LOG_STDERR`
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Log Level
-There are 6 available log levels: `FATAL`, `ERROR`, `WARN`, `INFO`, `DEBUG`, and `TRACE`
-If logging output is specified, the default level is `FATAL`
+
+### 日志级别
+有 6 种可用的日志级别:`FATAL`、`ERROR`、`WARN`、`INFO`、`DEBUG` 和 `TRACE`
+如果指定了日志输出, 默认级别为`FATAL`.
+
+
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L82" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L82" >}}
 **Note**: Java also allows setting log level by System Property:\
 Property key: `InternetExplorerDriverService.IE_DRIVER_LOGLEVEL_PROPERTY`\
 Property value: String representation of `InternetExplorerDriverLogLevel.DEBUG.toString()` enum
 {{% /tab %}}
-{{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_internet_explorer.py#L53" >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L121-L123" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L85" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L85" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/internet_explorer_spec.rb#L54" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L102" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -680,25 +609,27 @@ Property value: String representation of `InternetExplorerDriverLogLevel.DEBUG.t
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Supporting Files Path
+
+### 辅助文件路径
+
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L94" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/InternetExplorerTest.java#L94" >}}
 **Note**: Java also allows setting log level by System Property:\
 Property key: `InternetExplorerDriverService.IE_DRIVER_EXTRACT_PATH_PROPERTY`\
 Property value: String representing path to supporting files directory
 {{< /tab >}}
-{{< tab header="Python" >}}
+{{< tab header="Python" text=true >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_internet_explorer.py#L65" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_internet_explorer.py#L133-L135" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L98" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Browsers/InternetExplorerTest.cs#L98" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/internet_explorer_spec.rb#L64" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/internet_explorer_spec.rb#L112" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/browsers/safari.en.md b/website_and_docs/content/documentation/webdriver/browsers/safari.en.md
index bf207b439d16..4a7489c8ed67 100644
--- a/website_and_docs/content/documentation/webdriver/browsers/safari.en.md
+++ b/website_and_docs/content/documentation/webdriver/browsers/safari.en.md
@@ -39,7 +39,7 @@ Starting a Safari session with basic defined options looks like this:
 {{< gh-codeblock path="/examples/ruby/spec/browsers/safari_spec.rb#L8-L9" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/safariSpecificCap.spec.js#L10-L12" >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/safariSpecificCap.spec.js#L8-L11" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
   val options = SafariOptions()
@@ -63,20 +63,21 @@ available is to turn logs off or on. If logs are toggled on, they can be found a
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/SafariTest.java#L31" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/SafariTest.java#L31" >}}
 **Note**: Java also allows setting console output by System Property;\
 Property key: `SafariDriverService.SAFARI_DRIVER_LOGGING`\
 Property value: `"true"` or `"false"`
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_safari.py#L17" >}}
+{{< badge-version version="4.26" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_safari.py#L17" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/safari_spec.rb#L20" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/safari_spec.rb#L20" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -93,16 +94,16 @@ Apple provides a development version of their browser — [Safari Technology Pre
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/SafariTest.java#L39-L40" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_safari.py#L25-L30" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/safari_spec.rb#L38-L39" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/browsers/safari.ja.md b/website_and_docs/content/documentation/webdriver/browsers/safari.ja.md
index 4fa03c6696ff..b99e93eec95e 100644
--- a/website_and_docs/content/documentation/webdriver/browsers/safari.ja.md
+++ b/website_and_docs/content/documentation/webdriver/browsers/safari.ja.md
@@ -1,9 +1,9 @@
 ---
-title: "Safari specific functionality"
+title: "Safari特有の機能"
 linkTitle: "Safari"
 weight: 10
 description: >-
-    These are capabilities and features specific to Apple Safari browsers.
+    これらは、Apple Safariブラウザに特有の機能と機能です。
 aliases: [
 "/ja/documentation/capabilities/safari"
 ]
@@ -38,7 +38,7 @@ Starting a Safari session with basic defined options looks like this:
 {{< gh-codeblock path="/examples/ruby/spec/browsers/safari_spec.rb#L8-L9" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/safariSpecificCap.spec.js#L10-L12" >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/safariSpecificCap.spec.js#L8-L11" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 val options = SafariOptions()
@@ -62,20 +62,21 @@ available is to turn logs off or on. If logs are toggled on, they can be found a
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/SafariTest.java#L31" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/SafariTest.java#L31" >}}
 **Note**: Java also allows setting console output by System Property;\
 Property key: `SafariDriverService.SAFARI_DRIVER_LOGGING`\
 Property value: `"true"` or `"false"`
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_safari.py#L17" >}}
+{{< badge-version version="4.26" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_safari.py#L17" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/safari_spec.rb#L20" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/safari_spec.rb#L20" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -93,16 +94,16 @@ To use this version in your code:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/SafariTest.java#L39-L40" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_safari.py#L25-L30" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/safari_spec.rb#L38-L39" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/browsers/safari.pt-br.md b/website_and_docs/content/documentation/webdriver/browsers/safari.pt-br.md
index 995a880ea7f1..21ce234a936e 100644
--- a/website_and_docs/content/documentation/webdriver/browsers/safari.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/browsers/safari.pt-br.md
@@ -38,7 +38,7 @@ Este é um exemplo de como iniciar uma sessão Safari com um conjunto de opçõe
 {{< gh-codeblock path="/examples/ruby/spec/browsers/safari_spec.rb#L8-L9" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/safariSpecificCap.spec.js#L10-L12" >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/safariSpecificCap.spec.js#L8-L11" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 val options = SafariOptions()
@@ -62,20 +62,21 @@ available is to turn logs off or on. If logs are toggled on, they can be found a
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/SafariTest.java#L31" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/SafariTest.java#L31" >}}
 **Note**: Java also allows setting console output by System Property;\
 Property key: `SafariDriverService.SAFARI_DRIVER_LOGGING`\
 Property value: `"true"` or `"false"`
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_safari.py#L17" >}}
+{{< badge-version version="4.26" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_safari.py#L17" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/safari_spec.rb#L20" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/safari_spec.rb#L20" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -93,16 +94,16 @@ To use this version in your code:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/SafariTest.java#L39-L40" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_safari.py#L25-L30" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/safari_spec.rb#L38-L39" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/browsers/safari.zh-cn.md b/website_and_docs/content/documentation/webdriver/browsers/safari.zh-cn.md
index 20674cad24dc..216813dc201d 100644
--- a/website_and_docs/content/documentation/webdriver/browsers/safari.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/browsers/safari.zh-cn.md
@@ -38,7 +38,7 @@ Safari独有的Capabilities可以在Apple的页面[关于Safari的WebDriver](htt
 {{< gh-codeblock path="/examples/ruby/spec/browsers/safari_spec.rb#L8-L9" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/safariSpecificCap.spec.js#L10-L12" >}}
+{{< gh-codeblock path="/examples/javascript/test/browser/safariSpecificCap.spec.js#L8-L11" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 val options = SafariOptions()
@@ -47,35 +47,39 @@ val driver = SafariDriver(options)
 {{< /tabpane >}}
 
 ### 移动端
-那些希望在iOS上自动化Safari的人可以参考 [Appium project](//appium.io/).
+那些希望在iOS上自动化Safari的人可以参考 [Appium 项目](//appium.io/).
 
 
-## Service
+## 服务
 
-Service settings common to all browsers are described on the [Service page]({{< ref "../drivers/service.md" >}}).
+所有浏览器通用的服务设置在 [服务页面]({{< ref "../drivers/service.md" >}}).
 
-### Logging
+### 日志
 
-Unlike other browsers, Safari doesn't let you choose where logs are output, or change levels. The one option
-available is to turn logs off or on. If logs are toggled on, they can be found at:`~/Library/Logs/com.apple.WebDriver/`.
+与其他浏览器不同,
+Safari 浏览器不允许您选择日志的输出位置或更改级别.
+一个可用选项是关闭或打开日志.
+如果日志处于打开状态，
+则可以在以下位置找到它们: `~/Library/Logs/com.apple.WebDriver/`.
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 {{< badge-version version="4.10" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/browsers/SafariTest.java#L31" >}}
-**Note**: Java also allows setting console output by System Property;\
-Property key: `SafariDriverService.SAFARI_DRIVER_LOGGING`\
-Property value: `"true"` or `"false"`
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/SafariTest.java#L31" >}}
+**注意**: Java也允许使用环境变量进行设置;\
+属性键: `SafariDriverService.SAFARI_DRIVER_LOGGING`\
+属性值: `"true"` 或 `"false"`
 {{% /tab %}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/browsers/test_safari.py#L17" >}}
+{{< badge-version version="4.26" >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_safari.py#L17" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-implementation >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/browsers/safari_spec.rb#L20" >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/safari_spec.rb#L20" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -88,21 +92,22 @@ Property value: `"true"` or `"false"`
 
 ## Safari Technology Preview
 
-Apple provides a development version of their browser — [Safari Technology Preview](https://developer.apple.com/safari/technology-preview/)
-To use this version in your code:
+Apple 提供了其浏览器的开发版本 — [Safari Technology Preview](https://developer.apple.com/safari/technology-preview/)
+
+在代码中使用此版本:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/browsers/SafariTest.java#L39-L40" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/browsers/test_safari.py#L25-L30" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/browsers/safari_spec.rb#L38-L39" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/drivers/_index.en.md b/website_and_docs/content/documentation/webdriver/drivers/_index.en.md
index bf54e86951d5..74c5418d0f50 100644
--- a/website_and_docs/content/documentation/webdriver/drivers/_index.en.md
+++ b/website_and_docs/content/documentation/webdriver/drivers/_index.en.md
@@ -14,7 +14,8 @@ The session is created automatically by initializing a new Driver class object.
 
 Each language allows a session to be created with arguments from one of these classes (or equivalent):
 
-* [Options]({{< ref "options.md" >}}) to describe the kind of session you want; default values are used for local, but this is required for remote
+* [Options]({{< ref "options.md" >}}) to describe the kind of session you want; default values are used for local, but
+  this is required for remote
 * Some form of [HTTP Client configuration]({{< ref "http_client.md" >}}) (the implementation varies between languages)
 * [Listeners]({{< ref "listeners.md" >}})
 
@@ -23,23 +24,24 @@ Each language allows a session to be created with arguments from one of these cl
 The primary unique argument for starting a local driver includes information about starting the required driver service
 on the local machine.
 
-* [Service]({{< ref "service.md" >}}) object applies only to local drivers and provides information about the browser driver
+* [Service]({{< ref "service.md" >}}) object applies only to local drivers and provides information about the browser
+  driver
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L23" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L9" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BaseTest.cs#L42" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L14" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/drivers/service.spec.js#L46-L50" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -51,31 +53,30 @@ on the local machine.
 The primary unique argument for starting a remote driver includes information about where to execute the code.
 Read the details in the [Remote Driver Section]({{< ref "remote_webdriver.md" >}})
 
-
 ## Quitting Sessions
 
 Quitting a session corresponds to W3C command for [Deleting a Session](https://w3c.github.io/webdriver/#delete-session).
 
-Important note: the `quit` method is different from the `close` method, 
+Important note: the `quit` method is different from the `close` method,
 and it is recommended to always use `quit` to end the session
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L11" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L28" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L16" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L28" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L35" >}}
 {{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/drivers/_index.ja.md b/website_and_docs/content/documentation/webdriver/drivers/_index.ja.md
index 4b9d6cd13a65..7ccbc5aeda2e 100644
--- a/website_and_docs/content/documentation/webdriver/drivers/_index.ja.md
+++ b/website_and_docs/content/documentation/webdriver/drivers/_index.ja.md
@@ -14,32 +14,31 @@ weight: 3
 
 各言語では、次のいずれかのクラス (または同等のもの) の引数を使用してセッションを作成することができます。
 
-* [オプション]({{< ref "options.md" >}}) 作成を希望するセッションの種類 ;  ローカルにはデフォルト値を使用しますが、リモートには必須です。
+* [オプション]({{< ref "options.md" >}}) 作成を希望するセッションの種類 ; ローカルにはデフォルト値を使用しますが、リモートには必須です。
 * 何らかの形の[HTTP Client configuration]({{< ref "http_client.md" >}})  (実装は言語によって異なります)
 * [リスナー]({{< ref "listeners.md" >}})
-  
+
 ### ローカルドライバー
 
 ローカルドライバーを起動するための主な一意の引数には、ローカルコンピューターで必要なドライバーサービスを起動するための情報が含まれます。
 
-
 * [Service]({{< ref "service.md" >}})オブジェクトはローカルドライバーにのみ適用され、ブラウザーのドライバーに関する情報を提供します。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L23" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L9" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BaseTest.cs#L42" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L14" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/drivers/service.spec.js#L46-L50" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -60,21 +59,21 @@ weight: 3
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L11" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L28" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L16" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L28" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L35" >}}
 {{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/drivers/_index.pt-br.md b/website_and_docs/content/documentation/webdriver/drivers/_index.pt-br.md
index ce62149a4506..add5557f378e 100644
--- a/website_and_docs/content/documentation/webdriver/drivers/_index.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/drivers/_index.pt-br.md
@@ -1,81 +1,78 @@
 ---
-title: "Driver Sessions"
+title: "Sessões de Driver"
 linkTitle: "Drivers"
 weight: 3
 ---
 
-Starting and stopping a session is for opening and closing a browser.
+Iniciar e encerrar uma sessão serve para abrir e fechar um navegador.
 
-## Creating Sessions
+## Criando Sessões
 
-Creating a new session corresponds with the W3C command for [New session](https://w3c.github.io/webdriver/#new-session)
+Criar uma nova sessão corresponde ao comando W3C para [Nova sessão](https://w3c.github.io/webdriver/#new-session)
 
-The session is created automatically by initializing a new Driver class object.
+A sessão é criada automaticamente ao inicializar um novo objeto da classe Driver. 
 
-Each language allows a session to be created with arguments from one of these classes (or equivalent):
+Cada linguagem permite que uma sessão seja criada com argumentos de uma dessas classes (ou equivalentes):
 
-* [Options]({{< ref "options.md" >}}) to describe the kind of session you want; default values are used for local, but this is required for remote
-* Some form of [Http Client Configuration]({{< ref "http_client.md" >}}) (the implementation varies between languages)
-* [Listeners]({{< ref "listeners.md" >}})
+* [Options]({{< ref "options.md" >}}) to describe the kind of session you want; default values are used for local, but
+  this is required for remote
+* Alguma forma de [configuração do cliente HTTP]({{< ref "http_client.md" >}}) (a implementação varia entre as linguagens)
+* [Ouvintes]({{< ref "listeners.md" >}})
 
 ### Local Driver
 
-The primary unique argument for starting a local driver includes information about starting the required driver service
-on the local machine.
+O principal argumento exclusivo para iniciar um driver local inclui informações sobre a inicialização do serviço de driver necessário na máquina local.
 
-* [Service]({{< ref "service.md" >}}) object applies only to local drivers and provides information about the browser driver
+* Objeto de [Serviço]({{< ref "service.md" >}}) se aplica apenas a drivers locais e fornece informações sobre o driver do navegador.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L23" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L9" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BaseTest.cs#L42" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L14" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/drivers/service.spec.js#L46-L50" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Remote Driver
-
-The primary unique argument for starting a remote driver includes information about where to execute the code.
-Read the details in the [Remote Driver Section]({{< ref "remote_webdriver.md" >}})
+### Driver Remoto
 
+O principal argumento exclusivo para iniciar um driver remoto inclui informações sobre onde executar o código. Leia os detalhes na [seção Driver Remoto]({{< ref "remote_webdriver.md" >}})
 
-## Quitting Sessions
+## Encerrando Sessões
 
-Quitting a session corresponds to W3C command for [Deleting a Session](https://w3c.github.io/webdriver/#delete-session).
+Encerrar uma sessão corresponde ao comando W3C para [Excluir uma Sessão](https://w3c.github.io/webdriver/#delete-session).
 
-Important note: the `quit` method is different from the `close` method, 
-and it is recommended to always use `quit` to end the session
+Nota importante: o método `quit` é diferente do método `close`, e é recomendável sempre usar `quit` para finalizar a sessão.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L11" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L28" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L16" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L28" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L35" >}}
 {{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/drivers/_index.zh-cn.md b/website_and_docs/content/documentation/webdriver/drivers/_index.zh-cn.md
index 97c3723d51aa..417672894668 100644
--- a/website_and_docs/content/documentation/webdriver/drivers/_index.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/drivers/_index.zh-cn.md
@@ -8,7 +8,7 @@ weight: 3
 
 ## 创建会话
 
-创建会话对应于W3C的命令 [新建会话](https://w3c.github.io/webdriver/#new-session) 
+创建会话对应于W3C的命令 [新建会话](https://w3c.github.io/webdriver/#new-session)
 
 会话是通过初始化新的驱动类对象自动创建的.
 
@@ -27,19 +27,19 @@ weight: 3
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L23" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L9" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/BaseTest.cs#L42" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L14" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/drivers/service.spec.js#L46-L50" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -51,7 +51,6 @@ weight: 3
 用于启动远程驱动的首要唯一参数包括有关在何处执行代码的信息.
 请浏览 [远程驱动章节]({{< ref "remote_webdriver.md" >}})中的详细信息
 
-
 ## 退出会话
 
 退出会话对应于W3C的命令 [删除会话](https://w3c.github.io/webdriver/#delete-session).
@@ -61,21 +60,21 @@ weight: 3
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L11" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L28" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L16" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L28" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L35" >}}
 {{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/drivers/http_client.en.md b/website_and_docs/content/documentation/webdriver/drivers/http_client.en.md
index 0b5302bd0366..25e1da1fb0b0 100644
--- a/website_and_docs/content/documentation/webdriver/drivers/http_client.en.md
+++ b/website_and_docs/content/documentation/webdriver/drivers/http_client.en.md
@@ -8,16 +8,16 @@ These allow you to set various parameters for the HTTP library
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/HttpClientTest.java" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_http_client.py" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/http_client_spec.rb#L7-L8" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/drivers/http_client.ja.md b/website_and_docs/content/documentation/webdriver/drivers/http_client.ja.md
index 0b5302bd0366..0e53d9d2f423 100644
--- a/website_and_docs/content/documentation/webdriver/drivers/http_client.ja.md
+++ b/website_and_docs/content/documentation/webdriver/drivers/http_client.ja.md
@@ -1,23 +1,23 @@
 ---
-title: "HTTP Client Configuration"
-linkTitle: "HTTP Client"
+title: "HTTPクライアントの設定"
+linkTitle: "HTTPクライアント"
 weight: 3
 ---
 
-These allow you to set various parameters for the HTTP library
+これにより、HTTPライブラリのさまざまなパラメーターを設定できます。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/HttpClientTest.java" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_http_client.py" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/http_client_spec.rb#L7-L8" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/drivers/http_client.pt-br.md b/website_and_docs/content/documentation/webdriver/drivers/http_client.pt-br.md
index 0b5302bd0366..99819a4ed25b 100644
--- a/website_and_docs/content/documentation/webdriver/drivers/http_client.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/drivers/http_client.pt-br.md
@@ -1,5 +1,5 @@
 ---
-title: "HTTP Client Configuration"
+title: "Configuração do Cliente HTTP"
 linkTitle: "HTTP Client"
 weight: 3
 ---
@@ -8,16 +8,16 @@ These allow you to set various parameters for the HTTP library
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/HttpClientTest.java" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_http_client.py" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/http_client_spec.rb#L7-L8" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/drivers/http_client.zh-cn.md b/website_and_docs/content/documentation/webdriver/drivers/http_client.zh-cn.md
index a231898f5a90..6a61cc74af5e 100644
--- a/website_and_docs/content/documentation/webdriver/drivers/http_client.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/drivers/http_client.zh-cn.md
@@ -8,16 +8,16 @@ weight: 3
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/HttpClientTest.java" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_http_client.py" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/http_client_spec.rb#L7-L8" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/drivers/options.en.md b/website_and_docs/content/documentation/webdriver/drivers/options.en.md
index 7f5834781dce..48f82e72d06e 100644
--- a/website_and_docs/content/documentation/webdriver/drivers/options.en.md
+++ b/website_and_docs/content/documentation/webdriver/drivers/options.en.md
@@ -31,16 +31,16 @@ Browser name is set by default when using an Options class instance.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L73-74" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L79-80" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L11" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -58,16 +58,16 @@ it will be automatically downloaded by [Selenium Manager]({{< ref "../../seleniu
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L80-82" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L86-88" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L40" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -113,61 +113,17 @@ event fire is returned.
 
 {{< tabpane langEqualsHeader=true >}}
 {{< badge-examples >}}
-{{< tab header="Java" >}}
-import org.openqa.selenium.PageLoadStrategy;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.chrome.ChromeOptions;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class pageLoadStrategy {
-  public static void main(String[] args) {
-    ChromeOptions chromeOptions = new ChromeOptions();
-    chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
-    WebDriver driver = new ChromeDriver(chromeOptions);
-    try {
-      // Navigate to Url
-      driver.get("https://google.com");
-    } finally {
-      driver.quit();
-    }
-  }
-}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L21-L23">}}
 {{< /tab >}}
-{{< tab header="Python" >}}
-from selenium import webdriver
-from selenium.webdriver.chrome.options import Options
-options = Options()
-options.page_load_strategy = 'normal'
-driver = webdriver.Chrome(options=options)
-driver.get("http://www.google.com")
-driver.quit()
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L7-9">}}
 {{< /tab >}}
-{{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace pageLoadStrategy {
-  class pageLoadStrategy {
-    public static void Main(string[] args) {
-      var chromeOptions = new ChromeOptions();
-      chromeOptions.PageLoadStrategy = PageLoadStrategy.Normal;
-      IWebDriver driver = new ChromeDriver(chromeOptions);
-      try {
-        driver.Navigate().GoToUrl("https://example.com");
-      } finally {
-        driver.Quit();
-      }
-    }
-  }
-}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs#L13-14" >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-options = Selenium::WebDriver::Options.chrome
-options.page_load_strategy = :normal
-
-driver = Selenium::WebDriver.for :chrome, options: options
-driver.get('https://www.google.com')
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L11-L12">}}
 {{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/capabilities/pageLoading.spec.js#L28-L34">}}
@@ -198,61 +154,17 @@ event fire is returned.
 
 {{< tabpane langEqualsHeader=true >}}
 {{< badge-examples >}}
-{{< tab header="Java" >}}
-import org.openqa.selenium.PageLoadStrategy;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.chrome.ChromeOptions;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class pageLoadStrategy {
-  public static void main(String[] args) {
-    ChromeOptions chromeOptions = new ChromeOptions();
-    chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER);
-    WebDriver driver = new ChromeDriver(chromeOptions);
-    try {
-      // Navigate to Url
-      driver.get("https://google.com");
-    } finally {
-      driver.quit();
-    }
-  }
-}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L34-L36">}}
 {{< /tab >}}
-{{< tab header="Python" >}}
-from selenium import webdriver
-from selenium.webdriver.chrome.options import Options
-options = Options()
-options.page_load_strategy = 'eager'
-driver = webdriver.Chrome(options=options)
-driver.get("http://www.google.com")
-driver.quit()
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L15-L17">}}
 {{< /tab >}}
-{{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace pageLoadStrategy {
-  class pageLoadStrategy {
-    public static void Main(string[] args) {
-      var chromeOptions = new ChromeOptions();
-      chromeOptions.PageLoadStrategy = PageLoadStrategy.Eager;
-      IWebDriver driver = new ChromeDriver(chromeOptions);
-      try {
-        driver.Navigate().GoToUrl("https://example.com");
-      } finally {
-        driver.Quit();
-      }
-    }
-  }
-}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs#L29-30" >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-options = Selenium::WebDriver::Options.chrome
-options.page_load_strategy = :eager
-
-driver = Selenium::WebDriver.for :chrome, options: options
-driver.get('https://www.google.com')
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L20-L21">}}
 {{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/capabilities/pageLoading.spec.js#L8-L14">}}
@@ -282,61 +194,17 @@ WebDriver only waits until the initial page is downloaded.
 
 {{< tabpane langEqualsHeader=true >}}
 {{< badge-examples >}}
-{{< tab header="Java" >}}
-import org.openqa.selenium.PageLoadStrategy;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.chrome.ChromeOptions;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class pageLoadStrategy {
-  public static void main(String[] args) {
-    ChromeOptions chromeOptions = new ChromeOptions();
-    chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE);
-    WebDriver driver = new ChromeDriver(chromeOptions);
-    try {
-      // Navigate to Url
-      driver.get("https://google.com");
-    } finally {
-      driver.quit();
-    }
-  }
-}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L47-L49">}}
 {{< /tab >}}
-{{< tab header="Python" >}}
-from selenium import webdriver
-from selenium.webdriver.chrome.options import Options
-options = Options()
-options.page_load_strategy = 'none'
-driver = webdriver.Chrome(options=options)
-driver.get("http://www.google.com")
-driver.quit()
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L23-L25">}}
 {{< /tab >}}
-{{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace pageLoadStrategy {
-  class pageLoadStrategy {
-    public static void Main(string[] args) {
-      var chromeOptions = new ChromeOptions();
-      chromeOptions.PageLoadStrategy = PageLoadStrategy.None;
-      IWebDriver driver = new ChromeDriver(chromeOptions);
-      try {
-        driver.Navigate().GoToUrl("https://example.com");
-      } finally {
-        driver.Quit();
-      }
-    }
-  }
-}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs#L41-42" >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-options = Selenium::WebDriver::Options.chrome
-options.page_load_strategy = :none
-
-driver = Selenium::WebDriver.for :chrome, options: options
-driver.get('https://www.google.com')
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L29-L30">}}
 {{< /tab >}}
 {{< tab header="JavaScript" text=true  >}}
 {{< gh-codeblock path="/examples/javascript/test/capabilities/pageLoading.spec.js#L18-L24">}}
@@ -371,16 +239,16 @@ setting `platformName` sets the OS at the remote-end.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L88-L90">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L94-96">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L38-L39" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -409,19 +277,19 @@ effect for the entire session.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L60-L61">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L101-103">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L51-L52" >}}
 {{< /tab >}}
-{{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/capabilities/pageLoading.spec.js#L38-L41">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -444,16 +312,16 @@ is imposed when a new session is created by WebDriver.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L96-L98">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L30-32">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L114-L115" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -473,16 +341,16 @@ _TimeoutException_.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L111-L113">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L37-39">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L105-L106" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -500,16 +368,16 @@ is imposed when a new session is created by WebDriver.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L126-L128">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L44-46">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L96-L97" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -538,16 +406,16 @@ user prompt encounters at the remote-end. This is defined by
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L141-L142">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L51-53">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L60-L61" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -563,16 +431,16 @@ Indicates whether the remote end supports all of the [resizing and repositioning
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L151-L152">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L58-60">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L69-L70" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -591,16 +459,16 @@ when using _Element Send Keys_ with hidden file upload controls.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L163-L164">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L65-67">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L78-L79" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -631,9 +499,10 @@ likely because the environment needs a proxy to be accessed.
 
 Selenium WebDriver provides a way to proxy settings:
 
-{{< tabpane langEqualsHeader=true >}}
+{{< tabpane text=true >}}
 {{< badge-examples >}}
-{{< tab header="Java" >}}
+{{% tab header="Java" %}}
+```java
 import org.openqa.selenium.Proxy;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.chrome.ChromeDriver;
@@ -651,24 +520,13 @@ public class ProxyTest {
     driver.quit();
   }
 }
-{{< /tab >}}
-{{< tab header="Python" >}}
-from selenium import webdriver
-
-PROXY = "<HOST:PORT>"
-webdriver.DesiredCapabilities.FIREFOX['proxy'] = {
-"httpProxy": PROXY,
-"ftpProxy": PROXY,
-"sslProxy": PROXY,
-"proxyType": "MANUAL",
-
-}
-
-with webdriver.Firefox() as driver:
-    driver.get("https://selenium.dev")
-
-{{< /tab >}}
-{{< tab header="CSharp" >}}
+```
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L72-74">}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+```CSharp
 using OpenQA.Selenium;
 using OpenQA.Selenium.Chrome;
 
@@ -685,16 +543,13 @@ IWebDriver driver = new ChromeDriver(options);
 driver.Navigate().GoToUrl("https://www.selenium.dev/");
 }
 }
-{{< /tab >}}
+```
+{{% /tab %}}
 {{< tab header="Ruby" >}}
-
-proxy = Selenium::WebDriver::Proxy.new(http: '<HOST:PORT>')
-cap   = Selenium::WebDriver::Remote::Capabilities.chrome(proxy: proxy)
-
-driver = Selenium::WebDriver.for(:chrome, capabilities: cap)
-driver.get('http://google.com')
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L87-L88" >}}
 {{< /tab >}}
-{{< tab header="JavaScript" >}}
+{{% tab header="JavaScript" %}}
+```javascript
 let webdriver = require('selenium-webdriver');
 let chrome = require('selenium-webdriver/chrome');
 let proxy = require('selenium-webdriver/proxy');
@@ -713,8 +568,10 @@ finally {
 await driver.quit();
 }
 }());
-{{< /tab >}}
-{{< tab header="Kotlin" >}}
+```
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+```kotlin
 import org.openqa.selenium.Proxy
 import org.openqa.selenium.WebDriver
 import org.openqa.selenium.chrome.ChromeDriver
@@ -733,5 +590,6 @@ fun main() {
         driver.quit()
     }
 }
-{{< /tab >}}
+```
+{{% /tab %}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/drivers/options.ja.md b/website_and_docs/content/documentation/webdriver/drivers/options.ja.md
index c294fe7114b2..39b55a4cbc6f 100644
--- a/website_and_docs/content/documentation/webdriver/drivers/options.ja.md
+++ b/website_and_docs/content/documentation/webdriver/drivers/options.ja.md
@@ -3,7 +3,7 @@ title: "ブラウザーオプション"
 linkTitle: "オプション"
 weight: 2
 description: >-
-  これらのCapabilityはすべてのブラウザで共通です。
+  これらの機能はすべてのブラウザで共有されています。
 aliases: [
 "/documentation/ja/driver_idiosyncrasies/shared_capabilities/",
 "/ja/documentation/webdriver/capabilities/shared_capabilities/",
@@ -27,20 +27,20 @@ Selenium 4 以降、ブラウザ オプション クラスを使用する必要
 
 ## browserName
 
-Browser name is set by default when using an Options class instance.
+オプションクラスのインスタンスを使用すると、ブラウザ名はデフォルトで設定されます。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L73-74" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L79-80" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L11" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -53,22 +53,20 @@ Browser name is set by default when using an Options class instance.
 
 ## browserVersion
 
-This capability is optional, this is used to set the available browser version at remote end.
-In recent versions of Selenium, if the version is not found on the system,
-it will be automatically downloaded by [Selenium Manager]({{< ref "../../selenium_manager" >}})
+この機能はオプションであり、リモート側で使用可能なブラウザのバージョンを設定するために使用されます。最近のSeleniumのバージョンでは、システムにバージョンが見つからない場合、[Selenium Manager]({{< ref "../../selenium_manager" >}}) によって自動的にダウンロードされます。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L80-82" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L86-88" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L40" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -111,61 +109,17 @@ WebDriver は [load](https://developer.mozilla.org/ja/docs/Web/API/Window/load_e
 イベント検知するまで待機します。
 
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
-import org.openqa.selenium.PageLoadStrategy;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.chrome.ChromeOptions;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class pageLoadStrategy {
-  public static void main(String[] args) {
-    ChromeOptions chromeOptions = new ChromeOptions();
-    chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
-    WebDriver driver = new ChromeDriver(chromeOptions);
-    try {
-      // Navigate to Url
-      driver.get("https://google.com");
-    } finally {
-      driver.quit();
-    }
-  }
-}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L21-L23">}}
 {{< /tab >}}
-{{< tab header="Python" >}}
-from selenium import webdriver
-from selenium.webdriver.chrome.options import Options
-options = Options()
-options.page_load_strategy = 'normal'
-driver = webdriver.Chrome(options=options)
-driver.get("http://www.google.com")
-driver.quit()
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L7-9">}}
 {{< /tab >}}
-{{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace pageLoadStrategy {
-  class pageLoadStrategy {
-    public static void Main(string[] args) {
-      var chromeOptions = new ChromeOptions();
-      chromeOptions.PageLoadStrategy = PageLoadStrategy.Normal;
-      IWebDriver driver = new ChromeDriver(chromeOptions);
-      try {
-        driver.Navigate().GoToUrl("https://example.com");
-      } finally {
-        driver.Quit();
-      }
-    }
-  }
-}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs#L13-14" >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-options = Selenium::WebDriver::Options.chrome
-options.page_load_strategy = :normal
-
-driver = Selenium::WebDriver.for :chrome, options: options
-driver.get('https://www.google.com')
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L11-L12">}}
 {{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/capabilities/pageLoading.spec.js#L28-L34">}}
@@ -195,61 +149,17 @@ WebDriver は、[DOMContentLoaded](https://developer.mozilla.org/ja/docs/Web/API
 イベントを検知するまで待機します。
 
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
-import org.openqa.selenium.PageLoadStrategy;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.chrome.ChromeOptions;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class pageLoadStrategy {
-  public static void main(String[] args) {
-    ChromeOptions chromeOptions = new ChromeOptions();
-    chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER);
-    WebDriver driver = new ChromeDriver(chromeOptions);
-    try {
-      // Navigate to Url
-      driver.get("https://google.com");
-    } finally {
-      driver.quit();
-    }
-  }
-}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L34-L36">}}
 {{< /tab >}}
-{{< tab header="Python" >}}
-from selenium import webdriver
-from selenium.webdriver.chrome.options import Options
-options = Options()
-options.page_load_strategy = 'eager'
-driver = webdriver.Chrome(options=options)
-driver.get("http://www.google.com")
-driver.quit()
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L15-L17">}}
 {{< /tab >}}
-{{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace pageLoadStrategy {
-  class pageLoadStrategy {
-    public static void Main(string[] args) {
-      var chromeOptions = new ChromeOptions();
-      chromeOptions.PageLoadStrategy = PageLoadStrategy.Eager;
-      IWebDriver driver = new ChromeDriver(chromeOptions);
-      try {
-        driver.Navigate().GoToUrl("https://example.com");
-      } finally {
-        driver.Quit();
-      }
-    }
-  }
-}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs#L29-30" >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-options = Selenium::WebDriver::Options.chrome
-options.page_load_strategy = :eager
-
-driver = Selenium::WebDriver.for :chrome, options: options
-driver.get('https://www.google.com')
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L20-L21">}}
 {{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/capabilities/pageLoading.spec.js#L8-L14">}}
@@ -278,61 +188,17 @@ fun main() {
 WebDriver は、最初のページがダウンロードされるまで待機します。
 
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
-import org.openqa.selenium.PageLoadStrategy;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.chrome.ChromeOptions;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class pageLoadStrategy {
-  public static void main(String[] args) {
-    ChromeOptions chromeOptions = new ChromeOptions();
-    chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE);
-    WebDriver driver = new ChromeDriver(chromeOptions);
-    try {
-      // Navigate to Url
-      driver.get("https://google.com");
-    } finally {
-      driver.quit();
-    }
-  }
-}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L47-L49">}}
 {{< /tab >}}
-{{< tab header="Python" >}}
-from selenium import webdriver
-from selenium.webdriver.chrome.options import Options
-options = Options()
-options.page_load_strategy = 'none'
-driver = webdriver.Chrome(options=options)
-driver.get("http://www.google.com")
-driver.quit()
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L23-L25">}}
 {{< /tab >}}
-{{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace pageLoadStrategy {
-  class pageLoadStrategy {
-    public static void Main(string[] args) {
-      var chromeOptions = new ChromeOptions();
-      chromeOptions.PageLoadStrategy = PageLoadStrategy.None;
-      IWebDriver driver = new ChromeDriver(chromeOptions);
-      try {
-        driver.Navigate().GoToUrl("https://example.com");
-      } finally {
-        driver.Quit();
-      }
-    }
-  }
-}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs#L41-42" >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-options = Selenium::WebDriver::Options.chrome
-options.page_load_strategy = :none
-
-driver = Selenium::WebDriver.for :chrome, options: options
-driver.get('https://www.google.com')
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L29-L30">}}
 {{< /tab >}}
 {{< tab header="JavaScript" text=true  >}}
 {{< gh-codeblock path="/examples/javascript/test/capabilities/pageLoading.spec.js#L18-L24">}}
@@ -365,16 +231,16 @@ fun main() {
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L88-L90">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L94-96">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L38-L39" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -397,19 +263,19 @@ fun main() {
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L60-L61">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L101-103">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L51-L52" >}}
 {{< /tab >}}
-{{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/capabilities/pageLoading.spec.js#L38-L41">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -429,16 +295,16 @@ WebDriverの `セッション` には特定の `セッションタイムアウ
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L96-L98">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L30-32">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L114-L115" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -455,16 +321,16 @@ WebDriverの `セッション` には特定の `セッションタイムアウ
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L111-L113">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L37-39">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L105-L106" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -480,16 +346,16 @@ WebDriverの `セッション` には特定の `セッションタイムアウ
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L126-L128">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L44-46">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L96-L97" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -517,16 +383,16 @@ WebDriverの `セッション` には特定の `セッションタイムアウ
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L141-L142">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L51-53">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L60-L61" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -543,16 +409,16 @@ WebDriverの `セッション` には特定の `セッションタイムアウ
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L151-L152">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L58-60">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L69-L70" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -570,16 +436,16 @@ WebDriverの `セッション` には特定の `セッションタイムアウ
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L163-L164">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L65-67">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L78-L79" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -605,8 +471,10 @@ Seleniumを使用した自動化スクリプト用のプロキシサーバーは
 Selenium WebDriverは設定をプロキシする方法を提供します。
 
 
-{{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
+{{< tabpane text=true >}}
+{{< badge-examples >}}
+{{% tab header="Java" %}}
+```java
 import org.openqa.selenium.Proxy;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.chrome.ChromeDriver;
@@ -624,25 +492,13 @@ public class ProxyTest {
     driver.quit();
   }
 }
-{{< /tab >}}
-{{< tab header="Python" >}}
-from selenium import webdriver
-
-PROXY = "<HOST:PORT>"
-webdriver.DesiredCapabilities.FIREFOX['proxy'] = {
-"httpProxy": PROXY,
-"ftpProxy": PROXY,
-"sslProxy": PROXY,
-"proxyType": "MANUAL",
-
-}
-
-with webdriver.Firefox() as driver:
-# Open URL
-    driver.get("https://selenium.dev")
-
-{{< /tab >}}
-{{< tab header="CSharp" >}}
+```
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L72-74">}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+```CSharp
 using OpenQA.Selenium;
 using OpenQA.Selenium.Chrome;
 
@@ -659,17 +515,13 @@ IWebDriver driver = new ChromeDriver(options);
 driver.Navigate().GoToUrl("https://www.selenium.dev/");
 }
 }
-{{< /tab >}}
+```
+{{% /tab %}}
 {{< tab header="Ruby" >}}
-# this code was written with Selenium 4
-
-proxy = Selenium::WebDriver::Proxy.new(http: '<HOST:PORT>')
-cap   = Selenium::WebDriver::Remote::Capabilities.chrome(proxy: proxy)
-
-driver = Selenium::WebDriver.for(:chrome, capabilities: cap)
-driver.get('http://google.com')
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L87-L88" >}}
 {{< /tab >}}
-{{< tab header="JavaScript" >}}
+{{% tab header="JavaScript" %}}
+```javascript
 let webdriver = require('selenium-webdriver');
 let chrome = require('selenium-webdriver/chrome');
 let proxy = require('selenium-webdriver/proxy');
@@ -688,8 +540,10 @@ finally {
 await driver.quit();
 }
 }());
-{{< /tab >}}
-{{< tab header="Kotlin" >}}
+```
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+```kotlin
 import org.openqa.selenium.Proxy
 import org.openqa.selenium.WebDriver
 import org.openqa.selenium.chrome.ChromeDriver
@@ -708,5 +562,6 @@ fun main() {
         driver.quit()
     }
 }
-{{< /tab >}}
+```
+{{% /tab %}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/drivers/options.pt-br.md b/website_and_docs/content/documentation/webdriver/drivers/options.pt-br.md
index 89952961366a..eee4bfe3d5de 100644
--- a/website_and_docs/content/documentation/webdriver/drivers/options.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/drivers/options.pt-br.md
@@ -41,6 +41,27 @@ Esta capacidade é usada para definir o `browserName` para uma determinada sess
 Se o navegador especificado não estiver instalado no
 extremidade remota, a criação da sessão falhará.
 
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L73-74" >}}
+{{< /tab >}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L79-80" >}}
+{{% /tab %}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L11" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
 ## browserVersion
 
 Esta capacidade é opcional, é usada para
@@ -50,16 +71,16 @@ tiver apenas 80 instalados, a criação da sessão falhará.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L80-82" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L86-88" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L40" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -105,61 +126,16 @@ WebDriver waits until the [load](https://developer.mozilla.org/en-US/docs/Web/AP
 event fire is returned.
 
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
-import org.openqa.selenium.PageLoadStrategy;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.chrome.ChromeOptions;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class pageLoadStrategy {
-  public static void main(String[] args) {
-    ChromeOptions chromeOptions = new ChromeOptions();
-    chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
-    WebDriver driver = new ChromeDriver(chromeOptions);
-    try {
-      // Navigate to Url
-      driver.get("https://google.com");
-    } finally {
-      driver.quit();
-    }
-  }
-}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L21-L23">}}
 {{< /tab >}}
-{{< tab header="Python" >}}
-from selenium import webdriver
-from selenium.webdriver.chrome.options import Options
-options = Options()
-options.page_load_strategy = 'normal'
-driver = webdriver.Chrome(options=options)
-driver.get("http://www.google.com")
-driver.quit()
-{{< /tab >}}
-{{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace pageLoadStrategy {
-  class pageLoadStrategy {
-    public static void Main(string[] args) {
-      var chromeOptions = new ChromeOptions();
-      chromeOptions.PageLoadStrategy = PageLoadStrategy.Normal;
-      IWebDriver driver = new ChromeDriver(chromeOptions);
-      try {
-        driver.Navigate().GoToUrl("https://example.com");
-      } finally {
-        driver.Quit();
-      }
-    }
-  }
-}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L7-9">}}
+{{< /tab >}}{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs#L13-14" >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-options = Selenium::WebDriver::Options.chrome
-options.page_load_strategy = :normal
-
-driver = Selenium::WebDriver.for :chrome, options: options
-driver.get('https://www.google.com')
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L11-L12">}}
 {{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/capabilities/pageLoading.spec.js#L28-L34">}}
@@ -189,61 +165,17 @@ WebDriver waits until [DOMContentLoaded](https://developer.mozilla.org/en-US/doc
 event fire is returned.
 
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
-import org.openqa.selenium.PageLoadStrategy;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.chrome.ChromeOptions;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class pageLoadStrategy {
-  public static void main(String[] args) {
-    ChromeOptions chromeOptions = new ChromeOptions();
-    chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER);
-    WebDriver driver = new ChromeDriver(chromeOptions);
-    try {
-      // Navigate to Url
-      driver.get("https://google.com");
-    } finally {
-      driver.quit();
-    }
-  }
-}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L34-L36">}}
 {{< /tab >}}
-{{< tab header="Python" >}}
-from selenium import webdriver
-from selenium.webdriver.chrome.options import Options
-options = Options()
-options.page_load_strategy = 'eager'
-driver = webdriver.Chrome(options=options)
-driver.get("http://www.google.com")
-driver.quit()
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L15-L17">}}
 {{< /tab >}}
-{{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace pageLoadStrategy {
-  class pageLoadStrategy {
-    public static void Main(string[] args) {
-      var chromeOptions = new ChromeOptions();
-      chromeOptions.PageLoadStrategy = PageLoadStrategy.Eager;
-      IWebDriver driver = new ChromeDriver(chromeOptions);
-      try {
-        driver.Navigate().GoToUrl("https://example.com");
-      } finally {
-        driver.Quit();
-      }
-    }
-  }
-}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs#L29-30" >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-options = Selenium::WebDriver::Options.chrome
-options.page_load_strategy = :eager
-
-driver = Selenium::WebDriver.for :chrome, options: options
-driver.get('https://www.google.com')
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L20-L21">}}
 {{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/capabilities/pageLoading.spec.js#L8-L14">}}
@@ -272,61 +204,17 @@ fun main() {
 WebDriver only waits until the initial page is downloaded.
 
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
-import org.openqa.selenium.PageLoadStrategy;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.chrome.ChromeOptions;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class pageLoadStrategy {
-  public static void main(String[] args) {
-    ChromeOptions chromeOptions = new ChromeOptions();
-    chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE);
-    WebDriver driver = new ChromeDriver(chromeOptions);
-    try {
-      // Navigate to Url
-      driver.get("https://google.com");
-    } finally {
-      driver.quit();
-    }
-  }
-}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L47-L49">}}
 {{< /tab >}}
-{{< tab header="Python" >}}
-from selenium import webdriver
-from selenium.webdriver.chrome.options import Options
-options = Options()
-options.page_load_strategy = 'none'
-driver = webdriver.Chrome(options=options)
-driver.get("http://www.google.com")
-driver.quit()
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L23-L25">}}
 {{< /tab >}}
-{{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace pageLoadStrategy {
-  class pageLoadStrategy {
-    public static void Main(string[] args) {
-      var chromeOptions = new ChromeOptions();
-      chromeOptions.PageLoadStrategy = PageLoadStrategy.None;
-      IWebDriver driver = new ChromeDriver(chromeOptions);
-      try {
-        driver.Navigate().GoToUrl("https://example.com");
-      } finally {
-        driver.Quit();
-      }
-    }
-  }
-}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs#L41-42" >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-options = Selenium::WebDriver::Options.chrome
-options.page_load_strategy = :none
-
-driver = Selenium::WebDriver.for :chrome, options: options
-driver.get('https://www.google.com')
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L29-L30">}}
 {{< /tab >}}
 {{< tab header="JavaScript" text=true  >}}
 {{< gh-codeblock path="/examples/javascript/test/capabilities/pageLoading.spec.js#L18-L24">}}
@@ -361,16 +249,16 @@ setting `platformName` sets the OS at the remote-end.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L88-L90">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L94-96">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L38-L39" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -399,19 +287,19 @@ effect for the entire session.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L60-L61">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L101-103">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L51-L52" >}}
 {{< /tab >}}
-{{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/capabilities/pageLoading.spec.js#L38-L41">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -435,16 +323,16 @@ is imposed when a new session is created by WebDriver.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L96-L98">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L30-32">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L114-L115" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -464,16 +352,16 @@ _TimeoutException_.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L111-L113">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L37-39">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L105-L106" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -491,16 +379,16 @@ is imposed when a new session is created by WebDriver.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L126-L128">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L44-46">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L96-L97" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -530,16 +418,16 @@ user prompt encounters at the remote-end. This is defined by
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L141-L142">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L51-53">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L60-L61" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -556,16 +444,16 @@ Indicates whether the remote end supports all of the [resizing and repositioning
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L151-L152">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L58-60">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L69-L70" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -585,16 +473,16 @@ when using _Element Send Keys_ with hidden file upload controls.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L163-L164">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L65-67">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L78-L79" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -626,8 +514,10 @@ likely because the environment needs a proxy to be accessed.
 
 Selenium WebDriver provides a way to proxy settings:
 
-{{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
+{{< tabpane text=true >}}
+{{< badge-examples >}}
+{{% tab header="Java" %}}
+```java
 import org.openqa.selenium.Proxy;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.chrome.ChromeDriver;
@@ -645,24 +535,13 @@ public class ProxyTest {
     driver.quit();
   }
 }
-{{< /tab >}}
-{{< tab header="Python" >}}
-from selenium import webdriver
-
-PROXY = "<HOST:PORT>"
-webdriver.DesiredCapabilities.FIREFOX['proxy'] = {
-"httpProxy": PROXY,
-"ftpProxy": PROXY,
-"sslProxy": PROXY,
-"proxyType": "MANUAL",
-
-}
-
-with webdriver.Firefox() as driver:
-    driver.get("https://selenium.dev")
-
-{{< /tab >}}
-{{< tab header="CSharp" >}}
+```
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L72-74">}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+```CSharp
 using OpenQA.Selenium;
 using OpenQA.Selenium.Chrome;
 
@@ -679,16 +558,13 @@ IWebDriver driver = new ChromeDriver(options);
 driver.Navigate().GoToUrl("https://www.selenium.dev/");
 }
 }
-{{< /tab >}}
+```
+{{% /tab %}}
 {{< tab header="Ruby" >}}
-
-proxy = Selenium::WebDriver::Proxy.new(http: '<HOST:PORT>')
-cap   = Selenium::WebDriver::Remote::Capabilities.chrome(proxy: proxy)
-
-driver = Selenium::WebDriver.for(:chrome, capabilities: cap)
-driver.get('http://google.com')
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L87-L88" >}}
 {{< /tab >}}
-{{< tab header="JavaScript" >}}
+{{% tab header="JavaScript" %}}
+```javascript
 let webdriver = require('selenium-webdriver');
 let chrome = require('selenium-webdriver/chrome');
 let proxy = require('selenium-webdriver/proxy');
@@ -707,8 +583,10 @@ finally {
 await driver.quit();
 }
 }());
-{{< /tab >}}
-{{< tab header="Kotlin" >}}
+```
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+```kotlin
 import org.openqa.selenium.Proxy
 import org.openqa.selenium.WebDriver
 import org.openqa.selenium.chrome.ChromeDriver
@@ -727,5 +605,6 @@ fun main() {
         driver.quit()
     }
 }
-{{< /tab >}}
+```
+{{% /tab %}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/drivers/options.zh-cn.md b/website_and_docs/content/documentation/webdriver/drivers/options.zh-cn.md
index f8523d1f46a0..5c2525229939 100644
--- a/website_and_docs/content/documentation/webdriver/drivers/options.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/drivers/options.zh-cn.md
@@ -30,20 +30,20 @@ aliases: [
 
 ## browserName
 
-Browser name is set by default when using an Options class instance.
+默认情况下，使用 Options 类实例时会设置浏览器名称.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L73-74" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L79-80" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L11" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -56,22 +56,23 @@ Browser name is set by default when using an Options class instance.
 
 ## browserVersion
 
-This capability is optional, this is used to set the available browser version at remote end.
-In recent versions of Selenium, if the version is not found on the system,
-it will be automatically downloaded by [Selenium Manager]({{< ref "../../selenium_manager" >}})
+此功能是可选的，用于在远程端设置可用的浏览器版本.
+在最新版本的 Selenium 中，如果在系统上找不到该版本,
+它将被 [Selenium Manager]({{< ref "../../selenium_manager" >}}) 自动下载
+
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L80-82" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L86-88" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L40" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -121,61 +122,16 @@ WebDriver一直等到 [load](https://developer.mozilla.org/en-US/docs/Web/API/Wi
 事件触发并返回.
 
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
-import org.openqa.selenium.PageLoadStrategy;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.chrome.ChromeOptions;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class pageLoadStrategy {
-  public static void main(String[] args) {
-    ChromeOptions chromeOptions = new ChromeOptions();
-    chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
-    WebDriver driver = new ChromeDriver(chromeOptions);
-    try {
-      // Navigate to Url
-      driver.get("https://google.com");
-    } finally {
-      driver.quit();
-    }
-  }
-}
-{{< /tab >}}
-{{< tab header="Python" >}}
-from selenium import webdriver
-from selenium.webdriver.chrome.options import Options
-options = Options()
-options.page_load_strategy = 'normal'
-driver = webdriver.Chrome(options=options)
-driver.get("http://www.google.com")
-driver.quit()
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L21-L23">}}
 {{< /tab >}}
-{{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace pageLoadStrategy {
-  class pageLoadStrategy {
-    public static void Main(string[] args) {
-      var chromeOptions = new ChromeOptions();
-      chromeOptions.PageLoadStrategy = PageLoadStrategy.Normal;
-      IWebDriver driver = new ChromeDriver(chromeOptions);
-      try {
-        driver.Navigate().GoToUrl("https://example.com");
-      } finally {
-        driver.Quit();
-      }
-    }
-  }
-}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L7-9">}}
+{{< /tab >}}{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs#L13-14" >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-options = Selenium::WebDriver::Options.chrome
-options.page_load_strategy = :normal
-
-driver = Selenium::WebDriver.for :chrome, options: options
-driver.get('https://www.google.com')
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L11-L12">}}
 {{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/capabilities/pageLoading.spec.js#L28-L34">}}
@@ -205,61 +161,17 @@ WebDriver一直等到 [DOMContentLoaded](https://developer.mozilla.org/en-US/doc
 事件触发并返回.
 
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
-import org.openqa.selenium.PageLoadStrategy;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.chrome.ChromeOptions;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class pageLoadStrategy {
-  public static void main(String[] args) {
-    ChromeOptions chromeOptions = new ChromeOptions();
-    chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER);
-    WebDriver driver = new ChromeDriver(chromeOptions);
-    try {
-      // Navigate to Url
-      driver.get("https://google.com");
-    } finally {
-      driver.quit();
-    }
-  }
-}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L34-L36">}}
 {{< /tab >}}
-{{< tab header="Python" >}}
-from selenium import webdriver
-from selenium.webdriver.chrome.options import Options
-options = Options()
-options.page_load_strategy = 'eager'
-driver = webdriver.Chrome(options=options)
-driver.get("http://www.google.com")
-driver.quit()
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L15-L17">}}
 {{< /tab >}}
-{{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace pageLoadStrategy {
-  class pageLoadStrategy {
-    public static void Main(string[] args) {
-      var chromeOptions = new ChromeOptions();
-      chromeOptions.PageLoadStrategy = PageLoadStrategy.Eager;
-      IWebDriver driver = new ChromeDriver(chromeOptions);
-      try {
-        driver.Navigate().GoToUrl("https://example.com");
-      } finally {
-        driver.Quit();
-      }
-    }
-  }
-}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs#L29-30" >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-options = Selenium::WebDriver::Options.chrome
-options.page_load_strategy = :eager
-
-driver = Selenium::WebDriver.for :chrome, options: options
-driver.get('https://www.google.com')
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L20-L21">}}
 {{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/capabilities/pageLoading.spec.js#L8-L14">}}
@@ -288,61 +200,17 @@ fun main() {
 WebDriver 仅等待初始页面已下载. 
 
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
-import org.openqa.selenium.PageLoadStrategy;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.chrome.ChromeOptions;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class pageLoadStrategy {
-  public static void main(String[] args) {
-    ChromeOptions chromeOptions = new ChromeOptions();
-    chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE);
-    WebDriver driver = new ChromeDriver(chromeOptions);
-    try {
-      // Navigate to Url
-      driver.get("https://google.com");
-    } finally {
-      driver.quit();
-    }
-  }
-}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L47-L49">}}
 {{< /tab >}}
-{{< tab header="Python" >}}
-from selenium import webdriver
-from selenium.webdriver.chrome.options import Options
-options = Options()
-options.page_load_strategy = 'none'
-driver = webdriver.Chrome(options=options)
-driver.get("http://www.google.com")
-driver.quit()
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L23-L25">}}
 {{< /tab >}}
-{{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace pageLoadStrategy {
-  class pageLoadStrategy {
-    public static void Main(string[] args) {
-      var chromeOptions = new ChromeOptions();
-      chromeOptions.PageLoadStrategy = PageLoadStrategy.None;
-      IWebDriver driver = new ChromeDriver(chromeOptions);
-      try {
-        driver.Navigate().GoToUrl("https://example.com");
-      } finally {
-        driver.Quit();
-      }
-    }
-  }
-}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/OptionsTest.cs#L41-42" >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-options = Selenium::WebDriver::Options.chrome
-options.page_load_strategy = :none
-
-driver = Selenium::WebDriver.for :chrome, options: options
-driver.get('https://www.google.com')
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L29-L30">}}
 {{< /tab >}}
 {{< tab header="JavaScript" text=true  >}}
 {{< gh-codeblock path="/examples/javascript/test/capabilities/pageLoading.spec.js#L18-L24">}}
@@ -377,16 +245,16 @@ fun main() {
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L88-L90">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L94-96">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L38-L39" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -412,19 +280,19 @@ fun main() {
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L60-L61">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L101-103">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L51-L52" >}}
 {{< /tab >}}
-{{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/capabilities/pageLoading.spec.js#L38-L41">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -447,16 +315,16 @@ WebDriver创建新会话时,
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L96-L98">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L30-32">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L114-L115" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -475,16 +343,16 @@ WebDriver创建新会话时,
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L111-L113">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L37-39">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L105-L106" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -501,16 +369,16 @@ WebDriver创建新会话时,
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L126-L128">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L44-46">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L96-L97" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -540,16 +408,16 @@ WebDriver创建新会话时,
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L141-L142">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L51-53">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L60-L61" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -567,16 +435,16 @@ WebDriver创建新会话时,
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L151-L152">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L58-60">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L69-L70" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -596,16 +464,16 @@ WebDriver创建新会话时,
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/OptionsTest.java#L163-L164">}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L65-67">}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L78-L79" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -634,8 +502,10 @@ WebDriver创建新会话时,
 
 Selenium WebDriver提供了如下设置代理的方法
 
-{{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
+{{< tabpane text=true >}}
+{{< badge-examples >}}
+{{% tab header="Java" %}}
+```java
 import org.openqa.selenium.Proxy;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.chrome.ChromeDriver;
@@ -653,25 +523,13 @@ public class ProxyTest {
     driver.quit();
   }
 }
-{{< /tab >}}
-{{< tab header="Python" >}}
-from selenium import webdriver
-
-PROXY = "<HOST:PORT>"
-webdriver.DesiredCapabilities.FIREFOX['proxy'] = {
-"httpProxy": PROXY,
-"ftpProxy": PROXY,
-"sslProxy": PROXY,
-"proxyType": "MANUAL",
-
-}
-
-with webdriver.Firefox() as driver:
-# Open URL
-    driver.get("https://selenium.dev")
-
-{{< /tab >}}
-{{< tab header="CSharp" >}}
+```
+{{% /tab %}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_options.py#L72-74">}}
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+```CSharp
 using OpenQA.Selenium;
 using OpenQA.Selenium.Chrome;
 
@@ -688,17 +546,13 @@ IWebDriver driver = new ChromeDriver(options);
 driver.Navigate().GoToUrl("https://www.selenium.dev/");
 }
 }
-{{< /tab >}}
+```
+{{% /tab %}}
 {{< tab header="Ruby" >}}
-# this code was written with Selenium 4
-
-proxy = Selenium::WebDriver::Proxy.new(http: '<HOST:PORT>')
-cap   = Selenium::WebDriver::Remote::Capabilities.chrome(proxy: proxy)
-
-driver = Selenium::WebDriver.for(:chrome, capabilities: cap)
-driver.get('http://google.com')
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L87-L88" >}}
 {{< /tab >}}
-{{< tab header="JavaScript" >}}
+{{% tab header="JavaScript" %}}
+```javascript
 let webdriver = require('selenium-webdriver');
 let chrome = require('selenium-webdriver/chrome');
 let proxy = require('selenium-webdriver/proxy');
@@ -717,8 +571,10 @@ finally {
 await driver.quit();
 }
 }());
-{{< /tab >}}
-{{< tab header="Kotlin" >}}
+```
+{{% /tab %}}
+{{% tab header="Kotlin" %}}
+```kotlin
 import org.openqa.selenium.Proxy
 import org.openqa.selenium.WebDriver
 import org.openqa.selenium.chrome.ChromeDriver
@@ -737,5 +593,6 @@ fun main() {
         driver.quit()
     }
 }
-{{< /tab >}}
+```
+{{% /tab %}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/drivers/remote_webdriver.en.md b/website_and_docs/content/documentation/webdriver/drivers/remote_webdriver.en.md
index 4da185b6cdf7..2f1492665407 100644
--- a/website_and_docs/content/documentation/webdriver/drivers/remote_webdriver.en.md
+++ b/website_and_docs/content/documentation/webdriver/drivers/remote_webdriver.en.md
@@ -25,16 +25,16 @@ and an options instance are both required.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L37-L38" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L38-L39" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L10-L11" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#L13-L14" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L27-L28" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L28-L29" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L20-L21" >}} 
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L20-L21" >}} 
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -58,19 +58,19 @@ for a custom file detector.
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 Java does not include a Local File Detector by default, so you must always add one to do uploads.
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L48-L51" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L49-L52" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 Python adds a local file detector to remote webdriver instances by default, but you can also create your own class.
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L25-L28" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#L29-L32" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 .NET adds a local file detector to remote webdriver instances by default, but you can also create your own class.
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L46-L49" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L47-L50" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 Ruby adds a local file detector to remote webdriver instances by default, but you can also create your own lambda:
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L33-L36" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L33-L36" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -102,16 +102,16 @@ Each of the bindings have a method in the options class to set this.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L59-L61" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L60-L62" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L37-L39" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#L42-L44" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L58-L62" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L59-L64" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L43-L44" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L43-L44" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -128,16 +128,16 @@ so the list is an immediate snapshot of what file names are currently in the dir
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L72" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L73" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L47" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#L52" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L70" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L72" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L52" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L52" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -153,16 +153,16 @@ Selenium looks for the name of the provided file in the list and downloads it to
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L78" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L83" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L53" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#L58" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L77" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L79" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L57" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L57" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -179,16 +179,16 @@ but you can also delete all files during the session.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L83" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L88" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L59" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#L64" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L82" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L84" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L62" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L62" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -201,26 +201,26 @@ but you can also delete all files during the session.
 
 ## Browser specific functionalities
 
-Each [browser](({{< ref "../browsers/" >}})) has implemented special functionality that is available only to that browser.
+Each [browser]({{< ref "../browsers/" >}}) has implemented special functionality that is available only to that browser.
 Each of the Selenium bindings has implemented a different way to use those features in a Remote Session
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 Java requires you to use the Augmenter class, which allows it to automatically pull in implementations for
 all interfaces that match the capabilities used with the RemoteWebDriver
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L93" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L98" >}}
 
 Of interest, using the `RemoteWebDriverBuilder` automatically augments the driver, so it is a great way
 to get all the functionality by default:
 
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L100-L106" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L106-L111" >}}
 {{% /tab %}}
 {{% tab header="Python" %}}
 {{< badge-implementation >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 .NET uses a custom command executor for executing commands that are valid for the given browser in the remote driver.
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L94-L98" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L96-L100" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 Ruby uses mixins to add applicable browser specific methods to the Remote WebDriver session; 
diff --git a/website_and_docs/content/documentation/webdriver/drivers/remote_webdriver.ja.md b/website_and_docs/content/documentation/webdriver/drivers/remote_webdriver.ja.md
index 206b0fa590f7..7da5411de8dc 100644
--- a/website_and_docs/content/documentation/webdriver/drivers/remote_webdriver.ja.md
+++ b/website_and_docs/content/documentation/webdriver/drivers/remote_webdriver.ja.md
@@ -1,6 +1,6 @@
 ---
-title: "Remote WebDriver"
-linkTitle: "Remote WebDriver"
+title: "リモートWebDriver"
+linkTitle: "リモートWebDriver"
 weight: 10
 aliases: [
 "/documentation/ja/remote_webdriver/",
@@ -10,31 +10,24 @@ aliases: [
 
 ---
 
-Selenium lets you automate browsers on remote computers if
-there is a [Selenium Grid]({{< ref "../../grid" >}}) running on them. The computer that
-executes the code is referred to as the client computer, and the computer with the browser and driver is 
-referred to as the remote computer or sometimes as an end-node.
-To direct Selenium tests to the remote computer, you need to use a Remote WebDriver class
-and pass the URL including the port of the grid on that machine. Please see the grid documentation
-for all the various ways the grid can be configured.
+Seleniumは、リモートコンピュータ上でブラウザを自動化することができます。これには、リモートコンピュータ上で [Selenium Grid]({{< ref "../../grid" >}}) が実行されている必要があります。コードを実行するコンピュータはクライアントコンピュータと呼ばれ、ブラウザとドライバーがあるコンピュータはリモートコンピュータまたは時々エンドノードと呼ばれます。Seleniumテストをリモートコンピュータに向けるには、Remote WebDriverクラスを使用し、そのマシンのグリッドのポートを含むURLを渡す必要があります。グリッドの設定方法については、グリッドのドキュメントを参照してください。 
 
-## Basic Example
+## 基本的な例
 
-The driver needs to know where to send commands to and which browser to start on the Remote computer. So an address
-and an options instance are both required.
+ドライバーは、コマンドを送信する場所と、リモートコンピュータ上で開始するブラウザを知る必要があります。そのため、アドレスとオプションインスタンスの両方が必要です。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L37-L38" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L38-L39" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L10-L11" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#L13-L14" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L27-L28" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L28-L29" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L20-L21" >}} 
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L20-L21" >}} 
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -45,32 +38,26 @@ and an options instance are both required.
 {{< /tabpane >}}
 
 
-## Uploads
+## アップロード
 
-[Uploading a file]() is more complicated for Remote WebDriver sessions because the file you want to 
-upload is likely on the computer executing the code, but the driver on the
-remote computer is looking for the provided path on its local file system.
-The solution is to use a Local File Detector. When one is set, Selenium will bundle
-the file, and send it to the remote machine, so the driver can see the reference to it.
-Some bindings include a basic local file detector by default, and all of them allow 
-for a custom file detector.
+[ファイルのアップロード]() は、リモートWebDriverセッションではより複雑です。アップロードしたいファイルはコードを実行しているコンピュータ上にあることが多いですが、リモートコンピュータ上のドライバーはそのローカルファイルシステム上で指定されたパスを探しています。この解決策として、ローカルファイルディテクターを使用します。これを設定すると、Seleniumはファイルをパッケージ化し、リモートマシンに送信するため、ドライバーはその参照を認識できるようになります。一部のバインディングでは、デフォルトで基本的なローカルファイルディテクターが含まれており、すべてのバインディングでカスタムファイルディテクターを設定できます。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-Java does not include a Local File Detector by default, so you must always add one to do uploads.
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L48-L51" >}}
+Javaにはデフォルトでローカルファイルディテクターが含まれていないため、アップロードを行う際には必ず追加する必要があります。
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L49-L52" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-Python adds a local file detector to remote webdriver instances by default, but you can also create your own class.
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L25-L28" >}}
+Pythonでは、リモートWebDriverインスタンスにデフォルトでローカルファイルディテクターが追加されますが、独自のクラスを作成することも可能です。
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#LL29-L32" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-.NET adds a local file detector to remote webdriver instances by default, but you can also create your own class.
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L46-L49" >}}
+.NETでは、リモートWebDriverインスタンスにデフォルトでローカルファイルディテクターが追加されますが、独自のクラスを作成することも可能です。
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L47-L50" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-Ruby adds a local file detector to remote webdriver instances by default, but you can also create your own lambda:
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L33-L36" >}}
+Rubyでは、リモートWebDriverインスタンスにデフォルトでローカルファイルディテクターが追加されますが、独自のラムダを作成することも可能です。
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L33-L36" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -81,37 +68,33 @@ Ruby adds a local file detector to remote webdriver instances by default, but yo
 {{< /tabpane >}}
 
 
-## Downloads
+## ダウンロード
 
-Chrome, Edge and Firefox each allow you to set the location of the download directory.
-When you do this on a remote computer, though, the location is on the remote computer's local file system. 
-Selenium allows you to enable downloads to get these files onto the client computer.
+Chrome、Edge、およびFirefoxでは、それぞれダウンロードディレクトリの場所を設定できます。 ただし、リモートコンピュータでこれを行う場合、その場所はリモートコンピュータのローカルファイルシステム上にあります。Seleniumを使用すると、クライアントコンピュータにこれらのファイルをダウンロードできるように設定することが可能です。
 
-### Enable Downloads in the Grid
+### グリッドでのダウンロードを有効化
 
-Regardless of the client, when starting the grid in node or standalone mode, 
-you must add the flag: 
+クライアントに関係なく、ノードまたはスタンドアロンモードでグリッドを起動する際には、次のフラグを追加する必要があります:
 ```
 --enable-managed-downloads true
 ``` 
 
-### Enable Downloads in the Client
+### クライアントでのダウンロードを有効化
 
-The grid uses the `se:downloadsEnabled` capability to toggle whether to be responsible for managing the browser location.
-Each of the bindings have a method in the options class to set this.
+グリッドは、`se:downloadsEnabled` 機能を使用して、ブラウザの場所を管理する責任を持つかどうかを切り替えます。各バインディングには、これを設定するためのオプションクラスのメソッドがあります。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L59-L61" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L60-L62" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L37-L39" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#L42-L44" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L58-L62" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L59-L64" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L43-L44" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L43-L44" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -121,23 +104,22 @@ Each of the bindings have a method in the options class to set this.
 {{< /tab >}}
 {{< /tabpane >}}
 
-### List Downloadable Files
+### ダウンロード可能なファイルの一覧
 
-Be aware that Selenium is not waiting for files to finish downloading, 
-so the list is an immediate snapshot of what file names are currently in the directory for the given session.
+Seleniumはファイルのダウンロードが完了するのを待たないため、リストは指定されたセッションのディレクトリに現在存在するファイル名の即時スナップショットであることに注意してください。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L72" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L73" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L47" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#L52" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L70" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L72" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L52" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L52" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -147,22 +129,22 @@ so the list is an immediate snapshot of what file names are currently in the dir
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Download a File
+### ファイルをダウンロード
 
-Selenium looks for the name of the provided file in the list and downloads it to the provided target directory.
+Seleniumは、提供されたファイルの名前をリストの中で探し、指定されたターゲットディレクトリにダウンロードします。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L78" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L83" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L53" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#L58" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L77" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L79" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L57" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L57" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -172,23 +154,22 @@ Selenium looks for the name of the provided file in the list and downloads it to
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Delete Downloaded Files
+### ダウンロードしたファイルの削除
 
-By default, the download directory is deleted at the end of the applicable session,
-but you can also delete all files during the session.
+デフォルトでは、ダウンロードディレクトリは該当するセッションの終了時に削除されますが、セッション中にすべてのファイルを削除することもできます。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L83" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L88" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L59" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#L64" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L82" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L84" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L62" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L62" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -199,32 +180,29 @@ but you can also delete all files during the session.
 {{< /tabpane >}}
 
 
-## Browser specific functionalities
+## ブラウザ特有の機能
 
-Each [browser](({{< ref "../browsers/" >}})) has implemented special functionality that is available only to that browser.
-Each of the Selenium bindings has implemented a different way to use those features in a Remote Session
+各 [ブラウザ]({{< ref "../browsers/" >}}) は、そのブラウザにのみ利用可能な特別な機能を実装しています。各Seleniumバインディングは、リモートセッションでそれらの機能を使用するための異なる方法を実装しています。
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
-Java requires you to use the Augmenter class, which allows it to automatically pull in implementations for
-all interfaces that match the capabilities used with the RemoteWebDriver
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L93" >}}
+Javaでは、Augmenterクラスを使用する必要があります。これにより、RemoteWebDriverで使用される機能に一致するすべてのインターフェースの実装を自動的に取り込むことができます。
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L98" >}}
 
-Of interest, using the `RemoteWebDriverBuilder` automatically augments the driver, so it is a great way
-to get all the functionality by default:
+興味深いことに、RemoteWebDriverBuilderを使用すると、ドライバーが自動的に拡張されるため、デフォルトで全ての機能を取得するのに最適な方法です。
 
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L100-L106" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L106-L111" >}}
 {{% /tab %}}
 {{% tab header="Python" %}}
 {{< badge-implementation >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-.NET uses a custom command executor for executing commands that are valid for the given browser in the remote driver.
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L94-L98" >}}
+
+.NETでは、リモートドライバーで指定されたブラウザに対して有効なコマンドを実行するために、カスタムコマンドエグゼキュータを使用します。
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L96-L100" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-Ruby uses mixins to add applicable browser specific methods to the Remote WebDriver session; 
-the methods should always just work for you.
+Rubyでは、ミキシンを使用してリモートWebDriverセッションに適用可能なブラウザ特有のメソッドを追加します。これらのメソッドは常にそのまま機能するはずです。
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -290,7 +268,7 @@ driver.quit();
 詳細については、下記URLを参照してください。
 
 * OpenTelemetry: https://opentelemetry.io
-* Configuring OpenTelemetry:
+* OpenTelemetryの構成::
     https://github.com/open-telemetry/opentelemetry-java/tree/main/sdk-extensions/autoconfigure
 * Jaeger: https://www.jaegertracing.io
 * [Selenium Grid 可観測性]({{< ref "observability.md" >}}) 
diff --git a/website_and_docs/content/documentation/webdriver/drivers/remote_webdriver.pt-br.md b/website_and_docs/content/documentation/webdriver/drivers/remote_webdriver.pt-br.md
index 0f4e58f7746a..c9807adf02ba 100644
--- a/website_and_docs/content/documentation/webdriver/drivers/remote_webdriver.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/drivers/remote_webdriver.pt-br.md
@@ -1,5 +1,5 @@
 ---
-title: "Remote WebDriver"
+title: "WebDriver Remoto"
 linkTitle: "Remote WebDriver"
 weight: 10
 aliases: [
@@ -34,16 +34,16 @@ and an options instance are both required.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L37-L38" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L38-L39" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L10-L11" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#L13-L14" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L27-L28" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L28-L29" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L20-L21" >}} 
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L20-L21" >}} 
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -67,19 +67,19 @@ for a custom file detector.
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 Java does not include a Local File Detector by default, so you must always add one to do uploads.
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L48-L51" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L49-L52" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 Python adds a local file detector to remote webdriver instances by default, but you can also create your own class.
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L25-L28" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#LL29-L32" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 .NET adds a local file detector to remote webdriver instances by default, but you can also create your own class.
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L46-L49" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L47-L50" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 Ruby adds a local file detector to remote webdriver instances by default, but you can also create your own lambda:
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L33-L36" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L33-L36" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -111,16 +111,16 @@ Each of the bindings have a method in the options class to set this.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L59-L61" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L60-L62" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L37-L39" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#L42-L44" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L58-L62" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L59-L64" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L43-L44" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L43-L44" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -137,16 +137,16 @@ so the list is an immediate snapshot of what file names are currently in the dir
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L72" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L73" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L47" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#L52" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L70" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L72" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L52" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L52" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -162,16 +162,16 @@ Selenium looks for the name of the provided file in the list and downloads it to
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L78" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L83" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L53" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#L58" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L77" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L79" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L57" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L57" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -188,16 +188,16 @@ but you can also delete all files during the session.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L83" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L88" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L59" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#L64" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L82" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L84" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L62" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L62" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -210,26 +210,26 @@ but you can also delete all files during the session.
 
 ## Browser specific functionalities
 
-Each [browser](({{< ref "../browsers/" >}})) has implemented special functionality that is available only to that browser.
+Each [browser]({{< ref "../browsers/" >}}) has implemented special functionality that is available only to that browser.
 Each of the Selenium bindings has implemented a different way to use those features in a Remote Session
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 Java requires you to use the Augmenter class, which allows it to automatically pull in implementations for
 all interfaces that match the capabilities used with the RemoteWebDriver
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L93" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L98" >}}
 
 Of interest, using the `RemoteWebDriverBuilder` automatically augments the driver, so it is a great way
 to get all the functionality by default:
 
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L100-L106" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L106-L111" >}}
 {{% /tab %}}
 {{% tab header="Python" %}}
 {{< badge-implementation >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 .NET uses a custom command executor for executing commands that are valid for the given browser in the remote driver.
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L94-L98" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L96-L100" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 Ruby uses mixins to add applicable browser specific methods to the Remote WebDriver session; 
diff --git a/website_and_docs/content/documentation/webdriver/drivers/remote_webdriver.zh-cn.md b/website_and_docs/content/documentation/webdriver/drivers/remote_webdriver.zh-cn.md
index 387ee722b687..a31e563d6f6e 100644
--- a/website_and_docs/content/documentation/webdriver/drivers/remote_webdriver.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/drivers/remote_webdriver.zh-cn.md
@@ -10,31 +10,33 @@ aliases: [
 
 ---
 
-Selenium lets you automate browsers on remote computers if
-there is a [Selenium Grid]({{< ref "../../grid" >}}) running on them. The computer that
-executes the code is referred to as the client computer, and the computer with the browser and driver is 
-referred to as the remote computer or sometimes as an end-node.
-To direct Selenium tests to the remote computer, you need to use a Remote WebDriver class
-and pass the URL including the port of the grid on that machine. Please see the grid documentation
-for all the various ways the grid can be configured.
+如果远程计算机上正在运行 [Selenium Grid]({{< ref "../../grid" >}}), 
+则 Selenium 允许您自动化远程计算机上的浏览器.
+执行代码的计算机称为客户端计算机, 
+具有浏览器和驱动程序的计算机称为远程计算机, 
+有时也称为终端节点.
+要将 Selenium 测试指向到远程计算机, 
+您需要使用 Remote WebDriver 类并传递包含该机器上网格端口的URL.
+请参阅网格文档, 了解配置网格的全部方式.
 
-## Basic Example
+## 基本样例
 
-The driver needs to know where to send commands to and which browser to start on the Remote computer. So an address
-and an options instance are both required.
+驱动程序需要知道在远程计算机上向何处发送命令, 
+以及启动哪个浏览器.
+所以地址和选项实例都是必需的.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L37-L38" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L38-L39" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L10-L11" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#L13-L14" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L27-L28" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L28-L29" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L20-L21" >}} 
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L20-L21" >}} 
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -45,32 +47,33 @@ and an options instance are both required.
 {{< /tabpane >}}
 
 
-## Uploads
+## 上传
 
-[Uploading a file]() is more complicated for Remote WebDriver sessions because the file you want to 
-upload is likely on the computer executing the code, but the driver on the
-remote computer is looking for the provided path on its local file system.
-The solution is to use a Local File Detector. When one is set, Selenium will bundle
-the file, and send it to the remote machine, so the driver can see the reference to it.
-Some bindings include a basic local file detector by default, and all of them allow 
-for a custom file detector.
+对于远程WebDriver会话, [上传文件]({{< ref "../elements/file_upload" >}}) 更为复杂, 
+因为要上传的文件可能在执行代码的计算机上, 
+但远程计算机上的驱动程序正在其本地文件系统上查找提供的路径.
+解决方案是使用本地文件检测器.
+设置一个后, Selenium将捆绑文件, 
+并将其发送到远程计算机, 以便驱动程序可以看到对它的引用.
+默认情况下, 某些实现包含一个基本的本地文件检测器, 
+并且所有这些实现都允许自定义文件检测器.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
 Java does not include a Local File Detector by default, so you must always add one to do uploads.
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L48-L51" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L49-L52" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
 Python adds a local file detector to remote webdriver instances by default, but you can also create your own class.
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L25-L28" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#LL29-L32" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 .NET adds a local file detector to remote webdriver instances by default, but you can also create your own class.
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L46-L49" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L47-L50" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 Ruby adds a local file detector to remote webdriver instances by default, but you can also create your own lambda:
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L33-L36" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L33-L36" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -81,37 +84,37 @@ Ruby adds a local file detector to remote webdriver instances by default, but yo
 {{< /tabpane >}}
 
 
-## Downloads
+## 下载
 
-Chrome, Edge and Firefox each allow you to set the location of the download directory.
-When you do this on a remote computer, though, the location is on the remote computer's local file system. 
-Selenium allows you to enable downloads to get these files onto the client computer.
+Chrome、Edge和Firefox都允许您设置下载目录的位置.
+但是, 当您在远程计算机上执行此操作时, 位置在远程计算机的本地文件系统上.
+Selenium允许您启用下载功能, 将这些文件下载到客户端计算机上.
 
-### Enable Downloads in the Grid
+### 在网格中启用下载
 
-Regardless of the client, when starting the grid in node or standalone mode, 
-you must add the flag: 
+当以节点或独立模式启动网格时, 
+你必须添加参数: 
 ```
 --enable-managed-downloads true
 ``` 
 
-### Enable Downloads in the Client
+### 在客户端中启用下载
 
-The grid uses the `se:downloadsEnabled` capability to toggle whether to be responsible for managing the browser location.
-Each of the bindings have a method in the options class to set this.
+网格使用 `se:downloadsEnabled` 功能来切换是否负责管理浏览器位置.
+每个实现在options类中都有一个方法来设置.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L59-L61" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L60-L62" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L37-L39" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#L42-L44" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L58-L62" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L59-L64" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L43-L44" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L43-L44" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -121,23 +124,23 @@ Each of the bindings have a method in the options class to set this.
 {{< /tab >}}
 {{< /tabpane >}}
 
-### List Downloadable Files
+### 列出可下载文件
 
-Be aware that Selenium is not waiting for files to finish downloading, 
-so the list is an immediate snapshot of what file names are currently in the directory for the given session.
+请注意, Selenium不会等待文件下载完成, 
+因此, 该列表是给定会话目录中当前文件名的即时快照.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L72" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L73" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L47" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#L52" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L70" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L72" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L52" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L52" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -147,22 +150,23 @@ so the list is an immediate snapshot of what file names are currently in the dir
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Download a File
+### 下载文件
 
-Selenium looks for the name of the provided file in the list and downloads it to the provided target directory.
+Selenium在列表中查找提供的文件的名称, 
+并将其下载到提供的目标目录.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L78" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L83" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L53" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#L58" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L77" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L79" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L57" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L57" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -172,23 +176,23 @@ Selenium looks for the name of the provided file in the list and downloads it to
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Delete Downloaded Files
+### 删除已下载的文件
 
-By default, the download directory is deleted at the end of the applicable session,
-but you can also delete all files during the session.
+默认情况下, 下载目录在可用会话结束时被删除, 
+但您也可以在会话期间删除所有文件.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L83" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L88" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_remote_webdriver.py#L59" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_remote_webdriver.py#L64" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L82" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L84" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/remote_webdriver_spec.rb#L62" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/remote_webdriver_spec.rb#L62" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -199,28 +203,28 @@ but you can also delete all files during the session.
 {{< /tabpane >}}
 
 
-## Browser specific functionalities
+## 浏览器特定功能
 
-Each [browser](({{< ref "../browsers/" >}})) has implemented special functionality that is available only to that browser.
-Each of the Selenium bindings has implemented a different way to use those features in a Remote Session
+每个[浏览器]({{< ref "../browsers/" >}}) 都实现了仅对该浏览器可用的特殊功能.
+每种Selenium实现都实现了在远程会话中使用这些功能的不同方式
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 Java requires you to use the Augmenter class, which allows it to automatically pull in implementations for
 all interfaces that match the capabilities used with the RemoteWebDriver
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L93" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L98" >}}
 
 Of interest, using the `RemoteWebDriverBuilder` automatically augments the driver, so it is a great way
 to get all the functionality by default:
 
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L100-L106" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/RemoteWebDriverTest.java#L106-L111" >}}
 {{% /tab %}}
 {{% tab header="Python" %}}
 {{< badge-implementation >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 .NET uses a custom command executor for executing commands that are valid for the given browser in the remote driver.
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L94-L98" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/RemoteWebDriverTest.cs#L96-L100" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 Ruby uses mixins to add applicable browser specific methods to the Remote WebDriver session; 
diff --git a/website_and_docs/content/documentation/webdriver/drivers/service.en.md b/website_and_docs/content/documentation/webdriver/drivers/service.en.md
index 158ef3665c75..acdd27f962f0 100644
--- a/website_and_docs/content/documentation/webdriver/drivers/service.en.md
+++ b/website_and_docs/content/documentation/webdriver/drivers/service.en.md
@@ -18,20 +18,20 @@ To start a driver with a default service instance:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L15-L16" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L15-L16" >}}
 **Note**: Java Service classes only allow values to be set during construction with a Builder pattern.
 {{% /tab %}}
 {{% tab header="Python" %}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_service.py#L5-L6" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_service.py#L5-L6" >}}
 **Note**: Python Service classes only allow values to be set as arguments to the constructor.
 {{% /tab %}}
 {{% tab header="CSharp" %}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L17-L18" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L14-L15" >}}
 **Note**: .NET Service classes allow values to be set as properties.
 {{% /tab %}}
 {{% tab header="Ruby" %}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/service_spec.rb#L14-L15" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/service_spec.rb#L14-L15" >}}
 **Note**: Ruby Service classes allow values to be set either as arguments in the constructor or as attributes.
 {{% /tab %}}
 {{< tab header="JavaScript" >}}
@@ -49,19 +49,19 @@ If you cannot update Selenium or have an advanced use case, here is how to speci
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L25-L26" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L25-L26" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_service.py#L15" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_service.py#L15" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-version version="4.9" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L25" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L23" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/service_spec.rb#L22" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/service_spec.rb#L26" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -77,18 +77,18 @@ If you want the driver to run on a specific port, you may specify it as follows:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L33" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L33" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_service.py#L23" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_service.py#L23" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L34" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L32" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/service_spec.rb#L29" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/service_spec.rb#L33" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/drivers/service.ja.md b/website_and_docs/content/documentation/webdriver/drivers/service.ja.md
index d7a1a546c5aa..cc6e8b38fd8e 100644
--- a/website_and_docs/content/documentation/webdriver/drivers/service.ja.md
+++ b/website_and_docs/content/documentation/webdriver/drivers/service.ja.md
@@ -1,34 +1,30 @@
 ---
-title: "Driver Service Class"
-linkTitle: "Service"
+title: "ドライバーサービスクラス"
+linkTitle: "サービス"
 weight: 3
 ---
 
-The Service classes are for managing the starting and stopping of drivers.
-They can not be used with a Remote WebDriver session.
+サービスクラスは、ドライバーの起動と停止を管理するためのものです。リモートWebDriverセッションでは使用できません。
 
-Service classes allow you to specify information about the driver,
-like location and which port to use.
-They also let you specify what arguments get passed
-to the command line. Most of the useful arguments are related to logging.
+サービスクラスを使用すると、ドライバーに関する情報（場所や使用するポートなど）を指定できます。また、コマンドラインに渡される引数を指定することもできます。便利な引数のほとんどは、ログに関連しています。
 
-## Default Service instance
+## デフォルトサービスインスタンス
 
-To start a driver with a default service instance:
+デフォルトサービスインスタンスを使用してドライバーを起動するには：
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L15-L16" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L15-L16" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_service.py#L5-L6" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_service.py#L5-L6" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L17-L18" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L14-L15" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/service_spec.rb#L14-L15" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/service_spec.rb#L14-L15" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -38,26 +34,25 @@ To start a driver with a default service instance:
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Driver location
+## ドライバーの場所
 
-**Note:** If you are using Selenium 4.6 or greater, you shouldn't need to set a driver location.
-If you can not update Selenium or have an advanced use case here is how to specify the driver location:
+**注意:** Selenium 4.6以上を使用している場合、ドライバーの場所を設定する必要はありません。Seleniumを更新できない場合や、特別な使用ケースがある場合は、ドライバーの場所を指定する方法は次のとおりです：
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L25-L26" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L25-L26" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_service.py#L15" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_service.py#L15" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-version version="4.9" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L25" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L23" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/service_spec.rb#L22" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/service_spec.rb#L26" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -67,24 +62,24 @@ If you can not update Selenium or have an advanced use case here is how to speci
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Driver port
+## ドライバーのポート
 
-If you want the driver to run on a specific port, you may specify it as follows:
+ドライバーを特定のポートで実行したい場合は、次のように指定できます：
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L33" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L33" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_service.py#L23" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_service.py#L23" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L34" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L32" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/service_spec.rb#L29" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/service_spec.rb#L33" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -95,10 +90,9 @@ If you want the driver to run on a specific port, you may specify it as follows:
 {{< /tabpane >}}
 
 <span id="setting-log-output"></span>
-## Logging
+## ログ記録
 
-Logging functionality varies between browsers. Most browsers allow you to
-specify location and level of logs. Take a look at the respective browser page:
+ログ記録機能はブラウザによって異なります。ほとんどのブラウザでは、ログの場所とレベルを指定できます。各ブラウザのページを確認してください：
 * [Chrome]({{< ref "../browsers/chrome#service" >}})
 * [Edge]({{< ref "../browsers/edge#service" >}})
 * [Firefox]({{< ref "../browsers/firefox#service" >}})
diff --git a/website_and_docs/content/documentation/webdriver/drivers/service.pt-br.md b/website_and_docs/content/documentation/webdriver/drivers/service.pt-br.md
index d7a1a546c5aa..9d2476256239 100644
--- a/website_and_docs/content/documentation/webdriver/drivers/service.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/drivers/service.pt-br.md
@@ -1,5 +1,5 @@
 ---
-title: "Driver Service Class"
+title: "Classe de Serviço do Driver"
 linkTitle: "Service"
 weight: 3
 ---
@@ -18,17 +18,17 @@ To start a driver with a default service instance:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L15-L16" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L15-L16" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_service.py#L5-L6" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_service.py#L5-L6" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L17-L18" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L14-L15" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/service_spec.rb#L14-L15" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/service_spec.rb#L14-L15" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -45,19 +45,19 @@ If you can not update Selenium or have an advanced use case here is how to speci
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L25-L26" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L25-L26" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_service.py#L15" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_service.py#L15" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-version version="4.9" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L25" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L23" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/service_spec.rb#L22" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/service_spec.rb#L26" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -73,18 +73,18 @@ If you want the driver to run on a specific port, you may specify it as follows:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L33" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L33" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_service.py#L23" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_service.py#L23" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L34" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L32" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/service_spec.rb#L29" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/service_spec.rb#L33" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/drivers/service.zh-cn.md b/website_and_docs/content/documentation/webdriver/drivers/service.zh-cn.md
index 7f1df68bf385..9eebd1c457a6 100644
--- a/website_and_docs/content/documentation/webdriver/drivers/service.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/drivers/service.zh-cn.md
@@ -1,34 +1,34 @@
 ---
-title: "Driver Service Class"
+title: "驱动服务类"
 linkTitle: "服务"
 weight: 3
 ---
 
 服务类用于管理驱动程序的启动和停止.
-They can not be used with a Remote WebDriver session.
+它们不能与远程 WebDriver 会话一起使用.
 
-Service classes allow you to specify information about the driver,
-like location and which port to use.
-They also let you specify what arguments get passed
-to the command line. Most of the useful arguments are related to logging.
+服务类允许您指定有关驱动程序的信息,
+诸如位置和要使用的端口.
+它们还允许您指定传递哪些参数到命令行.
+大多数有用的参数都与日志记录有关.
 
-## Default Service instance
+## 默认服务实例
 
-To start a driver with a default service instance:
+使用默认服务实例启动驱动程序:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L15-L16" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L15-L16" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_service.py#L5-L6" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_service.py#L5-L6" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L17-L18" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L14-L15" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/service_spec.rb#L14-L15" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/service_spec.rb#L14-L15" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -38,26 +38,28 @@ To start a driver with a default service instance:
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Driver location
+## 驱动程序位置
 
-**Note:** If you are using Selenium 4.6 or greater, you shouldn't need to set a driver location.
-If you can not update Selenium or have an advanced use case here is how to specify the driver location:
+**注意:** 如果您使用的是 Selenium 4.6 或更高版本, 
+则无需设置驱动程序位置.
+如果您无法更新 Selenium 或有高阶用法需求, 
+以下是指定驱动程序位置的方法:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L25-L26" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L25-L26" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_service.py#L15" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_service.py#L15" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
 {{< badge-version version="4.9" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L25" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L23" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/service_spec.rb#L22" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/service_spec.rb#L26" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -67,24 +69,25 @@ If you can not update Selenium or have an advanced use case here is how to speci
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Driver port
+## 驱动程序端口
 
-If you want the driver to run on a specific port, you may specify it as follows:
+如果希望驱动程序在特定端口上运行, 
+您可以在启动时指定端口号, 如下所示:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L33" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/drivers/ServiceTest.java#L33" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 {{< badge-version version="4.11" >}}
-{{< gh-codeblock path="examples/python/tests/drivers/test_service.py#L23" >}}
+{{< gh-codeblock path="/examples/python/tests/drivers/test_service.py#L23" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L34" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Drivers/ServiceTest.cs#L32" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-version version="4.8" >}}
-{{< gh-codeblock path="examples/ruby/spec/drivers/service_spec.rb#L29" >}}
+{{< gh-codeblock path="/examples/ruby/spec/drivers/service_spec.rb#L33" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -95,10 +98,11 @@ If you want the driver to run on a specific port, you may specify it as follows:
 {{< /tabpane >}}
 
 <span id="setting-log-output"></span>
-## Logging
+## 日志
 
-Logging functionality varies between browsers. Most browsers allow you to
-specify location and level of logs. Take a look at the respective browser page:
+日志记录功能因浏览器而异.
+大多数浏览器都允许您指定日志的位置和级别.
+请查看相应的浏览器页面:
 * [Chrome]({{< ref "../browsers/chrome#service" >}})
 * [Edge]({{< ref "../browsers/edge#service" >}})
 * [Firefox]({{< ref "../browsers/firefox#service" >}})
diff --git a/website_and_docs/content/documentation/webdriver/elements/file_upload.en.md b/website_and_docs/content/documentation/webdriver/elements/file_upload.en.md
index 07f27f4d6d60..e60d485861f2 100644
--- a/website_and_docs/content/documentation/webdriver/elements/file_upload.en.md
+++ b/website_and_docs/content/documentation/webdriver/elements/file_upload.en.md
@@ -13,16 +13,16 @@ you can use the send keys method to send the full path to the file that will be
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/elements/FileUploadTest.java#L17-L19" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FileUploadTest.java#L17-L19" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/elements/test_file_upload.py#L12-L14" >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_file_upload.py#L12-L14" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Elements/FileUploadTest.cs#L21-L23" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/FileUploadTest.cs#L21-L23" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/elements/file_upload_spec.rb#L12-L14" >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/file_upload_spec.rb#L12-L14" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/fileUpload.spec.js#L24-L25">}}
diff --git a/website_and_docs/content/documentation/webdriver/elements/file_upload.ja.md b/website_and_docs/content/documentation/webdriver/elements/file_upload.ja.md
index 532fb1d5975f..1738fbfc61a8 100644
--- a/website_and_docs/content/documentation/webdriver/elements/file_upload.ja.md
+++ b/website_and_docs/content/documentation/webdriver/elements/file_upload.ja.md
@@ -14,16 +14,16 @@ you can use the send keys method to send the full path to the file that will be
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/elements/FileUploadTest.java#L17-L19" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FileUploadTest.java#L17-L19" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/elements/test_file_upload.py#L12-L14" >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_file_upload.py#L12-L14" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Elements/FileUploadTest.cs#L21-L23" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/FileUploadTest.cs#L21-L23" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/elements/file_upload_spec.rb#L12-L14" >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/file_upload_spec.rb#L12-L14" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/fileUpload.spec.js#L24-L25">}}
diff --git a/website_and_docs/content/documentation/webdriver/elements/file_upload.pt-br.md b/website_and_docs/content/documentation/webdriver/elements/file_upload.pt-br.md
index 9d435d165b3d..77341e011bd9 100644
--- a/website_and_docs/content/documentation/webdriver/elements/file_upload.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/elements/file_upload.pt-br.md
@@ -16,16 +16,16 @@ you can use the send keys method to send the full path to the file that will be
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/elements/FileUploadTest.java#L17-L19" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FileUploadTest.java#L17-L19" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/elements/test_file_upload.py#L12-L14" >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_file_upload.py#L12-L14" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Elements/FileUploadTest.cs#L21-L23" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/FileUploadTest.cs#L21-L23" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/elements/file_upload_spec.rb#L12-L14" >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/file_upload_spec.rb#L12-L14" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/fileUpload.spec.js#L24-L25">}}
diff --git a/website_and_docs/content/documentation/webdriver/elements/file_upload.zh-cn.md b/website_and_docs/content/documentation/webdriver/elements/file_upload.zh-cn.md
index 021ba2d5cbc0..bd6e2f30e98d 100644
--- a/website_and_docs/content/documentation/webdriver/elements/file_upload.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/elements/file_upload.zh-cn.md
@@ -7,22 +7,22 @@ aliases: [
 ]
 ---
 
-Because Selenium cannot interact with the file upload dialog, it provides a way
-to upload files without opening the dialog. If the element is an `input` element with type `file`, 
-you can use the send keys method to send the full path to the file that will be uploaded.
+由于 Selenium 不能与文件上传对话框交互，因此它提供了一种无需打开对话框即可上传文件的方法。
+如果该元素是一个类型为 `file` 的 `input` 元素，则可以使用
+send keys 方法发送将要上传文件的完整路径。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/elements/FileUploadTest.java#L17-L19" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FileUploadTest.java#L17-L19" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< gh-codeblock path="examples/python/tests/elements/test_file_upload.py#L12-L14" >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_file_upload.py#L12-L14" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Elements/FileUploadTest.cs#L21-L23" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/FileUploadTest.cs#L21-L23" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/elements/file_upload_spec.rb#L12-L14" >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/file_upload_spec.rb#L12-L14" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/fileUpload.spec.js#L24-L25">}}
diff --git a/website_and_docs/content/documentation/webdriver/elements/finders.en.md b/website_and_docs/content/documentation/webdriver/elements/finders.en.md
index a1c0d3f9867a..08f8d82da1c6 100644
--- a/website_and_docs/content/documentation/webdriver/elements/finders.en.md
+++ b/website_and_docs/content/documentation/webdriver/elements/finders.en.md
@@ -52,9 +52,9 @@ vegetable = driver.find_element(By.CLASS_NAME, "tomatoes")
   {{< tab header="CSharp" >}}
 var vegetable = driver.FindElement(By.ClassName("tomatoes"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-vegetable = driver.find_element(class: 'tomatoes')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L14-L15">}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const vegetable = await driver.findElement(By.className('tomatoes'));
   {{< /tab >}}
@@ -87,10 +87,9 @@ fruit = fruits.find_element(By.CLASS_NAME,"tomatoes")
 IWebElement fruits = driver.FindElement(By.Id("fruits"));
 IWebElement fruit = fruits.FindElement(By.ClassName("tomatoes"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-fruits = driver.find_element(id: 'fruits')
-fruit = fruits.find_element(class: 'tomatoes')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L14-L15">}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const fruits = await driver.findElement(By.id('fruits'));
 const fruit = fruits.findElement(By.className('tomatoes'));
@@ -109,6 +108,42 @@ driver implementation supports a given feature. These interfaces are clearly def
 to adhere to having only a single role of responsibility.
 {{% /pageinfo %}}
 
+### Evaluating the Shadow DOM
+
+The Shadow DOM is an encapsulated DOM tree hidden inside an element. 
+With the release of v96 in Chromium Browsers, Selenium can now allow you to access this tree with 
+easy-to-use shadow root methods. NOTE: These methods require Selenium 4.0 or greater.
+
+{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
+{{< tab header="Java" >}}
+WebElement shadowHost = driver.findElement(By.cssSelector("#shadow_host"));
+SearchContext shadowRoot = shadowHost.getShadowRoot();
+WebElement shadowContent = shadowRoot.findElement(By.cssSelector("#shadow_content"));
+{{< /tab >}}
+{{< tab header="Python" >}}
+shadow_host = driver.find_element(By.CSS_SELECTOR, '#shadow_host')
+shadow_root = shadow_host.shadow_root
+shadow_content = shadow_root.find_element(By.CSS_SELECTOR, '#shadow_content')
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+var shadowHost = _driver.FindElement(By.CssSelector("#shadow_host"));
+var shadowRoot = shadowHost.GetShadowRoot();
+var shadowContent = shadowRoot.FindElement(By.CssSelector("#shadow_content"));
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+shadow_host = @driver.find_element(css: '#shadow_host')
+shadow_root = shadow_host.shadow_root
+shadow_content = shadow_root.find_element(css: '#shadow_content')
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" text=true >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
 ### Optimized locator
 
 A nested lookup might not be the most effective location strategy since it requires two
@@ -131,9 +166,9 @@ fruit = driver.find_element(By.CSS_SELECTOR,"#fruits .tomatoes")
   {{< tab header="CSharp" >}}
 var fruit = driver.FindElement(By.CssSelector("#fruits .tomatoes"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-fruit = driver.find_element(css: '#fruits .tomatoes')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L19" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const fruit = await driver.findElement(By.css('#fruits .tomatoes'));
   {{< /tab >}}
@@ -161,9 +196,9 @@ plants = driver.find_elements(By.TAG_NAME, "li")
   {{< tab header="CSharp" >}}
 IReadOnlyList<IWebElement> plants = driver.FindElements(By.TagName("li"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-plants = driver.find_elements(tag_name: 'li')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L23" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const plants = await driver.findElements(By.tagName('li'));
   {{< /tab >}}
@@ -227,23 +262,9 @@ namespace FindElementsExample {
  }
 }
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :firefox
-begin
-     # Navigate to URL
-  driver.get 'https://www.example.com'
-
-     # Get all the elements available with tag name 'p'
-  elements = driver.find_elements(:tag_name,'p')
-
-  elements.each { |e|
-    puts e.text
-  }
-ensure
-  driver.quit
-end
-  {{< /tab >}}
+   {{< tab header="Ruby" text=true >}}
+   {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L27-L28" >}}
+   {{< /tab >}}
   {{< tab header="JavaScript" >}}
 const {Builder, By} = require('selenium-webdriver');
 (async function example() {
@@ -323,12 +344,24 @@ from selenium.webdriver.common.by import By
 
 driver = webdriver.Chrome()
 driver.get("https://www.example.com")
+##get elements from parent element using TAG_NAME
 
     # Get element with tag name 'div'
 element = driver.find_element(By.TAG_NAME, 'div')
 
     # Get all the elements available with tag name 'p'
 elements = element.find_elements(By.TAG_NAME, 'p')
+for e in elements:
+    print(e.text)
+
+##get elements from parent element using XPATH
+##NOTE: in order to utilize XPATH from current element, you must add "." to beginning of path
+
+    # Get first element of tag 'ul'
+element = driver.find_element(By.XPATH, '//ul')
+
+    # get children of tag 'ul' with tag 'li'
+elements  = driver.find_elements(By.XPATH, './/li')
 for e in elements:
     print(e.text)
   {{< /tab >}}
@@ -359,26 +392,9 @@ namespace FindElementsFromElement {
  }
 }
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-  require 'selenium-webdriver'
-  driver = Selenium::WebDriver.for :chrome
-  begin
-    # Navigate to URL
-    driver.get 'https://www.example.com'
-
-    # Get element with tag name 'div'
-    element = driver.find_element(:tag_name,'div')
-
-    # Get all the elements available with tag name 'p'
-    elements = element.find_elements(:tag_name,'p')
-
-    elements.each { |e|
-      puts e.text
-    }
-  ensure
-    driver.quit
-  end
-  {{< /tab >}}
+   {{< tab header="Ruby" text=true >}}
+   {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L32-L34" >}}
+   {{< /tab >}}
   {{< tab header="JavaScript" >}}
   const {Builder, By} = require('selenium-webdriver');
 
@@ -484,19 +500,8 @@ It is used to track (or) find DOM element which has the focus in the current bro
      }
     }
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-  require 'selenium-webdriver'
-  driver = Selenium::WebDriver.for :chrome
-  begin
-    driver.get 'https://www.google.com'
-    driver.find_element(css: '[name="q"]').send_keys('webElement')
-
-    # Get attribute of current active element
-    attr = driver.switch_to.active_element.attribute('title')
-    puts attr
-  ensure
-    driver.quit
-  end
+  {{< tab header="Ruby" text=true >}}
+  {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L38-L39" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
   const {Builder, By} = require('selenium-webdriver');
diff --git a/website_and_docs/content/documentation/webdriver/elements/finders.ja.md b/website_and_docs/content/documentation/webdriver/elements/finders.ja.md
index 80eb7813a38c..a5c2f0ceaa35 100644
--- a/website_and_docs/content/documentation/webdriver/elements/finders.ja.md
+++ b/website_and_docs/content/documentation/webdriver/elements/finders.ja.md
@@ -49,9 +49,9 @@ vegetable = driver.find_element(By.CLASS_NAME, "tomatoes")
   {{< tab header="CSharp" >}}
 var vegetable = driver.FindElement(By.ClassName("tomatoes"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-vegetable = driver.find_element(class: 'tomatoes')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L10" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const vegetable = await driver.findElement(By.className('tomatoes'));
   {{< /tab >}}
@@ -81,10 +81,9 @@ fruit = fruits.find_element(By.CLASS_NAME,"tomatoes")
 IWebElement fruits = driver.FindElement(By.Id("fruits"));
 IWebElement fruit = fruits.FindElement(By.ClassName("tomatoes"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-fruits = driver.find_element(id: 'fruits')
-fruit = fruits.find_element(class: 'tomatoes')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L14-L15" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const fruits = await driver.findElement(By.id('fruits'));
 const fruit = fruits.findElement(By.className('tomatoes'));
@@ -102,6 +101,42 @@ val fruit = fruits.findElement(By.className("tomatoes"))
 これらのインターフェースは明確に定義されており、責任の役割を1つだけ持つように努めています。
 {{% /pageinfo %}}
 
+### Evaluating the Shadow DOM
+
+The Shadow DOM is an encapsulated DOM tree hidden inside an element. 
+With the release of v96 in Chromium Browsers, Selenium can now allow you to access this tree 
+with easy-to-use shadow root methods. NOTE: These methods require Selenium 4.0 or greater.
+
+{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
+{{< tab header="Java" >}}
+WebElement shadowHost = driver.findElement(By.cssSelector("#shadow_host"));
+SearchContext shadowRoot = shadowHost.getShadowRoot();
+WebElement shadowContent = shadowRoot.findElement(By.cssSelector("#shadow_content"));
+{{< /tab >}}
+{{< tab header="Python" >}}
+shadow_host = driver.find_element(By.CSS_SELECTOR, '#shadow_host')
+shadow_root = shadow_host.shadow_root
+shadow_content = shadow_root.find_element(By.CSS_SELECTOR, '#shadow_content')
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+var shadowHost = _driver.FindElement(By.CssSelector("#shadow_host"));
+var shadowRoot = shadowHost.GetShadowRoot();
+var shadowContent = shadowRoot.FindElement(By.CssSelector("#shadow_content"));
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+shadow_host = @driver.find_element(css: '#shadow_host')
+shadow_root = shadow_host.shadow_root
+shadow_content = shadow_root.find_element(css: '#shadow_content')
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" text=true >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
 ### 最適化されたロケーター
 
 ネストされたルックアップは、ブラウザに2つの別々のコマンドを発行する必要があるため、最も効果的なロケーション戦略ではない可能性があります。
@@ -121,9 +156,9 @@ fruit = driver.find_element(By.CSS_SELECTOR,"#fruits .tomatoes")
   {{< tab header="CSharp" >}}
 var fruit = driver.FindElement(By.CssSelector("#fruits .tomatoes"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-fruit = driver.find_element(css: '#fruits .tomatoes')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L19" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const fruit = await driver.findElement(By.css('#fruits .tomatoes'));
   {{< /tab >}}
@@ -150,9 +185,9 @@ plants = driver.find_elements(By.TAG_NAME, "li")
   {{< tab header="CSharp" >}}
 IReadOnlyList<IWebElement> plants = driver.FindElements(By.TagName("li"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-plants = driver.find_elements(tag_name: 'li')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L23" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const plants = await driver.findElements(By.tagName('li'));
   {{< /tab >}}
@@ -214,23 +249,9 @@ namespace FindElementsExample {
  }
 }
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :firefox
-begin
-     # Navigate to URL
-  driver.get 'https://www.example.com'
-
-     # Get all the elements available with tag name 'p'
-  elements = driver.find_elements(:tag_name,'p')
-
-  elements.each { |e|
-    puts e.text
-  }
-ensure
-  driver.quit
-end
-  {{< /tab >}}
+   {{< tab header="Ruby" text=true >}}
+   {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L27-L28" >}}
+   {{< /tab >}}
   {{< tab header="JavaScript" >}}
 const {Builder, By} = require('selenium-webdriver');
 (async function example() {
@@ -309,12 +330,24 @@ from selenium.webdriver.common.by import By
 
 driver = webdriver.Chrome()
 driver.get("https://www.example.com")
+##get elements from parent element using TAG_NAME
 
     # Get element with tag name 'div'
 element = driver.find_element(By.TAG_NAME, 'div')
 
     # Get all the elements available with tag name 'p'
 elements = element.find_elements(By.TAG_NAME, 'p')
+for e in elements:
+    print(e.text)
+
+##get elements from parent element using XPATH
+##NOTE: in order to utilize XPATH from current element, you must add "." to beginning of path
+
+    # Get first element of tag 'ul'
+element = driver.find_element(By.XPATH, '//ul')
+
+    # get children of tag 'ul' with tag 'li'
+elements  = driver.find_elements(By.XPATH, './/li')
 for e in elements:
     print(e.text)
   {{< /tab >}}
@@ -345,26 +378,9 @@ namespace FindElementsFromElement {
  }
 }
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-  require 'selenium-webdriver'
-  driver = Selenium::WebDriver.for :chrome
-  begin
-    # Navigate to URL
-    driver.get 'https://www.example.com'
-
-    # Get element with tag name 'div'
-    element = driver.find_element(:tag_name,'div')
-
-    # Get all the elements available with tag name 'p'
-    elements = element.find_elements(:tag_name,'p')
-
-    elements.each { |e|
-      puts e.text
-    }
-  ensure
-    driver.quit
-  end
-  {{< /tab >}}
+   {{< tab header="Ruby" text=true >}}
+   {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L32-L34" >}}
+   {{< /tab >}}
   {{< tab header="JavaScript" >}}
   const {Builder, By} = require('selenium-webdriver');
 
@@ -469,19 +485,8 @@ namespace FindElementsFromElement {
      }
     }
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-  require 'selenium-webdriver'
-  driver = Selenium::WebDriver.for :chrome
-  begin
-    driver.get 'https://www.google.com'
-    driver.find_element(css: '[name="q"]').send_keys('webElement')
-
-    # Get attribute of current active element
-    attr = driver.switch_to.active_element.attribute('title')
-    puts attr
-  ensure
-    driver.quit
-  end
+  {{< tab header="Ruby" text=true >}}
+  {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L38-L39" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
   const {Builder, By} = require('selenium-webdriver');
diff --git a/website_and_docs/content/documentation/webdriver/elements/finders.pt-br.md b/website_and_docs/content/documentation/webdriver/elements/finders.pt-br.md
index 78de20ff8bdf..b0c426ef7770 100644
--- a/website_and_docs/content/documentation/webdriver/elements/finders.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/elements/finders.pt-br.md
@@ -50,9 +50,9 @@ vegetable = driver.find_element(By.CLASS_NAME, "tomatoes")
   {{< tab header="CSharp" >}}
 var vegetable = driver.FindElement(By.ClassName("tomatoes"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-vegetable = driver.find_element(class: 'tomatoes')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L10" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const vegetable = await driver.findElement(By.className('tomatoes'));
   {{< /tab >}}
@@ -83,10 +83,9 @@ fruit = fruits.find_element(By.CLASS_NAME,"tomatoes")
 IWebElement fruits = driver.FindElement(By.Id("fruits"));
 IWebElement fruit = fruits.FindElement(By.ClassName("tomatoes"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-fruits = driver.find_element(id: 'fruits')
-fruit = fruits.find_element(class: 'tomatoes')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L14-L15" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const fruits = await driver.findElement(By.id('fruits'));
 const fruit = fruits.findElement(By.className('tomatoes'));
@@ -105,6 +104,42 @@ implementação de driver suporta um recurso específico. Essas interfaces são
 aderir a ter apenas um único papel de responsabilidade.
 {{% /pageinfo %}}
 
+### Evaluating the Shadow DOM
+
+The Shadow DOM is an encapsulated DOM tree hidden inside an element. 
+With the release of v96 in Chromium Browsers, Selenium can now allow you to access this tree 
+with easy-to-use shadow root methods. NOTE: These methods require Selenium 4.0 or greater.
+
+{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
+{{< tab header="Java" >}}
+WebElement shadowHost = driver.findElement(By.cssSelector("#shadow_host"));
+SearchContext shadowRoot = shadowHost.getShadowRoot();
+WebElement shadowContent = shadowRoot.findElement(By.cssSelector("#shadow_content"));
+{{< /tab >}}
+{{< tab header="Python" >}}
+shadow_host = driver.find_element(By.CSS_SELECTOR, '#shadow_host')
+shadow_root = shadow_host.shadow_root
+shadow_content = shadow_root.find_element(By.CSS_SELECTOR, '#shadow_content')
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+var shadowHost = _driver.FindElement(By.CssSelector("#shadow_host"));
+var shadowRoot = shadowHost.GetShadowRoot();
+var shadowContent = shadowRoot.FindElement(By.CssSelector("#shadow_content"));
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+shadow_host = @driver.find_element(css: '#shadow_host')
+shadow_root = shadow_host.shadow_root
+shadow_content = shadow_root.find_element(css: '#shadow_content')
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" text=true >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
 ### Localizador otimizado
 Uma pesquisa aninhada pode não ser a estratégia de localização mais eficaz, pois requer dois
 comandos separados a serem emitidos para o navegador.
@@ -125,9 +160,9 @@ fruit = driver.find_element(By.CSS_SELECTOR,"#fruits .tomatoes")
   {{< tab header="CSharp" >}}
 var fruit = driver.FindElement(By.CssSelector("#fruits .tomatoes"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-fruit = driver.find_element(css: '#fruits .tomatoes')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L19" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const fruit = await driver.findElement(By.css('#fruits .tomatoes'));
   {{< /tab >}}
@@ -153,9 +188,9 @@ plants = driver.find_elements(By.TAG_NAME, "li")
   {{< tab header="CSharp" >}}
 IReadOnlyList<IWebElement> plants = driver.FindElements(By.TagName("li"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-plants = driver.find_elements(tag_name: 'li')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L23" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const plants = await driver.findElements(By.tagName('li'));
   {{< /tab >}}
@@ -218,23 +253,9 @@ namespace FindElementsExample {
  }
 }
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :firefox
-begin
-     # Navegar até a URL
-  driver.get 'https://www.example.com'
-
-     # Obtém todos os elementos disponiveis com o nome da tag 'p'
-  elements = driver.find_elements(:tag_name,'p')
-
-  elements.each { |e|
-    puts e.text
-  }
-ensure
-  driver.quit
-end
-  {{< /tab >}}
+   {{< tab header="Ruby" text=true >}}
+   {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L27-L28" >}}
+   {{< /tab >}}
   {{< tab header="JavaScript" >}}
 const {Builder, By} = require('selenium-webdriver');
 (async function example() {
@@ -308,17 +329,24 @@ Para realizar isso, o WebElement pai é encadeado com o 'findElements' para aces
   }
   {{< /tab >}}
   {{< tab header="Python" >}}
-from selenium import webdriver
-from selenium.webdriver.common.by import By
-
-driver = webdriver.Chrome()
-driver.get("https://www.example.com")
+##get elements from parent element using TAG_NAME
 
     # Obtém o elemento com o nome da tag 'div'
 element = driver.find_element(By.TAG_NAME, 'div')
 
     # Obtém todos os elementos disponíveis com o nome da tag 'p'
 elements = element.find_elements(By.TAG_NAME, 'p')
+for e in elements:
+    print(e.text)
+
+##get elements from parent element using XPATH
+##NOTE: in order to utilize XPATH from current element, you must add "." to beginning of path
+
+    # Get first element of tag 'ul'
+element = driver.find_element(By.XPATH, '//ul')
+
+    # get children of tag 'ul' with tag 'li'
+elements  = driver.find_elements(By.XPATH, './/li')
 for e in elements:
     print(e.text)
   {{< /tab >}}
@@ -349,26 +377,9 @@ namespace FindElementsFromElement {
  }
 }
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-  require 'selenium-webdriver'
-  driver = Selenium::WebDriver.for :chrome
-  begin
-    # Navegar até a URL
-    driver.get 'https://www.example.com'
-
-    # Obtém o elemento com o nome da tag 'div'
-    element = driver.find_element(:tag_name,'div')
-
-    # Obtém todos os elementos disponíveis com o nome da tag 'p'
-    elements = element.find_elements(:tag_name,'p')
-
-    elements.each { |e|
-      puts e.text
-    }
-  ensure
-    driver.quit
-  end
-  {{< /tab >}}
+   {{< tab header="Ruby" text=true >}}
+   {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L32-L34" >}}
+   {{< /tab >}}
   {{< tab header="JavaScript" >}}
   const {Builder, By} = require('selenium-webdriver');
 
@@ -473,19 +484,8 @@ Ele é usado para rastrear (ou) encontrar um elemento DOM que tem o foco no cont
      }
     }
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-  require 'selenium-webdriver'
-  driver = Selenium::WebDriver.for :chrome
-  begin
-    driver.get 'https://www.google.com'
-    driver.find_element(css: '[name="q"]').send_keys('webElement')
-
-    # Obter atributo do elemento atualmente ativo
-    attr = driver.switch_to.active_element.attribute('title')
-    puts attr
-  ensure
-    driver.quit
-  end
+  {{< tab header="Ruby" text=true >}}
+  {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L38-L39" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
   const {Builder, By} = require('selenium-webdriver');
diff --git a/website_and_docs/content/documentation/webdriver/elements/finders.zh-cn.md b/website_and_docs/content/documentation/webdriver/elements/finders.zh-cn.md
index 3f6553c4719f..37094837cf0d 100644
--- a/website_and_docs/content/documentation/webdriver/elements/finders.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/elements/finders.zh-cn.md
@@ -52,9 +52,9 @@ vegetable = driver.find_element(By.CLASS_NAME, "tomatoes")
   {{< tab header="CSharp" >}}
 var vegetable = driver.FindElement(By.ClassName("tomatoes"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-vegetable = driver.find_element(class: 'tomatoes')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L10" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const vegetable = await driver.findElement(By.className('tomatoes'));
   {{< /tab >}}
@@ -86,10 +86,9 @@ fruit = fruits.find_element(By.CLASS_NAME,"tomatoes")
 IWebElement fruits = driver.FindElement(By.Id("fruits"));
 IWebElement fruit = fruits.FindElement(By.ClassName("tomatoes"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-fruits = driver.find_element(id: 'fruits')
-fruit = fruits.find_element(class: 'tomatoes')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L14-L15" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const fruits = await driver.findElement(By.id('fruits'));
 const fruit = fruits.findElement(By.className('tomatoes'));
@@ -108,6 +107,42 @@ driver implementation supports a given feature. These interfaces are clearly def
 to adhere to having only a single role of responsibility.
 {{% /pageinfo %}}
 
+### Evaluating the Shadow DOM
+
+The Shadow DOM is an encapsulated DOM tree hidden inside an element. 
+With the release of v96 in Chromium Browsers, Selenium can now allow you to access this tree 
+with easy-to-use shadow root methods. NOTE: These methods require Selenium 4.0 or greater.
+
+{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
+{{< tab header="Java" >}}
+WebElement shadowHost = driver.findElement(By.cssSelector("#shadow_host"));
+SearchContext shadowRoot = shadowHost.getShadowRoot();
+WebElement shadowContent = shadowRoot.findElement(By.cssSelector("#shadow_content"));
+{{< /tab >}}
+{{< tab header="Python" >}}
+shadow_host = driver.find_element(By.CSS_SELECTOR, '#shadow_host')
+shadow_root = shadow_host.shadow_root
+shadow_content = shadow_root.find_element(By.CSS_SELECTOR, '#shadow_content')
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+var shadowHost = _driver.FindElement(By.CssSelector("#shadow_host"));
+var shadowRoot = shadowHost.GetShadowRoot();
+var shadowContent = shadowRoot.FindElement(By.CssSelector("#shadow_content"));
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+shadow_host = @driver.find_element(css: '#shadow_host')
+shadow_root = shadow_host.shadow_root
+shadow_content = shadow_root.find_element(css: '#shadow_content')
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Kotlin" text=true >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
 ### Optimized locator
 
 A nested lookup might not be the most effective location strategy since it requires two
@@ -129,9 +164,9 @@ fruit = driver.find_element(By.CSS_SELECTOR,"#fruits .tomatoes")
   {{< tab header="CSharp" >}}
 var fruit = driver.FindElement(By.CssSelector("#fruits .tomatoes"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-fruit = driver.find_element(css: '#fruits .tomatoes')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L19" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const fruit = await driver.findElement(By.css('#fruits .tomatoes'));
   {{< /tab >}}
@@ -158,9 +193,9 @@ plants = driver.find_elements(By.TAG_NAME, "li")
   {{< tab header="CSharp" >}}
 IReadOnlyList<IWebElement> plants = driver.FindElements(By.TagName("li"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-plants = driver.find_elements(tag_name: 'li')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L23" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
 const plants = await driver.findElements(By.tagName('li'));
   {{< /tab >}}
@@ -223,23 +258,9 @@ namespace FindElementsExample {
  }
 }
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :firefox
-begin
-     # Navigate to URL
-  driver.get 'https://www.example.com'
-
-     # Get all the elements available with tag name 'p'
-  elements = driver.find_elements(:tag_name,'p')
-
-  elements.each { |e|
-    puts e.text
-  }
-ensure
-  driver.quit
-end
-  {{< /tab >}}
+   {{< tab header="Ruby" text=true >}}
+   {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L27-L28" >}}
+   {{< /tab >}}
   {{< tab header="JavaScript" >}}
 const {Builder, By} = require('selenium-webdriver');
 (async function example() {
@@ -318,12 +339,24 @@ from selenium.webdriver.common.by import By
 
 driver = webdriver.Chrome()
 driver.get("https://www.example.com")
+##get elements from parent element using TAG_NAME
 
     # Get element with tag name 'div'
 element = driver.find_element(By.TAG_NAME, 'div')
 
     # Get all the elements available with tag name 'p'
 elements = element.find_elements(By.TAG_NAME, 'p')
+for e in elements:
+    print(e.text)
+
+##get elements from parent element using XPATH
+##NOTE: in order to utilize XPATH from current element, you must add "." to beginning of path
+
+    # Get first element of tag 'ul'
+element = driver.find_element(By.XPATH, '//ul')
+
+    # get children of tag 'ul' with tag 'li'
+elements  = driver.find_elements(By.XPATH, './/li')
 for e in elements:
     print(e.text)
   {{< /tab >}}
@@ -354,26 +387,9 @@ namespace FindElementsFromElement {
  }
 }
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-  require 'selenium-webdriver'
-  driver = Selenium::WebDriver.for :chrome
-  begin
-    # Navigate to URL
-    driver.get 'https://www.example.com'
-
-    # Get element with tag name 'div'
-    element = driver.find_element(:tag_name,'div')
-
-    # Get all the elements available with tag name 'p'
-    elements = element.find_elements(:tag_name,'p')
-
-    elements.each { |e|
-      puts e.text
-    }
-  ensure
-    driver.quit
-  end
-  {{< /tab >}}
+   {{< tab header="Ruby" text=true >}}
+   {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L32-L34" >}}
+   {{< /tab >}}
   {{< tab header="JavaScript" >}}
   const {Builder, By} = require('selenium-webdriver');
 
@@ -478,19 +494,8 @@ It is used to track (or) find DOM element which has the focus in the current bro
      }
     }
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-  require 'selenium-webdriver'
-  driver = Selenium::WebDriver.for :chrome
-  begin
-    driver.get 'https://www.google.com'
-    driver.find_element(css: '[name="q"]').send_keys('webElement')
-
-    # Get attribute of current active element
-    attr = driver.switch_to.active_element.attribute('title')
-    puts attr
-  ensure
-    driver.quit
-  end
+  {{< tab header="Ruby" text=true >}}
+  {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L38-L39" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
   const {Builder, By} = require('selenium-webdriver');
diff --git a/website_and_docs/content/documentation/webdriver/elements/information.en.md b/website_and_docs/content/documentation/webdriver/elements/information.en.md
index 25289370d84c..d75aa29a490a 100644
--- a/website_and_docs/content/documentation/webdriver/elements/information.en.md
+++ b/website_and_docs/content/documentation/webdriver/elements/information.en.md
@@ -24,35 +24,19 @@ executing a large JavaScript function directly.
 This function makes many approximations about an element's 
 nature and relationship in the tree to return a value.
 
-{{< tabpane langEqualsHeader=true >}}
-{{< badge-examples >}}
-{{< tab header="Java" >}}
-// Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html");
 
-// Get boolean value for is element display
-boolean isEmailVisible = driver.findElement(By.name("email_input")).isDisplayed();
+{{< tabpane langEqualsHeader=true >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L20-L24" >}}
 {{< /tab >}}
-{{< tab header="Python" >}}
-# Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-# Get boolean value for is element display
-is_email_visible = driver.find_element(By.NAME, "email_input").is_displayed()
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L12-L15" >}}
 {{< /tab >}}
-{{< tab header="CSharp" >}}
-//Navigate to the url
-driver.Url = "https://www.selenium.dev/selenium/web/inputs.html";
-
-//Get boolean value for is element display
-Boolean is_email_visible = driver.FindElement(By.Name("email_input")).Displayed;
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L18-L22" >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-# Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
-#fetch display status
-val = driver.find_element(name: 'email_input').displayed?
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L12">}}
 {{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L16-L17">}}
@@ -77,38 +61,18 @@ Returns a boolean value, **True** if the connected element is
 **enabled** in the current browsing context else returns **false**.
 
 {{< tabpane langEqualsHeader=true >}}
-{{< badge-examples >}}
-  {{< tab header="Java" >}}
-  //navigates to url
-  driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
-  //returns true if element is enabled else returns false
-  boolean value = driver.findElement(By.name("button_input")).isEnabled();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Returns true if element is enabled else returns false
-value = driver.find_element(By.NAME, 'button_input').is_enabled()
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Navigate to Url
-driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-// Store the WebElement
-IWebElement element = driver.FindElement(By.Name("button_input"));
-
-// Prints true if element is enabled else returns false
-System.Console.WriteLine(element.Enabled);
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Navigate to url
-driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Returns true if element is enabled else returns false
-ele = driver.find_element(name: 'button_input').enabled?
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L27-L29" >}}
+{{< /tab >}}
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L19" >}}
   {{< /tab >}}
+ {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L25-L27" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L17">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L23-L24">}}
 {{< /tab >}}
@@ -131,35 +95,18 @@ Returns a boolean value, **True** if referenced element is
 **selected** in the current browsing context else returns **false**.
 
 {{< tabpane langEqualsHeader=true >}}
-{{< badge-examples >}}
-  {{< tab header="Java" >}}
- //navigates to url
- driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
- //returns true if element is checked else returns false
- boolean value = driver.findElement(By.name("checkbox_input")).isSelected();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Returns true if element is checked else returns false
-value = driver.find_element(By.NAME, "checkbox_input").is_selected()
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Navigate to Url
-driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-// Returns true if element ins checked else returns false
-bool value = driver.FindElement(By.Name("checkbox_input")).Selected;
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Navigate to url
-driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Returns true if element is checked else returns false
-ele = driver.find_element(name: "checkbox_input").selected?
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L32-L34" >}}
+{{< /tab >}}
+  {{< tab header="Python" text=true >}}
+  {{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L23" >}}
   {{< /tab >}}
+ {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L30-L32" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L22">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L30-L31">}}
 {{< /tab >}}
@@ -178,35 +125,18 @@ It is used to fetch the [TagName](https://www.w3.org/TR/webdriver/#dfn-get-eleme
 of the referenced Element which has the focus in the current browsing context.
 
 {{< tabpane langEqualsHeader=true >}}
-{{< badge-examples >}}
-  {{< tab header="Java" >}}
- //navigates to url
- driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
- //returns TagName of the element
- String value = driver.findElement(By.name("email_input")).getTagName();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Returns TagName of the element
-attr = driver.find_element(By.NAME, "email_input").tag_name
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Navigate to Url
-driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-// Returns TagName of the element
-string attr = driver.FindElement(By.Name("email_input")).TagName;
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Navigate to url
-driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Returns TagName of the element
-attr = driver.find_element(name: "email_input").tag_name
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L37-L39" >}}
+{{< /tab >}}
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L27" >}}
   {{< /tab >}}
+     {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L35-L37" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L27">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L37-L38">}}
 {{< /tab >}}
@@ -231,41 +161,18 @@ The fetched data body contain the following details:
 * Width of the element
 
 {{< tabpane langEqualsHeader=true >}}
-{{< badge-examples >}}
-  {{< tab header="Java" >}}
-// Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
-// Returns height, width, x and y coordinates referenced element
-Rectangle res =  driver.findElement(By.name("range_input")).getRect();
-
-// Rectangle class provides getX,getY, getWidth, getHeight methods
-System.out.println(res.getX());
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Returns height, width, x and y coordinates referenced element
-res = driver.find_element(By.NAME, "range_input").rect
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Navigate to Url
-driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-var res = driver.FindElement(By.Name("range_input"));
-// Return x and y coordinates referenced element
-System.Console.WriteLine(res.Location);
-// Returns height, width
-System.Console.WriteLine(res.Size);
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Navigate to url
-driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Returns height, width, x and y coordinates referenced element
-res = driver.find_element(name: "range_input").rect
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L42-L44" >}}
+{{< /tab >}}
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L31" >}}
   {{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L40-L43" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L32">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L45">}}
 {{< /tab >}}
@@ -287,42 +194,17 @@ Retrieves the value of specified computed style property
 of an element in the current browsing context.
 
 {{< tabpane langEqualsHeader=true >}}
-{{< badge-examples >}}
-  {{< tab header="Java" >}}
-
-// Navigate to Url
-driver.get("https://www.selenium.dev/selenium/web/colorPage.html");
-
-// Retrieves the computed style property 'color' of linktext
-String cssValue = driver.findElement(By.id("namedColor")).getCssValue("background-color");
-
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-
-    # Navigate to Url
-driver.get('https://www.selenium.dev/selenium/web/colorPage.html')
-
-    # Retrieves the computed style property 'color' of linktext
-cssValue = driver.find_element(By.ID, "namedColor").value_of_css_property('background-color')
-
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-
-// Navigate to Url
-driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/colorPage.html");
-
-// Retrieves the computed style property 'color' of linktext
-String cssValue = driver.FindElement(By.Id("namedColor")).GetCssValue("background-color");
-
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-
-    # Navigate to Url
-driver.get 'https://www.selenium.dev/selenium/web/colorPage.html'
-
-    # Retrieves the computed style property 'color' of linktext
-cssValue = driver.find_element(:id, 'namedColor').css_value('background-color')
-
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L49-L50" >}}
+{{< /tab >}}
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L35-L37" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L49-L50" >}}
+{{< /tab >}}
+  {{< tab header="Ruby" text=true >}}
+  {{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L38">}}
   {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
   {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L76-L78">}}
@@ -343,35 +225,18 @@ val cssValue = driver.findElement(By.id("namedColor")).getCssValue("background-c
 Retrieves the rendered text of the specified element.
 
 {{< tabpane langEqualsHeader=true >}}
-{{< badge-examples >}}
-  {{< tab header="Java" >}}
-// Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/linked_image.html");
-
-// Retrieves the text of the element
-String text = driver.findElement(By.id("justanotherlink")).getText();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/linked_image.html")
-
-    # Retrieves the text of the element
-text = driver.find_element(By.ID, "justanotherlink").text
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Navigate to url
-driver.Url="https://www.selenium.dev/selenium/web/linked_image.html";
-
-// Retrieves the text of the element
-String text = driver.FindElement(By.Id("justanotherlink")).Text;
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Navigate to url
-driver.get 'https://www.selenium.dev/selenium/web/linked_image.html'
-
-    # Retrieves the text of the element
-text = driver.find_element(:id, 'justanotherlink').text
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L54-L56" >}}
+{{< /tab >}}
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L41" >}}
   {{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L53-L55" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L43">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L84-L86">}}
 {{< /tab >}}
@@ -393,47 +258,18 @@ DOM attribute. It returns the data associated
 with the DOM attribute or property of the element. 
 
 {{< tabpane langEqualsHeader=true >}}
-{{< badge-examples >}}
-  {{< tab header="Java" >}}
-//Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
-//identify the email text box
-WebElement emailTxt = driver.findElement(By.name(("email_input")));
-
-//fetch the value property associated with the textbox
-String valueInfo = eleSelLink.getAttribute("value");
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-# Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-# Identify the email text box
-email_txt = driver.find_element(By.NAME, "email_input")
-
-# Fetch the value property associated with the textbox
-value_info = email_txt.get_attribute("value")
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
- //Navigate to the url
-driver.Url="https://www.selenium.dev/selenium/web/inputs.html";
-
-//identify the email text box
-IWebElement emailTxt = driver.FindElement(By.Name(("email_input")));
-
-//fetch the value property associated with the textbox
-String valueInfo = eleSelLink.GetAttribute("value");
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-# Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
-#identify the email text box
-email_element=driver.find_element(name: 'email_input')
-
-#fetch the value property associated with the textbox
-emailVal = email_element.attribute("value");
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L60-L64" >}}
+{{< /tab >}}
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L44-L46" >}}
   {{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L58-L62" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L48">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L55-L59">}}
 {{< /tab >}}
diff --git a/website_and_docs/content/documentation/webdriver/elements/information.ja.md b/website_and_docs/content/documentation/webdriver/elements/information.ja.md
index b6dcd3aaa643..416b738ff30e 100644
--- a/website_and_docs/content/documentation/webdriver/elements/information.ja.md
+++ b/website_and_docs/content/documentation/webdriver/elements/information.ja.md
@@ -24,44 +24,31 @@ executing a large JavaScript function directly.
 This function makes many approximations about an element's
 nature and relationship in the tree to return a value.
 
-{{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
-// Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html");
 
-// Get boolean value for is element display
-boolean isEmailVisible = driver.findElement(By.name("email_input")).isDisplayed();
+{{< tabpane langEqualsHeader=true >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L20-L24" >}}
 {{< /tab >}}
-{{< tab header="Python" >}}
-# Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-# Get boolean value for is element display
-is_email_visible = driver.find_element(By.NAME, "email_input").is_displayed()
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L12-L15" >}}
 {{< /tab >}}
-{{< tab header="CSharp" >}}
-//Navigate to the url
-driver.Url = "https://www.selenium.dev/selenium/web/inputs.html";
-
-//Get boolean value for is element display
-Boolean is_email_visible = driver.FindElement(By.Name("email_input")).Displayed;
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L18-L22" >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-# Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
-#fetch display status
-val = driver.find_element(name: 'email_input').displayed?
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L12">}}
 {{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L16-L17">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
+
 //navigates to url
  driver.get("https://www.selenium.dev/selenium/web/inputs.html")
 
- //returns true if element is displayed else returns false
+ //returns true if element is displayed else returns false 
  val flag = driver.findElement(By.name("email_input")).isDisplayed()
+
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -73,47 +60,28 @@ val = driver.find_element(name: 'email_input').displayed?
 **有効（enabled）** になっている場合は **True** 、そうでない場合は **false** を返します。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-  //navigates to url
-  driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
-  //returns true if element is enabled else returns false
-  boolean value = driver.findElement(By.name("button_input")).isEnabled();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Returns true if element is enabled else returns false
-value = driver.find_element(By.NAME, 'button_input').is_enabled()
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Navigate to Url
-driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-// Store the WebElement
-IWebElement element = driver.FindElement(By.Name("button_input"));
-
-// Prints true if element is enabled else returns false
-System.Console.WriteLine(element.Enabled);
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Navigate to url
-driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Returns true if element is enabled else returns false
-ele = driver.find_element(name: 'button_input').enabled?
-  {{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L27-L29" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L19" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L25-L27" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L17">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L23-L24">}}
-{{< /tab >}}
-  {{< tab header="Kotlin" >}}
+{{< /tab >}} 
+{{< tab header="Kotlin" >}}
  //navigates to url
  driver.get("https://www.selenium.dev/selenium/web/inputs.html")
 
- //returns true if element is enabled else returns false
+ //returns true if element is enabled else returns false 
  val attr = driver.findElement(By.name("button_input")).isEnabled()
-  {{< /tab >}}
+ {{< /tab >}}
 {{< /tabpane >}}
 
 ## 要素が選択されているかどうか
@@ -124,44 +92,28 @@ ele = driver.find_element(name: 'button_input').enabled?
 ブール値を返し、現在のブラウジングコンテキストで参照された要素が **選択されている** 場合は **True** 、そうでない場合は **false** を返します。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
- //navigates to url
- driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
- //returns true if element is checked else returns false
- boolean value = driver.findElement(By.name("checkbox_input")).isSelected();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Returns true if element is checked else returns false
-value = driver.find_element(By.NAME, "checkbox_input").is_selected()
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Navigate to Url
-driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-// Returns true if element ins checked else returns false
-bool value = driver.FindElement(By.Name("checkbox_input")).Selected;
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Navigate to url
-driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Returns true if element is checked else returns false
-ele = driver.find_element(name: "checkbox_input").selected?
-  {{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L32-L34" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L23" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L30-L32" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L22">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L30-L31">}}
 {{< /tab >}}
-  {{< tab header="Kotlin" >}}
- //navigates to url
- driver.get("https://www.selenium.dev/selenium/web/inputs.html")
+{{< tab header="Kotlin" >}}
+//navigates to url
+driver.get("https://www.selenium.dev/selenium/web/inputs.html")
 
- //returns true if element is checked else returns false
- val attr =  driver.findElement(By.name("checkbox_input")).isSelected()
-  {{< /tab >}}
+//returns true if element is checked else returns false
+val attr =  driver.findElement(By.name("checkbox_input")).isSelected()
+{{< /tab >}}
 {{< /tabpane >}}
 
 ## 要素のタグ名を取得
@@ -170,44 +122,28 @@ ele = driver.find_element(name: "checkbox_input").selected?
 [TagName](https://www.w3.org/TR/webdriver/#dfn-get-element-tag-name) を取得するために使います。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
- //navigates to url
- driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
- //returns TagName of the element
- String value = driver.findElement(By.name("email_input")).getTagName();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Returns TagName of the element
-attr = driver.find_element(By.NAME, "email_input").tag_name
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Navigate to Url
-driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-// Returns TagName of the element
-string attr = driver.FindElement(By.Name("email_input")).TagName;
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Navigate to url
-driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Returns TagName of the element
-attr = driver.find_element(name: "email_input").tag_name
-  {{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L37-L39" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L27" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L35-L37" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L27">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L37-L38">}}
 {{< /tab >}}
-  {{< tab header="Kotlin" >}}
- //navigates to url
- driver.get("https://www.selenium.dev/selenium/web/inputs.html")
+{{< tab header="Kotlin" >}}
+//navigates to url
+driver.get("https://www.selenium.dev/selenium/web/inputs.html")
 
- //returns TagName of the element
- val attr =  driver.findElement(By.name("email_input")).getTagName()
-  {{< /tab >}}
+//returns TagName of the element
+val attr =  driver.findElement(By.name("email_input")).getTagName()
+{{< /tab >}}
 {{< /tabpane >}}
 
 ## 要素矩形を取得
@@ -220,45 +156,24 @@ attr = driver.find_element(name: "email_input").tag_name
 * 要素の高さ
 * 要素の幅
 
-{{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-// Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
-// Returns height, width, x and y coordinates referenced element
-Rectangle res =  driver.findElement(By.name("range_input")).getRect();
-
-// Rectangle class provides getX,getY, getWidth, getHeight methods
-System.out.println(res.getX());
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Returns height, width, x and y coordinates referenced element
-res = driver.find_element(By.NAME, "range_input").rect
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Navigate to Url
-driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
 
-var res = driver.FindElement(By.Name("range_input"));
-// Return x and y coordinates referenced element
-System.Console.WriteLine(res.Location);
-// Returns height, width
-System.Console.WriteLine(res.Size);
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Navigate to url
-driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Returns height, width, x and y coordinates referenced element
-res = driver.find_element(name: "range_input").rect
+{{< tabpane langEqualsHeader=true >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L42-L44" >}}
+{{< /tab >}}
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L31" >}}
   {{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L40-L43" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L32">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L45">}}
 {{< /tab >}}
-  {{< tab header="Kotlin" >}}
+{{< tab header="Kotlin" >}}
 // Navigate to url
 driver.get("https://www.selenium.dev/selenium/web/inputs.html")
 
@@ -275,100 +190,57 @@ println(res.getX())
 現在のブラウジングコンテキスト内の要素の指定された計算したスタイル属性の値を取得します。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-
-// Navigate to Url
-driver.get("https://www.selenium.dev/selenium/web/colorPage.html");
-
-// Retrieves the computed style property 'color' of linktext
-String cssValue = driver.findElement(By.id("namedColor")).getCssValue("background-color");
-
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-
-    # Navigate to Url
-driver.get('https://www.selenium.dev/selenium/web/colorPage.html')
-
-    # Retrieves the computed style property 'color' of linktext
-cssValue = driver.find_element(By.ID, "namedColor").value_of_css_property('background-color')
-
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-
-// Navigate to Url
-driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/colorPage.html");
-
-// Retrieves the computed style property 'color' of linktext
-String cssValue = driver.FindElement(By.Id("namedColor")).GetCssValue("background-color");
-
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-
-    # Navigate to Url
-driver.get 'https://www.selenium.dev/selenium/web/colorPage.html'
-
-    # Retrieves the computed style property 'color' of linktext
-cssValue = driver.find_element(:id, 'namedColor').css_value('background-color')
-
-  {{< /tab >}}
-  {{< tab header="JavaScript" text=true >}}
-  {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L76-L78">}}
-  {{< /tab >}}
-  {{< tab header="Kotlin" >}}
-
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L49-L50" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L35-L37" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L49-L50" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L38">}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L76-L78">}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
 // Navigate to Url
 driver.get("https://www.selenium.dev/selenium/web/colorPage.html")
 
 // Retrieves the computed style property 'color' of linktext
 val cssValue = driver.findElement(By.id("namedColor")).getCssValue("background-color")
-
-  {{< /tab >}}
+{{< /tab >}}
 {{< /tabpane >}}
 
 ## 要素テキストを取得
 
 指定された要素のレンダリングされたテキストを取得します。
 
-
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-// Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/linked_image.html");
-
-// Retrieves the text of the element
-String text = driver.findElement(By.id("justanotherlink")).getText();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/linked_image.html")
-
-    # Retrieves the text of the element
-text = driver.find_element(By.ID, "justanotherlink").text
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Navigate to url
-driver.Url="https://www.selenium.dev/selenium/web/linked_image.html";
-
-// Retrieves the text of the element
-String text = driver.FindElement(By.Id("justanotherlink")).Text;
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Navigate to url
-driver.get 'https://www.selenium.dev/selenium/web/linked_image.html'
-
-    # Retrieves the text of the element
-text = driver.find_element(:id, 'justanotherlink').text
-  {{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L54-L56" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L41" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L53-L55" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L43">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L84-L86">}}
 {{< /tab >}}
-  {{< tab header="Kotlin" >}}
+{{< tab header="Kotlin" >}}
 // Navigate to URL
 driver.get("https://www.selenium.dev/selenium/web/linked_image.html")
 
 // retrieves the text of the element
 val text = driver.findElement(By.id("justanotherlink")).getText()
-  {{< /tab >}}
+{{< /tab >}}
 {{< /tabpane >}}
 
 ## Fetching Attributes or Properties
@@ -378,54 +250,28 @@ DOM attribute. It returns the data associated
 with the DOM attribute or property of the element. 
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-//Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
-//identify the email text box
-WebElement emailTxt = driver.findElement(By.name(("email_input")));
-
-//fetch the value property associated with the textbox
-String valueInfo = eleSelLink.getAttribute("value");
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-# Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-# Identify the email text box
-email_txt = driver.find_element(By.NAME, "email_input")
-
-# Fetch the value property associated with the textbox
-value_info = email_txt.get_attribute("value")
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
- //Navigate to the url
-driver.Url="https://www.selenium.dev/selenium/web/inputs.html";
-
-//identify the email text box
-IWebElement emailTxt = driver.FindElement(By.Name(("email_input")));
-
-//fetch the value property associated with the textbox
-String valueInfo = eleSelLink.GetAttribute("value");
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-# Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
-#identify the email text box
-email_element=driver.find_element(name: 'email_input')
-
-#fetch the value property associated with the textbox
-emailVal = email_element.attribute("value");
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L60-L64" >}}
+{{< /tab >}}
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L44-L46" >}}
   {{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L58-L62" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L48">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L55-L59">}}
 {{< /tab >}}
-  {{< tab header="Kotlin" >}}
+{{< tab header="Kotlin" >}}
+
 // Navigate to URL
 driver.get("https://www.selenium.dev/selenium/web/inputs.html")
 
 //fetch the value property associated with the textbox
 val attr = driver.findElement(By.name("email_input")).getAttribute("value")
-  {{< /tab >}}
+
+{{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/elements/information.pt-br.md b/website_and_docs/content/documentation/webdriver/elements/information.pt-br.md
index 2e522cddb783..14455d333078 100644
--- a/website_and_docs/content/documentation/webdriver/elements/information.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/elements/information.pt-br.md
@@ -25,44 +25,31 @@ executing a large JavaScript function directly.
 This function makes many approximations about an element's
 nature and relationship in the tree to return a value.
 
-{{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
-// Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html");
 
-// Get boolean value for is element display
-boolean isEmailVisible = driver.findElement(By.name("email_input")).isDisplayed();
+{{< tabpane langEqualsHeader=true >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L20-L24" >}}
 {{< /tab >}}
-{{< tab header="Python" >}}
-# Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-# Get boolean value for is element display
-is_email_visible = driver.find_element(By.NAME, "email_input").is_displayed()
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L12-L15" >}}
 {{< /tab >}}
-{{< tab header="CSharp" >}}
-//Navigate to the url
-driver.Url = "https://www.selenium.dev/selenium/web/inputs.html";
-
-//Get boolean value for is element display
-Boolean is_email_visible = driver.FindElement(By.Name("email_input")).Displayed;
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L18-L22" >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-# Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
-#fetch display status
-val = driver.find_element(name: 'email_input').displayed?
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L12">}}
 {{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L16-L17">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
+
 //navigates to url
  driver.get("https://www.selenium.dev/selenium/web/inputs.html")
 
  //returns true if element is displayed else returns false
  val flag = driver.findElement(By.name("email_input")).isDisplayed()
+
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -74,47 +61,28 @@ Returns a boolean value, **True** if the connected element is
 **enabled** in the current browsing context else returns **false**.
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-  //navigates to url
-  driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
-  //returns true if element is enabled else returns false
-  boolean value = driver.findElement(By.name("button_input")).isEnabled();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Returns true if element is enabled else returns false
-value = driver.find_element(By.NAME, 'button_input').is_enabled()
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Navigate to Url
-driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-// Store the WebElement
-IWebElement element = driver.FindElement(By.Name("button_input"));
-
-// Prints true if element is enabled else returns false
-System.Console.WriteLine(element.Enabled);
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Navigate to url
-driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Returns true if element is enabled else returns false
-ele = driver.find_element(name: 'button_input').enabled?
-  {{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L27-L29" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L19" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L25-L27" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L17">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L23-L24">}}
 {{< /tab >}}
-  {{< tab header="Kotlin" >}}
- //navigates to url
- driver.get("https://www.selenium.dev/selenium/web/inputs.html")
+{{< tab header="Kotlin" >}}
+//navigates to url
+driver.get("https://www.selenium.dev/selenium/web/inputs.html")
 
- //returns true if element is enabled else returns false
- val attr = driver.findElement(By.name("button_input")).isEnabled()
-  {{< /tab >}}
+//returns true if element is enabled else returns false
+val attr = driver.findElement(By.name("button_input")).isEnabled()
+{{< /tab >}}
 {{< /tabpane >}}
 
 
@@ -130,44 +98,30 @@ Retorna um valor booleano, **true** se o elemento referenciado for
 **false**.
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
- //navigates to url
- driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
- //returns true if element is checked else returns false
- boolean value = driver.findElement(By.name("checkbox_input")).isSelected();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Returns true if element is checked else returns false
-value = driver.find_element(By.NAME, "checkbox_input").is_selected()
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Navigate to Url
-driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-// Returns true if element ins checked else returns false
-bool value = driver.FindElement(By.Name("checkbox_input")).Selected;
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Navigate to url
-driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Returns true if element is checked else returns false
-ele = driver.find_element(name: "checkbox_input").selected?
-  {{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L32-L34" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L23" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L30-L32" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L22">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L30-L31">}}
 {{< /tab >}}
-  {{< tab header="Kotlin" >}}
+{{< tab header="Kotlin" >}}
+
  //navigates to url
  driver.get("https://www.selenium.dev/selenium/web/inputs.html")
 
  //returns true if element is checked else returns false
  val attr =  driver.findElement(By.name("checkbox_input")).isSelected()
-  {{< /tab >}}
+
+{{< /tab >}}
 {{< /tabpane >}}
 
 ## Coletar TagName do elemento
@@ -176,44 +130,28 @@ ele = driver.find_element(name: "checkbox_input").selected?
 do elemento referenciado que tem o foco no contexto de navegação atual.
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
- //navigates to url
- driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
- //returns TagName of the element
- String value = driver.findElement(By.name("email_input")).getTagName();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Returns TagName of the element
-attr = driver.find_element(By.NAME, "email_input").tag_name
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Navigate to Url
-driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-// Returns TagName of the element
-string attr = driver.FindElement(By.Name("email_input")).TagName;
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Navigate to url
-driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Returns TagName of the element
-attr = driver.find_element(name: "email_input").tag_name
-  {{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L37-L39" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L27" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L35-L37" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L27">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L37-L38">}}
 {{< /tab >}}
-  {{< tab header="Kotlin" >}}
- //navigates to url
- driver.get("https://www.selenium.dev/selenium/web/inputs.html")
+{{< tab header="Kotlin" >}}
+//navigates to url
+driver.get("https://www.selenium.dev/selenium/web/inputs.html")
 
- //returns TagName of the element
- val attr =  driver.findElement(By.name("email_input")).getTagName()
-  {{< /tab >}}
+//returns TagName of the element
+val attr =  driver.findElement(By.name("email_input")).getTagName()
+{{< /tab >}}
 {{< /tabpane >}}
 
 ## Coletar retângulo do elemento
@@ -227,45 +165,24 @@ O corpo de dados buscado contém os seguintes detalhes:
 * Altura do elemento
 * Largura do elemento
 
-{{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-// Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
-// Returns height, width, x and y coordinates referenced element
-Rectangle res =  driver.findElement(By.name("range_input")).getRect();
 
-// Rectangle class provides getX,getY, getWidth, getHeight methods
-System.out.println(res.getX());
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Returns height, width, x and y coordinates referenced element
-res = driver.find_element(By.NAME, "range_input").rect
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Navigate to Url
-driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-var res = driver.FindElement(By.Name("range_input"));
-// Return x and y coordinates referenced element
-System.Console.WriteLine(res.Location);
-// Returns height, width
-System.Console.WriteLine(res.Size);
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Navigate to url
-driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Returns height, width, x and y coordinates referenced element
-res = driver.find_element(name: "range_input").rect
-  {{< /tab >}}
+{{< tabpane langEqualsHeader=true >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L42-L44" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L31" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L40-L43" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L32">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L45">}}
 {{< /tab >}}
-  {{< tab header="Kotlin" >}}
+{{< tab header="Kotlin" >}}
 // Navigate to url
 driver.get("https://www.selenium.dev/selenium/web/inputs.html")
 
@@ -274,7 +191,7 @@ val res = driver.findElement(By.name("range_input")).rect
 
 // Rectangle class provides getX,getY, getWidth, getHeight methods
 println(res.getX())
-  {{< /tab >}}
+{{< /tab >}}
 {{< /tabpane >}}
 
 ## Coletar valor CSS do elemento
@@ -283,46 +200,22 @@ Recupera o valor da propriedade de estilo computado especificada
 de um elemento no contexto de navegação atual.
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-
-// Navigate to Url
-driver.get("https://www.selenium.dev/selenium/web/colorPage.html");
-
-// Retrieves the computed style property 'color' of linktext
-String cssValue = driver.findElement(By.id("namedColor")).getCssValue("background-color");
-
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-
-    # Navigate to Url
-driver.get('https://www.selenium.dev/selenium/web/colorPage.html')
-
-    # Retrieves the computed style property 'color' of linktext
-cssValue = driver.find_element(By.ID, "namedColor").value_of_css_property('background-color')
-
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-
-// Navigate to Url
-driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/colorPage.html");
-
-// Retrieves the computed style property 'color' of linktext
-String cssValue = driver.FindElement(By.Id("namedColor")).GetCssValue("background-color");
-
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-
-    # Navigate to Url
-driver.get 'https://www.selenium.dev/selenium/web/colorPage.html'
-
-    # Retrieves the computed style property 'color' of linktext
-cssValue = driver.find_element(:id, 'namedColor').css_value('background-color')
-
-  {{< /tab >}}
-  {{< tab header="JavaScript" text=true >}}
-  {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L76-L78">}}
-  {{< /tab >}}
-  {{< tab header="Kotlin" >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L49-L50" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L35-L37" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L49-L50" >}}
+{{< /tab >}} 
+{{< tab header="Ruby" text=true >}} 
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L38">}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L76-L78">}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
 
 // Navigate to Url
 driver.get("https://www.selenium.dev/selenium/web/colorPage.html")
@@ -330,7 +223,7 @@ driver.get("https://www.selenium.dev/selenium/web/colorPage.html")
 // Retrieves the computed style property 'color' of linktext
 val cssValue = driver.findElement(By.id("namedColor")).getCssValue("background-color")
 
-  {{< /tab >}}
+{{< /tab >}}
 {{< /tabpane >}}
 
 
@@ -338,46 +231,31 @@ val cssValue = driver.findElement(By.id("namedColor")).getCssValue("background-c
 
 Recupera o texto renderizado do elemento especificado.
 
-
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-// Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/linked_image.html");
-
-// Retrieves the text of the element
-String text = driver.findElement(By.id("justanotherlink")).getText();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/linked_image.html")
-
-    # Retrieves the text of the element
-text = driver.find_element(By.ID, "justanotherlink").text
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Navigate to url
-driver.Url="https://www.selenium.dev/selenium/web/linked_image.html";
-
-// Retrieves the text of the element
-String text = driver.FindElement(By.Id("justanotherlink")).Text;
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Navigate to url
-driver.get 'https://www.selenium.dev/selenium/web/linked_image.html'
-
-    # Retrieves the text of the element
-text = driver.find_element(:id, 'justanotherlink').text
-  {{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L54-L56" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L41" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L53-L55" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L43">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L84-L86">}}
 {{< /tab >}}
-  {{< tab header="Kotlin" >}}
+{{< tab header="Kotlin" >}}
+
 // Navigate to URL
 driver.get("https://www.selenium.dev/selenium/web/linked_image.html")
 
 // retrieves the text of the element
 val text = driver.findElement(By.id("justanotherlink")).getText()
-  {{< /tab >}}
+
+{{< /tab >}}
 {{< /tabpane >}}
 
 ## Fetching Attributes or Properties
@@ -387,54 +265,28 @@ DOM attribute. It returns the data associated
 with the DOM attribute or property of the element. 
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-//Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
-//identify the email text box
-WebElement emailTxt = driver.findElement(By.name(("email_input")));
-
-//fetch the value property associated with the textbox
-String valueInfo = eleSelLink.getAttribute("value");
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-# Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-# Identify the email text box
-email_txt = driver.find_element(By.NAME, "email_input")
-
-# Fetch the value property associated with the textbox
-value_info = email_txt.get_attribute("value")
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
- //Navigate to the url
-driver.Url="https://www.selenium.dev/selenium/web/inputs.html";
-
-//identify the email text box
-IWebElement emailTxt = driver.FindElement(By.Name(("email_input")));
-
-//fetch the value property associated with the textbox
-String valueInfo = eleSelLink.GetAttribute("value");
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-# Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
-#identify the email text box
-email_element=driver.find_element(name: 'email_input')
-
-#fetch the value property associated with the textbox
-emailVal = email_element.attribute("value");
-  {{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L60-L65" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L44-L46" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L58-L62" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L48">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L55-L59">}}
 {{< /tab >}}
-  {{< tab header="Kotlin" >}}
+{{< tab header="Kotlin" >}}
+
 // Navigate to URL
 driver.get("https://www.selenium.dev/selenium/web/inputs.html")
 
 //fetch the value property associated with the textbox
 val attr = driver.findElement(By.name("email_input")).getAttribute("value")
-  {{< /tab >}}
+
+{{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/elements/information.zh-cn.md b/website_and_docs/content/documentation/webdriver/elements/information.zh-cn.md
index 9b96969300df..f45d15f1a5b9 100644
--- a/website_and_docs/content/documentation/webdriver/elements/information.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/elements/information.zh-cn.md
@@ -18,95 +18,64 @@ description: >
 因此，Selenium不能期望驱动程序直接实现这种功能，现在依赖于直接执行大量JavaScript函数。
 这个函数对一个元素的性质和在树中的关系做了许多近似的判断，以返回一个值。
 
-{{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
-// Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html");
 
-// Get boolean value for is element display
-boolean isEmailVisible = driver.findElement(By.name("email_input")).isDisplayed();
+{{< tabpane langEqualsHeader=true >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L20-L24" >}}
 {{< /tab >}}
-{{< tab header="Python" >}}
-# Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-# Get boolean value for is element display
-is_email_visible = driver.find_element(By.NAME, "email_input").is_displayed()
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L12-L15" >}}
 {{< /tab >}}
-{{< tab header="CSharp" >}}
-//Navigate to the url
-driver.Url = "https://www.selenium.dev/selenium/web/inputs.html";
-
-//Get boolean value for is element display
-Boolean is_email_visible = driver.FindElement(By.Name("email_input")).Displayed;
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L18-L22" >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-# Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
-#fetch display status
-val = driver.find_element(name: 'email_input').displayed?
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L12">}}
 {{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L16-L17">}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
+
 //navigates to url
- driver.get("https://www.selenium.dev/selenium/web/inputs.html")
+driver.get("https://www.selenium.dev/selenium/web/inputs.html")
+
+//returns true if element is displayed else returns false
+val flag = driver.findElement(By.name("email_input")).isDisplayed()
 
- //returns true if element is displayed else returns false
- val flag = driver.findElement(By.name("email_input")).isDisplayed()
 {{< /tab >}}
 {{< /tabpane >}}
 
-
 ## 是否启用
 
 此方法用于检查所连接的元素在网页上是启用还是禁用状态。
 返回一个布尔值，如果在当前浏览上下文中是 **启用** 状态，则返回 **true**，否则返回 **false**。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-  //navigates to url
-  driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
-  //returns true if element is enabled else returns false
-  boolean value = driver.findElement(By.name("button_input")).isEnabled();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Returns true if element is enabled else returns false
-value = driver.find_element(By.NAME, 'button_input').is_enabled()
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Navigate to Url
-driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-// Store the WebElement
-IWebElement element = driver.FindElement(By.Name("button_input"));
-
-// Prints true if element is enabled else returns false
-System.Console.WriteLine(element.Enabled);
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Navigate to url
-driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Returns true if element is enabled else returns false
-ele = driver.find_element(name: 'button_input').enabled?
-  {{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L27-L29" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L19" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L25-L27" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L17">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L23-L24">}}
 {{< /tab >}}
-  {{< tab header="Kotlin" >}}
- //navigates to url
- driver.get("https://www.selenium.dev/selenium/web/inputs.html")
+{{< tab header="Kotlin" >}}
+
+//navigates to url
+driver.get("https://www.selenium.dev/selenium/web/inputs.html")
 
- //returns true if element is enabled else returns false
- val attr = driver.findElement(By.name("button_input")).isEnabled()
-  {{< /tab >}}
+//returns true if element is enabled else returns false
+val attr = driver.findElement(By.name("button_input")).isEnabled()
+
+{{< /tab >}}
 {{< /tabpane >}}
 
 ## 是否被选定
@@ -116,44 +85,30 @@ ele = driver.find_element(name: 'button_input').enabled?
 该方法返回一个布尔值，如果在当前浏览上下文中 **选择了** 引用的元素，则返回 **True**，否则返回 **False**。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
- //navigates to url
- driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
- //returns true if element is checked else returns false
- boolean value = driver.findElement(By.name("checkbox_input")).isSelected();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Returns true if element is checked else returns false
-value = driver.find_element(By.NAME, "checkbox_input").is_selected()
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Navigate to Url
-driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-// Returns true if element ins checked else returns false
-bool value = driver.FindElement(By.Name("checkbox_input")).Selected;
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Navigate to url
-driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Returns true if element is checked else returns false
-ele = driver.find_element(name: "checkbox_input").selected?
-  {{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L32-L34" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+  {{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L23" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L30-L32" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L22">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L30-L31">}}
 {{< /tab >}}
-  {{< tab header="Kotlin" >}}
- //navigates to url
- driver.get("https://www.selenium.dev/selenium/web/inputs.html")
+{{< tab header="Kotlin" >}}
+
+//navigates to url
+driver.get("https://www.selenium.dev/selenium/web/inputs.html")
 
- //returns true if element is checked else returns false
- val attr =  driver.findElement(By.name("checkbox_input")).isSelected()
-  {{< /tab >}}
+//returns true if element is checked else returns false
+val attr =  driver.findElement(By.name("checkbox_input")).isSelected()
+
+{{< /tab >}}
 {{< /tabpane >}}
 
 ## 获取元素标签名
@@ -161,44 +116,30 @@ ele = driver.find_element(name: "checkbox_input").selected?
 此方法用于获取在当前浏览上下文中具有焦点的被引用元素的[TagName](https://www.w3.org/TR/webdriver/#dfn-get-element-tag-name)。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
- //navigates to url
- driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
- //returns TagName of the element
- String value = driver.findElement(By.name("email_input")).getTagName();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Returns TagName of the element
-attr = driver.find_element(By.NAME, "email_input").tag_name
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Navigate to Url
-driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-// Returns TagName of the element
-string attr = driver.FindElement(By.Name("email_input")).TagName;
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Navigate to url
-driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Returns TagName of the element
-attr = driver.find_element(name: "email_input").tag_name
-  {{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L37-L39" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L27" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L35-L37" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L27">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L37-L38">}}
 {{< /tab >}}
-  {{< tab header="Kotlin" >}}
- //navigates to url
- driver.get("https://www.selenium.dev/selenium/web/inputs.html")
+{{< tab header="Kotlin" >}}
 
- //returns TagName of the element
- val attr =  driver.findElement(By.name("email_input")).getTagName()
-  {{< /tab >}}
+//navigates to url
+driver.get("https://www.selenium.dev/selenium/web/inputs.html")
+
+//returns TagName of the element 
+val attr =  driver.findElement(By.name("email_input")).getTagName()
+
+{{< /tab >}}
 {{< /tabpane >}}
 
 ## 位置和大小
@@ -211,45 +152,25 @@ attr = driver.find_element(name: "email_input").tag_name
 * 元素的高度
 * 元素的宽度
 
-{{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-// Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html");
 
-// Returns height, width, x and y coordinates referenced element
-Rectangle res =  driver.findElement(By.name("range_input")).getRect();
-
-// Rectangle class provides getX,getY, getWidth, getHeight methods
-System.out.println(res.getX());
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Returns height, width, x and y coordinates referenced element
-res = driver.find_element(By.NAME, "range_input").rect
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Navigate to Url
-driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-var res = driver.FindElement(By.Name("range_input"));
-// Return x and y coordinates referenced element
-System.Console.WriteLine(res.Location);
-// Returns height, width
-System.Console.WriteLine(res.Size);
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Navigate to url
-driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Returns height, width, x and y coordinates referenced element
-res = driver.find_element(name: "range_input").rect
-  {{< /tab >}}
+{{< tabpane langEqualsHeader=true >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L42-L44" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L31" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L40-L43" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L32">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L45">}}
 {{< /tab >}}
-  {{< tab header="Kotlin" >}}
+{{< tab header="Kotlin" >}}
+
 // Navigate to url
 driver.get("https://www.selenium.dev/selenium/web/inputs.html")
 
@@ -258,55 +179,31 @@ val res = driver.findElement(By.name("range_input")).rect
 
 // Rectangle class provides getX,getY, getWidth, getHeight methods
 println(res.getX())
-  {{< /tab >}}
+
+{{< /tab >}}
 {{< /tabpane >}}
 
 ## 获取元素CSS值
 
 获取当前浏览上下文中元素的特定计算样式属性的值。
 
-
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-
-// Navigate to Url
-driver.get("https://www.selenium.dev/selenium/web/colorPage.html");
-
-// Retrieves the computed style property 'color' of linktext
-String cssValue = driver.findElement(By.id("namedColor")).getCssValue("background-color");
-
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-
-    # Navigate to Url
-driver.get('https://www.selenium.dev/selenium/web/colorPage.html')
-
-    # Retrieves the computed style property 'color' of linktext
-cssValue = driver.find_element(By.ID, "namedColor").value_of_css_property('background-color')
-
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-
-// Navigate to Url
-driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/colorPage.html");
-
-// Retrieves the computed style property 'color' of linktext
-String cssValue = driver.FindElement(By.Id("namedColor")).GetCssValue("background-color");
-
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-
-    # Navigate to Url
-driver.get 'https://www.selenium.dev/selenium/web/colorPage.html'
-
-    # Retrieves the computed style property 'color' of linktext
-cssValue = driver.find_element(:id, 'namedColor').css_value('background-color')
-
-  {{< /tab >}}
-  {{< tab header="JavaScript" text=true >}}
-  {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L76-L78">}}
-  {{< /tab >}}
-  {{< tab header="Kotlin" >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L49-L50" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L35-L37" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L49-L50" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L38">}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L76-L78">}}
+{{< /tab >}} 
+{{< tab header="Kotlin" >}}
 
 // Navigate to Url
 driver.get("https://www.selenium.dev/selenium/web/colorPage.html")
@@ -314,54 +211,39 @@ driver.get("https://www.selenium.dev/selenium/web/colorPage.html")
 // Retrieves the computed style property 'color' of linktext
 val cssValue = driver.findElement(By.id("namedColor")).getCssValue("background-color")
 
-  {{< /tab >}}
+{{< /tab >}}
 {{< /tabpane >}}
 
-
 ## 文本内容
 
 获取特定元素渲染后的文本内容。
 
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-// Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/linked_image.html");
-
-// Retrieves the text of the element
-String text = driver.findElement(By.id("justanotherlink")).getText();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Navigate to url
-driver.get("https://www.selenium.dev/selenium/web/linked_image.html")
-
-    # Retrieves the text of the element
-text = driver.find_element(By.ID, "justanotherlink").text
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Navigate to url
-driver.Url="https://www.selenium.dev/selenium/web/linked_image.html";
-
-// Retrieves the text of the element
-String text = driver.FindElement(By.Id("justanotherlink")).Text;
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Navigate to url
-driver.get 'https://www.selenium.dev/selenium/web/linked_image.html'
-
-    # Retrieves the text of the element
-text = driver.find_element(:id, 'justanotherlink').text
-  {{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L54-L56" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L41" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L53-L55" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L43">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L84-L86">}}
 {{< /tab >}}
-  {{< tab header="Kotlin" >}}
+{{< tab header="Kotlin" >}}
+
 // Navigate to URL
 driver.get("https://www.selenium.dev/selenium/web/linked_image.html")
 
 // retrieves the text of the element
 val text = driver.findElement(By.id("justanotherlink")).getText()
-  {{< /tab >}}
+
+{{< /tab >}}
 {{< /tabpane >}}
 
 ## 获取特性或属性
@@ -370,54 +252,28 @@ val text = driver.findElement(By.id("justanotherlink")).getText()
 它返回与该元素的 DOM 特性或属性关联的数据。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-//Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
-//identify the email text box
-WebElement emailTxt = driver.findElement(By.name(("email_input")));
-
-//fetch the value property associated with the textbox
-String valueInfo = eleSelLink.getAttribute("value");
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-# Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-# Identify the email text box
-email_txt = driver.find_element(By.NAME, "email_input")
-
-# Fetch the value property associated with the textbox
-value_info = email_txt.get_attribute("value")
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
- //Navigate to the url
-driver.Url="https://www.selenium.dev/selenium/web/inputs.html";
-
-//identify the email text box
-IWebElement emailTxt = driver.FindElement(By.Name(("email_input")));
-
-//fetch the value property associated with the textbox
-String valueInfo = eleSelLink.GetAttribute("value");
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-# Navigate to the url
-driver.get("https://www.selenium.dev/selenium/web/inputs.html");
-
-#identify the email text box
-email_element=driver.find_element(name: 'email_input')
-
-#fetch the value property associated with the textbox
-emailVal = email_element.attribute("value");
-  {{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InformationTest.java#L60-L64" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_information.py#L44-L46" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InformationTest.cs#L58-L62" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/information_spec.rb#L48">}}
+{{< /tab >}}
 {{< tab header="JavaScript" text=true >}}
 {{< gh-codeblock path="/examples/javascript/test/elements/information.spec.js#L55-L59">}}
 {{< /tab >}}
-  {{< tab header="Kotlin" >}}
+{{< tab header="Kotlin" >}}
+
 // Navigate to URL
 driver.get("https://www.selenium.dev/selenium/web/inputs.html")
 
 //fetch the value property associated with the textbox
 val attr = driver.findElement(By.name("email_input")).getAttribute("value")
-  {{< /tab >}}
+
+{{< /tab >}}
 {{< /tabpane >}}
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 9ce4156e8481..c29f995e438b 100644
--- a/website_and_docs/content/documentation/webdriver/elements/interactions.en.md
+++ b/website_and_docs/content/documentation/webdriver/elements/interactions.en.md
@@ -44,43 +44,22 @@ Selenium will return an [element click intercepted](https://w3c.github.io/webdri
 
 
 {{< tabpane langEqualsHeader=true >}}
+
 {{< tab header="Java" text=true >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L18-L22" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L18-L22" >}}
 {{< /tab >}}
-  {{< tab header="Python" >}}
-
-    # Navigate to url
-	driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Click on the element 
-	driver.find_element(By.NAME, "color_input").click()
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_interaction.py#L12-L17" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-
-  // Navigate to Url
-  driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-  // Click the element
-  driver.FindElement(By.Name("color_input")).Click();
   
+  {{< tab header="CSharp" text=true >}}
+	{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InteractionTest.cs#L17-L21" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-
-    # Navigate to URL
-  driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Click the element
-  driver.find_element(name: 'color_input').click
-
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-
-    // Navigate to Url
-    await driver.get('https://www.selenium.dev/selenium/web/inputs.html');
-
-    // Click the element
-    await driver.findElement(By.name('color_input')).click();
-  
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/interaction_spec.rb#L11" >}}
+{{< /tab >}}
+  {{< tab header="JavaScript" text=true >}}
+  {{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L20" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 
@@ -107,59 +86,23 @@ possible keystrokes that WebDriver Supports.
 
 {{< tabpane langEqualsHeader=true >}}
 {{< tab header="Java"  text=true >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L27-L32" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L27-L32" >}}
 {{< /tab >}}
 
-  {{< tab header="Python" >}}
-
-
-    # Navigate to url
-	driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Clear field to empty it from any previous data
-	driver.find_element(By.NAME, "email_input").clear()
-
-	# Enter Text
-	driver.find_element(By.NAME, "email_input").send_keys("admin@localhost.dev" )
-
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_interaction.py#L22-L27" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-
-  // Navigate to Url
-  driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-  // Clear field to empty it from any previous data
-  driver.FindElement(By.Name("email_input")).Clear();
-  
-  //Enter Text
-  driver.FindElement(By.Name("email_input")).SendKeys("admin@localhost.dev");
   
-  
-}
+   {{< tab header="CSharp" text=true >}}
+	{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InteractionTest.cs#L27-L33" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-
-    # Navigate to URL
-	driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
 
-    # Clear field to empty it from any previous data
-	driver.find_element(name: 'email_input').clear
-	
-	# Enter Text
-	driver.find_element(name: 'email_input').send_keys 'admin@localhost.dev'
 
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-
-    // Navigate to Url
-    await driver.get('https://www.selenium.dev/selenium/web/inputs.html');
-
-	//Clear field to empty it from any previous data
-	await driver.findElement(By.name('email_input')).clear();
-
-    // Enter text 
-    await driver.findElement(By.name('email_input')).sendKeys('admin@localhost.dev');
-  
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/interaction_spec.rb#L16" >}}
+{{< /tab >}}
+  {{< tab header="JavaScript" text=true >}}
+  {{< gh-codeblock path="/examples/javascript/test/elements/interactions.spec.js#L21" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
   
@@ -186,49 +129,23 @@ with a`content-editable` attribute. If these conditions are not met,
 
 {{< tabpane langEqualsHeader=true >}}
 {{< tab header="Java" text=true >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L38-L40" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L38-L40" >}}
 {{< /tab >}}
-  {{< tab header="Python" >}}
-
-
-    # Navigate to url
-	driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Clear field to empty it from any previous data
-	driver.find_element(By.NAME, "email_input").clear()
-
-	
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_interaction.py#L34" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-
-  // Navigate to Url
-  driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-  // Clear field to empty it from any previous data
-  driver.FindElement(By.Name("email_input")).Clear();
   
  
-  
-}
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-
-    # Navigate to URL
-	driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Clear field to empty it from any previous data
-	driver.find_element(name: 'email_input').clear
-
+   {{< tab header="CSharp" text=true >}}
+	{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InteractionTest.cs#L40-L43" >}}
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-
-    // Navigate to Url
-    await driver.get('https://www.selenium.dev/selenium/web/inputs.html');
 
-	//Clear field to empty it from any previous data
-	await driver.findElement(By.name('email_input')).clear();
 
-   
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/interaction_spec.rb#L15" >}}
+{{< /tab >}}
+  {{< tab header="JavaScript" text=true >}}
+  {{< gh-codeblock path="/examples/javascript/test/elements/interactions.spec.js#L20" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
   
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 5543eeb359cc..de47ff080336 100644
--- a/website_and_docs/content/documentation/webdriver/elements/interactions.ja.md
+++ b/website_and_docs/content/documentation/webdriver/elements/interactions.ja.md
@@ -42,42 +42,22 @@ Selenium will return an [element click intercepted](https://w3c.github.io/webdri
 
 {{< tabpane langEqualsHeader=true >}}
 {{< tab header="Java"  text=true >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L18-L22" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L18-L22" >}}
 {{< /tab >}}
-  {{< tab header="Python" >}}
-
-    # Navigate to url
-	driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Click on the element 
-	driver.find_element(By.NAME, "color_input").click()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_interaction.py#L12-L17" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-
-  // Navigate to Url
-  driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-  // Click the element
-  driver.FindElement(By.Name("color_input")).Click();
-  
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-
-    # Navigate to URL
-  driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Click the element
-  driver.find_element(name: 'color_input').click
-
+ 
+ {{< tab header="CSharp" text=true >}}
+	{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InteractionTest.cs#L17-L21" >}}
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
 
-    // Navigate to Url
-    await driver.get('https://www.selenium.dev/selenium/web/inputs.html');
 
-    // Click the element
-    await driver.findElement(By.name('color_input')).click();
-  
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/interaction_spec.rb#L11" >}}
+{{< /tab >}}
+  {{< tab header="JavaScript" text=true >}}
+  {{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L20" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 
@@ -103,59 +83,22 @@ possible keystrokes that WebDriver Supports.
 
 {{< tabpane langEqualsHeader=true >}}
 {{< tab header="Java"  text=true >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L27-L32" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L27-L32" >}}
 {{< /tab >}}
 
-  {{< tab header="Python" >}}
-
-
-    # Navigate to url
-	driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Clear field to empty it from any previous data
-	driver.find_element(By.NAME, "email_input").clear()
-
-	# Enter Text
-	driver.find_element(By.NAME, "email_input").send_keys("admin@localhost.dev" )
-
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_interaction.py#L22-L27" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-
-  // Navigate to Url
-  driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-  // Clear field to empty it from any previous data
-  driver.FindElement(By.Name("email_input")).Clear();
-  
-  //Enter Text
-  driver.FindElement(By.Name("email_input")).SendKeys("admin@localhost.dev");
-  
   
-}
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-
-    # Navigate to URL
-	driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Clear field to empty it from any previous data
-	driver.find_element(name: 'email_input').clear
-	
-	# Enter Text
-	driver.find_element(name: 'email_input').send_keys 'admin@localhost.dev'
-
+   {{< tab header="CSharp" text=true >}}
+	{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InteractionTest.cs#L27-L33" >}}
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-
-    // Navigate to Url
-    await driver.get('https://www.selenium.dev/selenium/web/inputs.html');
 
-	//Clear field to empty it from any previous data
-	await driver.findElement(By.name('email_input')).clear();
-
-    // Enter text 
-    await driver.findElement(By.name('email_input')).sendKeys('admin@localhost.dev');
-  
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/interaction_spec.rb#L16" >}}
+{{< /tab >}}
+  {{< tab header="JavaScript" text=true >}}
+  {{< gh-codeblock path="/examples/javascript/test/elements/interactions.spec.js#L21" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
   
@@ -182,49 +125,22 @@ with a`content-editable` attribute. If these conditions are not met,
 
 {{< tabpane langEqualsHeader=true >}}
 {{< tab header="Java" text=true >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L38-L40" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L38-L40" >}}
 {{< /tab >}}
-  {{< tab header="Python" >}}
-
-
-    # Navigate to url
-	driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Clear field to empty it from any previous data
-	driver.find_element(By.NAME, "email_input").clear()
-
-	
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_interaction.py#L34" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-
-  // Navigate to Url
-  driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-  // Clear field to empty it from any previous data
-  driver.FindElement(By.Name("email_input")).Clear();
-  
  
-  
-}
+   {{< tab header="CSharp" text=true >}}
+	{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InteractionTest.cs#L40-L43" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-
-    # Navigate to URL
-	driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
 
-    # Clear field to empty it from any previous data
-	driver.find_element(name: 'email_input').clear
 
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-
-    // Navigate to Url
-    await driver.get('https://www.selenium.dev/selenium/web/inputs.html');
-
-	//Clear field to empty it from any previous data
-	await driver.findElement(By.name('email_input')).clear();
-
-   
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/interaction_spec.rb#L15" >}}
+{{< /tab >}}
+  {{< tab header="JavaScript" text=true >}}
+  {{< gh-codeblock path="/examples/javascript/test/elements/interactions.spec.js#L20" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
   
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 595927fc9d9b..e0a3707ac70b 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
@@ -43,42 +43,21 @@ Selenium will return an [element click intercepted](https://w3c.github.io/webdri
 
 {{< tabpane langEqualsHeader=true >}}
 {{< tab header="Java"  text=true >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L18-L22" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L18-L22" >}}
 {{< /tab >}}
-  {{< tab header="Python" >}}
-
-    # Navigate to url
-	driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Click on the element 
-	driver.find_element(By.NAME, "color_input").click()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_interaction.py#L12-L17" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
 
-  // Navigate to Url
-  driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-  // Click the element
-  driver.FindElement(By.Name("color_input")).Click();
-  
+  {{< tab header="CSharp" text=true >}}
+	{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InteractionTest.cs#L17-L21" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
 
-    # Navigate to URL
-  driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Click the element
-  driver.find_element(name: 'color_input').click
-
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-
-    // Navigate to Url
-    await driver.get('https://www.selenium.dev/selenium/web/inputs.html');
-
-    // Click the element
-    await driver.findElement(By.name('color_input')).click();
-  
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/interaction_spec.rb#L11" >}}
+{{< /tab >}}
+  {{< tab header="JavaScript" text=true >}}
+  {{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L20" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 
@@ -105,59 +84,22 @@ possible keystrokes that WebDriver Supports.
 
 {{< tabpane langEqualsHeader=true >}}
 {{< tab header="Java"  text=true >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L27-L32" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L27-L32" >}}
 {{< /tab >}}
 
-  {{< tab header="Python" >}}
-
-
-    # Navigate to url
-	driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Clear field to empty it from any previous data
-	driver.find_element(By.NAME, "email_input").clear()
-
-	# Enter Text
-	driver.find_element(By.NAME, "email_input").send_keys("admin@localhost.dev" )
-
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_interaction.py#L22-L27" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-
-  // Navigate to Url
-  driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-  // Clear field to empty it from any previous data
-  driver.FindElement(By.Name("email_input")).Clear();
   
-  //Enter Text
-  driver.FindElement(By.Name("email_input")).SendKeys("admin@localhost.dev");
-  
-  
-}
+  {{< tab header="CSharp" text=true >}}
+	{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InteractionTest.cs#L27-L33" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-
-    # Navigate to URL
-	driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
 
-    # Clear field to empty it from any previous data
-	driver.find_element(name: 'email_input').clear
-	
-	# Enter Text
-	driver.find_element(name: 'email_input').send_keys 'admin@localhost.dev'
-
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-
-    // Navigate to Url
-    await driver.get('https://www.selenium.dev/selenium/web/inputs.html');
-
-	//Clear field to empty it from any previous data
-	await driver.findElement(By.name('email_input')).clear();
-
-    // Enter text 
-    await driver.findElement(By.name('email_input')).sendKeys('admin@localhost.dev');
-  
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/interaction_spec.rb#L16" >}}
+{{< /tab >}}
+  {{< tab header="JavaScript" text=true >}}
+  {{< gh-codeblock path="/examples/javascript/test/elements/interactions.spec.js#L21" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
   
@@ -184,49 +126,21 @@ with a`content-editable` attribute. If these conditions are not met,
 
 {{< tabpane langEqualsHeader=true >}}
 {{< tab header="Java" text=true >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L38-L40" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L38-L40" >}}
 {{< /tab >}}
-  {{< tab header="Python" >}}
-
-
-    # Navigate to url
-	driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Clear field to empty it from any previous data
-	driver.find_element(By.NAME, "email_input").clear()
-
-	
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_interaction.py#L34" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-
-  // Navigate to Url
-  driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-  // Clear field to empty it from any previous data
-  driver.FindElement(By.Name("email_input")).Clear();
-  
- 
   
-}
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-
-    # Navigate to URL
-	driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Clear field to empty it from any previous data
-	driver.find_element(name: 'email_input').clear
-
+   {{< tab header="CSharp" text=true >}}
+	{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InteractionTest.cs#L40-L43" >}}
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-
-    // Navigate to Url
-    await driver.get('https://www.selenium.dev/selenium/web/inputs.html');
 
-	//Clear field to empty it from any previous data
-	await driver.findElement(By.name('email_input')).clear();
-
-   
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/interaction_spec.rb#L15" >}}
+{{< /tab >}}
+  {{< tab header="JavaScript" text=true >}}
+  {{< gh-codeblock path="/examples/javascript/test/elements/interactions.spec.js#L20" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
   
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 d7e0e542de13..e2d073cceaf9 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
@@ -45,42 +45,21 @@ Selenium将返回一个 [元素点击中断](https://w3c.github.io/webdriver/#df
 
 {{< tabpane langEqualsHeader=true >}}
 {{< tab header="Java" text=true >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L18-L22" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L18-L22" >}}
 {{< /tab >}}
-  {{< tab header="Python" >}}
-
-    # Navigate to url
-	driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Click on the element 
-	driver.find_element(By.NAME, "color_input").click()
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_interaction.py#L12-L17" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-
-  // Navigate to Url
-  driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-  // Click the element
-  driver.FindElement(By.Name("color_input")).Click();
-  
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-
-    # Navigate to URL
-  driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Click the element
-  driver.find_element(name: 'color_input').click
-
+ 
+  {{< tab header="CSharp" text=true >}}
+	{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InteractionTest.cs#L17-L21" >}}
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
 
-    // Navigate to Url
-    await driver.get('https://www.selenium.dev/selenium/web/inputs.html');
-
-    // Click the element
-    await driver.findElement(By.name('color_input')).click();
-  
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/interaction_spec.rb#L11" >}}
+{{< /tab >}}
+  {{< tab header="JavaScript" text=true >}}
+  {{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L20" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 
@@ -107,59 +86,23 @@ Selenium将返回一个 [元素点击中断](https://w3c.github.io/webdriver/#df
 
 {{< tabpane langEqualsHeader=true >}}
 {{< tab header="Java" text=true >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L27-L32" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L27-L32" >}}
 {{< /tab >}}
 
-  {{< tab header="Python" >}}
-
-
-    # Navigate to url
-	driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Clear field to empty it from any previous data
-	driver.find_element(By.NAME, "email_input").clear()
-
-	# Enter Text
-	driver.find_element(By.NAME, "email_input").send_keys("admin@localhost.dev" )
-
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-
-  // Navigate to Url
-  driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-  // Clear field to empty it from any previous data
-  driver.FindElement(By.Name("email_input")).Clear();
-  
-  //Enter Text
-  driver.FindElement(By.Name("email_input")).SendKeys("admin@localhost.dev");
-  
-  
-}
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_interaction.py#L22-L27" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-
-    # Navigate to URL
-	driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Clear field to empty it from any previous data
-	driver.find_element(name: 'email_input').clear
-	
-	# Enter Text
-	driver.find_element(name: 'email_input').send_keys 'admin@localhost.dev'
-
+   
+   {{< tab header="CSharp" text=true >}}
+	{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InteractionTest.cs#L27-L33" >}}
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
 
-    // Navigate to Url
-    await driver.get('https://www.selenium.dev/selenium/web/inputs.html');
 
-	//Clear field to empty it from any previous data
-	await driver.findElement(By.name('email_input')).clear();
-
-    // Enter text 
-    await driver.findElement(By.name('email_input')).sendKeys('admin@localhost.dev');
-  
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/interaction_spec.rb#L16" >}}
+{{< /tab >}}
+  {{< tab header="JavaScript" text=true >}}
+  {{< gh-codeblock path="/examples/javascript/test/elements/interactions.spec.js#L21" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
   
@@ -187,49 +130,21 @@ Selenium将返回一个 [元素点击中断](https://w3c.github.io/webdriver/#df
 
 {{< tabpane langEqualsHeader=true >}}
 {{< tab header="Java" text=true >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L38-L40" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/InteractionTest.java#L38-L40" >}}
 {{< /tab >}}
-  {{< tab header="Python" >}}
-
-
-    # Navigate to url
-	driver.get("https://www.selenium.dev/selenium/web/inputs.html")
-
-    # Clear field to empty it from any previous data
-	driver.find_element(By.NAME, "email_input").clear()
-
-	
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_interaction.py#L34" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-
-  // Navigate to Url
-  driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/inputs.html");
-
-  // Clear field to empty it from any previous data
-  driver.FindElement(By.Name("email_input")).Clear();
-  
- 
   
-}
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-
-    # Navigate to URL
-	driver.get 'https://www.selenium.dev/selenium/web/inputs.html'
-
-    # Clear field to empty it from any previous data
-	driver.find_element(name: 'email_input').clear
-
+     {{< tab header="CSharp" text=true >}}
+	{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/InteractionTest.cs#L40-L43" >}}
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-
-    // Navigate to Url
-    await driver.get('https://www.selenium.dev/selenium/web/inputs.html');
 
-	//Clear field to empty it from any previous data
-	await driver.findElement(By.name('email_input')).clear();
-
-   
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/interaction_spec.rb#L15" >}}
+{{< /tab >}}
+  {{< tab header="JavaScript" text=true >}}
+  {{< gh-codeblock path="/examples/javascript/test/elements/interactions.spec.js#L20" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
   
diff --git a/website_and_docs/content/documentation/webdriver/elements/locators.en.md b/website_and_docs/content/documentation/webdriver/elements/locators.en.md
index 78bf8cc1f179..9acd204154bf 100644
--- a/website_and_docs/content/documentation/webdriver/elements/locators.en.md
+++ b/website_and_docs/content/documentation/webdriver/elements/locators.en.md
@@ -49,7 +49,7 @@ page. To understand and create locator we will use the following HTML snippet.
 </style>
 <h2>Contact Selenium</h2>
 
-<form action="/action_page.php">
+<form>
   <input type="radio" name="gender" value="m" />Male &nbsp;
   <input type="radio" name="gender" value="f" />Female <br>
   <br>
@@ -80,17 +80,15 @@ available in Selenium.
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.className("information"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.CLASS_NAME, "information")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L7-L9" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.ClassName("information"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(class: 'information')
+  {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L7" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
@@ -115,18 +113,16 @@ textbox, using css.
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.cssSelector("#fname"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.CSS_SELECTOR, "#fname")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L17-L19" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.CssSelector("#fname"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(css: '#fname')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L11" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.css('#fname'));
@@ -148,18 +144,16 @@ We will identify the Last Name field using it.
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.id("lname"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.ID, "lname")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L27-L29" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.Id("lname"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(id: 'lname')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L15" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.id('lname'));
@@ -182,18 +176,16 @@ We will identify the Newsletter checkbox using it.
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.name("newsletter"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.NAME, "newsletter")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L37-L39" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.Name("newsletter"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(name: 'newsletter')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L19" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.name('newsletter'));
@@ -214,18 +206,16 @@ In the HTML snippet shared, we have a link available, let's see how will we loca
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.linkText("Selenium Official Page"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.LINK_TEXT, "Selenium Official Page")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L47-L49" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.LinkText("Selenium Official Page"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(link_text: 'Selenium Official Page')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L23" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.linkText('Selenium Official Page'));
@@ -247,18 +237,16 @@ In the HTML snippet shared, we have a link available, lets see how will we locat
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.partialLinkText("Official Page"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.PARTIAL_LINK_TEXT, "Official Page")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L57-L59" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.PartialLinkText("Official Page"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(partial_link_text: 'Official Page')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L27" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.partialLinkText('Official Page'));
@@ -278,18 +266,16 @@ From the above HTML snippet shared, lets identify the link, using its html tag "
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.tagName("a"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.TAG_NAME, "a")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L67-L69" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.TagName("a"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(tag_name: 'a')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L31" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.tagName('a'));
@@ -315,28 +301,117 @@ first name text box. Let us create locator for female radio button using xpath.
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.xpath("//input[@value='f']"));
   {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L77-L79" >}}
+{{< /tab >}}
+  {{< tab header="CSharp" >}}
+    var driver = new ChromeDriver();
+	  driver.FindElement(By.Xpath("//input[@value='f']"));
+  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L35" >}}
+{{< /tab >}}
+  {{< tab header="JavaScript" >}}
+    let driver = await new Builder().forBrowser('chrome').build();
+	const loc = await driver.findElement(By.xpath('//input[@value='f']'));
+  {{< /tab >}}
+  {{< tab header="Kotlin" >}}
+    import org.openqa.selenium.By
+    val driver = ChromeDriver()
+	  val loc: WebElement = driver.findElement(By.xpath('//input[@value='f']'))
+  {{< /tab >}}
+{{< /tabpane >}} 
+
+## Utilizing Locators
+
+The FindElement makes using locators a breeze! For most languages, 
+all you need to do is utilize `webdriver.common.by.By`, however in 
+others it's as simple as setting a parameter in the FindElement function
+
+### By
+
+{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
+  {{< tab header="Java" >}}
+    import org.openqa.selenium.By;
+    WebDriver driver = new ChromeDriver();
+	driver.findElement(By.className("information"));
+  {{< /tab >}}
   {{< tab header="Python" >}}
+    from selenium.webdriver.common.by import By
     driver = webdriver.Chrome()
-	driver.find_element(By.XPATH, "//input[@value='f']")
+	driver.find_element(By.CLASS_NAME, "information")
   {{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
-	driver.FindElement(By.Xpath("//input[@value='f']"));
+	driver.FindElement(By.ClassName("information"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(xpath: '//input[@value='f']')
+  {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L7" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
-	const loc = await driver.findElement(By.xpath('//input[@value='f']'));
+	const loc = await driver.findElement(By.className('information'));
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
+    import org.openqa.selenium.By
     val driver = ChromeDriver()
-	val loc: WebElement = driver.findElement(By.xpath('//input[@value='f']'))
+	val loc: WebElement = driver.findElement(By.className("information"))
+  {{< /tab >}}
+{{< /tabpane >}} 
+
+### ByChained
+
+The `ByChained` class enables you to _chain_ two By locators together. For example, instead of having to locate a parent element, 
+and then a child element of that parent, you can instead combine those two `FindElement()` functions into one.
+
+{{< tabpane langEqualsHeader=true >}}
+  {{< tab header="Java" text=true >}}
+    {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/LocatorsTest.java#L37-L38">}}
+  {{< /tab >}}
+  {{< tab header="Python" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="CSharp" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="Ruby" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="JavaScript" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="Kotlin" text=true >}}
+    {{< badge-code >}}
   {{< /tab >}}
 {{< /tabpane >}} 
 
+### ByAll
+
+The `ByAll` class enables you to utilize two By locators at once, finding elements that mach _either_ of your By locators. 
+For example, instead of having to utilize two `FindElement()` functions to find the username and password input fields 
+seperately, you can instead find them together in one clean `FindElements()`
+
+{{< tabpane langEqualsHeader=true >}}
+  {{< tab header="Java" text=true >}}
+    {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/LocatorsTest.java#L22-L23">}}
+  {{< /tab >}}
+  {{< tab header="Python" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="CSharp" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="Ruby" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="JavaScript" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="Kotlin" text=true >}}
+    {{< badge-code >}}
+  {{< /tab >}}
+{{< /tabpane >}} 
 
 ## Relative Locators
 
@@ -377,8 +452,8 @@ email_locator = locate_with(By.TAG_NAME, "input").above({By.ID: "password"})
 {{< tab header="CSharp" >}}
 var emailLocator = RelativeBy.WithLocator(By.TagName("input")).Above(By.Id("password"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-email_locator = {relative: {tag_name: 'input', above: {id: 'password'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L40" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let emailLocator = locateWith(By.tagName('input')).above(By.id('password'));
@@ -404,8 +479,8 @@ password_locator = locate_with(By.TAG_NAME, "input").below({By.ID: "email"})
 {{< tab header="CSharp" >}}
 var passwordLocator = RelativeBy.WithLocator(By.TagName("input")).Below(By.Id("email"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-password_locator = {relative: {tag_name: 'input', below: {id: 'email'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L44" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let passwordLocator = locateWith(By.tagName('input')).below(By.id('email'));
@@ -431,8 +506,8 @@ cancel_locator = locate_with(By.TAG_NAME, "button").to_left_of({By.ID: "submit"}
 {{< tab header="CSharp" >}}
 var cancelLocator = RelativeBy.WithLocator(By.tagName("button")).LeftOf(By.Id("submit"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-cancel_locator = {relative: {tag_name: 'button', left: {id: 'submit'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L48" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let cancelLocator = locateWith(By.tagName('button')).toLeftOf(By.id('submit'));
@@ -458,8 +533,8 @@ submit_locator = locate_with(By.TAG_NAME, "button").to_right_of({By.ID: "cancel"
 {{< tab header="CSharp" >}}
 var submitLocator = RelativeBy.WithLocator(By.tagName("button")).RightOf(By.Id("cancel"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-submit_locator = {relative: {tag_name: 'button', right: {id: 'cancel'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L52" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let submitLocator = locateWith(By.tagName('button')).toRightOf(By.id('cancel'));
@@ -487,8 +562,8 @@ email_locator = locate_with(By.TAG_NAME, "input").near({By.ID: "lbl-email"})
 {{< tab header="CSharp" >}}
 var emailLocator = RelativeBy.WithLocator(By.tagName("input")).Near(By.Id("lbl-email"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-email_locator = {relative: {tag_name: 'input', near: {id: 'lbl-email'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L56" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let emailLocator = locateWith(By.tagName('input')).near(By.id('lbl-email'));
@@ -513,8 +588,8 @@ submit_locator = locate_with(By.TAG_NAME, "button").below({By.ID: "email"}).to_r
 {{< tab header="CSharp" >}}
 var submitLocator = RelativeBy.WithLocator(By.tagName("button")).Below(By.Id("email")).RightOf(By.Id("cancel"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-submit_locator = {relative: {tag_name: 'button', below: {id: 'email'}, right: {id: 'cancel'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L60" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let submitLocator = locateWith(By.tagName('button')).below(By.id('email')).toRightOf(By.id('cancel'));
diff --git a/website_and_docs/content/documentation/webdriver/elements/locators.ja.md b/website_and_docs/content/documentation/webdriver/elements/locators.ja.md
index 9444c1000e05..6181120e6e4b 100644
--- a/website_and_docs/content/documentation/webdriver/elements/locators.ja.md
+++ b/website_and_docs/content/documentation/webdriver/elements/locators.ja.md
@@ -48,7 +48,7 @@ page. To understand and create locator we will use the following HTML snippet.
 </style>
 <h2>Contact Selenium</h2>
 
-<form action="/action_page.php">
+<form>
   <input type="radio" name="gender" value="m" />Male &nbsp;
   <input type="radio" name="gender" value="f" />Female <br>
   <br>
@@ -78,17 +78,15 @@ available in Selenium.
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.className("information"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.CLASS_NAME, "information")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L7-L9" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.ClassName("information"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(class: 'information')
+  {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L7" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
@@ -112,18 +110,16 @@ textbox, using css.
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.cssSelector("#fname"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.CSS_SELECTOR, "#fname")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L17-L19" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.CssSelector("#fname"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(css: '#fname')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L11" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.css('#fname'));
@@ -144,18 +140,16 @@ We will identify the Last Name field using it.
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.id("lname"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.ID, "lname")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L27-L29" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.Id("lname"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(id: 'lname')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L15" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.id('lname'));
@@ -177,18 +171,16 @@ We will identify the Newsletter checkbox using it.
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.name("newsletter"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.NAME, "newsletter")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L37-L39" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.Name("newsletter"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(name: 'newsletter')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L19" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.name('newsletter'));
@@ -208,18 +200,16 @@ In the HTML snippet shared, we have a link available, lets see how will we locat
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.linkText("Selenium Official Page"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.LINK_TEXT, "Selenium Official Page")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L47-L49" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.LinkText("Selenium Official Page"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(link_text: 'Selenium Official Page')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L23" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.linkText('Selenium Official Page'));
@@ -240,18 +230,16 @@ In the HTML snippet shared, we have a link available, lets see how will we locat
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.partialLinkText("Official Page"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.PARTIAL_LINK_TEXT, "Official Page")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L57-L59" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.PartialLinkText("Official Page"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(partial_link_text: 'Official Page')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L27" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.partialLinkText('Official Page'));
@@ -270,18 +258,16 @@ From the above HTML snippet shared, lets identify the link, using its html tag "
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.tagName("a"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.TAG_NAME, "a")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L67-L69" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.TagName("a"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(tag_name: 'a')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L31" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.tagName('a'));
@@ -306,29 +292,117 @@ first name text box. Let us create locator for female radio button using xpath.
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.xpath("//input[@value='f']"));
   {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L77-L79" >}}
+{{< /tab >}}
+  {{< tab header="CSharp" >}}
+    var driver = new ChromeDriver();
+	driver.FindElement(By.Xpath("//input[@value='f']"));
+  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L35" >}}
+{{< /tab >}}
+  {{< tab header="JavaScript" >}}
+    let driver = await new Builder().forBrowser('chrome').build();
+	const loc = await driver.findElement(By.xpath('//input[@value='f']'));
+  {{< /tab >}}
+  {{< tab header="Kotlin" >}}
+    val driver = ChromeDriver()
+	val loc: WebElement = driver.findElement(By.xpath('//input[@value='f']'))
+  {{< /tab >}}
+{{< /tabpane >}} 
+
+## Utilizing Locators
+
+The FindElement makes using locators a breeze! For most languages, 
+all you need to do is utilize `webdriver.common.by.By`, however in 
+others it's as simple as setting a parameter in the FindElement function
+
+### By
+
+{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
+  {{< tab header="Java" >}}
+    import org.openqa.selenium.By;
+    WebDriver driver = new ChromeDriver();
+	driver.findElement(By.className("information"));
+  {{< /tab >}}
   {{< tab header="Python" >}}
+    from selenium.webdriver.common.by import By
     driver = webdriver.Chrome()
-	driver.find_element(By.XPATH, "//input[@value='f']")
+	driver.find_element(By.CLASS_NAME, "information")
   {{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
-	driver.FindElement(By.Xpath("//input[@value='f']"));
+	driver.FindElement(By.ClassName("information"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(xpath: '//input[@value='f']')
+  {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L7" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
-	const loc = await driver.findElement(By.xpath('//input[@value='f']'));
+	const loc = await driver.findElement(By.className('information'));
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
+    import org.openqa.selenium.By
     val driver = ChromeDriver()
-	val loc: WebElement = driver.findElement(By.xpath('//input[@value='f']'))
+	val loc: WebElement = driver.findElement(By.className("information"))
   {{< /tab >}}
 {{< /tabpane >}} 
 
+### ByChained
 
+The `ByChained` class enables you to _chain_ two By locators together. For example, instead of having to 
+locate a parent element, and then a child element of that parent, you can instead combine those two `FindElement` 
+functions into one.
+
+{{< tabpane langEqualsHeader=true >}}
+  {{< tab header="Java" text=true >}}
+    {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/LocatorsTest.java#L37-L38" >}}
+  {{< /tab >}}
+  {{< tab header="Python" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="CSharp" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="Ruby" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="JavaScript" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="Kotlin" text=true >}}
+    {{< badge-code >}}
+  {{< /tab >}}
+{{< /tabpane >}} 
+
+### ByAll
+
+The `ByAll` class enables you to utilize two By locators at once, finding elements that mach _either_ of your By locators. 
+For example, instead of having to utilize two `FindElement()` functions to find the username and password input fields seperately, 
+you can instead find them together in one clean `FindElements()`
+
+{{< tabpane langEqualsHeader=true >}}
+  {{< tab header="Java" text=true >}}
+    {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/LocatorsTest.java#L22-L23">}}
+  {{< /tab >}}
+  {{< tab header="Python" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="CSharp" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="Ruby" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="JavaScript" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="Kotlin" text=true >}}
+    {{< badge-code >}}
+  {{< /tab >}}
+{{< /tabpane >}} 
 
 ## 相対ロケーター
 
@@ -369,8 +443,8 @@ email_locator = locate_with(By.TAG_NAME, "input").above({By.ID: "password"})
 {{< tab header="CSharp" >}}
 var emailLocator = RelativeBy.WithLocator(By.TagName("input")).Above(By.Id("password"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-email_locator = {relative: {tag_name: 'input', above: {id: 'password'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L40" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let emailLocator = locateWith(By.tagName('input')).above(By.id('password'));
@@ -395,8 +469,8 @@ password_locator = locate_with(By.TAG_NAME, "input").below({By.ID: "email"})
 {{< tab header="CSharp" >}}
 var passwordLocator = RelativeBy.WithLocator(By.TagName("input")).Below(By.Id("email"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-password_locator = {relative: {tag_name: 'input', below: {id: 'email'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L44" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let passwordLocator = locateWith(By.tagName('input')).below(By.id('email'));
@@ -421,8 +495,8 @@ cancel_locator = locate_with(By.TAG_NAME, "button").to_left_of({By.ID: "submit"}
 {{< tab header="CSharp" >}}
 var cancelLocator = RelativeBy.WithLocator(By.tagName("button")).LeftOf(By.Id("submit"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-cancel_locator = {relative: {tag_name: 'button', left: {id: 'submit'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L48" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let cancelLocator = locateWith(By.tagName('button')).toLeftOf(By.id('submit'));
@@ -447,8 +521,8 @@ submit_locator = locate_with(By.TAG_NAME, "button").to_right_of({By.ID: "cancel"
 {{< tab header="CSharp" >}}
 var submitLocator = RelativeBy.WithLocator(By.tagName("button")).RightOf(By.Id("cancel"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-submit_locator = {relative: {tag_name: 'button', right: {id: 'cancel'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L52" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let submitLocator = locateWith(By.tagName('button')).toRightOf(By.id('cancel'));
@@ -475,8 +549,8 @@ email_locator = locate_with(By.TAG_NAME, "input").near({By.ID: "lbl-email"})
 {{< tab header="CSharp" >}}
 var emailLocator = RelativeBy.WithLocator(By.tagName("input")).Near(By.Id("lbl-email"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-email_locator = {relative: {tag_name: 'input', near: {id: 'lbl-email'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L56" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let emailLocator = locateWith(By.tagName('input')).near(By.id('lbl-email'));
@@ -500,8 +574,8 @@ submit_locator = locate_with(By.TAG_NAME, "button").below({By.ID: "email"}).to_r
 {{< tab header="CSharp" >}}
 var submitLocator = RelativeBy.WithLocator(By.tagName("button")).Below(By.Id("email")).RightOf(By.Id("cancel"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-submit_locator = {relative: {tag_name: 'button', below: {id: 'email'}, right: {id: 'cancel'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L60" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let submitLocator = locateWith(By.tagName('button')).below(By.id('email')).toRightOf(By.id('cancel'));
diff --git a/website_and_docs/content/documentation/webdriver/elements/locators.pt-br.md b/website_and_docs/content/documentation/webdriver/elements/locators.pt-br.md
index 293bcdd00615..b9c63ee78c89 100644
--- a/website_and_docs/content/documentation/webdriver/elements/locators.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/elements/locators.pt-br.md
@@ -51,7 +51,7 @@ page. To understand and create locator we will use the following HTML snippet.
 </style>
 <h2>Contact Selenium</h2>
 
-<form action="/action_page.php">
+<form>
   <input type="radio" name="gender" value="m" />Male &nbsp;
   <input type="radio" name="gender" value="f" />Female <br>
   <br>
@@ -81,17 +81,15 @@ available in Selenium.
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.className("information"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.CLASS_NAME, "information")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L7-L9" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.ClassName("information"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(class: 'information')
+  {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L7" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
@@ -115,18 +113,16 @@ textbox, using css.
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.cssSelector("#fname"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.CSS_SELECTOR, "#fname")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L17-L19" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.CssSelector("#fname"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(css: '#fname')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L11" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.css('#fname'));
@@ -147,18 +143,16 @@ We will identify the Last Name field using it.
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.id("lname"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.ID, "lname")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L27-L29" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.Id("lname"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(id: 'lname')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L15" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.id('lname'));
@@ -180,18 +174,16 @@ We will identify the Newsletter checkbox using it.
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.name("newsletter"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.NAME, "newsletter")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L37-L39" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.Name("newsletter"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(name: 'newsletter')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L19" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.name('newsletter'));
@@ -211,18 +203,16 @@ In the HTML snippet shared, we have a link available, lets see how will we locat
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.linkText("Selenium Official Page"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.LINK_TEXT, "Selenium Official Page")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L47-L49" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.LinkText("Selenium Official Page"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(link_text: 'Selenium Official Page')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L23" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.linkText('Selenium Official Page'));
@@ -243,18 +233,16 @@ In the HTML snippet shared, we have a link available, lets see how will we locat
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.partialLinkText("Official Page"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.PARTIAL_LINK_TEXT, "Official Page")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L57-L59" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.PartialLinkText("Official Page"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(partial_link_text: 'Official Page')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L27" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.partialLinkText('Official Page'));
@@ -273,18 +261,16 @@ From the above HTML snippet shared, lets identify the link, using its html tag "
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.tagName("a"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.TAG_NAME, "a")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L67-L69" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.TagName("a"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(tag_name: 'a')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L31" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.tagName('a'));
@@ -309,29 +295,117 @@ first name text box. Let us create locator for female radio button using xpath.
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.xpath("//input[@value='f']"));
   {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L77-L79" >}}
+{{< /tab >}}
+  {{< tab header="CSharp" >}}
+    var driver = new ChromeDriver();
+	driver.FindElement(By.Xpath("//input[@value='f']"));
+  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L35" >}}
+{{< /tab >}}
+  {{< tab header="JavaScript" >}}
+    let driver = await new Builder().forBrowser('chrome').build();
+	const loc = await driver.findElement(By.xpath('//input[@value='f']'));
+  {{< /tab >}}
+  {{< tab header="Kotlin" >}}
+    val driver = ChromeDriver()
+	val loc: WebElement = driver.findElement(By.xpath('//input[@value='f']'))
+  {{< /tab >}}
+{{< /tabpane >}} 
+
+## Utilizing Locators
+
+The FindElement makes using locators a breeze! For most languages, 
+all you need to do is utilize `webdriver.common.by.By`, however in 
+others it's as simple as setting a parameter in the FindElement function
+
+### By
+
+{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
+  {{< tab header="Java" >}}
+    import org.openqa.selenium.By;
+    WebDriver driver = new ChromeDriver();
+	driver.findElement(By.className("information"));
+  {{< /tab >}}
   {{< tab header="Python" >}}
+    from selenium.webdriver.common.by import By
     driver = webdriver.Chrome()
-	driver.find_element(By.XPATH, "//input[@value='f']")
+	driver.find_element(By.CLASS_NAME, "information")
   {{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
-	driver.FindElement(By.Xpath("//input[@value='f']"));
+	driver.FindElement(By.ClassName("information"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(xpath: '//input[@value='f']')
+  {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L7" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
-	const loc = await driver.findElement(By.xpath('//input[@value='f']'));
+	const loc = await driver.findElement(By.className('information'));
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
+    import org.openqa.selenium.By
     val driver = ChromeDriver()
-	val loc: WebElement = driver.findElement(By.xpath('//input[@value='f']'))
+	val loc: WebElement = driver.findElement(By.className("information"))
   {{< /tab >}}
 {{< /tabpane >}} 
 
+### ByChained
 
+The `ByChained` class enables you to _chain_ two By locators together. For example, instead of 
+having to locate a parent element, and then a child element of that parent, you can instead 
+combine those two `FindElement` functions into one.
+
+{{< tabpane langEqualsHeader=true >}}
+  {{< tab header="Java" text=true >}}
+    {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/LocatorsTest.java#L37-L38" >}}
+  {{< /tab >}}
+  {{< tab header="Python" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="CSharp" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="Ruby" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="JavaScript" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="Kotlin" text=true >}}
+    {{< badge-code >}}
+  {{< /tab >}}
+{{< /tabpane >}} 
+
+### ByAll
+
+The `ByAll` class enables you to utilize two By locators at once, finding elements that mach _either_ of your By locators. 
+For example, instead of having to utilize two `FindElement()` functions to find the username and password input fields 
+seperately, you can instead find them together in one clean `FindElements()`
+
+{{< tabpane langEqualsHeader=true >}}
+  {{< tab header="Java" text=true >}}
+    {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/LocatorsTest.java#L22-L23">}}
+  {{< /tab >}}
+  {{< tab header="Python" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="CSharp" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="Ruby" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="JavaScript" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="Kotlin" text=true >}}
+    {{< badge-code >}}
+  {{< /tab >}}
+{{< /tabpane >}} 
 
 ## Relative Locators
 
@@ -372,8 +446,8 @@ email_locator = locate_with(By.TAG_NAME, "input").above({By.ID: "password"})
 {{< tab header="CSharp" >}}
 var emailLocator = RelativeBy.WithLocator(By.TagName("input")).Above(By.Id("password"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-email_locator = {relative: {tag_name: 'input', above: {id: 'password'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L40" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let emailLocator = locateWith(By.tagName('input')).above(By.id('password'));
@@ -398,8 +472,8 @@ password_locator = locate_with(By.TAG_NAME, "input").below({By.ID: "email"})
 {{< tab header="CSharp" >}}
 var passwordLocator = RelativeBy.WithLocator(By.TagName("input")).Below(By.Id("email"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-password_locator = {relative: {tag_name: 'input', below: {id: 'email'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L44" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let passwordLocator = locateWith(By.tagName('input')).below(By.id('email'));
@@ -424,8 +498,8 @@ cancel_locator = locate_with(By.TAG_NAME, "button").to_left_of({By.ID: "submit"}
 {{< tab header="CSharp" >}}
 var cancelLocator = RelativeBy.WithLocator(By.tagName("button")).LeftOf(By.Id("submit"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-cancel_locator = {relative: {tag_name: 'button', left: {id: 'submit'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L48" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let cancelLocator = locateWith(By.tagName('button')).toLeftOf(By.id('submit'));
@@ -450,8 +524,8 @@ submit_locator = locate_with(By.TAG_NAME, "button").to_right_of({By.ID: "cancel"
 {{< tab header="CSharp" >}}
 var submitLocator = RelativeBy.WithLocator(By.tagName("button")).RightOf(By.Id("cancel"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-submit_locator = {relative: {tag_name: 'button', right: {id: 'cancel'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L52" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let submitLocator = locateWith(By.tagName('button')).toRightOf(By.id('cancel'));
@@ -478,8 +552,8 @@ email_locator = locate_with(By.TAG_NAME, "input").near({By.ID: "lbl-email"})
 {{< tab header="CSharp" >}}
 var emailLocator = RelativeBy.WithLocator(By.tagName("input")).Near(By.Id("lbl-email"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-email_locator = {relative: {tag_name: 'input', near: {id: 'lbl-email'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L56" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let emailLocator = locateWith(By.tagName('input')).near(By.id('lbl-email'));
@@ -503,8 +577,8 @@ submit_locator = locate_with(By.TAG_NAME, "button").below({By.ID: "email"}).to_r
 {{< tab header="CSharp" >}}
 var submitLocator = RelativeBy.WithLocator(By.tagName("button")).Below(By.Id("email")).RightOf(By.Id("cancel"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-submit_locator = {relative: {tag_name: 'button', below: {id: 'email'}, right: {id: 'cancel'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L60" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let submitLocator = locateWith(By.tagName('button')).below(By.id('email')).toRightOf(By.id('cancel'));
diff --git a/website_and_docs/content/documentation/webdriver/elements/locators.zh-cn.md b/website_and_docs/content/documentation/webdriver/elements/locators.zh-cn.md
index 5cd52a2d2d61..7de325db49ad 100644
--- a/website_and_docs/content/documentation/webdriver/elements/locators.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/elements/locators.zh-cn.md
@@ -51,7 +51,7 @@ page. To understand and create locator we will use the following HTML snippet.
 </style>
 <h2>Contact Selenium</h2>
 
-<form action="/action_page.php">
+<form>
   <input type="radio" name="gender" value="m" />Male &nbsp;
   <input type="radio" name="gender" value="f" />Female <br>
   <br>
@@ -81,17 +81,15 @@ available in Selenium.
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.className("information"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.CLASS_NAME, "information")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L7-L9" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.ClassName("information"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(class: 'information')
+  {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L7" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
@@ -115,18 +113,16 @@ textbox, using css.
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.cssSelector("#fname"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.CSS_SELECTOR, "#fname")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L17-L19" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.CssSelector("#fname"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(css: '#fname')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L11" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.css('#fname'));
@@ -147,18 +143,16 @@ We will identify the Last Name field using it.
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.id("lname"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.ID, "lname")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L27-L29" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.Id("lname"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(id: 'lname')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L15" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.id('lname'));
@@ -180,18 +174,16 @@ We will identify the Newsletter checkbox using it.
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.name("newsletter"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.NAME, "newsletter")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L37-L39" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.Name("newsletter"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(name: 'newsletter')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L19" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.name('newsletter'));
@@ -211,18 +203,16 @@ In the HTML snippet shared, we have a link available, lets see how will we locat
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.linkText("Selenium Official Page"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.LINK_TEXT, "Selenium Official Page")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L47-L49" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.LinkText("Selenium Official Page"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(link_text: 'Selenium Official Page')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L23" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.linkText('Selenium Official Page'));
@@ -243,18 +233,16 @@ In the HTML snippet shared, we have a link available, lets see how will we locat
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.partialLinkText("Official Page"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.PARTIAL_LINK_TEXT, "Official Page")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L57-L59" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.PartialLinkText("Official Page"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(partial_link_text: 'Official Page')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L27" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.partialLinkText('Official Page'));
@@ -273,18 +261,16 @@ From the above HTML snippet shared, lets identify the link, using its html tag "
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.tagName("a"));
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    driver = webdriver.Chrome()
-	driver.find_element(By.TAG_NAME, "a")
-  {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L67-L69" >}}
+{{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
 	driver.FindElement(By.TagName("a"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(tag_name: 'a')
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L31" >}}
+{{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
 	const loc = await driver.findElement(By.tagName('a'));
@@ -309,29 +295,117 @@ first name text box. Let us create locator for female radio button using xpath.
     WebDriver driver = new ChromeDriver();
 	driver.findElement(By.xpath("//input[@value='f']"));
   {{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/elements/test_locators.py#L77-L79" >}}
+{{< /tab >}}
+  {{< tab header="CSharp" >}}
+    var driver = new ChromeDriver();
+	driver.FindElement(By.Xpath("//input[@value='f']"));
+  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L35" >}}
+{{< /tab >}}
+  {{< tab header="JavaScript" >}}
+    let driver = await new Builder().forBrowser('chrome').build();
+	const loc = await driver.findElement(By.xpath('//input[@value='f']'));
+  {{< /tab >}}
+  {{< tab header="Kotlin" >}}
+    val driver = ChromeDriver()
+	val loc: WebElement = driver.findElement(By.xpath('//input[@value='f']'))
+  {{< /tab >}}
+{{< /tabpane >}} 
+
+## Utilizing Locators
+
+The FindElement makes using locators a breeze! For most languages, 
+all you need to do is utilize `webdriver.common.by.By`, however in 
+others it's as simple as setting a parameter in the FindElement function
+
+### By
+
+{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
+  {{< tab header="Java" >}}
+    import org.openqa.selenium.By;
+    WebDriver driver = new ChromeDriver();
+	driver.findElement(By.className("information"));
+  {{< /tab >}}
   {{< tab header="Python" >}}
+    from selenium.webdriver.common.by import By
     driver = webdriver.Chrome()
-	driver.find_element(By.XPATH, "//input[@value='f']")
+	driver.find_element(By.CLASS_NAME, "information")
   {{< /tab >}}
   {{< tab header="CSharp" >}}
     var driver = new ChromeDriver();
-	driver.FindElement(By.Xpath("//input[@value='f']"));
+	driver.FindElement(By.ClassName("information"));
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    driver = Selenium::WebDriver.for :chrome
-	driver.find_element(xpath: '//input[@value='f']')
+  {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L7" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
     let driver = await new Builder().forBrowser('chrome').build();
-	const loc = await driver.findElement(By.xpath('//input[@value='f']'));
+	const loc = await driver.findElement(By.className('information'));
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
+    import org.openqa.selenium.By
     val driver = ChromeDriver()
-	val loc: WebElement = driver.findElement(By.xpath('//input[@value='f']'))
+	val loc: WebElement = driver.findElement(By.className("information"))
   {{< /tab >}}
 {{< /tabpane >}} 
 
+### ByChained
 
+The `ByChained` class enables you to _chain_ two By locators together. For example, 
+instead of having to locate a parent element, and then a child element of that parent, 
+you can instead combine those two `FindElement` functions into one.
+
+{{< tabpane langEqualsHeader=true >}}
+  {{< tab header="Java" text=true >}}
+    {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/LocatorsTest.java#L37-L38" >}}
+  {{< /tab >}}
+  {{< tab header="Python" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="CSharp" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="Ruby" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="JavaScript" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="Kotlin" text=true >}}
+    {{< badge-code >}}
+  {{< /tab >}}
+{{< /tabpane >}} 
+
+### ByAll
+
+The `ByAll` class enables you to utilize two By locators at once, finding elements that mach _either_ of your By locators. 
+For example, instead of having to utilize two `FindElement()` functions to find the username and password input fields 
+seperately, you can instead find them together in one clean `FindElements()`
+
+{{< tabpane langEqualsHeader=true >}}
+  {{< tab header="Java" text=true >}}
+    {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/LocatorsTest.java#L22-L23">}}
+  {{< /tab >}}
+  {{< tab header="Python" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="CSharp" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="Ruby" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="JavaScript" text=true >}}
+  {{< badge-code >}}
+  {{< /tab >}}
+  {{< tab header="Kotlin" text=true >}}
+    {{< badge-code >}}
+  {{< /tab >}}
+{{< /tabpane >}} 
 
 ## Relative Locators
 
@@ -372,8 +446,8 @@ email_locator = locate_with(By.TAG_NAME, "input").above({By.ID: "password"})
 {{< tab header="CSharp" >}}
 var emailLocator = RelativeBy.WithLocator(By.TagName("input")).Above(By.Id("password"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-email_locator = {relative: {tag_name: 'input', above: {id: 'password'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L40" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let emailLocator = locateWith(By.tagName('input')).above(By.id('password'));
@@ -398,8 +472,8 @@ password_locator = locate_with(By.TAG_NAME, "input").below({By.ID: "email"})
 {{< tab header="CSharp" >}}
 var passwordLocator = RelativeBy.WithLocator(By.TagName("input")).Below(By.Id("email"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-password_locator = {relative: {tag_name: 'input', below: {id: 'email'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L44" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let passwordLocator = locateWith(By.tagName('input')).below(By.id('email'));
@@ -424,8 +498,8 @@ cancel_locator = locate_with(By.TAG_NAME, "button").to_left_of({By.ID: "submit"}
 {{< tab header="CSharp" >}}
 var cancelLocator = RelativeBy.WithLocator(By.tagName("button")).LeftOf(By.Id("submit"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-cancel_locator = {relative: {tag_name: 'button', left: {id: 'submit'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L48" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let cancelLocator = locateWith(By.tagName('button')).toLeftOf(By.id('submit'));
@@ -450,8 +524,8 @@ submit_locator = locate_with(By.TAG_NAME, "button").to_right_of({By.ID: "cancel"
 {{< tab header="CSharp" >}}
 var submitLocator = RelativeBy.WithLocator(By.tagName("button")).RightOf(By.Id("cancel"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-submit_locator = {relative: {tag_name: 'button', right: {id: 'cancel'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L52" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let submitLocator = locateWith(By.tagName('button')).toRightOf(By.id('cancel'));
@@ -478,8 +552,8 @@ email_locator = locate_with(By.TAG_NAME, "input").near({By.ID: "lbl-email"})
 {{< tab header="CSharp" >}}
 var emailLocator = RelativeBy.WithLocator(By.tagName("input")).Near(By.Id("lbl-email"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-email_locator = {relative: {tag_name: 'input', near: {id: 'lbl-email'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L56" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let emailLocator = locateWith(By.tagName('input')).near(By.id('lbl-email'));
@@ -503,8 +577,8 @@ submit_locator = locate_with(By.TAG_NAME, "button").below({By.ID: "email"}).to_r
 {{< tab header="CSharp" >}}
 var submitLocator = RelativeBy.WithLocator(By.tagName("button")).Below(By.Id("email")).RightOf(By.Id("cancel"));
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-submit_locator = {relative: {tag_name: 'button', below: {id: 'email'}, right: {id: 'cancel'}}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/elements/locators_spec.rb#L60" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 let submitLocator = locateWith(By.tagName('button')).below(By.id('email')).toRightOf(By.id('cancel'));
diff --git a/website_and_docs/content/documentation/webdriver/getting_started/_index.ja.md b/website_and_docs/content/documentation/webdriver/getting_started/_index.ja.md
index 303cb061c67a..4874ab8c2d5e 100644
--- a/website_and_docs/content/documentation/webdriver/getting_started/_index.ja.md
+++ b/website_and_docs/content/documentation/webdriver/getting_started/_index.ja.md
@@ -24,15 +24,14 @@ Seleniumは可能な場合これらのサードパーティ製のdriverを使い
 
 Seleniumフレームワークはこれら全ての要素をユーザ向けのインターフェイスを通して結びつけます。このインターフェイスは異なるブラウザバックエンドを透過的に使えるようにし、クロスブラウザ・クロスプラットフォームの自動化を可能にします。
 
-Selenium setup is quite different from the setup of other commercial tools.
-Before you can start writing Selenium code, you have to 
-install the language bindings libraries for your language of choice, the browser you
-want to use, and the driver for that browser.
+Seleniumのセットアップは、他の商用ツールのセットアップとはかなり異なります。
+Seleniumコードの記述を開始する前に、次のことを行う必要があります
+選択した言語、つまりブラウザーの言語バインディングライブラリをインストールします
+使用したい、そのブラウザのドライバ。
 
-***Follow the links below to get up and going with Selenium WebDriver.***
+***以下のリンクをたどって、Selenium WebDriverを起動してください。***
 
-If you wish to start with a low-code/record and playback tool, please check
+ローコード/録音および再生ツールから始めたい場合は、確認してください
 [Selenium IDE](https://selenium.dev/selenium-ide)
 
-Once you get things working, if you want to scale up your tests, check out the 
-[Selenium Grid]({{< ref "/documentation/grid" >}}).
+物事がうまくいったら、テストをスケールアップしたい場合は、[Selenium Grid]({{< ref "/documentation/grid" >}}).
diff --git a/website_and_docs/content/documentation/webdriver/getting_started/_index.zh-cn.md b/website_and_docs/content/documentation/webdriver/getting_started/_index.zh-cn.md
index e9ff56d78a87..43778efb5763 100644
--- a/website_and_docs/content/documentation/webdriver/getting_started/_index.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/getting_started/_index.zh-cn.md
@@ -2,7 +2,7 @@
 title: "入门指南"
 linkTitle: "入门指南"
 weight: 2
-needsTranslation: true
+needsTranslation: false
 description: >
   如果你是Selenium的新手, 我们有一些资源帮助你快速入门.
 aliases: [
@@ -16,7 +16,7 @@ aliases: [
 
 
 Selenium 通过使用 _WebDriver_ 支持市场上所有主流浏览器的自动化。
-Webdriver 是一个 API 和协议，它定义了一个语言中立的接口，用于控制 web 浏览器的行为。
+WebDriver 是一个 API 和协议，它定义了一个语言中立的接口，用于控制 web 浏览器的行为。
 每个浏览器都有一个特定的 WebDriver 实现，称为驱动程序。
 驱动程序是负责委派给浏览器的组件，并处理与 Selenium 和浏览器之间的通信。
 
@@ -28,15 +28,15 @@ Selenium 框架通过一个面向用户的界面将所有这些部分连接在
 该界面允许透明地使用不同的浏览器后端，
 从而实现跨浏览器和跨平台自动化。
 
-Selenium setup is quite different from the setup of other commercial tools.
-Before you can start writing Selenium code, you have to 
-install the language bindings libraries for your language of choice, the browser you
-want to use, and the driver for that browser.
+Selenium的设置与其他商业工具有很大不同.
+在开始编写 Selenium 代码之前, 
+您必须安装所选语言的相关类库,
+目标浏览器的驱动程序.
 
-***Follow the links below to get up and going with Selenium WebDriver.***
+***请点击以下链接，开始使用 Selenium WebDriver.***
 
-If you wish to start with a low-code/record and playback tool, please check
+如果您希望从低代码/录制和播放工具开始，请查看
 [Selenium IDE](https://selenium.dev/selenium-ide)
 
-Once you get things working, if you want to scale up your tests, check out the 
+开始工作后，如果想扩展您的测试，请查看 
 [Selenium Grid]({{< ref "/documentation/grid" >}}).
diff --git a/website_and_docs/content/documentation/webdriver/getting_started/first_script.en.md b/website_and_docs/content/documentation/webdriver/getting_started/first_script.en.md
index 1cc928b9c78c..f8ef1efd4b93 100644
--- a/website_and_docs/content/documentation/webdriver/getting_started/first_script.en.md
+++ b/website_and_docs/content/documentation/webdriver/getting_started/first_script.en.md
@@ -22,22 +22,22 @@ For more details on starting a session read our documentation on [driver session
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L4" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L4" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L11" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L11" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L3" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L3" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L8" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L8" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L16" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L16" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -46,22 +46,22 @@ In this example we are [navigating]({{< ref "/documentation/webdriver/interactio
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L6" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L6" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L13" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L13" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L5" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L5" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L9" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L9" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L18" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L18" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -72,22 +72,22 @@ can request, including window handles, browser size / position, cookies, alerts,
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#16" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#16" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L8" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L8" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L15" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L15" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L7" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L7" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L11" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L11" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L20" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L20" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -106,22 +106,22 @@ Read more about [Waiting strategies]({{< ref "/documentation/webdriver/waits.md"
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L18" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L10" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L10" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L17" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L17" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L9" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L9" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L14" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L14" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L23" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L23" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -131,22 +131,22 @@ with one without first [finding an element]({{< ref "/documentation/webdriver/el
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L20-L21" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L20-L21" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L12-L13" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L12-L13" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L19-L20" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L19-L20" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L11-L12" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L11-L12" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L16-L17" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L16-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L25-L26" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L25-L26" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -156,22 +156,22 @@ but you will use them frequently.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L23-L24" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L23-L24" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L15-L16" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L15-L16" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L22-L23" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L22-L23" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L14-L15" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L14-L15" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L19-L20" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L19-L20" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L28-L29" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L28-L29" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -180,22 +180,22 @@ Elements store a lot of [information that can be requested]({{< ref "/documentat
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L27" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L26-27" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L19" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L18-19" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L26" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L25-26" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L18" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L17-18" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L23" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L22-23" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L32" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L31-32" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -207,30 +207,47 @@ See [Quitting Sessions]({{< ref "../drivers/#quitting-sessions" >}}).
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L21" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L21" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L28" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L28" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L20" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L20" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L28" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L28" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L35" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L35" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
 ## Running Selenium File
 
-{{< alert-code >}}
-Add example for how to execute each of the above pages via command line
-{{< /alert-code >}}
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/README.md#L60" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/README.md#L35" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="/examples/ruby/README.md#L36" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< gh-codeblock path="/examples/javascript/README.md#L36" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
 
 
 ## Next Steps
diff --git a/website_and_docs/content/documentation/webdriver/getting_started/first_script.ja.md b/website_and_docs/content/documentation/webdriver/getting_started/first_script.ja.md
index b44ce7de58d8..05345638b665 100644
--- a/website_and_docs/content/documentation/webdriver/getting_started/first_script.ja.md
+++ b/website_and_docs/content/documentation/webdriver/getting_started/first_script.ja.md
@@ -10,234 +10,248 @@ description: >
 [Seleniumをインストール]({{< ref "install_library.md" >}})し、
 すると、Seleniumコードを書く準備が整います。
 
-## Eight Basic Components
+## 8つの基本コンポーネント
 
 Seleniumが行うことはすべて、ブラウザコマンドを送信して、何かを実行したり、情報の要求を送信したりすることです。 
 Seleniumで行うことのほとんどは、次の基本的なコマンドの組み合わせです。
 
-Click on the link to "View full example on GitHub" to see the code in context.
+[GitHub で完全な例を表示] へのリンクをクリックして、コンテキスト内のコードを表示します。
 
 ### 1. ドライバーインスタンスでセッションを開始します
 
-For more details on starting a session read our documentation on  [driver sessions]({{< ref "../drivers/" >}})
+セッションの開始の詳細については、次のドキュメントをお読みください [driver sessions]({{< ref "../drivers/" >}})
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L4" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L4" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L11" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L11" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L3" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L3" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L8" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L8" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L16" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L16" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
 ### 2. Take action on browser
-In this example we are ブラウザが[ナビゲート]({{< ref "/documentation/webdriver/interactions/navigation.md" >}})するコマンドを送信します
+こちらの例では、[ナビゲート]({{< ref "/documentation/webdriver/interactions/navigation.md" >}}) してウェブページに移動しています。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L6" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L6" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L13" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L13" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L5" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L5" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L9" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L9" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L18" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L18" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
 ### 3. [ブラウザに関する情報]({{< ref "/documentation/webdriver/interactions" >}})をリクエストします
 
-There are a bunch of types of [information about the browser]({{< ref "/documentation/webdriver/interactions" >}}) you
-can request, including window handles, browser size / position, cookies, alerts, etc.
+ブラウザに関する [情報]({{< ref "/documentation/webdriver/interactions" >}}) として、ウィンドウハンドル、ブラウザのサイズ/位置、クッキー、アラートなど、さまざまな種類のデータをリクエストできます。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#16" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#16" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L8" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L8" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L15" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L15" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L7" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L7" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L11" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L11" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L20" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L20" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-### 4. Establish Waiting Strategy
+### 4. 待機戦略の確立
 
-Synchronizing the code with the current state of the browser is one of the biggest challenges
-with Selenium, and doing it well is an advanced topic.
+コードをブラウザの現在の状態と同期させることは、最大の課題の 1 つです
+Seleniumを使用して、それをうまく行うことは高度なトピックです。
 
-Essentially you want to make sure that the element is on the page before you attempt to locate it
-and the element is in an interactable state before you attempt to interact with it.
+基本的には、要素を見つける前に、その要素がページ上にあることを確認する必要があります
+また、要素は、操作を試みる前に対話可能な状態にあります。
 
-An implicit wait is rarely the best solution, but it's the easiest to demonstrate here, so
-we'll use it as a placeholder.
+暗黙的な待機が最善の解決策になることはめったにありませんが、ここで示すのが最も簡単なので、
+プレースホルダーとして使用します。
 
-Read more about [Waiting strategies]({{< ref "/documentation/webdriver/waits.md" >}}).
+[待機戦略] についてさらに読む({{< ref "/documentation/webdriver/waits.md" >}}).
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L18" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L10" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L10" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L17" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L17" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L9" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L9" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L14" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L14" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L23" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L23" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
 ### 5. [要素を検索する]({{< ref "/documentation/webdriver/elements" >}})ためのコマンドを送信します
-The majority of commands in most Selenium sessions are element related, and you can't interact
-with one without first [finding an element]({{< ref "/documentation/webdriver/elements" >}})
+ほとんどのSeleniumセッションにおけるコマンドの大部分は要素に関連しており、[要素を見つける]({{< ref "/documentation/webdriver/elements" >}}) ことなしにはそれと対話することができません。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L20-L21" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L20-L21" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L12-L13" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L12-L13" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L19-L20" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L19-L20" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L11-L12" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L11-L12" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L16-L17" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L16-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L25-L26" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L25-L26" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
 ### 6. 要素に対してアクションを実行する
-There are only a handful of [actions to take on an element]({{< ref "/documentation/webdriver/elements/interactions.md" >}}),
-but you will use them frequently. 
+
+要素に対して行う [アクション]({{< ref "/documentation/webdriver/elements/interactions.md" >}})はわずかしかありませんが、それらは頻繁に使用されます。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L23-L24" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L23-L24" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L15-L16" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L15-L16" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L22-L23" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L22-L23" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L14-L15" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L14-L15" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L19-L20" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L19-L20" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L28-L29" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L28-L29" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
 ### 7. 要素に関する情報をリクエストします
-Elements store a lot of [information that can be requested]({{< ref "/documentation/webdriver/elements/information" >}}).
+
+要素には [リクエスト可能な情報]({{< ref "/documentation/webdriver/elements/information" >}}) が多く保存されています。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L27" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L26-27" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L19" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L18-19" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L26" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L25-26" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L18" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L17-18" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L23" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L22-23" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L32" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L31-32" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
 ### 8. セッションを終了します 
 
-This ends the driver process, which by default closes the browser as well. 
-No more commands can be sent to this driver instance. 
+これにより、ドライバー プロセスが終了し、既定ではブラウザーも閉じます。このドライバー インスタンスにこれ以上コマンドを送信することはできません。
 
-See [Quitting Sessions]({{< ref "../drivers/#quitting-sessions" >}}).
+[セッションの終了]({{< ref "../drivers/#quitting-sessions" >}}) を参照.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L21" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L21" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L28" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L28" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L20" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L20" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L28" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L28" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L35" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L35" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
 
-## Running Selenium File
+## Seleniumファイルの実行
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/README.md#L60" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/README.md#L35" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="/examples/ruby/README.md#L36" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< gh-codeblock path="/examples/javascript/README.md#L36" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
 
-{{< alert-code >}}
-Add example for how to execute each of the above pages via command line
-{{< /alert-code >}}
 
+## 次のステップ
 
-## Next Steps
 
-Most Selenium users execute many sessions and need to organize them to minimize duplication and keep the code
-more maintainable. Read on to learn about how to put this code into context for your use case with
-[Using Selenium]({{< ref "using_selenium.md" >}}).
+ほとんどのSeleniumユーザーは多くのセッションを実行し、重複を最小限に抑え、コードをより保守しやすくするために整理する必要があります。このコードをユースケースのコンテキストに配置する方法については、以下をお読みください [Seleniumの使用]({{< ref "using_selenium.md" >}})。
diff --git a/website_and_docs/content/documentation/webdriver/getting_started/first_script.pt-br.md b/website_and_docs/content/documentation/webdriver/getting_started/first_script.pt-br.md
index 25ecfb4e5a40..3f934228b3b6 100644
--- a/website_and_docs/content/documentation/webdriver/getting_started/first_script.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/getting_started/first_script.pt-br.md
@@ -21,22 +21,22 @@ Para ter mais detalhes sobre como iniciar uma sessão, leia nossa documentação
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L4" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L4" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L11" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L11" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L3" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L3" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L8" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L8" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L16" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L16" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -45,22 +45,22 @@ Nesse exemplo estamos [navegando]({{< ref "/documentation/webdriver/interactions
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L6" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L6" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L13" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L13" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L5" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L5" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L9" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L9" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L18" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L18" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -70,22 +70,22 @@ pode solicitar, incluindo window handles, tamanho / posição do navegador, cook
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#16" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#16" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L8" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L8" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L15" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L15" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L7" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L7" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L11" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L11" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L20" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L20" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -105,22 +105,22 @@ Leia mais sobre [Estratégias de espera]({{< ref "/documentation/webdriver/waits
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L18" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L10" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L10" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L17" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L17" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L9" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L9" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L14" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L14" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L23" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L23" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -131,22 +131,22 @@ com um sem o primeiro [encontrando um elemento]({{< ref "/documentation/webdrive
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L20-L21" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L20-L21" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L12-L13" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L12-L13" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L19-L20" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L19-L20" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L11-L12" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L11-L12" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L16-L17" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L16-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L25-L26" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L25-L26" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -156,22 +156,22 @@ mas você irá usá-las com frequência.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L23-L24" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L23-L24" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L15-L16" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L15-L16" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L22-L23" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L22-L23" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L14-L15" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L14-L15" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L19-L20" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L19-L20" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L28-L29" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L28-L29" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -180,22 +180,22 @@ Elementos podem guardar muitas [informações que podem ser solicitadas]({{< ref
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L27" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L26-27" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L19" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L18-19" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L26" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L25-26" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L18" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L17-18" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L23" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L22-23" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L32" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L31-32" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -208,31 +208,48 @@ See [Quitting Sessions]({{< ref "../drivers/#quitting-sessions" >}}).
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L21" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L21" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L28" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L28" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L20" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L20" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L28" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L28" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L35" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L35" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
 
 ## Running Selenium File
 
-{{< alert-code >}}
-Add example for how to execute each of the above pages via command line
-{{< /alert-code >}}
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/README.md#L60" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/README.md#L35" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="/examples/ruby/README.md#L36" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< gh-codeblock path="/examples/javascript/README.md#L36" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
 
 
 ## Próximos Passos
diff --git a/website_and_docs/content/documentation/webdriver/getting_started/first_script.zh-cn.md b/website_and_docs/content/documentation/webdriver/getting_started/first_script.zh-cn.md
index 9965fe31d2b4..82fa2c9310b2 100644
--- a/website_and_docs/content/documentation/webdriver/getting_started/first_script.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/getting_started/first_script.zh-cn.md
@@ -16,7 +16,7 @@ Selenium所做的一切,
 您将使用Selenium执行的大部分操作,
 都是以下基本命令的组合
 
-Click on the link to "View full example on GitHub" to see the code in context.
+点击 "View full example on GitHub" 的链接以查看上下文中的代码.
 
 ### 1. 使用驱动实例开启会话
 
@@ -24,22 +24,22 @@ Click on the link to "View full example on GitHub" to see the code in context.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L12" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L4" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L4" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L11" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L11" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L3" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L3" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L8" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L8" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L16" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L16" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -51,22 +51,22 @@ Click on the link to "View full example on GitHub" to see the code in context.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L14" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L6" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L6" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L13" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L13" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L5" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L5" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L9" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L9" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L18" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L18" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -77,22 +77,22 @@ Click on the link to "View full example on GitHub" to see the code in context.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#16" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#16" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L8" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L8" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L15" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L15" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L7" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L7" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L11" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L11" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L20" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L20" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -116,22 +116,22 @@ Click on the link to "View full example on GitHub" to see the code in context.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L18" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L18" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L10" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L10" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L17" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L17" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L9" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L9" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L14" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L14" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L23" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L23" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -142,22 +142,22 @@ Click on the link to "View full example on GitHub" to see the code in context.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L20-L21" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L20-L21" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L12-L13" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L12-L13" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L19-L20" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L19-L20" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L11-L12" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L11-L12" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L16-L17" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L16-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L25-L26" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L25-L26" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -168,22 +168,22 @@ Click on the link to "View full example on GitHub" to see the code in context.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L23-L24" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L23-L24" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L15-L16" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L15-L16" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L22-L23" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L22-L23" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L14-L15" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L14-L15" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L19-L20" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L19-L20" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L28-L29" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L28-L29" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -192,22 +192,22 @@ Click on the link to "View full example on GitHub" to see the code in context.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L27" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L26-27" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L19" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L18-19" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L26" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L25-26" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L18" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L17-18" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#23" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L22-23" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L32" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L31-32" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
@@ -217,39 +217,57 @@ Click on the link to "View full example on GitHub" to see the code in context.
 默认情况下, 该进程也会关闭浏览器. 
 无法向此驱动程序实例发送更多命令. 
 
-See [Quitting Sessions]({{< ref "../drivers/#quitting-sessions" >}}).
+详见 [Quitting Sessions]({{< ref "../drivers/#quitting-sessions" >}}).
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/first_script.py#L21" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/first_script.py#L21" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L28" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/FirstScript.cs#L28" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/first_script.rb#L20" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/first_script.rb#L20" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L28" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/firstScript.spec.js#L28" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L35" >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L35" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
 
-## Running Selenium File
+## 运行 Selenium 文件
 
-{{< alert-code >}}
-Add example for how to execute each of the above pages via command line
-{{< /alert-code >}}
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/README.md#L60" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/README.md#L35" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< gh-codeblock path="/examples/ruby/README.md#L36" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< gh-codeblock path="/examples/javascript/README.md#L36" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-code >}}
+{{< /tab >}}
+{{< /tabpane >}}
 
 
 ## 接下来的步骤
 
-Most Selenium users execute many sessions and need to organize them to minimize duplication and keep the code
-more maintainable. Read on to learn about how to put this code into context for your use case with
-[Using Selenium]({{< ref "using_selenium.md" >}}).
+大多数 Selenium 用户执行许多会话，
+需要组织它们以最大限度地减少重复并维持代码更易于维护.
+请继续阅读，了解如何将此代码放入您用例的上下文中
+[使用 Selenium]({{< ref "using_selenium.md" >}}).
diff --git a/website_and_docs/content/documentation/webdriver/getting_started/install_library.en.md b/website_and_docs/content/documentation/webdriver/getting_started/install_library.en.md
index ed8efbb61ec0..32e0ab93842f 100644
--- a/website_and_docs/content/documentation/webdriver/getting_started/install_library.en.md
+++ b/website_and_docs/content/documentation/webdriver/getting_started/install_library.en.md
@@ -20,24 +20,24 @@ you are using the latest version.
 
 {{< tabpane text=true >}}
   {{% tab header="Java" %}}
-View the minimum supported Java version [here](https://github.com/SeleniumHQ/selenium/blob/trunk/.bazelrc#L13).
+View the minimum supported Java version [here](https://github.com/SeleniumHQ/selenium/blob/trunk/.bazelrc#L32).
 
 Installation of Selenium libraries for Java is accomplished using a build tool.
 
 ### Maven
 Specify the dependencies in the project's `pom.xml` file:
 
-{{< gh-codeblock path="examples/java/pom.xml#L29-L33" >}}
+{{< gh-codeblock path="/examples/java/pom.xml#L30-L34" >}}
 
 ### Gradle
 Specify the dependency in the project `build.gradle` file as `testImplementation`:
 
-{{< gh-codeblock path="examples/java/build.gradle#L13-L14" >}}
+{{< gh-codeblock path="/examples/java/build.gradle#L13-L14" >}}
 
   {{% /tab %}}
   {{% tab header="Python" %}} 
 The minimum supported Python version for each Selenium version can be found 
-in `Supported Python Versions` on [PyPi](https://pypi.org/project/selenium/)
+in "Supported Python Versions" on [PyPi](https://pypi.org/project/selenium/).
 
 There are a couple different ways to install Selenium.
 
@@ -46,20 +46,22 @@ There are a couple different ways to install Selenium.
 ```shell
 pip install selenium
 ```
+<br>
 
 ### Download
 
-Alternatively you can download the [PyPI source archive](https://pypi.org/project/selenium/#files)
-(selenium-x.x.x.tar.gz) and install it using _setup.py_:
+Alternatively you can download the [PyPI Built Distribution](https://pypi.org/project/selenium/#files)
+(selenium-x.x.x.-py3-none-any.whl) and install it using _pip_:
 
 ```shell
-python setup.py install
+pip install selenium-x.x.x.-py3-none-any.whl
 ```
+<br>
 
 ### Require in project
 
 To use it in a project, add it to the `requirements.txt` file:
-{{< gh-codeblock path="examples/python/requirements.txt#L1" >}}
+{{< gh-codeblock path="/examples/python/requirements.txt#L1" >}}
 
   {{% /tab %}}
   {{% tab header="CSharp" %}}
@@ -73,18 +75,20 @@ There are a few options for installing Selenium.
 ```shell
 Install-Package Selenium.WebDriver
 ```
+<br>
 
 ### .NET CLI
 
 ```shell
 dotnet add package Selenium.WebDriver
 ```
+<br>
 
 ### CSProj
 
 in the project's `csproj` file, specify the dependency as a `PackageReference` in `ItemGroup`:
 
-{{< gh-codeblock language="xml" path="examples/dotnet/SeleniumDocs/SeleniumDocs.csproj#L14" >}}
+{{< gh-codeblock language="xml" path="/examples/dotnet/SeleniumDocs/SeleniumDocs.csproj#L14" >}}
 
 ### Additional considerations
 
@@ -125,10 +129,11 @@ Selenium can be installed two different ways.
 ```shell
 gem install selenium-webdriver
 ```
+<br>
 
 ### Add to project's gemfile
 
-{{< gh-codeblock language="ruby" path="examples/ruby/Gemfile#L10" >}}
+{{< gh-codeblock language="ruby" path="/examples/ruby/Gemfile#L10" >}}
 
   {{% /tab %}}
   {{% tab header="JavaScript" %}}
@@ -142,12 +147,13 @@ Selenium is typically installed using npm.
 ```shell
 npm install selenium-webdriver
 ```
+<br>
 
 ### Add to project
 
 In your project's `package.json`, add requirement to `dependencies`:
 
-{{< gh-codeblock path="examples/javascript/package.json#L14" >}}
+{{< gh-codeblock path="/examples/javascript/package.json#L14" >}}
 
   {{% /tab %}}
   {{< tab header="Kotlin" >}}
diff --git a/website_and_docs/content/documentation/webdriver/getting_started/install_library.ja.md b/website_and_docs/content/documentation/webdriver/getting_started/install_library.ja.md
index c6d22ec23d2b..dceafb0152d8 100644
--- a/website_and_docs/content/documentation/webdriver/getting_started/install_library.ja.md
+++ b/website_and_docs/content/documentation/webdriver/getting_started/install_library.ja.md
@@ -14,88 +14,90 @@ aliases: [
 最初にあなたの自動化プロジェクトにSeleniumのバインディングをインストールする必要があります。
 インストールの方法は選択した言語によって異なります。
 
-## Requirements by language
+## 言語別の要件
 
 {{< tabpane text=true >}}
   {{% tab header="Java" %}}
-View the minimum supported Java version [here](https://github.com/SeleniumHQ/selenium/blob/trunk/.bazelrc#L13).
+サポートされている最小のJavaバージョンを表示する [ここ](https://github.com/SeleniumHQ/selenium/blob/trunk/.bazelrc#L32).
 
-Installation of Selenium libraries for Java is accomplished using a build tool.
+Java用のSeleniumライブラリのインストールは、ビルドツールを使用して行います。
 
 ### Maven
-Specify the dependencies in the project's `pom.xml` file:
+プロジェクトの 'pom.xml' ファイルで依存関係を指定します:
 
-{{< gh-codeblock path="examples/java/pom.xml#L29-L33" >}}
+{{< gh-codeblock path="/examples/java/pom.xml#L30-L34" >}}
 
 ### Gradle
-Specify the dependency in the project `build.gradle` file as `testImplementation`:
+プロジェクトの 'build.gradle' ファイル内の依存関係を 'testImplementation' として指定します:
 
-{{< gh-codeblock path="examples/java/build.gradle#L13-L14" >}}
+{{< gh-codeblock path="/examples/java/build.gradle#L13-L14" >}}
 
   {{% /tab %}}
   {{% tab header="Python" %}}
-The minimum supported Python version for each Selenium version can be found
-in `Supported Python Versions` on [PyPi](https://pypi.org/project/selenium/)
+各 Selenium バージョンでサポートされている最小 Python バージョンについては、次の場所にあります `サポートされている Python バージョン` オン [PyPi](https://pypi.org/project/selenium/)。
 
-There are a couple different ways to install Selenium.
+Seleniumをインストールするには、いくつかの方法があります。
 
 ### Pip
 
 ```shell
 pip install selenium
 ```
+<br>
 
-### Download
+### ダウンロード
 
-Alternatively you can download the [PyPI source archive](https://pypi.org/project/selenium/#files)
-(selenium-x.x.x.tar.gz) and install it using _setup.py_:
+または、ダウンロードすることもできます[PyPI ソースアーカイブ](https://pypi.org/project/selenium/#files)
+(selenium-x.x.x.-py3-none-any.whl) を使用してインストールします _pip_:
 
 ```shell
-python setup.py install
+pip install selenium-x.x.x.-py3-none-any.whl
 ```
+<br>
 
-### Require in project
+### プロジェクトで必要
 
-To use it in a project, add it to the `requirements.txt` file:
-{{< gh-codeblock path="examples/python/requirements.txt#L1" >}}
+プロジェクトで使用するには、requirements.txt ファイルに追加します:
+{{< gh-codeblock path="/examples/python/requirements.txt#L1" >}}
 
   {{% /tab %}}
   {{% tab header="CSharp" %}}
-A list of all supported frameworks for each version of Selenium 
-is available on [Nuget](https://www.nuget.org/packages/Selenium.WebDriver)
+Seleniumの各バージョンでサポートされているすべてのフレームワークのリスト
+で利用可能です[Nuget](https://www.nuget.org/packages/Selenium.WebDriver)
 
-There are a few options for installing Selenium.
+Seleniumのインストールにはいくつかのオプションがあります。
 
-### Packet Manager
+### パケットマネージャー
 
 ```shell
 Install-Package Selenium.WebDriver
 ```
+<br>
 
 ### .NET CLI
 
 ```shell
 dotnet add package Selenium.WebDriver
 ```
+<br>
 
 ### CSProj
 
-in the project's `csproj` file, specify the dependency as a `PackageReference` in `ItemGroup`:
+プロジェクトの `csproj`ファイルで、`ItemGroup` の `PackageReference`として依存関係を指定します。:
 
-{{< gh-codeblock language="xml" path="examples/dotnet/SeleniumDocs/SeleniumDocs.csproj#L14" >}}
+{{< gh-codeblock language="xml" path="/examples/dotnet/SeleniumDocs/SeleniumDocs.csproj#L14" >}}
 
-### Additional considerations
+### その他の考慮事項
 
-Further items of note for using Visual Studio Code (vscode) and C#
+その他、使用上の注意点 Visual Studio Code (vscode) そして C#
 
-Install the compatible .NET SDK as per the section above.
-Also install the vscode extensions (Ctrl-Shift-X) for C# and NuGet.
-Follow the [instruction here](https://docs.microsoft.com/en-us/dotnet/core/tutorials/with-visual-studio-code?pivots=dotnet-5-0)
-to create and run the "Hello World" console project using C#.
-You may also create a NUnit starter project using the command line `dotnet new NUnit`.
-Make sure the file `%appdata%\NuGet\nuget.config` is configured properly as some developers reported that it will be empty due to some issues.
-If `nuget.config` is empty, or not configured properly, then .NET builds will fail for Selenium Projects.
-Add the following section to the file `nuget.config` if it is empty:
+上記のセクションに従って、互換性のある .NET SDK をインストールします。
+また、C# と NuGet の vscode 拡張機能 (Ctrl-Shift-X) もインストールします。に従ってください[指示はこちら](https://docs.microsoft.com/en-us/dotnet/core/tutorials/with-visual-studio-code?pivots=dotnet-5-0)
+C# を使用して "Hello World" コンソール プロジェクトを作成および実行します。
+コマンドラインを使用してNUnitスタータープロジェクトを作成することもできます `dotnet new NUnit`.
+ファイルを確認してください `%appdata%\NuGet\nuget.config`一部の開発者がいくつかの問題のために空になると報告したため、適切に構成されています。
+もし`nuget.config`が空であるか、正しく構成されていない場合、Selenium プロジェクトの .NET ビルドは失敗します。
+次のセクションをファイルに追加します`nuget.config` 空の場合:
 ```
 <configuration>
   <packageSources>
@@ -104,54 +106,55 @@ Add the following section to the file `nuget.config` if it is empty:
   </packageSources>
 ...
 ```
-For more info about `nuget.config` [click here](https://docs.microsoft.com/en-us/nuget/reference/nuget-config-file).
-You may have to customize `nuget.config` to meet you needs.
+詳細については、`nuget.config` [ここをクリック](https://docs.microsoft.com/en-us/nuget/reference/nuget-config-file).
+カスタマイズする必要があるかもしれません `nuget.config` あなたのニーズを満たすために。
 
-Now, go back to vscode, press Ctrl-Shift-P, and type "NuGet Add Package", and enter the required Selenium packages such as `Selenium.WebDriver`.
-Press Enter and select the version.
-Now you can use the examples in the documentation related to C# with vscode.
+さて、戻ってください vscode、プレス Ctrl-Shift-P、およびタイプ "NuGet Add Package"をクリックし、必要な Selenium パッケージ `Selenium.WebDriver`.
+Enter キーを押して、バージョンを選択します。
+これで、C# と vscode に関連するドキュメントの例を使用できるようになりました。
 
   {{% /tab %}}
   {{% tab header="Ruby" %}}
-You can see the minimum required version of Ruby for any given Selenium version 
-on [rubygems.org](https://rubygems.org/gems/selenium-webdriver/)
+特定の Selenium バージョンに対して最低限必要な Ruby のバージョンを確認できます
+オン [rubygems.org](https://rubygems.org/gems/selenium-webdriver/)
 
-Selenium can be installed two different ways.
+Seleniumは2つの異なる方法でインストールできます。
 
-### Install manually
+### 手動でインストールする
 
 ```shell
 gem install selenium-webdriver
 ```
+<br>
 
-### Add to project's gemfile
+### プロジェクトの gemfile に追加
 
-{{< gh-codeblock language="ruby" path="examples/ruby/Gemfile#L10" >}}
+{{< gh-codeblock language="ruby" path="/examples/ruby/Gemfile#L10" >}}
 
   {{% /tab %}}
   {{% tab header="JavaScript" %}}
-You can find the minimum required version of Node for any given version of Selenium in the
-`Node Support Policy` section on [npmjs](https://www.npmjs.com/package/selenium-webdriver)
+Seleniumの特定のバージョンに最低限必要なNodeのバージョンは、`Node Support Policy` 節 オン [npmjs](https://www.npmjs.com/package/selenium-webdriver)
 
-Selenium is typically installed using npm.
+Seleniumは通常、npmを使用してインストールされます。
 
-### Install locally
+### ローカルにインストールする
 
 ```shell
 npm install selenium-webdriver
 ```
+<br>
 
-### Add to project
+### プロジェクトに加える
 
-In your project's `package.json`, add requirement to `dependencies`:
+プロジェクトの `package.json`で、要件を `dependencies`:
 
-{{< gh-codeblock path="examples/javascript/package.json#L14" >}}
+{{< gh-codeblock path="/examples/javascript/package.json#L14" >}}
 
   {{% /tab %}}
   {{< tab header="Kotlin" >}}
-    Use the Java bindings for Kotlin.
+    Kotlin の Java バインディングを使用します。
   {{< /tab >}}
 {{< /tabpane >}}
 
-## Next Step
-[Create your first Selenium script]({{< ref "first_script.md" >}})
+## 次のステップ
+[初めてのSeleniumスクリプトを作成する]({{< ref "first_script.md" >}})
diff --git a/website_and_docs/content/documentation/webdriver/getting_started/install_library.pt-br.md b/website_and_docs/content/documentation/webdriver/getting_started/install_library.pt-br.md
index ddda5f3cf15f..7c754befe561 100644
--- a/website_and_docs/content/documentation/webdriver/getting_started/install_library.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/getting_started/install_library.pt-br.md
@@ -19,7 +19,7 @@ O processo de instalação de bibliotecas depende da linguagem que você escolhe
 
 {{< tabpane text=true >}}
   {{% tab header="Java" %}}
-Veja a mínima versão do Java suportada [aqui](https://github.com/SeleniumHQ/selenium/blob/trunk/.bazelrc#L13).
+Veja a mínima versão do Java suportada [aqui](https://github.com/SeleniumHQ/selenium/blob/trunk/.bazelrc#L32).
 
 A instalação da biblioteca Selenium para Java é feita a partir de uma build tool.
 
@@ -27,17 +27,17 @@ A instalação da biblioteca Selenium para Java é feita a partir de uma build t
 ### Maven
 Especifique a dependência no `pom.xml` do seu projeto.
 
-{{< gh-codeblock path="examples/java/pom.xml#L29-L33" >}}
+{{< gh-codeblock path="/examples/java/pom.xml#L30-L34" >}}
 
 ### Gradle
 Especifique a dependência no `build.gradle` do seu projeto como `testImplementation`:
 
-{{< gh-codeblock path="examples/java/build.gradle#L13-L14" >}}
+{{< gh-codeblock path="/examples/java/build.gradle#L13-L14" >}}
 
   {{% /tab %}}
   {{% tab header="Python" %}}
 A mínima versão suportada do Python para cada versão do Selenium pode ser encontrada 
-em `Supported Python Versions` no [PyPi](https://pypi.org/project/selenium/)
+em "Supported Python Versions" no [PyPi](https://pypi.org/project/selenium/).
 
 Existe muitas formas diferentes de instalar Selenium.
 
@@ -46,20 +46,22 @@ Existe muitas formas diferentes de instalar Selenium.
 ```shell
 pip install selenium
 ```
+<br>
 
 ### Download
 
 Como uma alternativa você pode baixar o [código fonte PyPI](https://pypi.org/project/selenium/#files)
-(selenium-x.x.x.tar.gz) e instalar usando _setup.py_:
+(selenium-x.x.x.-py3-none-any.whl) e instalar usando _pip_:
 
 ```shell
-python setup.py install
+pip install selenium-x.x.x.-py3-none-any.whl
 ```
+<br>
 
 ### Exigir em um projeto
 
 Para usar em um projeto, adicione no arquivo `requirements.txt`.
-{{< gh-codeblock path="examples/python/requirements.txt#L1" >}}
+{{< gh-codeblock path="/examples/python/requirements.txt#L1" >}}
 
   {{% /tab %}}
   {{% tab header="CSharp" %}}
@@ -73,18 +75,20 @@ Existe algumas opções para instalar o Selenium.
 ```shell
 Install-Package Selenium.WebDriver
 ```
+<br>
 
 ### .NET CLI
 
 ```shell
 dotnet add package Selenium.WebDriver
 ```
+<br>
 
 ### CSProj
 
 No arquivo `csproj` do seu projeto, especifique a dependência como `PackageReference` no `ItemGroup`:
 
-{{< gh-codeblock language="xml" path="examples/dotnet/SeleniumDocs/SeleniumDocs.csproj#L14" >}}
+{{< gh-codeblock language="xml" path="/examples/dotnet/SeleniumDocs/SeleniumDocs.csproj#L14" >}}
 
 ### Considerações adicionais
 
@@ -127,10 +131,11 @@ O Selenium pode ser instalado de duas formas diferentes.
 ```shell
 gem install selenium-webdriver
 ```
+<br>
 
 ### Adicione para o gemfile do projeto
 
-{{< gh-codeblock language="ruby" path="examples/ruby/Gemfile#L10" >}}
+{{< gh-codeblock language="ruby" path="/examples/ruby/Gemfile#L10" >}}
 
   {{% /tab %}}
   {{% tab header="JavaScript" %}}
@@ -144,12 +149,13 @@ Selenium é normalmente instalado usando npm.
 ```shell
 npm install selenium-webdriver
 ```
+<br>
 
 ### Adicione ao seu projeto
 
 No `package.json` do seu projeto, adicione os requisitos em `dependencies`:
 
-{{< gh-codeblock path="examples/javascript/package.json#L14" >}}
+{{< gh-codeblock path="/examples/javascript/package.json#L14" >}}
 
   {{% /tab %}}
   {{< tab header="Kotlin" >}}   
diff --git a/website_and_docs/content/documentation/webdriver/getting_started/install_library.zh-cn.md b/website_and_docs/content/documentation/webdriver/getting_started/install_library.zh-cn.md
index 09f79be6eaf7..b286b8cbfcbf 100644
--- a/website_and_docs/content/documentation/webdriver/getting_started/install_library.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/getting_started/install_library.zh-cn.md
@@ -18,19 +18,19 @@ aliases: [
 
 {{< tabpane text=true >}}
   {{% tab header="Java" %}}
-查看该库所支持java的最低版本 [here](https://github.com/SeleniumHQ/selenium/blob/trunk/.bazelrc#L13).
+查看该库所支持java的最低版本 [here](https://github.com/SeleniumHQ/selenium/blob/trunk/.bazelrc#L32).
 
 应熟练掌握build tool以安装支持java的Selenium库
 
 ### Maven
 具体的依赖位于项目中的 `pom.xml` 文件:
 
-{{< gh-codeblock path="examples/java/pom.xml#L29-L33" >}}
+{{< gh-codeblock path="/examples/java/pom.xml#L30-L34" >}}
 
 ### Gradle
 具体的依赖位于项目中的 `build.gradle` 文件中的 `testImplementation`:
 
-{{< gh-codeblock path="examples/java/build.gradle#L13-L14" >}}
+{{< gh-codeblock path="/examples/java/build.gradle#L13-L14" >}}
 
   {{% /tab %}}
   {{% tab header="Python" %}}
@@ -44,20 +44,22 @@ aliases: [
 ```shell
 pip install selenium
 ```
+<br>
 
 ### 下载
 
-此外你可以从这里下载 [PyPI source archive](https://pypi.org/project/selenium/#files)
-(selenium-x.x.x.tar.gz) 并通过: _setup.py_ 文件安装:
+此外你可以从这里下载 [PyPI Built Distribution](https://pypi.org/project/selenium/#files)
+(selenium-x.x.x.-py3-none-any.whl) 并通过: _pip_ 文件安装:
 
 ```shell
-python setup.py install
+pip install selenium-x.x.x.-py3-none-any.whl
 ```
+<br>
 
 ### 在项目中使用
 
 为了在项目中使用它,需要将它添加到 `requirements.txt` 文件中:
-{{< gh-codeblock path="examples/python/requirements.txt#L1" >}}
+{{< gh-codeblock path="/examples/python/requirements.txt#L1" >}}
 
   {{% /tab %}}
   {{% tab header="CSharp" %}}
@@ -71,18 +73,20 @@ Selenium 所支持的所有平台的列表一览
 ```shell
 Install-Package Selenium.WebDriver
 ```
+<br>
 
 ### .NET CLI
 
 ```shell
 dotnet add package Selenium.WebDriver
 ```
+<br>
 
 ### CSProj
 
 在 `csproj` 文件里, 具体的依赖 `PackageReference`(包参数) 位于 `ItemGroup` (项目组)中:
 
-{{< gh-codeblock language="xml" path="examples/dotnet/SeleniumDocs/SeleniumDocs.csproj#L14" >}}
+{{< gh-codeblock language="xml" path="/examples/dotnet/SeleniumDocs/SeleniumDocs.csproj#L14" >}}
 
 ### 其他附加思虑事项
 
@@ -123,10 +127,11 @@ Selenium 可以使用两种不同方法安装.
 ```shell
 gem install selenium-webdriver
 ```
+<br>
 
 ### 加入项目的 gemfile
 
-{{< gh-codeblock language="ruby" path="examples/ruby/Gemfile#L10" >}}
+{{< gh-codeblock language="ruby" path="/examples/ruby/Gemfile#L10" >}}
 
   {{% /tab %}}
   {{% tab header="JavaScript" %}}
@@ -141,12 +146,13 @@ Selenium is typically installed using npm.
 ```shell
 npm install selenium-webdriver
 ```
+<br>
 
 ### 加入项目
 
 在你的项目 `package.json`, 必须加入到 `dependencies`:
 
-{{< gh-codeblock path="examples/javascript/package.json#L14" >}}
+{{< gh-codeblock path="/examples/javascript/package.json#L14" >}}
 
   {{% /tab %}}
   {{< tab header="Kotlin" >}}
diff --git a/website_and_docs/content/documentation/webdriver/getting_started/using_selenium.en.md b/website_and_docs/content/documentation/webdriver/getting_started/using_selenium.en.md
index f6b53e97fc1b..620d4faa38d7 100644
--- a/website_and_docs/content/documentation/webdriver/getting_started/using_selenium.en.md
+++ b/website_and_docs/content/documentation/webdriver/getting_started/using_selenium.en.md
@@ -3,20 +3,20 @@ title: "Organizing and Executing Selenium Code"
 linkTitle: "Using Selenium"
 weight: 10
 description: >
-    Scaling Selenium execution with an IDE and a Test Runner library
+  Scaling Selenium execution with an IDE and a Test Runner library
 ---
 
 {{< alert-content >}}
 This page is very incomplete and has placeholders for things that need to be added or expounded on.
 {{< /alert-content >}}
 
-If you want to run more than a handful of one-off scripts, you need to 
+If you want to run more than a handful of one-off scripts, you need to
 be able to organize and work with your code. This page should give you
 ideas for how to actually do productive things with your Selenium code.
 
 ## Common Uses
 
-Most people use Selenium to execute automated tests for web applications, 
+Most people use Selenium to execute automated tests for web applications,
 but Selenium supports any use case of browser automation.
 
 ### Repetitive Tasks
@@ -34,12 +34,11 @@ terms of service as some websites do not permit it and others will even block Se
 
 Running Selenium for testing requires making assertions on actions taken by Selenium.
 So a good assertion library is required. Additional features to provide structure for tests
-require use of [Test Runner](#test-runners).
-
+require use of [Test Runner](#test-runner).
 
 ## IDEs
 
-Regardless of how you use Selenium code, 
+Regardless of how you use Selenium code,
 you won't be very effective writing or executing it without a good
 Integrated Developer Environment. Here are some common options...
 
@@ -54,10 +53,11 @@ Integrated Developer Environment. Here are some common options...
 ## Test Runner
 
 Even if you aren't using Selenium for testing, if you have advanced use cases, it might make
-sense to use a test runner to better organize your code. Being able to use before/after hooks 
+sense to use a test runner to better organize your code. Being able to use before/after hooks
 and run things in groups or in parallel can be very useful.
 
 ### Choosing
+
 There are many different test runners available.
 
 All the code examples in this documentation can be found in (or is being moved to) our
@@ -67,35 +67,42 @@ that will be used for all examples on this page.
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
+
 - [JUnit](https://junit.org/junit5/) - A widely-used testing framework for Java-based Selenium tests.
-- [TestNG](https://testng.org/doc/) - Offers extra features like parallel test execution and parameterized tests.
-{{% /tab %}}
+- [TestNG](https://testng.org/) - Offers extra features like parallel test execution and parameterized tests.
+  {{% /tab %}}
 
 {{% tab header="Python" %}}
+
 - [pytest](https://pytest.org/) - A preferred choice for many, thanks to its simplicity and powerful plugins.
 - [unittest](https://docs.python.org/3/library/unittest.html) - Python's standard library testing framework.
-{{% /tab %}}
+  {{% /tab %}}
 
 {{% tab header="CSharp" %}}
+
 - [NUnit](https://nunit.org/) - A popular unit-testing framework for .NET.
 - [MS Test](https://docs.microsoft.com/en-us/visualstudio/test/getting-started-with-unit-testing?view=vs-2019) - Microsoft's own unit testing framework.
-{{% /tab %}}
+  {{% /tab %}}
 
 {{% tab header="Ruby" %}}
+
 - [RSpec](https://rspec.info/) - The most widely used testing library for running Selenium tests in Ruby.
 - [Minitest](https://github.com/seattlerb/minitest) - A lightweight testing framework that comes with Ruby standard library.
-{{% /tab %}}
+  {{% /tab %}}
 
 {{% tab header="JavaScript" %}}
+
 - [Jest](https://jestjs.io/) - Primarily known as a testing framework for React, it can also be used for Selenium tests.
 - [Mocha](https://mochajs.org/) - The most common JS library for running Selenium tests.
-{{% /tab %}}
+  {{% /tab %}}
 
 {{% tab header="Kotlin" %}}
 
+- [Kotest](https://kotest.io/) - A flexible and comprehensive testing framework specifically designed for Kotlin.
+- [JUnit5](https://junit.org/junit5/) - The standard Java testing framework, fully compatible with Kotlin.
 {{% /tab %}}
-{{< /tabpane >}}
 
+{{< /tabpane >}}
 
 ### Installing
 
@@ -136,19 +143,19 @@ In your project's `package.json`, add requirement to `dependencies`:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java#L30-L31" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/using_selenium_tests.py#L8-L9" >}}
+{{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/UsingSeleniumTest.cs#L19-L20" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/using_selenium_spec.rb#L14-L15" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/runningTests.spec.js#L14-L15" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -158,20 +165,50 @@ In your project's `package.json`, add requirement to `dependencies`:
 ### Setting Up and Tearing Down
 
 {{< tabpane text=true >}}
-{{< tab header="Java" >}}
-{{< badge-code >}}
-{{< /tab >}}
+{{% tab header="Java" %}}
+
+### Set Up
+
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java#L19-L22" >}}
+
+### Tear Down
+
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java#L45-L48" >}}
+
+{{% /tab %}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+
+### Set Up
+
+{{< gh-codeblock path="/examples/python/tests/getting_started/using_selenium_tests.py#L25-L28" >}}
+
+### Tear Down
+
+{{< gh-codeblock path="/examples/python/tests/getting_started/using_selenium_tests.py#L30-31" >}}
+
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-{{< badge-code >}}
-{{< /tab >}}
+{{% tab header="Ruby" %}}
+
+### Set Up
+
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/using_selenium_spec.rb#L7-L9" >}}
+
+### Tear Down
+
+{{< gh-codeblock path="/examples/ruby/spec/spec_helper.rb#L30" >}}
+{{% /tab %}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+
+### Set Up
+
+{{< gh-codeblock path="/examples/javascript/test/getting_started/runningTests.spec.js#L7-L9" >}}
+
+### Tear Down
+
+{{< gh-codeblock path="/examples/javascript/test/getting_started/runningTests.spec.js#L30" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -182,6 +219,7 @@ In your project's `package.json`, add requirement to `dependencies`:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
+
 ### Maven
 
 ```shell
@@ -196,18 +234,28 @@ gradle clean test
 
 {{% /tab %}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/README.md#L35" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-{{< badge-code >}}
-{{< /tab >}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/README.md#L26" >}}
+{{% /tab %}}
 {{% tab header="JavaScript" %}}
+
+### Mocha
+
 ```shell
 mocha runningTests.spec.js
 ```
+
+### npx
+
+```shell
+npx mocha runningTests.spec.js
+```
+
 {{% /tab %}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -221,19 +269,19 @@ Here's an example of that code using a test runner:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/using_selenium_tests.py" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/using_selenium_tests.py" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/UsingSeleniumTest.cs" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/UsingSeleniumTest.cs" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/using_selenium_spec.rb" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/using_selenium_spec.rb" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/runningTests.spec.js" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/runningTests.spec.js" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -242,7 +290,7 @@ Here's an example of that code using a test runner:
 
 ## Next Steps
 
-Take what you've learned and build out your Selenium code! 
+Take what you've learned and build out your Selenium code!
 
 As you find more functionality that you need, read up on the rest of our
 [WebDriver documentation]({{< ref "/documentation/webdriver/" >}}).
diff --git a/website_and_docs/content/documentation/webdriver/getting_started/using_selenium.ja.md b/website_and_docs/content/documentation/webdriver/getting_started/using_selenium.ja.md
index aeafeeed6163..8bc38988a412 100644
--- a/website_and_docs/content/documentation/webdriver/getting_started/using_selenium.ja.md
+++ b/website_and_docs/content/documentation/webdriver/getting_started/using_selenium.ja.md
@@ -1,43 +1,38 @@
 ---
-title: "Organizing and Executing Selenium Code"
-linkTitle: "Using Selenium"
+title: "Seleniumコードの整理と実行"
+linkTitle: "Seleniumの使用"
 weight: 10
 description: >
-    Scaling Selenium execution with an IDE and a Test Runner library
+  IDEとテストランナーライブラリを使用したSelenium実行のスケーリング
 ---
 
-If you want to run more than a handful of one-off scripts, you need to 
-be able to organize and work with your code. This page should give you
-ideas for how to actually do productive things with your Selenium code.
+一握り以上の 1 回限りのスクリプトを実行する場合は、コードを整理して操作できる必要があります。このページでは、Seleniumコードを使用して実際に生産的なことを行う方法についてのアイデアを提供します。
 
-## Common Uses
+## 一般的な用途
 
-Most people use Selenium to execute automated tests for web applications, 
-but Selenium support any use case of browser automation.
+ほとんどの人はSeleniumを使用してWebアプリケーションの自動テストを実行します。
+しかし、Seleniumはブラウザ自動化のあらゆるユースケースをサポートします。
 
-### Repetitive Tasks
+### 反復タスク
 
-Perhaps you need to log into a website and download something, or submit a form.
-You can create a Selenium script to run with a service at preset times.
+おそらく、Webサイトにログインして何かをダウンロードするか、フォームを送信する必要があります。
+Selenium スクリプトを作成して、あらかじめ設定された時間にサービスと共に実行できます。
 
-### Web Scraping
+### Webスクレイピング
 
-Are you looking to collect data from a site that doesn't have an API? Selenium
-will let you do this, but please make sure you are familiar with the website's
-terms of service as some websites do not permit it and others will even block Selenium.
+APIがないサイトからデータを収集したいとお考えですか?セレン
+これを行うことができますが、Webサイトに精通していることを確認してください。
+一部のWebサイトでは許可されておらず、他のWebサイトではSeleniumがブロックされることさえあります。
 
-### Testing
-
-Running Selenium for testing requires making assertions on actions taken by Selenium.
-So a good assertion library is required. Additional features to provide structure for tests
-require use of [Test Runner](#test-runners).
+### テスティング
 
+テストのためにSeleniumを実行するには、Seleniumが実行したアクションに対してアサーションを行う必要があります。
+したがって、優れたアサーションライブラリが必要です。テストの構造を提供する追加機能
+使用する必要があります [Test Runner](#test-runner).
 
 ## IDEs
 
-Regardless of how you use Selenium code, 
-you won't be very effective writing or executing it without a good
-Integrated Developer Environment. Here are some common options...
+Seleniumコードの使用方法に関係なく、優れた統合開発環境がなければ、Seleniumコードの作成や実行はあまり効果的ではありません。一般的なオプションを次に示します...
 
 - [Eclipse](https://www.eclipse.org/)
 - [IntelliJ IDEA](https://www.jetbrains.com/idea/)
@@ -49,54 +44,59 @@ Integrated Developer Environment. Here are some common options...
 
 ## Test Runner
 
-Even if you aren't using Selenium for testing, if you have advanced use cases, it might make
-sense to use a test runner to better organize your code. Being able to use before/after hooks 
-and run things in groups or in parallel can be very useful.
+テストにSeleniumを使用していない場合でも、高度なユースケースがある場合は、テストランナーを使用してコードをより適切に整理するのが理にかなっている場合があります。before/after フックを使用して、グループまたは並行して物事を実行できると非常に便利です。
+
+### 卜
 
-### Choosing
-There are many different test runners available.
+さまざまなテストランナーが利用可能です。
 
-All the code examples in this documentation can be found in (or is being moved to) our
-example directories that use test runners and get executed every release to ensure all the code is correct and updated.
-Here is a list of test runners with links. The first item is the one that is used by this repository and the one
-that will be used for all examples on this page.
+このドキュメントのすべてのコード例は、
+テストランナーを使用し、すべてのコードが正しく更新されていることを確認するためにリリースごとに実行されるディレクトリの例。
+リンク付きのテストランナーのリストを次に示します。最初の項目は、このリポジトリで使用される項目と
+このページのすべての例で使用されます。
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
-- [JUnit](https://junit.org/junit5/) - A widely-used testing framework for Java-based Selenium tests.
-- [TestNG](https://testng.org/doc/) - Offers extra features like parallel test execution and parameterized tests.
-{{% /tab %}}
+
+- [JUnit](https://junit.org/junit5/) - JavaベースのSeleniumテストで広く使用されているテストフレームワーク。
+- [TestNG](https://testng.org/) - 並列テスト実行やパラメーター化されたテストなどの追加機能を提供します。
+  {{% /tab %}}
 
 {{% tab header="Python" %}}
-- [pytest](https://pytest.org/) - A preferred choice for many, thanks to its simplicity and powerful plugins.
-- [unittest](https://docs.python.org/3/library/unittest.html) - Python's standard library testing framework.
-{{% /tab %}}
+
+- [pytest](https://pytest.org/) - そのシンプルさと強力なプラグインのおかげで、多くの人に好まれる選択肢です。
+- [unittest](https://docs.python.org/3/library/unittest.html) - Python の標準ライブラリテストフレームワーク。
+  {{% /tab %}}
 
 {{% tab header="CSharp" %}}
-- [NUnit](https://nunit.org/) - A popular unit-testing framework for .NET.
-- [MS Test](https://docs.microsoft.com/en-us/visualstudio/test/getting-started-with-unit-testing?view=vs-2019) - Microsoft's own unit testing framework.
-{{% /tab %}}
+
+- [NUnit](https://nunit.org/) - .NET の一般的な単体テスト フレームワーク。
+- [MS Test](https://docs.microsoft.com/en-us/visualstudio/test/getting-started-with-unit-testing?view=vs-2019) - Microsoft 独自の単体テスト フレームワーク。
+  {{% /tab %}}
 
 {{% tab header="Ruby" %}}
-- [RSpec](https://rspec.info/) - The most widely used testing library for running Selenium tests in Ruby.
-- [Minitest](https://github.com/seattlerb/minitest) - A lightweight testing framework that comes with Ruby standard library.
-{{% /tab %}}
+
+- [RSpec](https://rspec.info/) - RubyでSeleniumテストを実行するために最も広く使用されているテストライブラリ。
+- [Minitest](https://github.com/seattlerb/minitest) - Ruby標準ライブラリに付属する軽量なテストフレームワークです。
+  {{% /tab %}}
 
 {{% tab header="JavaScript" %}}
-- [Jest](https://jestjs.io/) - Primarily known as a testing framework for React, it can also be used for Selenium tests.
-- [Mocha](https://mochajs.org/) - The most common JS library for running Selenium tests.
-{{% /tab %}}
+
+- [Jest](https://jestjs.io/) - 主にReactのテストフレームワークとして知られていますが、Seleniumのテストにも使用できます。
+- [Mocha](https://mochajs.org/) - Seleniumテストを実行するための最も一般的なJSライブラリ。
+  {{% /tab %}}
 
 {{% tab header="Kotlin" %}}
 
+- [Kotest](https://kotest.io/) - Kotlin専用に設計された、柔軟で包括的なテストフレームワークです。
+- [JUnit5](https://junit.org/junit5/) - 標準的なJavaテストフレームワークであり、Kotlinと完全に互換性があります。
 {{% /tab %}}
-{{< /tabpane >}}
 
+{{< /tabpane >}}
 
-### Installing
+### 装着
 
-This is very similar to what was required in [Install a Selenium Library]({{< ref "install_library.md" >}}).
-This code is only showing examples for what is being used in our Documentation Examples project.
+これは、で必要とされたものと非常によく似ています [Seleniumライブラリのインストール]({{< ref "install_library.md" >}})。このコードは、私たちのドキュメント例プロジェクトで使用されているものの例を示しているだけです。
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
@@ -108,76 +108,108 @@ This code is only showing examples for what is being used in our Documentation E
 {{% /tab %}}
 {{% tab header="Python" %}}
 
-To use it in a project, add it to the `requirements.txt` file:
+プロジェクトで使用するには、requirements.txt ファイルに追加します:
 
 {{% /tab %}}
 {{% tab header="CSharp" %}}
-in the project's `csproj` file, specify the dependency as a `PackageReference` in `ItemGroup`:
+プロジェクトの 'csproj' ファイルで、依存関係を 'ItemGroup' の 'PackageReference' として指定します:
 
 {{% /tab %}}
 {{% tab header="Ruby" %}}
 
-Add to project's gemfile
+プロジェクトの gemfile に追加
 
 {{% /tab %}}
 {{% tab header="JavaScript" %}}
-In your project's `package.json`, add requirement to `dependencies`:
+プロジェクトの 'package.json' で、要件を 'dependencies' に追加します。:
 
 {{% /tab %}}
 {{< tab header="Kotlin" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Asserting
+### 主張
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java#L30-L31" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/using_selenium_tests.py#L8-L9" >}}
+{{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/UsingSeleniumTest.cs#L19-L20" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/using_selenium_spec.rb#L14-L15" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/runningTests.spec.js#L14-L15" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L20-21" >}}
+
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Setting Up and Tearing Down
+### セットアップとティアダウン
 
 {{< tabpane text=true >}}
-{{< tab header="Java" >}}
-{{< badge-code >}}
-{{< /tab >}}
+{{% tab header="Java" %}}
+
+### 並べる
+
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java#L19-L22" >}}
+
+### 取り壊す
+
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java#L45-L48" >}}
+
+{{% /tab %}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+
+### 並べる
+
+{{< gh-codeblock path="/examples/python/tests/getting_started/using_selenium_tests.py#L25-L28" >}}
+
+### 取り壊す
+
+{{< gh-codeblock path="/examples/python/tests/getting_started/using_selenium_tests.py#L30-31" >}}
+
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-{{< badge-code >}}
-{{< /tab >}}
+{{% tab header="Ruby" %}}
+
+### 並べる
+
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/using_selenium_spec.rb#L7-L9" >}}
+
+### 取り壊す
+
+{{< gh-codeblock path="/examples/ruby/spec/spec_helper.rb#L30" >}}
+{{% /tab %}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+
+### 並べる
+
+{{< gh-codeblock path="/examples/javascript/test/getting_started/runningTests.spec.js#L7-L9" >}}
+
+### 取り壊す
+
+{{< gh-codeblock path="/examples/javascript/test/getting_started/runningTests.spec.js#L30" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Executing
+### 実行
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
+
 ### Maven
 
 ```shell
@@ -192,53 +224,62 @@ gradle clean test
 
 {{% /tab %}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/README.md#L35" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-{{< badge-code >}}
-{{< /tab >}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/README.md#L26" >}}
+{{% /tab %}}
 {{% tab header="JavaScript" %}}
+
+### Mocha
+
 ```shell
 mocha runningTests.spec.js
 ```
+
+### npx
+
+```shell
+npx mocha runningTests.spec.js
+```
+
 {{% /tab %}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Examples
+### 例
 
-In [First script]({{< ref "first_script.md" >}}), we saw each of the components of a Selenium script.
-Here's an example of that code using a test runner:
+[最初のスクリプト]({{< ref "first_script.md" >}})のトピックでは、Seleniumスクリプトの各コンポーネントを見ました。こちらが、テストランナーを使用したそのコードの例です。
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/using_selenium_tests.py" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/using_selenium_tests.py" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/UsingSeleniumTest.cs" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/UsingSeleniumTest.cs" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/using_selenium_spec.rb" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/using_selenium_spec.rb" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/runningTests.spec.js" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/runningTests.spec.js" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Next Steps
+## 次のステップ
 
-Take what you've learned and build out your Selenium code! 
+学んだことを活かして、Seleniumコードを構築します!
 
-As you find more functionality that you need, read up on the rest of our
-[WebDriver documentation]({{< ref "/documentation/webdriver/" >}}).
+必要な機能が他にも見つかったら、残りの機能をお読みください
+[WebDriver ドキュメント]({{< ref "/documentation/webdriver/" >}}).
diff --git a/website_and_docs/content/documentation/webdriver/getting_started/using_selenium.pt-br.md b/website_and_docs/content/documentation/webdriver/getting_started/using_selenium.pt-br.md
index 317ecf9023cf..ada587f9196e 100644
--- a/website_and_docs/content/documentation/webdriver/getting_started/using_selenium.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/getting_started/using_selenium.pt-br.md
@@ -3,16 +3,16 @@ title: "Organizando e executando o código Selenium"
 linkTitle: "Utilizando o Selenium"
 weight: 10
 description: >
-    Escalonamento da execução do Selenium com um IDE e uma biblioteca do Test Runner
+  Escalonamento da execução do Selenium com um IDE e uma biblioteca do Test Runner
 ---
 
-Se quiser executar mais do que um punhado de scripts pontuais, precisa de 
+Se quiser executar mais do que um punhado de scripts pontuais, precisa de
 ser capaz de organizar e trabalhar com seu código. Esta página deve dar a você
 ideias de como fazer coisas produtivas com seu código Selenium.
 
 ## Usos comuns
 
-A maioria das pessoas usa o Selenium para executar testes automatizados para aplicações web, 
+A maioria das pessoas usa o Selenium para executar testes automatizados para aplicações web,
 mas o Selenium suporta qualquer caso de uso de automação de navegador.
 
 ### Tarefas Repetitivas
@@ -30,12 +30,11 @@ termos de serviço do site, pois alguns sites não permitem isso e outros até b
 
 Executar o Selenium para testes requer fazer asserções sobre as ações tomadas pelo Selenium.
 Então uma boa biblioteca de asserções é necessária. Características adicionais para prover estrutura para testes
-requerem o uso de [Test Runner] (#test-runners).
-
+requerem o uso de [Executador de teste](#executador-de-teste).
 
 ## IDEs
 
-Independentemente de como você usa o código do Selenium, 
+Independentemente de como você usa o código do Selenium,
 não será muito eficaz escrevendo ou executando-o sem um bom
 ambiente de desenvolvimento integrado. Aqui estão algumas opções comuns...
 
@@ -50,10 +49,11 @@ ambiente de desenvolvimento integrado. Aqui estão algumas opções comuns...
 ## Executador de teste
 
 Mesmo que não esteja a usar o Selenium para testes, se tiver casos de uso avançado, pode fazer
-sentido usar um executor de testes para organizar melhor seu código. Ser capaz de usar hooks antes/depois 
+sentido usar um executor de testes para organizar melhor seu código. Ser capaz de usar hooks antes/depois
 e executar coisas em grupos ou em paralelo pode ser muito útil.
 
 ### Escolhendo
+
 Há muitos executores de teste diferentes disponíveis.
 
 Todos os exemplos de código nesta documentação podem ser encontrados em (ou estão sendo movidos para) nossos diretórios
@@ -63,36 +63,41 @@ que será usado para todos os exemplos nesta página.
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
+
 - [JUnit](https://junit.org/junit5/) - Uma estrutura de teste amplamente utilizada para testes Selenium baseados em Java.
-- [TestNG](https://testng.org/doc/) - Oferece recursos extras, como execução de testes paralelos e testes parametrizados.
-{{% /tab %}}
+- [TestNG](https://testng.org/) - Oferece recursos extras, como execução de testes paralelos e testes parametrizados.
+  {{% /tab %}}
 
 {{% tab header="Python" %}}
+
 - [pytest](https://pytest.org/) -Uma escolha preferida por muitos, graças à sua simplicidade e aos seus poderosos plugins.
 - [unittest](https://docs.python.org/3/library/unittest.html) - A estrutura de testes da biblioteca padrão do Python.
-{{% /tab %}}
+  {{% /tab %}}
 
 {{% tab header="CSharp" %}}
+
 - [NUnit](https://nunit.org/) - Um popular framework de teste unitário para .NET.
 - [MS Test](https://docs.microsoft.com/en-us/visualstudio/test/getting-started-with-unit-testing?view=vs-2019) - O Framework de testes unitários da Microsoft.
-{{% /tab %}}
+  {{% /tab %}}
 
 {{% tab header="Ruby" %}}
+
 - [RSpec](https://rspec.info/) - A biblioteca de testes mais utilizada para executar testes Selenium em Ruby.
 - [Minitest](https://github.com/seattlerb/minitest) - Um framework de testes leve que vem com a biblioteca padrão do Ruby.
-{{% /tab %}}
+  {{% /tab %}}
 
 {{% tab header="JavaScript" %}}
+
 - [Jest](https://jestjs.io/) - Principalmente conhecido como um framework de teste para React, também pode ser utilizado para testes Selenium.
 - [Mocha](https://mochajs.org/) - A biblioteca JS mais comum para executar testes Selenium.
-{{% /tab %}}
+  {{% /tab %}}
 
 {{% tab header="Kotlin" %}}
-
+- [Kotest](https://kotest.io/) - Uma estrutura de testes flexível e abrangente, projetada especificamente para Kotlin.
+- [JUnit5](https://junit.org/junit5/) - A estrutura de testes padrão do Java, totalmente compatível com Kotlin.
 {{% /tab %}}
 {{< /tabpane >}}
 
-
 ### Instalando
 
 Isto é muito semelhante ao que foi requerido em [Install a Selenium Library]({{< ref "install_library.md" >}}).
@@ -132,42 +137,72 @@ In your project's `package.json`, adicionar requisito às `dependências`:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java#L30-L31" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/using_selenium_tests.py#L8-L9" >}}
+{{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/UsingSeleniumTest.cs#L19-L20" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/using_selenium_spec.rb#L14-L15" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/runningTests.spec.js#L14-L15" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L20-21" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
 ### Configuarar e Desconfigurar
 
 {{< tabpane text=true >}}
-{{< tab header="Java" >}}
-{{< badge-code >}}
-{{< /tab >}}
+{{% tab header="Java" %}}
+
+### Set Up
+
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java#L19-L22" >}}
+
+### Tear Down
+
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java#L45-L48" >}}
+
+{{% /tab %}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+
+### Set Up
+
+{{< gh-codeblock path="/examples/python/tests/getting_started/using_selenium_tests.py#L25-L28" >}}
+
+### Tear Down
+
+{{< gh-codeblock path="/examples/python/tests/getting_started/using_selenium_tests.py#L30-31" >}}
+
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-{{< badge-code >}}
-{{< /tab >}}
+{{% tab header="Ruby" %}}
+
+### Set Up
+
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/using_selenium_spec.rb#L7-L9" >}}
+
+### Tear Down
+
+{{< gh-codeblock path="/examples/ruby/spec/spec_helper.rb#L30" >}}
+{{% /tab %}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+
+### Set Up
+
+{{< gh-codeblock path="/examples/javascript/test/getting_started/runningTests.spec.js#L7-L9" >}}
+
+### Tear Down
+
+{{< gh-codeblock path="/examples/javascript/test/getting_started/runningTests.spec.js#L30" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -178,6 +213,7 @@ In your project's `package.json`, adicionar requisito às `dependências`:
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
+
 ### Maven
 
 ```shell
@@ -192,18 +228,28 @@ gradle clean test
 
 {{% /tab %}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/README.md#L35" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-{{< badge-code >}}
-{{< /tab >}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/README.md#L26" >}}
+{{% /tab %}}
 {{% tab header="JavaScript" %}}
+
+### Mocha
+
 ```shell
 mocha runningTests.spec.js
 ```
+
+### npx
+
+```shell
+npx mocha runningTests.spec.js
+```
+
 {{% /tab %}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -217,19 +263,19 @@ Here's an example of that code using a test runner:
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/using_selenium_tests.py" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/using_selenium_tests.py" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/UsingSeleniumTest.cs" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/UsingSeleniumTest.cs" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/using_selenium_spec.rb" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/using_selenium_spec.rb" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/runningTests.spec.js" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/runningTests.spec.js" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/getting_started/using_selenium.zh-cn.md b/website_and_docs/content/documentation/webdriver/getting_started/using_selenium.zh-cn.md
index aeafeeed6163..82a63ef5b0e3 100644
--- a/website_and_docs/content/documentation/webdriver/getting_started/using_selenium.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/getting_started/using_selenium.zh-cn.md
@@ -1,43 +1,37 @@
 ---
-title: "Organizing and Executing Selenium Code"
-linkTitle: "Using Selenium"
+title: "组织和执行Selenium代码"
+linkTitle: "使用Selenium"
 weight: 10
 description: >
-    Scaling Selenium execution with an IDE and a Test Runner library
+  使用IDE和Test Runner库组织Selenium的执行
 ---
 
-If you want to run more than a handful of one-off scripts, you need to 
-be able to organize and work with your code. This page should give you
-ideas for how to actually do productive things with your Selenium code.
+如果你不仅仅只是想执行一小撮的一次性脚本，你需要能组织并编排好你的代码。
+本章会启发你如何真正地使用 Selenium 代码做高效的事情。
 
-## Common Uses
+## 常见用法
 
-Most people use Selenium to execute automated tests for web applications, 
-but Selenium support any use case of browser automation.
+大部分人使用 Selenium 执行针对 Web 应用的自动化测试，但是 Selenium 其实可以支持任何场景的浏览器自动化。
 
-### Repetitive Tasks
+### 重复性任务
 
-Perhaps you need to log into a website and download something, or submit a form.
-You can create a Selenium script to run with a service at preset times.
+有时候你需要往网站记录日志或者下载一些东西，或者提交一个表单，
+你可以在预设的时间创建一个 Selenium 脚本去执行一个服务。
 
-### Web Scraping
+### 网页爬虫
 
-Are you looking to collect data from a site that doesn't have an API? Selenium
-will let you do this, but please make sure you are familiar with the website's
-terms of service as some websites do not permit it and others will even block Selenium.
+你是否期望从一个不提供 API 的网站收集数据？Selenium 可以满足你，
+但是请确保你了解该网站的服务条例，
+因为有些网站不允许你这样做，甚至有些网站会屏蔽 Selenium。
 
-### Testing
-
-Running Selenium for testing requires making assertions on actions taken by Selenium.
-So a good assertion library is required. Additional features to provide structure for tests
-require use of [Test Runner](#test-runners).
+### 测试
 
+使用 Selenium 做测试需要在 Selenium 执行操作后进行断言，所以一个好的断言类库是很有必要的。
+至于组织测试用例结构的一些额外特性则需要[Test Runner](#test-runner)来完成。
 
 ## IDEs
 
-Regardless of how you use Selenium code, 
-you won't be very effective writing or executing it without a good
-Integrated Developer Environment. Here are some common options...
+不管你要用 Selenium 来做什么，没有一个好的集成开发环境，你的工作肯定不会高效。以下是一些常见的 IDE 选择：
 
 - [Eclipse](https://www.eclipse.org/)
 - [IntelliJ IDEA](https://www.jetbrains.com/idea/)
@@ -49,54 +43,58 @@ Integrated Developer Environment. Here are some common options...
 
 ## Test Runner
 
-Even if you aren't using Selenium for testing, if you have advanced use cases, it might make
-sense to use a test runner to better organize your code. Being able to use before/after hooks 
-and run things in groups or in parallel can be very useful.
+即使不使用 Selenium 做测试，如果你有高级用例，使用一个 test runner 去更好地组织你的代码是很有意义的。
+学会使用 before/after hooks 和分组执行或者并行执行将会非常有用。
+
+### 候选
 
-### Choosing
-There are many different test runners available.
+有非常多不同的 test runner 可供选择。
 
-All the code examples in this documentation can be found in (or is being moved to) our
-example directories that use test runners and get executed every release to ensure all the code is correct and updated.
-Here is a list of test runners with links. The first item is the one that is used by this repository and the one
-that will be used for all examples on this page.
+这个教程中所有使用到 test runner 的代码示例都可以在我们的示例目录中找到（或者正在被迁移过去），
+而且这些示例在每一次发版都会被执行，以确保代码是正确的和最新的。
+下面是一份包含对应链接的 test runner 清单，其中第一项是被这个仓库和本页所有用例所使用的。
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
-- [JUnit](https://junit.org/junit5/) - A widely-used testing framework for Java-based Selenium tests.
-- [TestNG](https://testng.org/doc/) - Offers extra features like parallel test execution and parameterized tests.
-{{% /tab %}}
+
+- [JUnit](https://junit.org/junit5/) - 一个广泛使用的用于基于 Java 的 Selenium 测试的测试框架。
+- [TestNG](https://testng.org/) - 提供诸如并行测试执行和参数化测试等额外功能。
+  {{% /tab %}}
 
 {{% tab header="Python" %}}
-- [pytest](https://pytest.org/) - A preferred choice for many, thanks to its simplicity and powerful plugins.
-- [unittest](https://docs.python.org/3/library/unittest.html) - Python's standard library testing framework.
-{{% /tab %}}
+
+- [pytest](https://pytest.org/) - 由于其简单性和强大的插件，它成为许多人的首选。
+- [unittest](https://docs.python.org/3/library/unittest.html) - Python 的标准测试库
+  {{% /tab %}}
 
 {{% tab header="CSharp" %}}
-- [NUnit](https://nunit.org/) - A popular unit-testing framework for .NET.
-- [MS Test](https://docs.microsoft.com/en-us/visualstudio/test/getting-started-with-unit-testing?view=vs-2019) - Microsoft's own unit testing framework.
-{{% /tab %}}
+
+- [NUnit](https://nunit.org/) - .NET的流行单元测试框架
+- [MS Test](https://docs.microsoft.com/en-us/visualstudio/test/getting-started-with-unit-testing?view=vs-2019) - 微软自己的单元测试框架
+  {{% /tab %}}
 
 {{% tab header="Ruby" %}}
-- [RSpec](https://rspec.info/) - The most widely used testing library for running Selenium tests in Ruby.
-- [Minitest](https://github.com/seattlerb/minitest) - A lightweight testing framework that comes with Ruby standard library.
-{{% /tab %}}
+
+- [RSpec](https://rspec.info/) - Ruby中运行Selenium测试最广泛使用的测试库
+- [Minitest](https://github.com/seattlerb/minitest) - 一个随Ruby标准库附带的轻量级测试框架
+  {{% /tab %}}
 
 {{% tab header="JavaScript" %}}
-- [Jest](https://jestjs.io/) - Primarily known as a testing framework for React, it can also be used for Selenium tests.
-- [Mocha](https://mochajs.org/) - The most common JS library for running Selenium tests.
-{{% /tab %}}
 
-{{% tab header="Kotlin" %}}
+- [Jest](https://jestjs.io/) - 主要作为React的测试框架而闻名，但也可以用于Selenium测试
+- [Mocha](https://mochajs.org/) -最常用的运行Selenium测试的JavaScript库。
+  {{% /tab %}}
 
+{{% tab header="Kotlin" %}}
+- [Kotest](https://kotest.io/) - 一个灵活且全面的测试框架，专为 Kotlin 设计。
+- [JUnit5](https://junit.org/junit5/) - 标准的 Java 测试框架，完全兼容 Kotlin。
 {{% /tab %}}
 {{< /tabpane >}}
 
+### 安装
 
-### Installing
-
-This is very similar to what was required in [Install a Selenium Library]({{< ref "install_library.md" >}}).
-This code is only showing examples for what is being used in our Documentation Examples project.
+在[安装 Selenium 类库]({{< ref "install_library.md" >}})一节中详细说明了需要哪些东西。
+这里的代码只展示在我们的文档示例项目中用到的示例。
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
@@ -128,56 +126,87 @@ In your project's `package.json`, add requirement to `dependencies`:
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Asserting
+### 断言
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java#L30-L31" >}}
 {{< /tab >}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
-{{% /tab %}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/using_selenium_tests.py#L8-L9" >}}
+{{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/UsingSeleniumTest.cs#L19-L20" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/using_selenium_spec.rb#L14-L15" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/runningTests.spec.js#L14-L15" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L20-21" >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
 ### Setting Up and Tearing Down
 
 {{< tabpane text=true >}}
-{{< tab header="Java" >}}
-{{< badge-code >}}
-{{< /tab >}}
+{{% tab header="Java" %}}
+
+### Set Up
+
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java#L19-L22" >}}
+
+### Tear Down
+
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java#L45-L48" >}}
+
+{{% /tab %}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+
+### Set Up
+
+{{< gh-codeblock path="/examples/python/tests/getting_started/using_selenium_tests.py#L25-L28" >}}
+
+### Tear Down
+
+{{< gh-codeblock path="/examples/python/tests/getting_started/using_selenium_tests.py#L30-31" >}}
+
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-{{< badge-code >}}
-{{< /tab >}}
+{{% tab header="Ruby" %}}
+
+### Set Up
+
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/using_selenium_spec.rb#L7-L9" >}}
+
+### Tear Down
+
+{{< gh-codeblock path="/examples/ruby/spec/spec_helper.rb#L30" >}}
+{{% /tab %}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+
+### Set Up
+
+{{< gh-codeblock path="/examples/javascript/test/getting_started/runningTests.spec.js#L7-L9" >}}
+
+### Tear Down
+
+{{< gh-codeblock path="/examples/javascript/test/getting_started/runningTests.spec.js#L30" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Executing
+### 执行
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
+
 ### Maven
 
 ```shell
@@ -192,53 +221,63 @@ gradle clean test
 
 {{% /tab %}}
 {{% tab header="Python" %}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/README.md#L35" >}}
 {{% /tab %}}
 {{< tab header="CSharp" >}}
 {{< badge-code >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-{{< badge-code >}}
-{{< /tab >}}
+{{% tab header="Ruby" %}}
+{{< gh-codeblock path="/examples/ruby/README.md#L26" >}}
+{{% /tab %}}
 {{% tab header="JavaScript" %}}
+
+### Mocha
+
 ```shell
 mocha runningTests.spec.js
 ```
+
+### npx
+
+```shell
+npx mocha runningTests.spec.js
+```
+
 {{% /tab %}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-### Examples
+### 示例
 
-In [First script]({{< ref "first_script.md" >}}), we saw each of the components of a Selenium script.
-Here's an example of that code using a test runner:
+在[第一个脚本]({{< ref "first_script.md" >}})一节中，我们了解了 Selenium 脚本的每一个组件。
+这里是使用 test runner 重新组织那个脚本的一个示例：
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/getting_started/using_selenium_tests.py" >}}
+{{< gh-codeblock path="/examples/python/tests/getting_started/using_selenium_tests.py" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/GettingStarted/UsingSeleniumTest.cs" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/GettingStarted/UsingSeleniumTest.cs" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/getting_started/using_selenium_spec.rb" >}}
+{{< gh-codeblock path="/examples/ruby/spec/getting_started/using_selenium_spec.rb" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/getting_started/runningTests.spec.js" >}}
+{{< gh-codeblock path="/examples/javascript/test/getting_started/runningTests.spec.js" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< /tabpane >}}
 
-## Next Steps
+## 下一步
 
-Take what you've learned and build out your Selenium code! 
+使用你目前所学到的知识构建你自己的 Selenium 代码吧！
 
-As you find more functionality that you need, read up on the rest of our
-[WebDriver documentation]({{< ref "/documentation/webdriver/" >}}).
+想要了解更多的功能特性，
+请继续阅读我们接下来的[WebDriver 教程]({{< ref "/documentation/webdriver/" >}})
diff --git a/website_and_docs/content/documentation/webdriver/interactions/_index.en.md b/website_and_docs/content/documentation/webdriver/interactions/_index.en.md
index 64458f251876..fa978a5b69ba 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/_index.en.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/_index.en.md
@@ -17,12 +17,22 @@ You can read the current page title from the browser:
 
 {{< tabpane langEqualsHeader=true >}}
 {{< badge-examples >}}
-  {{< tab header="Java" >}}driver.getTitle();{{< /tab >}}
-  {{< tab header="Python" >}}driver.title{{< /tab >}}
-  {{< tab header="CSharp" >}}driver.Title;{{< /tab >}}
-  {{< tab header="Ruby" >}}driver.title{{< /tab >}}
-  {{< tab header="JavaScript" >}}await driver.getTitle();{{< /tab >}}
-  {{< tab header="Kotlin" >}}driver.title{{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/InteractionsTest.java#L15" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_interactions.py#L7" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/InteractionsTest.cs#L37" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/browser_spec.rb#L8" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/interactionsIndex.spec.js#L20" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}driver.title{{< /tab >}}
 {{< /tabpane >}}
 
 
@@ -32,10 +42,20 @@ You can read the current URL from the browser's address bar using:
 
 {{< tabpane langEqualsHeader=true >}}
 {{< badge-examples >}}
-{{< tab header="Java" >}}driver.getCurrentUrl();{{< /tab >}}
-{{< tab header="Python" >}}driver.current_url{{< /tab >}}
-{{< tab header="CSharp" >}}driver.Url;{{< /tab >}}
-{{< tab header="Ruby" >}}driver.current_url{{< /tab >}}
-{{< tab header="JavaScript" >}}await driver.getCurrentUrl();{{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/InteractionsTest.java#L26" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_interactions.py#L10" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/InteractionsTest.cs#L41" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/browser_spec.rb#L14" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/interactionsIndex.spec.js#L24" >}}
+{{< /tab >}}
 {{< tab header="Kotlin" >}}driver.currentUrl{{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/interactions/_index.ja.md b/website_and_docs/content/documentation/webdriver/interactions/_index.ja.md
index 1391b8798dd6..76b7f69e7bf0 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/_index.ja.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/_index.ja.md
@@ -1,5 +1,5 @@
 ---
-title: "Browser interactions"
+title: "ブラウザのインタラクション"
 linkTitle: "Interactions"
 weight: 10
 aliases: [
@@ -16,11 +16,21 @@ aliases: [
 ブラウザーから現在のページタイトルを読むことができます。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}driver.getTitle();{{< /tab >}}
-  {{< tab header="Python" >}}driver.title{{< /tab >}}
-  {{< tab header="CSharp" >}}driver.Title;{{< /tab >}}
-  {{< tab header="Ruby" >}}driver.title{{< /tab >}}
-  {{< tab header="JavaScript" >}}await driver.getTitle();{{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/InteractionsTest.java#L15" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_interactions.py#L7" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/InteractionsTest.cs#L37" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/browser_spec.rb#L8" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/interactionsIndex.spec.js#L20" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}driver.title{{< /tab >}}
 {{< /tabpane >}}
 
@@ -30,10 +40,20 @@ aliases: [
 ブラウザーのアドレスバーから現在のURLを読むには、次を使用します。
 
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}driver.getCurrentUrl();{{< /tab >}}
-{{< tab header="Python" >}}driver.current_url{{< /tab >}}
-{{< tab header="CSharp" >}}driver.Url;{{< /tab >}}
-{{< tab header="Ruby" >}}driver.current_url{{< /tab >}}
-{{< tab header="JavaScript" >}}await driver.getCurrentUrl();{{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/InteractionsTest.java#L26" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_interactions.py#L10" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/InteractionsTest.cs#L41" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/browser_spec.rb#L14" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/interactionsIndex.spec.js#L24" >}}
+{{< /tab >}}
 {{< tab header="Kotlin" >}}driver.currentUrl{{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/interactions/_index.pt-br.md b/website_and_docs/content/documentation/webdriver/interactions/_index.pt-br.md
index 0ea71803933f..473e0a81924e 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/_index.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/_index.pt-br.md
@@ -17,11 +17,21 @@ aliases: [
 Você pode ler o título da página atual no navegador:
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}driver.getTitle();{{< /tab >}}
-  {{< tab header="Python" >}}driver.title{{< /tab >}}
-  {{< tab header="CSharp" >}}driver.Title;{{< /tab >}}
-  {{< tab header="Ruby" >}}driver.title{{< /tab >}}
-  {{< tab header="JavaScript" >}}await driver.getTitle();{{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/InteractionsTest.java#L15" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_interactions.py#L7" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/InteractionsTest.cs#L37" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/browser_spec.rb#L8" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/interactionsIndex.spec.js#L20" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}driver.title{{< /tab >}}
 {{< /tabpane >}}
 
@@ -31,10 +41,20 @@ Você pode ler o título da página atual no navegador:
 Você pode ler a URL atual na barra de endereço do navegador usando:
 
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}driver.getCurrentUrl();{{< /tab >}}
-{{< tab header="Python" >}}driver.current_url{{< /tab >}}
-{{< tab header="CSharp" >}}driver.Url;{{< /tab >}}
-{{< tab header="Ruby" >}}driver.current_url{{< /tab >}}
-{{< tab header="JavaScript" >}}await driver.getCurrentUrl();{{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/InteractionsTest.java#L26" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_interactions.py#L10" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/InteractionsTest.cs#L41" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/browser_spec.rb#L14" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/interactionsIndex.spec.js#L24" >}}
+{{< /tab >}}
 {{< tab header="Kotlin" >}}driver.currentUrl{{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/interactions/_index.zh-cn.md b/website_and_docs/content/documentation/webdriver/interactions/_index.zh-cn.md
index 7bead03dffb2..b445d8216c2d 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/_index.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/_index.zh-cn.md
@@ -16,11 +16,21 @@ aliases: [
 从浏览器中读取当前页面的标题:
 
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}driver.getTitle();{{< /tab >}}
-{{< tab header="Python" >}}driver.title{{< /tab >}}
-{{< tab header="CSharp" >}}driver.Title;{{< /tab >}}
-{{< tab header="Ruby" >}}driver.title{{< /tab >}}
-{{< tab header="JavaScript" >}}await driver.getTitle();{{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/InteractionsTest.java#L15" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_interactions.py#L7" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/InteractionsTest.cs#L37" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/browser_spec.rb#L8" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/interactionsIndex.spec.js#L20" >}}
+{{< /tab >}}
 {{< tab header="Kotlin" >}}driver.title{{< /tab >}}
 {{< /tabpane >}}
 
@@ -29,10 +39,20 @@ aliases: [
 您可以从浏览器的地址栏读取当前的 URL，使用:
 
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}driver.getCurrentUrl();{{< /tab >}}
-{{< tab header="Python" >}}driver.current_url{{< /tab >}}
-{{< tab header="CSharp" >}}driver.Url;{{< /tab >}}
-{{< tab header="Ruby" >}}driver.current_url{{< /tab >}}
-{{< tab header="JavaScript" >}}await driver.getCurrentUrl();{{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/InteractionsTest.java#L26" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_interactions.py#L10" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/InteractionsTest.cs#L41" >}}
+{{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/browser_spec.rb#L14" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/interactionsIndex.spec.js#L24" >}}
+{{< /tab >}}
 {{< tab header="Kotlin" >}}driver.currentUrl{{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/interactions/alerts.en.md b/website_and_docs/content/documentation/webdriver/interactions/alerts.en.md
index efea50b3e310..432946b674af 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/alerts.en.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/alerts.en.md
@@ -25,33 +25,14 @@ WebDriver can get the text from the popup and accept or dismiss these
 alerts.
 
 {{< tabpane langEqualsHeader=true >}}
-{{< badge-examples >}}
-  {{< tab header="Java" >}}
-//Click the link to activate the alert
-driver.findElement(By.linkText("See an example alert")).click();
-
-//Wait for the alert to be displayed and store it in a variable
-Alert alert = wait.until(ExpectedConditions.alertIsPresent());
-
-//Store the alert text in a variable
-String text = alert.getText();
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/AlertsTest.java#L36-L41" >}}
+{{< /tab >}}
 
-//Press the OK button
-alert.accept();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-# Click the link to activate the alert
-driver.find_element(By.LINK_TEXT, "See an example alert").click()
-
-# Wait for the alert to be displayed and store it in a variable
-alert = wait.until(expected_conditions.alert_is_present())
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_alerts.py#L12-L18" >}}
+{{< /tab >}}
 
-# Store the alert text in a variable
-text = alert.text
-
-# Press the OK button
-alert.accept()
-  {{< /tab >}}
   {{< tab header="CSharp" >}}
 //Click the link to activate the alert
 driver.FindElement(By.LinkText("See an example alert")).Click();
@@ -65,37 +46,12 @@ string text = alert.Text;
 //Press the OK button
 alert.Accept();
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-# Click the link to activate the alert
-driver.find_element(:link_text, 'See an example alert').click
-
-# Store the alert reference in a variable
-alert = driver.switch_to.alert
-
-# Store the alert text in a variable
-alert_text = alert.text
-
-# Press on OK button
-alert.accept
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-//Click the link to activate the alert
-await driver.findElement(By.linkText('See an example alert')).click();
-
-// Wait for the alert to be displayed
-await driver.wait(until.alertIsPresent());
-
-// Store the alert in a variable
-let alert = await driver.switchTo().alert();
-
-//Store the alert text in a variable
-let alertText = await alert.getText();
-
-//Press the OK button
-await alert.accept();
-
-// Note: To use await, the above code should be inside an async function
+  {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/alerts_spec.rb#L15-L22" >}}
   {{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/alert.spec.js#L19-L21" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 //Click the link to activate the alert
 driver.findElement(By.linkText("See an example alert")).click()
@@ -120,39 +76,14 @@ a sample confirm</a>.
 This example also shows a different approach to storing an alert:
 
 {{< tabpane langEqualsHeader=true >}}
-{{< badge-examples >}}
-  {{< tab header="Java" >}}
-//Click the link to activate the alert
-driver.findElement(By.linkText("See a sample confirm")).click();
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/AlertsTest.java#L131-L138" >}}
+{{< /tab >}}
 
-//Wait for the alert to be displayed
-wait.until(ExpectedConditions.alertIsPresent());
-
-//Store the alert in a variable
-Alert alert = driver.switchTo().alert();
-
-//Store the alert in a variable for reuse
-String text = alert.getText();
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_alerts.py#L26-L32" >}}
+{{< /tab >}}
 
-//Press the Cancel button
-alert.dismiss();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-# Click the link to activate the alert
-driver.find_element(By.LINK_TEXT, "See a sample confirm").click()
-
-# Wait for the alert to be displayed
-wait.until(expected_conditions.alert_is_present())
-
-# Store the alert in a variable for reuse
-alert = driver.switch_to.alert
-
-# Store the alert text in a variable
-text = alert.text
-
-# Press the Cancel button
-alert.dismiss()
-  {{< /tab >}}
   {{< tab header="CSharp" >}}
 //Click the link to activate the alert
 driver.FindElement(By.LinkText("See a sample confirm")).Click();
@@ -169,37 +100,12 @@ string text = alert.Text;
 //Press the Cancel button
 alert.Dismiss();
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-# Click the link to activate the alert
-driver.find_element(:link_text, 'See a sample confirm').click
-
-# Store the alert reference in a variable
-alert = driver.switch_to.alert
-
-# Store the alert text in a variable
-alert_text = alert.text
-
-# Press on Cancel button
-alert.dismiss
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-//Click the link to activate the alert
-await driver.findElement(By.linkText('See a sample confirm')).click();
-
-// Wait for the alert to be displayed
-await driver.wait(until.alertIsPresent());
-
-// Store the alert in a variable
-let alert = await driver.switchTo().alert();
-
-//Store the alert text in a variable
-let alertText = await alert.getText();
-
-//Press the Cancel button
-await alert.dismiss();
-
-// Note: To use await, the above code should be inside an async function
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/alerts_spec.rb#L28-L35" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/alert.spec.js#L30-L32" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 //Click the link to activate the alert
 driver.findElement(By.linkText("See a sample confirm")).click()
@@ -228,37 +134,15 @@ text. Pressing the cancel button will not submit any text.
 See a sample prompt</a>.
 
 
-{{< tabpane langEqualsHeader=true >}}
-{{< badge-examples >}}
-  {{< tab header="Java" >}}
-//Click the link to activate the alert
-driver.findElement(By.linkText("See a sample prompt")).click();
-
-//Wait for the alert to be displayed and store it in a variable
-Alert alert = wait.until(ExpectedConditions.alertIsPresent());
-
-//Type your message
-alert.sendKeys("Selenium");
-
-//Press the OK button
-alert.accept();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-# Click the link to activate the alert
-driver.find_element(By.LINK_TEXT, "See a sample prompt").click()
-
-# Wait for the alert to be displayed
-wait.until(expected_conditions.alert_is_present())
+{{< tabpane langEqualsHeader=true text=true >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/AlertsTest.java#L79-L84" >}}
+{{< /tab >}}
 
-# Store the alert in a variable for reuse
-alert = Alert(driver)
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_alerts.py#L40-L47" >}}
+{{< /tab >}}
 
-# Type your message
-alert.send_keys("Selenium")
-
-# Press the OK button
-alert.accept()
-  {{< /tab >}}
   {{< tab header="CSharp" >}}
 //Click the link to activate the alert
 driver.FindElement(By.LinkText("See a sample prompt")).Click();
@@ -272,37 +156,12 @@ alert.SendKeys("Selenium");
 //Press the OK button
 alert.Accept();
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-# Click the link to activate the alert
-driver.find_element(:link_text, 'See a sample prompt').click
-
-# Store the alert reference in a variable
-alert = driver.switch_to.alert
-
-# Type a message
-alert.send_keys("selenium")
-
-# Press on Ok button
-alert.accept
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-//Click the link to activate the alert
-await driver.findElement(By.linkText('See a sample prompt')).click();
-
-// Wait for the alert to be displayed
-await driver.wait(until.alertIsPresent());
-
-// Store the alert in a variable
-let alert = await driver.switchTo().alert();
-
-//Type your message
-await alert.sendKeys("Selenium");
-
-//Press the OK button
-await alert.accept();
-
-//Note: To use await, the above code should be inside an async function
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/alerts_spec.rb#L41-L48" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/alert.spec.js#L42-L45" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 //Click the link to activate the alert
 driver.findElement(By.linkText("See a sample prompt")).click()
diff --git a/website_and_docs/content/documentation/webdriver/interactions/alerts.ja.md b/website_and_docs/content/documentation/webdriver/interactions/alerts.ja.md
index b33207031548..1e5d9716351f 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/alerts.ja.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/alerts.ja.md
@@ -21,32 +21,14 @@ WebDriverは、JavaScriptが提供する3種類のネイティブポップアッ
 WebDriverはポップアップからテキストを取得し、これらのアラートを受け入れるか、または閉じることができます。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-//Click the link to activate the alert
-driver.findElement(By.linkText("See an example alert")).click();
-
-//Wait for the alert to be displayed and store it in a variable
-Alert alert = wait.until(ExpectedConditions.alertIsPresent());
-
-//Store the alert text in a variable
-String text = alert.getText();
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/AlertsTest.java#L36-L41" >}}
+{{< /tab >}}
 
-//Press the OK button
-alert.accept();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-# Click the link to activate the alert
-driver.find_element(By.LINK_TEXT, "See an example alert").click()
-
-# Wait for the alert to be displayed and store it in a variable
-alert = wait.until(expected_conditions.alert_is_present())
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_alerts.py#L12-L18" >}}
+{{< /tab >}}
 
-# Store the alert text in a variable
-text = alert.text
-
-# Press the OK button
-alert.accept()
-  {{< /tab >}}
   {{< tab header="CSharp" >}}
 //Click the link to activate the alert
 driver.FindElement(By.LinkText("See an example alert")).Click();
@@ -60,37 +42,12 @@ string text = alert.Text;
 //Press the OK button
 alert.Accept();
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-# Click the link to activate the alert
-driver.find_element(:link_text, 'See an example alert').click
-
-# Store the alert reference in a variable
-alert = driver.switch_to.alert
-
-# Store the alert text in a variable
-alert_text = alert.text
-
-# Press on OK button
-alert.accept
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-//Click the link to activate the alert
-await driver.findElement(By.linkText('See an example alert')).click();
-
-// Wait for the alert to be displayed
-await driver.wait(until.alertIsPresent());
-
-// Store the alert in a variable
-let alert = await driver.switchTo().alert();
-
-//Store the alert text in a variable
-let alertText = await alert.getText();
-
-//Press the OK button
-await alert.accept();
-
-// Note: To use await, the above code should be inside an async function
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/alerts_spec.rb#L15-L22" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/alert.spec.js#L19-L21" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 //Click the link to activate the alert
 driver.findElement(By.linkText("See an example alert")).click()
@@ -114,38 +71,14 @@ alert.accept()
 この例は、アラートを保存する別の方法も示しています。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-//Click the link to activate the alert
-driver.findElement(By.linkText("See a sample confirm")).click();
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/AlertsTest.java#L131-L138" >}}
+{{< /tab >}}
 
-//Wait for the alert to be displayed
-wait.until(ExpectedConditions.alertIsPresent());
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_alerts.py#L26-L32" >}}
+{{< /tab >}}
 
-//Store the alert in a variable
-Alert alert = driver.switchTo().alert();
-
-//Store the alert in a variable for reuse
-String text = alert.getText();
-
-//Press the Cancel button
-alert.dismiss();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-# Click the link to activate the alert
-driver.find_element(By.LINK_TEXT, "See a sample confirm").click()
-
-# Wait for the alert to be displayed
-wait.until(expected_conditions.alert_is_present())
-
-# Store the alert in a variable for reuse
-alert = driver.switch_to.alert
-
-# Store the alert text in a variable
-text = alert.text
-
-# Press the Cancel button
-alert.dismiss()
-  {{< /tab >}}
   {{< tab header="CSharp" >}}
 //Click the link to activate the alert
 driver.FindElement(By.LinkText("See a sample confirm")).Click();
@@ -162,37 +95,12 @@ string text = alert.Text;
 //Press the Cancel button
 alert.Dismiss();
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-# Click the link to activate the alert
-driver.find_element(:link_text, 'See a sample confirm').click
-
-# Store the alert reference in a variable
-alert = driver.switch_to.alert
-
-# Store the alert text in a variable
-alert_text = alert.text
-
-# Press on Cancel button
-alert.dismiss
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-//Click the link to activate the alert
-await driver.findElement(By.linkText('See a sample confirm')).click();
-
-// Wait for the alert to be displayed
-await driver.wait(until.alertIsPresent());
-
-// Store the alert in a variable
-let alert = await driver.switchTo().alert();
-
-//Store the alert text in a variable
-let alertText = await alert.getText();
-
-//Press the Cancel button
-await alert.dismiss();
-
-// Note: To use await, the above code should be inside an async function
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/alerts_spec.rb#L28-L35" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/alert.spec.js#L30-L32" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 //Click the link to activate the alert
 driver.findElement(By.linkText("See a sample confirm")).click()
@@ -220,35 +128,14 @@ alert.dismiss()
 <a onclick="window.prompt('What is your tool of choice?',navigator.appName)">サンプルプロンプトを参照してください</a>。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-//Click the link to activate the alert
-driver.findElement(By.linkText("See a sample prompt")).click();
-
-//Wait for the alert to be displayed and store it in a variable
-Alert alert = wait.until(ExpectedConditions.alertIsPresent());
-
-//Type your message
-alert.sendKeys("Selenium");
-
-//Press the OK button
-alert.accept();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-# Click the link to activate the alert
-driver.find_element(By.LINK_TEXT, "See a sample prompt").click()
-
-# Wait for the alert to be displayed
-wait.until(expected_conditions.alert_is_present())
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/AlertsTest.java#L79-L84" >}}
+{{< /tab >}}
 
-# Store the alert in a variable for reuse
-alert = Alert(driver)
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_alerts.py#L40-L47" >}}
+{{< /tab >}}
 
-# Type your message
-alert.send_keys("Selenium")
-
-# Press the OK button
-alert.accept()
-  {{< /tab >}}
   {{< tab header="CSharp" >}}
 //Click the link to activate the alert
 driver.FindElement(By.LinkText("See a sample prompt")).Click();
@@ -262,37 +149,12 @@ alert.SendKeys("Selenium");
 //Press the OK button
 alert.Accept();
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-# Click the link to activate the alert
-driver.find_element(:link_text, 'See a sample prompt').click
-
-# Store the alert reference in a variable
-alert = driver.switch_to.alert
-
-# Type a message
-alert.send_keys("selenium")
-
-# Press on Ok button
-alert.accept
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-//Click the link to activate the alert
-await driver.findElement(By.linkText('See a sample prompt')).click();
-
-// Wait for the alert to be displayed
-await driver.wait(until.alertIsPresent());
-
-// Store the alert in a variable
-let alert = await driver.switchTo().alert();
-
-//Type your message
-await alert.sendKeys("Selenium");
-
-//Press the OK button
-await alert.accept();
-
-//Note: To use await, the above code should be inside an async function
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/alerts_spec.rb#L41-L48" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/alert.spec.js#L42-L45" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 //Click the link to activate the alert
 driver.findElement(By.linkText("See a sample prompt")).click()
diff --git a/website_and_docs/content/documentation/webdriver/interactions/alerts.pt-br.md b/website_and_docs/content/documentation/webdriver/interactions/alerts.pt-br.md
index 999377016efb..aadb4a30575b 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/alerts.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/alerts.pt-br.md
@@ -25,76 +25,19 @@ O WebDriver pode obter o texto do pop-up e aceitar ou dispensar esses
 alertas.
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-//Click the link to activate the alert
-driver.findElement(By.linkText("See an example alert")).click();
-
-//Wait for the alert to be displayed and store it in a variable
-Alert alert = wait.until(ExpectedConditions.alertIsPresent());
-
-//Store the alert text in a variable
-String text = alert.getText();
-
-//Press the OK button
-alert.accept();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-# Click the link to activate the alert
-driver.find_element(By.LINK_TEXT, "See an example alert").click()
-
-# Wait for the alert to be displayed and store it in a variable
-alert = wait.until(expected_conditions.alert_is_present())
-
-# Store the alert text in a variable
-text = alert.text
-
-# Press the OK button
-alert.accept()
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-//Click the link to activate the alert
-driver.FindElement(By.LinkText("See an example alert")).Click();
-
-//Wait for the alert to be displayed and store it in a variable
-IAlert alert = wait.Until(ExpectedConditions.AlertIsPresent());
-
-//Store the alert text in a variable
-string text = alert.Text;
-
-//Press the OK button
-alert.Accept();
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-# Click the link to activate the alert
-driver.find_element(:link_text, 'See an example alert').click
-
-# Store the alert reference in a variable
-alert = driver.switch_to.alert
-
-# Store the alert text in a variable
-alert_text = alert.text
-
-# Press on OK button
-alert.accept
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-//Click the link to activate the alert
-await driver.findElement(By.linkText('See an example alert')).click();
-
-// Wait for the alert to be displayed
-await driver.wait(until.alertIsPresent());
-
-// Store the alert in a variable
-let alert = await driver.switchTo().alert();
-
-//Store the alert text in a variable
-let alertText = await alert.getText();
-
-//Press the OK button
-await alert.accept();
-
-// Note: To use await, the above code should be inside an async function
-  {{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/AlertsTest.java#L36-L41" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_alerts.py#L12-L18" >}}
+{{< /tab >}}
+
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/alerts_spec.rb#L15-L22" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/alert.spec.js#L19-L21" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 //Click the link to activate the alert
 driver.findElement(By.linkText("See an example alert")).click()
@@ -119,38 +62,14 @@ uma amostra de confirmação </a>.
 Este exemplo também mostra uma abordagem diferente para armazenar um alerta:
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-//Click the link to activate the alert
-driver.findElement(By.linkText("See a sample confirm")).click();
-
-//Wait for the alert to be displayed
-wait.until(ExpectedConditions.alertIsPresent());
-
-//Store the alert in a variable
-Alert alert = driver.switchTo().alert();
-
-//Store the alert in a variable for reuse
-String text = alert.getText();
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/AlertsTest.java#L131-L138" >}}
+{{< /tab >}}
 
-//Press the Cancel button
-alert.dismiss();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-# Click the link to activate the alert
-driver.find_element(By.LINK_TEXT, "See a sample confirm").click()
-
-# Wait for the alert to be displayed
-wait.until(expected_conditions.alert_is_present())
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_alerts.py#L26-L32" >}}
+{{< /tab >}}
 
-# Store the alert in a variable for reuse
-alert = driver.switch_to.alert
-
-# Store the alert text in a variable
-text = alert.text
-
-# Press the Cancel button
-alert.dismiss()
-  {{< /tab >}}
   {{< tab header="CSharp" >}}
 //Click the link to activate the alert
 driver.FindElement(By.LinkText("See a sample confirm")).Click();
@@ -167,37 +86,12 @@ string text = alert.Text;
 //Press the Cancel button
 alert.Dismiss();
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-# Click the link to activate the alert
-driver.find_element(:link_text, 'See a sample confirm').click
-
-# Store the alert reference in a variable
-alert = driver.switch_to.alert
-
-# Store the alert text in a variable
-alert_text = alert.text
-
-# Press on Cancel button
-alert.dismiss
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-//Click the link to activate the alert
-await driver.findElement(By.linkText('See a sample confirm')).click();
-
-// Wait for the alert to be displayed
-await driver.wait(until.alertIsPresent());
-
-// Store the alert in a variable
-let alert = await driver.switchTo().alert();
-
-//Store the alert text in a variable
-let alertText = await alert.getText();
-
-//Press the Cancel button
-await alert.dismiss();
-
-// Note: To use await, the above code should be inside an async function
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/alerts_spec.rb#L28-L35" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/alert.spec.js#L30-L32" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 //Click the link to activate the alert
 driver.findElement(By.linkText("See a sample confirm")).click()
@@ -227,35 +121,14 @@ Veja um exemplo de prompt </a>.
 
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-//Click the link to activate the alert
-driver.findElement(By.linkText("See a sample prompt")).click();
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/AlertsTest.java#L79-L84" >}}
+{{< /tab >}}
 
-//Wait for the alert to be displayed and store it in a variable
-Alert alert = wait.until(ExpectedConditions.alertIsPresent());
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_alerts.py#L40-L47" >}}
+{{< /tab >}}
 
-//Type your message
-alert.sendKeys("Selenium");
-
-//Press the OK button
-alert.accept();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-# Click the link to activate the alert
-driver.find_element(By.LINK_TEXT, "See a sample prompt").click()
-
-# Wait for the alert to be displayed
-wait.until(expected_conditions.alert_is_present())
-
-# Store the alert in a variable for reuse
-alert = Alert(driver)
-
-# Type your message
-alert.send_keys("Selenium")
-
-# Press the OK button
-alert.accept()
-  {{< /tab >}}
   {{< tab header="CSharp" >}}
 //Click the link to activate the alert
 driver.FindElement(By.LinkText("See a sample prompt")).Click();
@@ -269,37 +142,12 @@ alert.SendKeys("Selenium");
 //Press the OK button
 alert.Accept();
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-# Click the link to activate the alert
-driver.find_element(:link_text, 'See a sample prompt').click
-
-# Store the alert reference in a variable
-alert = driver.switch_to.alert
-
-# Type a message
-alert.send_keys("selenium")
-
-# Press on Ok button
-alert.accept
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-//Click the link to activate the alert
-await driver.findElement(By.linkText('See a sample prompt')).click();
-
-// Wait for the alert to be displayed
-await driver.wait(until.alertIsPresent());
-
-// Store the alert in a variable
-let alert = await driver.switchTo().alert();
-
-//Type your message
-await alert.sendKeys("Selenium");
-
-//Press the OK button
-await alert.accept();
-
-//Note: To use await, the above code should be inside an async function
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/alerts_spec.rb#L41-L48" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/alert.spec.js#L42-L45" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 //Click the link to activate the alert
 driver.findElement(By.linkText("See a sample prompt")).click()
diff --git a/website_and_docs/content/documentation/webdriver/interactions/alerts.zh-cn.md b/website_and_docs/content/documentation/webdriver/interactions/alerts.zh-cn.md
index 04c671d74242..a59b74bebf9c 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/alerts.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/alerts.zh-cn.md
@@ -18,32 +18,14 @@ WebDriver提供了一个API, 用于处理JavaScript提供的三种类型的原
 WebDriver可以从弹窗获取文本并接受或关闭这些警告.
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-//Click the link to activate the alert
-driver.findElement(By.linkText("See an example alert")).click();
-
-//Wait for the alert to be displayed and store it in a variable
-Alert alert = wait.until(ExpectedConditions.alertIsPresent());
-
-//Store the alert text in a variable
-String text = alert.getText();
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/AlertsTest.java#L36-L41" >}}
+{{< /tab >}}
 
-//Press the OK button
-alert.accept();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-# Click the link to activate the alert
-driver.find_element(By.LINK_TEXT, "See an example alert").click()
-
-# Wait for the alert to be displayed and store it in a variable
-alert = wait.until(expected_conditions.alert_is_present())
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_alerts.py#L12-L18" >}}
+{{< /tab >}}
 
-# Store the alert text in a variable
-text = alert.text
-
-# Press the OK button
-alert.accept()
-  {{< /tab >}}
   {{< tab header="CSharp" >}}
 //Click the link to activate the alert
 driver.FindElement(By.LinkText("See an example alert")).Click();
@@ -57,37 +39,12 @@ string text = alert.Text;
 //Press the OK button
 alert.Accept();
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-# Click the link to activate the alert
-driver.find_element(:link_text, 'See an example alert').click
-
-# Store the alert reference in a variable
-alert = driver.switch_to.alert
-
-# Store the alert text in a variable
-alert_text = alert.text
-
-# Press on OK button
-alert.accept
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-//Click the link to activate the alert
-await driver.findElement(By.linkText('See an example alert')).click();
-
-// Wait for the alert to be displayed
-await driver.wait(until.alertIsPresent());
-
-// Store the alert in a variable
-let alert = await driver.switchTo().alert();
-
-//Store the alert text in a variable
-let alertText = await alert.getText();
-
-//Press the OK button
-await alert.accept();
-
-// Note: To use await, the above code should be inside an async function
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/alerts_spec.rb#L15-L22" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/alert.spec.js#L19-L21" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 //Click the link to activate the alert
 driver.findElement(By.linkText("See an example alert")).click()
@@ -110,38 +67,14 @@ alert.accept()
 此示例还呈现了警告的另一种实现:
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-//Click the link to activate the alert
-driver.findElement(By.linkText("See a sample confirm")).click();
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/AlertsTest.java#L131-L138" >}}
+{{< /tab >}}
 
-//Wait for the alert to be displayed
-wait.until(ExpectedConditions.alertIsPresent());
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_alerts.py#L26-L32" >}}
+{{< /tab >}}
 
-//Store the alert in a variable
-Alert alert = driver.switchTo().alert();
-
-//Store the alert in a variable for reuse
-String text = alert.getText();
-
-//Press the Cancel button
-alert.dismiss();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-# Click the link to activate the alert
-driver.find_element(By.LINK_TEXT, "See a sample confirm").click()
-
-# Wait for the alert to be displayed
-wait.until(expected_conditions.alert_is_present())
-
-# Store the alert in a variable for reuse
-alert = driver.switch_to.alert
-
-# Store the alert text in a variable
-text = alert.text
-
-# Press the Cancel button
-alert.dismiss()
-  {{< /tab >}}
   {{< tab header="CSharp" >}}
 //Click the link to activate the alert
 driver.FindElement(By.LinkText("See a sample confirm")).Click();
@@ -158,37 +91,12 @@ string text = alert.Text;
 //Press the Cancel button
 alert.Dismiss();
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-# Click the link to activate the alert
-driver.find_element(:link_text, 'See a sample confirm').click
-
-# Store the alert reference in a variable
-alert = driver.switch_to.alert
-
-# Store the alert text in a variable
-alert_text = alert.text
-
-# Press on Cancel button
-alert.dismiss
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-//Click the link to activate the alert
-await driver.findElement(By.linkText('See a sample confirm')).click();
-
-// Wait for the alert to be displayed
-await driver.wait(until.alertIsPresent());
-
-// Store the alert in a variable
-let alert = await driver.switchTo().alert();
-
-//Store the alert text in a variable
-let alertText = await alert.getText();
-
-//Press the Cancel button
-await alert.dismiss();
-
-// Note: To use await, the above code should be inside an async function
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/alerts_spec.rb#L28-L35" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/alert.spec.js#L30-L32" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 //Click the link to activate the alert
 driver.findElement(By.linkText("See a sample confirm")).click()
@@ -215,35 +123,14 @@ alert.dismiss()
 
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-//Click the link to activate the alert
-driver.findElement(By.linkText("See a sample prompt")).click();
-
-//Wait for the alert to be displayed and store it in a variable
-Alert alert = wait.until(ExpectedConditions.alertIsPresent());
-
-//Type your message
-alert.sendKeys("Selenium");
-
-//Press the OK button
-alert.accept();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-# Click the link to activate the alert
-driver.find_element(By.LINK_TEXT, "See a sample prompt").click()
-
-# Wait for the alert to be displayed
-wait.until(expected_conditions.alert_is_present())
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/AlertsTest.java#L79-L84" >}}
+{{< /tab >}}
 
-# Store the alert in a variable for reuse
-alert = Alert(driver)
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_alerts.py#L40-L47" >}}
+{{< /tab >}}
 
-# Type your message
-alert.send_keys("Selenium")
-
-# Press the OK button
-alert.accept()
-  {{< /tab >}}
   {{< tab header="CSharp" >}}
 //Click the link to activate the alert
 driver.FindElement(By.LinkText("See a sample prompt")).Click();
@@ -257,37 +144,12 @@ alert.SendKeys("Selenium");
 //Press the OK button
 alert.Accept();
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-# Click the link to activate the alert
-driver.find_element(:link_text, 'See a sample prompt').click
-
-# Store the alert reference in a variable
-alert = driver.switch_to.alert
-
-# Type a message
-alert.send_keys("selenium")
-
-# Press on Ok button
-alert.accept
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-//Click the link to activate the alert
-await driver.findElement(By.linkText('See a sample prompt')).click();
-
-// Wait for the alert to be displayed
-await driver.wait(until.alertIsPresent());
-
-// Store the alert in a variable
-let alert = await driver.switchTo().alert();
-
-//Type your message
-await alert.sendKeys("Selenium");
-
-//Press the OK button
-await alert.accept();
-
-//Note: To use await, the above code should be inside an async function
-  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/alerts_spec.rb#L41-L48" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/alert.spec.js#L42-L45" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 //Click the link to activate the alert
 driver.findElement(By.linkText("See a sample prompt")).click()
diff --git a/website_and_docs/content/documentation/webdriver/interactions/cookies.en.md b/website_and_docs/content/documentation/webdriver/interactions/cookies.en.md
index 6d76d8dc8a99..49fc296dabe2 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/cookies.en.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/cookies.en.md
@@ -27,70 +27,20 @@ e.g. http://example.com/some404page)
 
 {{< tabpane langEqualsHeader=true >}}
 {{< badge-examples >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class addCookie {
-    public static void main(String[] args) {
-        WebDriver driver = new ChromeDriver();
-        try {
-            driver.get("http://www.example.com");
-
-            // Adds the cookie into current browser context
-            driver.manage().addCookie(new Cookie("key", "value"));
-        } finally {
-            driver.quit();
-        }
-    }
-}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L30-L32" >}}
   {{< /tab >}}
-{{< tab header="Python" >}}
-from selenium import webdriver
-
-driver = webdriver.Chrome()
-
-driver.get("http://www.example.com")
-
-# Adds the cookie into current browser context
-driver.add_cookie({"name": "key", "value": "value"})
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L5-L9" >}}
   {{< /tab >}}
-{{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace AddCookie {
- class AddCookie {
-  public static void Main(string[] args) {
-   IWebDriver driver = new ChromeDriver();
-   try {
-    // Navigate to Url
-    driver.Navigate().GoToUrl("https://example.com");
-
-    // Adds the cookie into current browser context
-    driver.Manage().Cookies.AddCookie(new Cookie("key", "value"));
-   } finally {
-    driver.Quit();
-   }
-  }
- }
-}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L32-L34" >}}
   {{< /tab >}}
-{{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :chrome
-
-begin
-  driver.get 'https://www.example.com'
-  
-  # Adds the cookie into current browser context
-  driver.manage.add_cookie(name: "key", value: "value")
-ensure
-  driver.quit
-end
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/cookies_spec.rb#L9-L11" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L13-L18">}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L18">}}
   {{< /tab >}}
 {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
@@ -116,79 +66,20 @@ It returns the serialized cookie data matching with the cookie name among all as
 
 {{< tabpane langEqualsHeader=true >}}
 {{< badge-examples >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class getCookieNamed {
-    public static void main(String[] args) {
-        WebDriver driver = new ChromeDriver();
-        try {
-            driver.get("http://www.example.com");
-            driver.manage().addCookie(new Cookie("foo", "bar"));
-
-            // Get cookie details with named cookie 'foo'
-            Cookie cookie1 = driver.manage().getCookieNamed("foo");
-            System.out.println(cookie1);
-        } finally {
-            driver.quit();
-        }
-    }
-}
+ {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L38-L42" >}}
   {{< /tab >}}
- {{< tab header="Python" >}}
-from selenium import webdriver
-
-driver = webdriver.Chrome()
-
-# Navigate to url
-driver.get("http://www.example.com")
-
-# Adds the cookie into current browser context
-driver.add_cookie({"name": "foo", "value": "bar"})
-
-# Get cookie details with named cookie 'foo'
-print(driver.get_cookie("foo"))
+ {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L13-L20" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace GetCookieNamed {
- class GetCookieNamed {
-  public static void Main(string[] args) {
-   IWebDriver driver = new ChromeDriver();
-   try {
-    // Navigate to Url
-    driver.Navigate().GoToUrl("https://example.com");
-    driver.Manage().Cookies.AddCookie(new Cookie("foo", "bar"));
-
-    // Get cookie details with named cookie 'foo'
-    var cookie = driver.Manage().Cookies.GetCookieNamed("foo");
-    System.Console.WriteLine(cookie);
-   } finally {
-    driver.Quit();
-   }
-  }
- }
-}
+  {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L40-L44" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :chrome
-
-begin
-  driver.get 'https://www.example.com'
-  driver.manage.add_cookie(name: "foo", value: "bar")
-
-  # Get cookie details with named cookie 'foo'
-  puts driver.manage.cookie_named('foo')
-ensure
-  driver.quit
-end
+  {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/cookies_spec.rb#L17-L21" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L28-L38">}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L35-L38">}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
@@ -217,83 +108,20 @@ If browser is no longer available it returns error.
 
 {{< tabpane langEqualsHeader=true >}}
 {{< badge-examples >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-import java.util.Set;
-
-public class getAllCookies {
-    public static void main(String[] args) {
-        WebDriver driver = new ChromeDriver();
-        try {
-            driver.get("http://www.example.com");
-            // Add few cookies
-            driver.manage().addCookie(new Cookie("test1", "cookie1"));
-            driver.manage().addCookie(new Cookie("test2", "cookie2"));
-
-            // Get All available cookies
-            Set<Cookie> cookies = driver.manage().getCookies();
-            System.out.println(cookies);
-        } finally {
-            driver.quit();
-        }
-    }
-}
+      {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L52-L66" >}}
   {{< /tab >}}
- {{< tab header="Python" >}}
-from selenium import webdriver
-
-driver = webdriver.Chrome()
-
-# Navigate to url
-driver.get("http://www.example.com")
-
-driver.add_cookie({"name": "test1", "value": "cookie1"})
-driver.add_cookie({"name": "test2", "value": "cookie2"})
-
-# Get all available cookies
-print(driver.get_cookies())
+ {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L24-L32" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace GetAllCookies {
- class GetAllCookies {
-  public static void Main(string[] args) {
-   IWebDriver driver = new ChromeDriver();
-   try {
-    // Navigate to Url
-    driver.Navigate().GoToUrl("https://example.com");
-    driver.Manage().Cookies.AddCookie(new Cookie("test1", "cookie1"));
-    driver.Manage().Cookies.AddCookie(new Cookie("test2", "cookie2"));
-
-    // Get All available cookies
-    var cookies = driver.Manage().Cookies.AllCookies;
-   } finally {
-    driver.Quit();
-   }
-  }
- }
-}
+    {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L51-L64" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :chrome
-
-begin
-  driver.get 'https://www.example.com'
-  driver.manage.add_cookie(name: "test1", value: "cookie1")
-  driver.manage.add_cookie(name: "test2", value: "cookie2")
-
-  # Get all available cookies
-  puts driver.manage.all_cookies
-ensure
-  driver.quit
-end
+   {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/cookies_spec.rb#L26-L31" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L40-L51">}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L49-L51">}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
@@ -323,90 +151,20 @@ It deletes the cookie data matching with the provided cookie name.
 
 {{< tabpane langEqualsHeader=true >}}
 {{< badge-examples >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class deleteCookie {
-    public static void main(String[] args) {
-        WebDriver driver = new ChromeDriver();
-        try {
-            driver.get("http://www.example.com");
-            driver.manage().addCookie(new Cookie("test1", "cookie1"));
-            Cookie cookie1 = new Cookie("test2", "cookie2");
-            driver.manage().addCookie(cookie1);
-
-            // delete a cookie with name 'test1'
-            driver.manage().deleteCookieNamed("test1");
-
-            /*
-             Selenium Java bindings also provides a way to delete
-             cookie by passing cookie object of current browsing context
-             */
-            driver.manage().deleteCookie(cookie1);
-        } finally {
-            driver.quit();
-        }
-    }
-}
+        {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L74-L77" >}}
   {{< /tab >}}
- {{< tab header="Python" >}}
-from selenium import webdriver
-driver = webdriver.Chrome()
-
-# Navigate to url
-driver.get("http://www.example.com")
-driver.add_cookie({"name": "test1", "value": "cookie1"})
-driver.add_cookie({"name": "test2", "value": "cookie2"})
-
-# Delete a cookie with name 'test1'
-driver.delete_cookie("test1")
+ {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L35-L43" text=true >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace DeleteCookie {
- class DeleteCookie {
-  public static void Main(string[] args) {
-   IWebDriver driver = new ChromeDriver();
-   try {
-    // Navigate to Url
-    driver.Navigate().GoToUrl("https://example.com");
-    driver.Manage().Cookies.AddCookie(new Cookie("test1", "cookie1"));
-    var cookie = new Cookie("test2", "cookie2");
-    driver.Manage().Cookies.AddCookie(cookie);
-
-    // delete a cookie with name 'test1'	
-    driver.Manage().Cookies.DeleteCookieNamed("test1");
-
-    // Selenium .net bindings also provides a way to delete
-    // cookie by passing cookie object of current browsing context
-    driver.Manage().Cookies.DeleteCookie(cookie);
-   } finally {
-    driver.Quit();
-   }
-  }
- }
-}
+          {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L70-L73" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :chrome
-
-begin
-  driver.get 'https://www.example.com'
-  driver.manage.add_cookie(name: "test1", value: "cookie1")
-  driver.manage.add_cookie(name: "test2", value: "cookie2")
-
-  # delete a cookie with name 'test1'
-  driver.manage.delete_cookie('test1')
-ensure
-  driver.quit
-end
+    {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/cookies_spec.rb#L40-L43" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L53-L67">}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L61-L62">}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
@@ -439,78 +197,20 @@ It deletes all the cookies of the current browsing context.
 
 {{< tabpane langEqualsHeader=true >}}
 {{< badge-examples >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class deleteAllCookies {
-    public static void main(String[] args) {
-        WebDriver driver = new ChromeDriver();
-        try {
-            driver.get("http://www.example.com");
-            driver.manage().addCookie(new Cookie("test1", "cookie1"));
-            driver.manage().addCookie(new Cookie("test2", "cookie2"));
-
-            // deletes all cookies
-            driver.manage().deleteAllCookies();
-        } finally {
-            driver.quit();
-        }
-    }
-}
+              {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L100-L105" >}}
   {{< /tab >}}
- {{< tab header="Python" >}}
-from selenium import webdriver
-driver = webdriver.Chrome()
-
-# Navigate to url
-driver.get("http://www.example.com")
-driver.add_cookie({"name": "test1", "value": "cookie1"})
-driver.add_cookie({"name": "test2", "value": "cookie2"})
-
-#  Deletes all cookies
-driver.delete_all_cookies()
+ {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L47-L55" text=true >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace DeleteAllCookies {
- class DeleteAllCookies {
-  public static void Main(string[] args) {
-   IWebDriver driver = new ChromeDriver();
-   try {
-    // Navigate to Url
-    driver.Navigate().GoToUrl("https://example.com");
-    driver.Manage().Cookies.AddCookie(new Cookie("test1", "cookie1"));
-    driver.Manage().Cookies.AddCookie(new Cookie("test2", "cookie2"));
-
-    // deletes all cookies
-    driver.Manage().Cookies.DeleteAllCookies();
-   } finally {
-    driver.Quit();
-   }
-  }
- }
-}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L92-L97" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :chrome
-
-begin
-  driver.get 'https://www.example.com'
-  driver.manage.add_cookie(name: "test1", value: "cookie1")
-  driver.manage.add_cookie(name: "test2", value: "cookie2")
-
-  # deletes all cookies
-  driver.manage.delete_all_cookies
-ensure
-  driver.quit
-end
+     {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/cookies_spec.rb#L49-L54" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L69-L78">}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L77-L78">}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
@@ -555,40 +255,11 @@ Firefox(79+version) and works with Selenium 4 and later versions.**
 
 {{< tabpane langEqualsHeader=true >}}
 {{< badge-examples >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class cookieTest {
-  public static void main(String[] args) {
-    WebDriver driver = new ChromeDriver();
-    try {
-      driver.get("http://www.example.com");
-      Cookie cookie = new Cookie.Builder("key", "value").sameSite("Strict").build();
-      Cookie cookie1 = new Cookie.Builder("key", "value").sameSite("Lax").build();
-      driver.manage().addCookie(cookie);
-      driver.manage().addCookie(cookie1);
-      System.out.println(cookie.getSameSite());
-      System.out.println(cookie1.getSameSite());
-    } finally {
-      driver.quit();
-    }
-  }
-}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L112-L121" >}}
   {{< /tab >}}
- {{< tab header="Python" >}}
-from selenium import webdriver
-
-driver = webdriver.Chrome()
-
-driver.get("http://www.example.com")
-# Adds the cookie into current browser context with sameSite 'Strict' (or) 'Lax'
-driver.add_cookie({"name": "foo", "value": "value", 'sameSite': 'Strict'})
-driver.add_cookie({"name": "foo1", "value": "value", 'sameSite': 'Lax'})
-cookie1 = driver.get_cookie('foo')
-cookie2 = driver.get_cookie('foo1')
-print(cookie1)
-print(cookie2)
+ {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L59-L71" text=true >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 using OpenQA.Selenium;
@@ -637,7 +308,7 @@ ensure
 end
   {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L20-L26">}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L24-L26">}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
diff --git a/website_and_docs/content/documentation/webdriver/interactions/cookies.ja.md b/website_and_docs/content/documentation/webdriver/interactions/cookies.ja.md
index 2b0f3c498c4d..c7d13995d29d 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/cookies.ja.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/cookies.ja.md
@@ -24,70 +24,20 @@ Cookieの追加では、一連の定義済みのシリアル化可能なJSONオ
 サイトとの対話を開始する前にCookieを事前設定しようとしていて、ホームページが大きい場合/代替の読み込みに時間がかかる場合は、サイトで小さいページを見つけることです。（通常、たとえば http://example.com/some404page のような、404ページは小さいです。）
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class addCookie {
-    public static void main(String[] args) {
-        WebDriver driver = new ChromeDriver();
-        try {
-            driver.get("http://www.example.com");
-
-            // Adds the cookie into current browser context
-            driver.manage().addCookie(new Cookie("key", "value"));
-        } finally {
-            driver.quit();
-        }
-    }
-}
+ {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L30-L32" >}}
   {{< /tab >}}
-{{< tab header="Python" >}}
-from selenium import webdriver
-
-driver = webdriver.Chrome()
-
-driver.get("http://www.example.com")
-
-# Adds the cookie into current browser context
-driver.add_cookie({"name": "key", "value": "value"})
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L5-L9" >}}
   {{< /tab >}}
-{{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace AddCookie {
- class AddCookie {
-  public static void Main(string[] args) {
-   IWebDriver driver = new ChromeDriver();
-   try {
-    // Navigate to Url
-    driver.Navigate().GoToUrl("https://example.com");
-
-    // Adds the cookie into current browser context
-    driver.Manage().Cookies.AddCookie(new Cookie("key", "value"));
-   } finally {
-    driver.Quit();
-   }
-  }
- }
-}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L32-L34" >}}
   {{< /tab >}}
-{{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :chrome
-
-begin
-  driver.get 'https://www.example.com'
-  
-  # Adds the cookie into current browser context
-  driver.manage.add_cookie(name: "key", value: "value")
-ensure
-  driver.quit
-end
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/cookies_spec.rb#L9-L11" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L13-L18">}}
+  {{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L18">}}
   {{< /tab >}}
 {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
@@ -112,79 +62,20 @@ fun main() {
 関連付けられているすべてのCookieの中で、Cookie名と一致するシリアル化されたCookieデータを返します。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class getCookieNamed {
-    public static void main(String[] args) {
-        WebDriver driver = new ChromeDriver();
-        try {
-            driver.get("http://www.example.com");
-            driver.manage().addCookie(new Cookie("foo", "bar"));
-
-            // Get cookie details with named cookie 'foo'
-            Cookie cookie1 = driver.manage().getCookieNamed("foo");
-            System.out.println(cookie1);
-        } finally {
-            driver.quit();
-        }
-    }
-}
+   {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L38-L42" >}}
   {{< /tab >}}
- {{< tab header="Python" >}}
-from selenium import webdriver
-
-driver = webdriver.Chrome()
-
-# Navigate to url
-driver.get("http://www.example.com")
-
-# Adds the cookie into current browser context
-driver.add_cookie({"name": "foo", "value": "bar"})
-
-# Get cookie details with named cookie 'foo'
-print(driver.get_cookie("foo"))
+ {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L13-L20" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace GetCookieNamed {
- class GetCookieNamed {
-  public static void Main(string[] args) {
-   IWebDriver driver = new ChromeDriver();
-   try {
-    // Navigate to Url
-    driver.Navigate().GoToUrl("https://example.com");
-    driver.Manage().Cookies.AddCookie(new Cookie("foo", "bar"));
-
-    // Get cookie details with named cookie 'foo'
-    var cookie = driver.Manage().Cookies.GetCookieNamed("foo");
-    System.Console.WriteLine(cookie);
-   } finally {
-    driver.Quit();
-   }
-  }
- }
-}
+    {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L40-L44" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :chrome
-
-begin
-  driver.get 'https://www.example.com'
-  driver.manage.add_cookie(name: "foo", value: "bar")
-
-  # Get cookie details with named cookie 'foo'
-  puts driver.manage.cookie_named('foo')
-ensure
-  driver.quit
-end
+   {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/cookies_spec.rb#L17-L21" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L28-L38">}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L35-L38">}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
@@ -212,83 +103,20 @@ fun main() {
 ブラウザが使用できなくなった場合、エラーが返されます。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-import java.util.Set;
-
-public class getAllCookies {
-    public static void main(String[] args) {
-        WebDriver driver = new ChromeDriver();
-        try {
-            driver.get("http://www.example.com");
-            // Add few cookies
-            driver.manage().addCookie(new Cookie("test1", "cookie1"));
-            driver.manage().addCookie(new Cookie("test2", "cookie2"));
-
-            // Get All available cookies
-            Set<Cookie> cookies = driver.manage().getCookies();
-            System.out.println(cookies);
-        } finally {
-            driver.quit();
-        }
-    }
-}
+        {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L52-L66" >}}
   {{< /tab >}}
- {{< tab header="Python" >}}
-from selenium import webdriver
-
-driver = webdriver.Chrome()
-
-# Navigate to url
-driver.get("http://www.example.com")
-
-driver.add_cookie({"name": "test1", "value": "cookie1"})
-driver.add_cookie({"name": "test2", "value": "cookie2"})
-
-# Get all available cookies
-print(driver.get_cookies())
+ {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L24-L32" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace GetAllCookies {
- class GetAllCookies {
-  public static void Main(string[] args) {
-   IWebDriver driver = new ChromeDriver();
-   try {
-    // Navigate to Url
-    driver.Navigate().GoToUrl("https://example.com");
-    driver.Manage().Cookies.AddCookie(new Cookie("test1", "cookie1"));
-    driver.Manage().Cookies.AddCookie(new Cookie("test2", "cookie2"));
-
-    // Get All available cookies
-    var cookies = driver.Manage().Cookies.AllCookies;
-   } finally {
-    driver.Quit();
-   }
-  }
- }
-}
+      {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L51-L64" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :chrome
-
-begin
-  driver.get 'https://www.example.com'
-  driver.manage.add_cookie(name: "test1", value: "cookie1")
-  driver.manage.add_cookie(name: "test2", value: "cookie2")
-
-  # Get all available cookies
-  puts driver.manage.all_cookies
-ensure
-  driver.quit
-end
+   {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/cookies_spec.rb#L26-L31" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L40-L51">}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L49-L51">}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
@@ -317,90 +145,20 @@ fun main() {
 指定されたCookie名と一致するCookieデータを削除します。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class deleteCookie {
-    public static void main(String[] args) {
-        WebDriver driver = new ChromeDriver();
-        try {
-            driver.get("http://www.example.com");
-            driver.manage().addCookie(new Cookie("test1", "cookie1"));
-            Cookie cookie1 = new Cookie("test2", "cookie2");
-            driver.manage().addCookie(cookie1);
-
-            // delete a cookie with name 'test1'
-            driver.manage().deleteCookieNamed("test1");
-
-            /*
-             Selenium Java bindings also provides a way to delete
-             cookie by passing cookie object of current browsing context
-             */
-            driver.manage().deleteCookie(cookie1);
-        } finally {
-            driver.quit();
-        }
-    }
-}
+          {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L74-L77" >}}
   {{< /tab >}}
- {{< tab header="Python" >}}
-from selenium import webdriver
-driver = webdriver.Chrome()
-
-# Navigate to url
-driver.get("http://www.example.com")
-driver.add_cookie({"name": "test1", "value": "cookie1"})
-driver.add_cookie({"name": "test2", "value": "cookie2"})
-
-# Delete a cookie with name 'test1'
-driver.delete_cookie("test1")
+ {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L35-L43" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace DeleteCookie {
- class DeleteCookie {
-  public static void Main(string[] args) {
-   IWebDriver driver = new ChromeDriver();
-   try {
-    // Navigate to Url
-    driver.Navigate().GoToUrl("https://example.com");
-    driver.Manage().Cookies.AddCookie(new Cookie("test1", "cookie1"));
-    var cookie = new Cookie("test2", "cookie2");
-    driver.Manage().Cookies.AddCookie(cookie);
-
-    // delete a cookie with name 'test1'	
-    driver.Manage().Cookies.DeleteCookieNamed("test1");
-
-    // Selenium .net bindings also provides a way to delete
-    // cookie by passing cookie object of current browsing context
-    driver.Manage().Cookies.DeleteCookie(cookie);
-   } finally {
-    driver.Quit();
-   }
-  }
- }
-}
+            {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L70-L73" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :chrome
-
-begin
-  driver.get 'https://www.example.com'
-  driver.manage.add_cookie(name: "test1", value: "cookie1")
-  driver.manage.add_cookie(name: "test2", value: "cookie2")
-
-  # delete a cookie with name 'test1'
-  driver.manage.delete_cookie('test1')
-ensure
-  driver.quit
-end
+     {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/cookies_spec.rb#L40-L43" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L53-L67">}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L61-L62">}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
@@ -432,78 +190,20 @@ fun main() {
 現在のブラウジングコンテキストの全てのCookieを削除します。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class deleteAllCookies {
-    public static void main(String[] args) {
-        WebDriver driver = new ChromeDriver();
-        try {
-            driver.get("http://www.example.com");
-            driver.manage().addCookie(new Cookie("test1", "cookie1"));
-            driver.manage().addCookie(new Cookie("test2", "cookie2"));
-
-            // deletes all cookies
-            driver.manage().deleteAllCookies();
-        } finally {
-            driver.quit();
-        }
-    }
-}
+                {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L100-L105" >}}
   {{< /tab >}}
- {{< tab header="Python" >}}
-from selenium import webdriver
-driver = webdriver.Chrome()
-
-# Navigate to url
-driver.get("http://www.example.com")
-driver.add_cookie({"name": "test1", "value": "cookie1"})
-driver.add_cookie({"name": "test2", "value": "cookie2"})
-
-#  Deletes all cookies
-driver.delete_all_cookies()
+ {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L47-L55" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace DeleteAllCookies {
- class DeleteAllCookies {
-  public static void Main(string[] args) {
-   IWebDriver driver = new ChromeDriver();
-   try {
-    // Navigate to Url
-    driver.Navigate().GoToUrl("https://example.com");
-    driver.Manage().Cookies.AddCookie(new Cookie("test1", "cookie1"));
-    driver.Manage().Cookies.AddCookie(new Cookie("test2", "cookie2"));
-
-    // deletes all cookies
-    driver.Manage().Cookies.DeleteAllCookies();
-   } finally {
-    driver.Quit();
-   }
-  }
- }
-}
+ {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L92-L97" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :chrome
-
-begin
-  driver.get 'https://www.example.com'
-  driver.manage.add_cookie(name: "test1", value: "cookie1")
-  driver.manage.add_cookie(name: "test2", value: "cookie2")
-
-  # deletes all cookies
-  driver.manage.delete_all_cookies
-ensure
-  driver.quit
-end
+   {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/cookies_spec.rb#L49-L54" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L69-L78">}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L77-L78">}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
@@ -545,40 +245,11 @@ CookieのSameSite属性を **Lax** に設定すると、Cookieはサードパー
 Firefox(79+version) and works with Selenium 4 and later versions.**
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class cookieTest {
-  public static void main(String[] args) {
-    WebDriver driver = new ChromeDriver();
-    try {
-      driver.get("http://www.example.com");
-      Cookie cookie = new Cookie.Builder("key", "value").sameSite("Strict").build();
-      Cookie cookie1 = new Cookie.Builder("key", "value").sameSite("Lax").build();
-      driver.manage().addCookie(cookie);
-      driver.manage().addCookie(cookie1);
-      System.out.println(cookie.getSameSite());
-      System.out.println(cookie1.getSameSite());
-    } finally {
-      driver.quit();
-    }
-  }
-}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L112-L121" >}}
   {{< /tab >}}
- {{< tab header="Python" >}}
-from selenium import webdriver
-
-driver = webdriver.Chrome()
-
-driver.get("http://www.example.com")
-# Adds the cookie into current browser context with sameSite 'Strict' (or) 'Lax'
-driver.add_cookie({"name": "foo", "value": "value", 'sameSite': 'Strict'})
-driver.add_cookie({"name": "foo1", "value": "value", 'sameSite': 'Lax'})
-cookie1 = driver.get_cookie('foo')
-cookie2 = driver.get_cookie('foo1')
-print(cookie1)
-print(cookie2)
+ {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L59-L71" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 using OpenQA.Selenium;
@@ -627,7 +298,7 @@ ensure
 end
   {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L20-L26">}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L24-L26">}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
diff --git a/website_and_docs/content/documentation/webdriver/interactions/cookies.pt-br.md b/website_and_docs/content/documentation/webdriver/interactions/cookies.pt-br.md
index e26bb9ceaf22..4515b48ba4be 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/cookies.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/cookies.pt-br.md
@@ -26,70 +26,20 @@ uma alternativa é encontrar uma página menor no site (normalmente a página 40
 por exemplo http://example.com/some404page)
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class addCookie {
-    public static void main(String[] args) {
-        WebDriver driver = new ChromeDriver();
-        try {
-            driver.get("http://www.example.com");
-
-            // Adds the cookie into current browser context
-            driver.manage().addCookie(new Cookie("key", "value"));
-        } finally {
-            driver.quit();
-        }
-    }
-}
+  {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L30-L32" >}}
   {{< /tab >}}
-{{< tab header="Python" >}}
-from selenium import webdriver
-
-driver = webdriver.Chrome()
-
-driver.get("http://www.example.com")
-
-# Adds the cookie into current browser context
-driver.add_cookie({"name": "key", "value": "value"})
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L5-L9" >}}
   {{< /tab >}}
-{{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace AddCookie {
- class AddCookie {
-  public static void Main(string[] args) {
-   IWebDriver driver = new ChromeDriver();
-   try {
-    // Navigate to Url
-    driver.Navigate().GoToUrl("https://example.com");
-
-    // Adds the cookie into current browser context
-    driver.Manage().Cookies.AddCookie(new Cookie("key", "value"));
-   } finally {
-    driver.Quit();
-   }
-  }
- }
-}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L32-L34" >}}
   {{< /tab >}}
-{{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :chrome
-
-begin
-  driver.get 'https://www.example.com'
-  
-  # Adds the cookie into current browser context
-  driver.manage.add_cookie(name: "key", value: "value")
-ensure
-  driver.quit
-end
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/cookies_spec.rb#L9-L11" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L13-L18">}}
+  {{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L18">}}
   {{< /tab >}}
 {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
@@ -114,79 +64,20 @@ fun main() {
 Retorna os dados do cookie serializado correspondentes ao nome do cookie entre todos os cookies associados.
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class getCookieNamed {
-    public static void main(String[] args) {
-        WebDriver driver = new ChromeDriver();
-        try {
-            driver.get("http://www.example.com");
-            driver.manage().addCookie(new Cookie("foo", "bar"));
-
-            // Get cookie details with named cookie 'foo'
-            Cookie cookie1 = driver.manage().getCookieNamed("foo");
-            System.out.println(cookie1);
-        } finally {
-            driver.quit();
-        }
-    }
-}
+     {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L38-L42" >}}
   {{< /tab >}}
- {{< tab header="Python" >}}
-from selenium import webdriver
-
-driver = webdriver.Chrome()
-
-# Navigate to url
-driver.get("http://www.example.com")
-
-# Adds the cookie into current browser context
-driver.add_cookie({"name": "foo", "value": "bar"})
-
-# Get cookie details with named cookie 'foo'
-print(driver.get_cookie("foo"))
+ {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L13-L20" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace GetCookieNamed {
- class GetCookieNamed {
-  public static void Main(string[] args) {
-   IWebDriver driver = new ChromeDriver();
-   try {
-    // Navigate to Url
-    driver.Navigate().GoToUrl("https://example.com");
-    driver.Manage().Cookies.AddCookie(new Cookie("foo", "bar"));
-
-    // Get cookie details with named cookie 'foo'
-    var cookie = driver.Manage().Cookies.GetCookieNamed("foo");
-    System.Console.WriteLine(cookie);
-   } finally {
-    driver.Quit();
-   }
-  }
- }
-}
+      {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L40-L44" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :chrome
-
-begin
-  driver.get 'https://www.example.com'
-  driver.manage.add_cookie(name: "foo", value: "bar")
-
-  # Get cookie details with named cookie 'foo'
-  puts driver.manage.cookie_named('foo')
-ensure
-  driver.quit
-end
+     {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/cookies_spec.rb#L17-L21" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L28-L38">}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L35-L38">}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
@@ -214,83 +105,20 @@ Retorna 'dados de cookie serializados com sucesso' para o contexto de navegaçã
 Se o navegador não estiver mais disponível, ele retornará um erro. 
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-import java.util.Set;
-
-public class getAllCookies {
-    public static void main(String[] args) {
-        WebDriver driver = new ChromeDriver();
-        try {
-            driver.get("http://www.example.com");
-            // Add few cookies
-            driver.manage().addCookie(new Cookie("test1", "cookie1"));
-            driver.manage().addCookie(new Cookie("test2", "cookie2"));
-
-            // Get All available cookies
-            Set<Cookie> cookies = driver.manage().getCookies();
-            System.out.println(cookies);
-        } finally {
-            driver.quit();
-        }
-    }
-}
+          {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L52-L66" >}}
   {{< /tab >}}
- {{< tab header="Python" >}}
-from selenium import webdriver
-
-driver = webdriver.Chrome()
-
-# Navigate to url
-driver.get("http://www.example.com")
-
-driver.add_cookie({"name": "test1", "value": "cookie1"})
-driver.add_cookie({"name": "test2", "value": "cookie2"})
-
-# Get all available cookies
-print(driver.get_cookies())
+ {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L24-L32" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace GetAllCookies {
- class GetAllCookies {
-  public static void Main(string[] args) {
-   IWebDriver driver = new ChromeDriver();
-   try {
-    // Navigate to Url
-    driver.Navigate().GoToUrl("https://example.com");
-    driver.Manage().Cookies.AddCookie(new Cookie("test1", "cookie1"));
-    driver.Manage().Cookies.AddCookie(new Cookie("test2", "cookie2"));
-
-    // Get All available cookies
-    var cookies = driver.Manage().Cookies.AllCookies;
-   } finally {
-    driver.Quit();
-   }
-  }
- }
-}
+        {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L51-L64" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :chrome
-
-begin
-  driver.get 'https://www.example.com'
-  driver.manage.add_cookie(name: "test1", value: "cookie1")
-  driver.manage.add_cookie(name: "test2", value: "cookie2")
-
-  # Get all available cookies
-  puts driver.manage.all_cookies
-ensure
-  driver.quit
-end
+    {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/cookies_spec.rb#L26-L31" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L40-L51">}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L49-L51">}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
@@ -319,90 +147,20 @@ fun main() {
 Exclui os dados do cookie que correspondem ao nome do cookie fornecido.
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class deleteCookie {
-    public static void main(String[] args) {
-        WebDriver driver = new ChromeDriver();
-        try {
-            driver.get("http://www.example.com");
-            driver.manage().addCookie(new Cookie("test1", "cookie1"));
-            Cookie cookie1 = new Cookie("test2", "cookie2");
-            driver.manage().addCookie(cookie1);
-
-            // delete a cookie with name 'test1'
-            driver.manage().deleteCookieNamed("test1");
-
-            /*
-             Selenium Java bindings also provides a way to delete
-             cookie by passing cookie object of current browsing context
-             */
-            driver.manage().deleteCookie(cookie1);
-        } finally {
-            driver.quit();
-        }
-    }
-}
+            {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L74-L77" >}}
   {{< /tab >}}
- {{< tab header="Python" >}}
-from selenium import webdriver
-driver = webdriver.Chrome()
-
-# Navigate to url
-driver.get("http://www.example.com")
-driver.add_cookie({"name": "test1", "value": "cookie1"})
-driver.add_cookie({"name": "test2", "value": "cookie2"})
-
-# Delete a cookie with name 'test1'
-driver.delete_cookie("test1")
+ {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L35-L43" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace DeleteCookie {
- class DeleteCookie {
-  public static void Main(string[] args) {
-   IWebDriver driver = new ChromeDriver();
-   try {
-    // Navigate to Url
-    driver.Navigate().GoToUrl("https://example.com");
-    driver.Manage().Cookies.AddCookie(new Cookie("test1", "cookie1"));
-    var cookie = new Cookie("test2", "cookie2");
-    driver.Manage().Cookies.AddCookie(cookie);
-
-    // delete a cookie with name 'test1'	
-    driver.Manage().Cookies.DeleteCookieNamed("test1");
-
-    // Selenium .net bindings also provides a way to delete
-    // cookie by passing cookie object of current browsing context
-    driver.Manage().Cookies.DeleteCookie(cookie);
-   } finally {
-    driver.Quit();
-   }
-  }
- }
-}
+              {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L70-L73" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :chrome
-
-begin
-  driver.get 'https://www.example.com'
-  driver.manage.add_cookie(name: "test1", value: "cookie1")
-  driver.manage.add_cookie(name: "test2", value: "cookie2")
-
-  # delete a cookie with name 'test1'
-  driver.manage.delete_cookie('test1')
-ensure
-  driver.quit
-end
+      {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/cookies_spec.rb#L40-L43" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L53-L67">}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L61-L62">}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
@@ -434,78 +192,20 @@ fun main() {
 Exclui todos os cookies do contexto de navegação atual.
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class deleteAllCookies {
-    public static void main(String[] args) {
-        WebDriver driver = new ChromeDriver();
-        try {
-            driver.get("http://www.example.com");
-            driver.manage().addCookie(new Cookie("test1", "cookie1"));
-            driver.manage().addCookie(new Cookie("test2", "cookie2"));
-
-            // deletes all cookies
-            driver.manage().deleteAllCookies();
-        } finally {
-            driver.quit();
-        }
-    }
-}
+                  {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L100-L105" >}}
   {{< /tab >}}
- {{< tab header="Python" >}}
-from selenium import webdriver
-driver = webdriver.Chrome()
-
-# Navigate to url
-driver.get("http://www.example.com")
-driver.add_cookie({"name": "test1", "value": "cookie1"})
-driver.add_cookie({"name": "test2", "value": "cookie2"})
-
-#  Deletes all cookies
-driver.delete_all_cookies()
+ {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L47-L55" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace DeleteAllCookies {
- class DeleteAllCookies {
-  public static void Main(string[] args) {
-   IWebDriver driver = new ChromeDriver();
-   try {
-    // Navigate to Url
-    driver.Navigate().GoToUrl("https://example.com");
-    driver.Manage().Cookies.AddCookie(new Cookie("test1", "cookie1"));
-    driver.Manage().Cookies.AddCookie(new Cookie("test2", "cookie2"));
-
-    // deletes all cookies
-    driver.Manage().Cookies.DeleteAllCookies();
-   } finally {
-    driver.Quit();
-   }
-  }
- }
-}
+   {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L92-L97" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :chrome
-
-begin
-  driver.get 'https://www.example.com'
-  driver.manage.add_cookie(name: "test1", value: "cookie1")
-  driver.manage.add_cookie(name: "test2", value: "cookie2")
-
-  # deletes all cookies
-  driver.manage.delete_all_cookies
-ensure
-  driver.quit
-end
+   {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/cookies_spec.rb#L49-L54" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L69-L78">}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L77-L78">}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
@@ -549,40 +249,11 @@ iniciada por um site de terceiros.
 Firefox (versão 79+) e funciona com Selenium 4 e versões posteriores.**
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class cookieTest {
-  public static void main(String[] args) {
-    WebDriver driver = new ChromeDriver();
-    try {
-      driver.get("http://www.example.com");
-      Cookie cookie = new Cookie.Builder("key", "value").sameSite("Strict").build();
-      Cookie cookie1 = new Cookie.Builder("key", "value").sameSite("Lax").build();
-      driver.manage().addCookie(cookie);
-      driver.manage().addCookie(cookie1);
-      System.out.println(cookie.getSameSite());
-      System.out.println(cookie1.getSameSite());
-    } finally {
-      driver.quit();
-    }
-  }
-}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L112-L121" >}}
   {{< /tab >}}
- {{< tab header="Python" >}}
-from selenium import webdriver
-
-driver = webdriver.Chrome()
-
-driver.get("http://www.example.com")
-# Adds the cookie into current browser context with sameSite 'Strict' (or) 'Lax'
-driver.add_cookie({"name": "foo", "value": "value", 'sameSite': 'Strict'})
-driver.add_cookie({"name": "foo1", "value": "value", 'sameSite': 'Lax'})
-cookie1 = driver.get_cookie('foo')
-cookie2 = driver.get_cookie('foo1')
-print(cookie1)
-print(cookie2)
+ {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L59-L71" >}}  
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 using OpenQA.Selenium;
@@ -631,7 +302,7 @@ ensure
 end
   {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L20-L26">}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L24-L26">}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
diff --git a/website_and_docs/content/documentation/webdriver/interactions/cookies.zh-cn.md b/website_and_docs/content/documentation/webdriver/interactions/cookies.zh-cn.md
index 6f6add6865ba..c4455e645452 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/cookies.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/cookies.zh-cn.md
@@ -22,70 +22,20 @@ WebDriver API提供了一种使用内置的方法与Cookie进行交互:
 例如 http://example.com/some404page)
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class addCookie {
-    public static void main(String[] args) {
-        WebDriver driver = new ChromeDriver();
-        try {
-            driver.get("http://www.example.com");
-
-            // Adds the cookie into current browser context
-            driver.manage().addCookie(new Cookie("key", "value"));
-        } finally {
-            driver.quit();
-        }
-    }
-}
+    {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L30-L32" >}}
   {{< /tab >}}
-{{< tab header="Python" >}}
-from selenium import webdriver
-
-driver = webdriver.Chrome()
-
-driver.get("http://www.example.com")
-
-# Adds the cookie into current browser context
-driver.add_cookie({"name": "key", "value": "value"})
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L5-9" >}}
   {{< /tab >}}
-{{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace AddCookie {
- class AddCookie {
-  public static void Main(string[] args) {
-   IWebDriver driver = new ChromeDriver();
-   try {
-    // Navigate to Url
-    driver.Navigate().GoToUrl("https://example.com");
-
-    // Adds the cookie into current browser context
-    driver.Manage().Cookies.AddCookie(new Cookie("key", "value"));
-   } finally {
-    driver.Quit();
-   }
-  }
- }
-}
+  {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L32-L34" >}}
   {{< /tab >}}
-{{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :chrome
-
-begin
-  driver.get 'https://www.example.com'
-  
-  # Adds the cookie into current browser context
-  driver.manage.add_cookie(name: "key", value: "value")
-ensure
-  driver.quit
-end
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/cookies_spec.rb#L9-L11" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L13-L18">}}
+  {{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L18">}}
   {{< /tab >}}
 {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
@@ -110,79 +60,22 @@ fun main() {
 此方法返回与cookie名称匹配的序列化cookie数据中所有关联的cookie.
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class getCookieNamed {
-    public static void main(String[] args) {
-        WebDriver driver = new ChromeDriver();
-        try {
-            driver.get("http://www.example.com");
-            driver.manage().addCookie(new Cookie("foo", "bar"));
-
-            // Get cookie details with named cookie 'foo'
-            Cookie cookie1 = driver.manage().getCookieNamed("foo");
-            System.out.println(cookie1);
-        } finally {
-            driver.quit();
-        }
-    }
-}
+     {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L38-L42" >}}
   {{< /tab >}}
- {{< tab header="Python" >}}
-from selenium import webdriver
-
-driver = webdriver.Chrome()
-
-# Navigate to url
-driver.get("http://www.example.com")
-
-# Adds the cookie into current browser context
-driver.add_cookie({"name": "foo", "value": "bar"})
-
-# Get cookie details with named cookie 'foo'
-print(driver.get_cookie("foo"))
+ {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L13-L20" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace GetCookieNamed {
- class GetCookieNamed {
-  public static void Main(string[] args) {
-   IWebDriver driver = new ChromeDriver();
-   try {
-    // Navigate to Url
-    driver.Navigate().GoToUrl("https://example.com");
-    driver.Manage().Cookies.AddCookie(new Cookie("foo", "bar"));
-
-    // Get cookie details with named cookie 'foo'
-    var cookie = driver.Manage().Cookies.GetCookieNamed("foo");
-    System.Console.WriteLine(cookie);
-   } finally {
-    driver.Quit();
-   }
-  }
- }
-}
+        {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L40-L44" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :chrome
-
-begin
-  driver.get 'https://www.example.com'
-  driver.manage.add_cookie(name: "foo", value: "bar")
-
-  # Get cookie details with named cookie 'foo'
-  puts driver.manage.cookie_named('foo')
-ensure
-  driver.quit
-end
+  
+      {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/cookies_spec.rb#L17-L21" >}}
   {{< /tab >}}
+
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L28-L38">}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L35-L38">}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
@@ -209,83 +102,22 @@ fun main() {
 此方法会针对当前访问上下文返回“成功的序列化cookie数据”. 如果浏览器不再可用, 则返回错误. 
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-import java.util.Set;
-
-public class getAllCookies {
-    public static void main(String[] args) {
-        WebDriver driver = new ChromeDriver();
-        try {
-            driver.get("http://www.example.com");
-            // Add few cookies
-            driver.manage().addCookie(new Cookie("test1", "cookie1"));
-            driver.manage().addCookie(new Cookie("test2", "cookie2"));
-
-            // Get All available cookies
-            Set<Cookie> cookies = driver.manage().getCookies();
-            System.out.println(cookies);
-        } finally {
-            driver.quit();
-        }
-    }
-}
+           {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L52-L66" >}}
   {{< /tab >}}
- {{< tab header="Python" >}}
-from selenium import webdriver
-
-driver = webdriver.Chrome()
-
-# Navigate to url
-driver.get("http://www.example.com")
-
-driver.add_cookie({"name": "test1", "value": "cookie1"})
-driver.add_cookie({"name": "test2", "value": "cookie2"})
-
-# Get all available cookies
-print(driver.get_cookies())
+ {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L24-L32" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace GetAllCookies {
- class GetAllCookies {
-  public static void Main(string[] args) {
-   IWebDriver driver = new ChromeDriver();
-   try {
-    // Navigate to Url
-    driver.Navigate().GoToUrl("https://example.com");
-    driver.Manage().Cookies.AddCookie(new Cookie("test1", "cookie1"));
-    driver.Manage().Cookies.AddCookie(new Cookie("test2", "cookie2"));
-
-    // Get All available cookies
-    var cookies = driver.Manage().Cookies.AllCookies;
-   } finally {
-    driver.Quit();
-   }
-  }
- }
-}
+         {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L51-L64" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :chrome
 
-begin
-  driver.get 'https://www.example.com'
-  driver.manage.add_cookie(name: "test1", value: "cookie1")
-  driver.manage.add_cookie(name: "test2", value: "cookie2")
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/cookies_spec.rb#L26-L31" >}}
+{{< /tab >}}
 
-  # Get all available cookies
-  puts driver.manage.all_cookies
-ensure
-  driver.quit
-end
-  {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L40-L51">}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L49-L51">}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
@@ -314,90 +146,22 @@ fun main() {
 此方法删除与提供的cookie名称匹配的cookie数据.
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class deleteCookie {
-    public static void main(String[] args) {
-        WebDriver driver = new ChromeDriver();
-        try {
-            driver.get("http://www.example.com");
-            driver.manage().addCookie(new Cookie("test1", "cookie1"));
-            Cookie cookie1 = new Cookie("test2", "cookie2");
-            driver.manage().addCookie(cookie1);
-
-            // delete a cookie with name 'test1'
-            driver.manage().deleteCookieNamed("test1");
-
-            /*
-             Selenium Java bindings also provides a way to delete
-             cookie by passing cookie object of current browsing context
-             */
-            driver.manage().deleteCookie(cookie1);
-        } finally {
-            driver.quit();
-        }
-    }
-}
+              {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L74-L77" >}}
   {{< /tab >}}
- {{< tab header="Python" >}}
-from selenium import webdriver
-driver = webdriver.Chrome()
-
-# Navigate to url
-driver.get("http://www.example.com")
-driver.add_cookie({"name": "test1", "value": "cookie1"})
-driver.add_cookie({"name": "test2", "value": "cookie2"})
-
-# Delete a cookie with name 'test1'
-driver.delete_cookie("test1")
+ {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L35-L43" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace DeleteCookie {
- class DeleteCookie {
-  public static void Main(string[] args) {
-   IWebDriver driver = new ChromeDriver();
-   try {
-    // Navigate to Url
-    driver.Navigate().GoToUrl("https://example.com");
-    driver.Manage().Cookies.AddCookie(new Cookie("test1", "cookie1"));
-    var cookie = new Cookie("test2", "cookie2");
-    driver.Manage().Cookies.AddCookie(cookie);
-
-    // delete a cookie with name 'test1'	
-    driver.Manage().Cookies.DeleteCookieNamed("test1");
-
-    // Selenium .net bindings also provides a way to delete
-    // cookie by passing cookie object of current browsing context
-    driver.Manage().Cookies.DeleteCookie(cookie);
-   } finally {
-    driver.Quit();
-   }
-  }
- }
-}
+                {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L70-L73" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :chrome
 
-begin
-  driver.get 'https://www.example.com'
-  driver.manage.add_cookie(name: "test1", value: "cookie1")
-  driver.manage.add_cookie(name: "test2", value: "cookie2")
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/cookies_spec.rb#L40-L43" >}}
+{{< /tab >}}
 
-  # delete a cookie with name 'test1'
-  driver.manage.delete_cookie('test1')
-ensure
-  driver.quit
-end
-  {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L53-L67">}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L61-L62">}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
@@ -429,78 +193,22 @@ fun main() {
 此方法删除当前访问上下文的所有cookie.
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class deleteAllCookies {
-    public static void main(String[] args) {
-        WebDriver driver = new ChromeDriver();
-        try {
-            driver.get("http://www.example.com");
-            driver.manage().addCookie(new Cookie("test1", "cookie1"));
-            driver.manage().addCookie(new Cookie("test2", "cookie2"));
-
-            // deletes all cookies
-            driver.manage().deleteAllCookies();
-        } finally {
-            driver.quit();
-        }
-    }
-}
+                    {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L100-L105" >}}
   {{< /tab >}}
- {{< tab header="Python" >}}
-from selenium import webdriver
-driver = webdriver.Chrome()
-
-# Navigate to url
-driver.get("http://www.example.com")
-driver.add_cookie({"name": "test1", "value": "cookie1"})
-driver.add_cookie({"name": "test2", "value": "cookie2"})
-
-#  Deletes all cookies
-driver.delete_all_cookies()
+ {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L47-L55" >}}
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-using OpenQA.Selenium;
-using OpenQA.Selenium.Chrome;
-
-namespace DeleteAllCookies {
- class DeleteAllCookies {
-  public static void Main(string[] args) {
-   IWebDriver driver = new ChromeDriver();
-   try {
-    // Navigate to Url
-    driver.Navigate().GoToUrl("https://example.com");
-    driver.Manage().Cookies.AddCookie(new Cookie("test1", "cookie1"));
-    driver.Manage().Cookies.AddCookie(new Cookie("test2", "cookie2"));
-
-    // deletes all cookies
-    driver.Manage().Cookies.DeleteAllCookies();
-   } finally {
-    driver.Quit();
-   }
-  }
- }
-}
+     {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/CookiesTest.cs#L92-L97" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-require 'selenium-webdriver'
-driver = Selenium::WebDriver.for :chrome
-
-begin
-  driver.get 'https://www.example.com'
-  driver.manage.add_cookie(name: "test1", value: "cookie1")
-  driver.manage.add_cookie(name: "test2", value: "cookie2")
-
-  # deletes all cookies
-  driver.manage.delete_all_cookies
-ensure
-  driver.quit
-end
+  
+   {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/cookies_spec.rb#L49-L54" >}}
   {{< /tab >}}
+
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L69-L78">}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L77-L78">}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
@@ -543,40 +251,11 @@ Firefox(79+版本)中提供,
 并适用于Selenium 4以及更高版本.**
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-import org.openqa.selenium.*;
-import org.openqa.selenium.chrome.ChromeDriver;
-
-public class cookieTest {
-  public static void main(String[] args) {
-    WebDriver driver = new ChromeDriver();
-    try {
-      driver.get("http://www.example.com");
-      Cookie cookie = new Cookie.Builder("key", "value").sameSite("Strict").build();
-      Cookie cookie1 = new Cookie.Builder("key", "value").sameSite("Lax").build();
-      driver.manage().addCookie(cookie);
-      driver.manage().addCookie(cookie1);
-      System.out.println(cookie.getSameSite());
-      System.out.println(cookie1.getSameSite());
-    } finally {
-      driver.quit();
-    }
-  }
-}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/CookiesTest.java#L112-L121" >}}
   {{< /tab >}}
- {{< tab header="Python" >}}
-from selenium import webdriver
-
-driver = webdriver.Chrome()
-
-driver.get("http://www.example.com")
-# Adds the cookie into current browser context with sameSite 'Strict' (or) 'Lax'
-driver.add_cookie({"name": "foo", "value": "value", 'sameSite': 'Strict'})
-driver.add_cookie({"name": "foo1", "value": "value", 'sameSite': 'Lax'})
-cookie1 = driver.get_cookie('foo')
-cookie2 = driver.get_cookie('foo1')
-print(cookie1)
-print(cookie2)
+ {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_cookies.py#L59-L71" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
 using OpenQA.Selenium;
@@ -625,7 +304,7 @@ ensure
 end
   {{< /tab >}}
   {{< tab header="JavaScript" text=true >}}
-{{< gh-codeblock path="/examples/javascript/test/browser/cookies.spec.js#L20-L26">}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/cookies.spec.js#L24-L26">}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.openqa.selenium.Cookie
diff --git a/website_and_docs/content/documentation/webdriver/interactions/frames.en.md b/website_and_docs/content/documentation/webdriver/interactions/frames.en.md
index 1ebae425bee8..2fc71941bbf0 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/frames.en.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/frames.en.md
@@ -61,8 +61,9 @@ However, if there are no buttons outside of the iframe, you might
 instead get a _no such element_ error. This happens because Selenium is
 only aware of the elements in the top level document. To interact with
 the button, we will need to first switch to the frame, in a similar way
-to how we switch windows. WebDriver offers three ways of switching to
-a frame.
+to how we switch windows. 
+WebDriver offers three ways of switching to a frame. Following example code
+shows how we can do that, using a live web example. 
 
 ## Using a WebElement
 
@@ -71,46 +72,25 @@ find the frame using your preferred selector and switch to it.
 
 {{< tabpane langEqualsHeader=true >}}
 {{< badge-examples >}}
-  {{< tab header="Java" >}}
-//Store the web element
-WebElement iframe = driver.findElement(By.cssSelector("#modal>iframe"));
-
-//Switch to the frame
-driver.switchTo().frame(iframe);
-
-//Now we can click the button
-driver.findElement(By.tagName("button")).click();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Store iframe web element
-iframe = driver.find_element(By.CSS_SELECTOR, "#modal > iframe")
-
-    # switch to selected iframe
-driver.switch_to.frame(iframe)
-
-    # Now click on button
-driver.find_element(By.TAG_NAME, 'button').click()
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-//Store the web element
-IWebElement iframe = driver.FindElement(By.CssSelector("#modal>iframe"));
-
-//Switch to the frame
-driver.SwitchTo().Frame(iframe);
-
-//Now we can click the button
-driver.FindElement(By.TagName("button")).Click();
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Store iframe web element
-iframe = driver.find_element(:css,'#modal > iframe')
+  {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/FramesTest.java#L38-L46" >}}
+{{< /tab >}}
+  
+   {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_frames.py#L24-L32" >}}
+{{< /tab >}}
+  
+  
+  {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/FramesTest.cs#L38-L46" >}}
+{{< /tab >}}
+ 
+
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/frames_spec.rb#L26-L33" >}}
+{{< /tab >}}
 
-    # Switch to the frame
-driver.switch_to.frame iframe
 
-    # Now, Click on the button
-driver.find_element(:tag_name,'button').click
-  {{< /tab >}}
   {{< tab header="JavaScript" >}}
 // Store the web element
 const iframe = driver.findElement(By.css('#modal > iframe'));
@@ -140,40 +120,23 @@ one found will be switched to.
 
 {{< tabpane langEqualsHeader=true >}}
 {{< badge-examples >}}
-  {{< tab header="Java" >}}
-//Using the ID
-driver.switchTo().frame("buttonframe");
-
-//Or using the name instead
-driver.switchTo().frame("myframe");
-
-//Now we can click the button
-driver.findElement(By.tagName("button")).click();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Switch frame by id
-driver.switch_to.frame('buttonframe')
-
-    # Now, Click on the button
-driver.find_element(By.TAG_NAME, 'button').click()
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-//Using the ID
-driver.SwitchTo().Frame("buttonframe");
+ {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/FramesTest.java#L50-L58" >}}
+  {{< /tab >}}
+  
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_frames.py#L34-L42" >}}
+{{< /tab >}}
+  
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/FramesTest.cs#L50-L58" >}}
+{{< /tab >}}
+  
+
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/frames_spec.rb#L36-L43" >}}
+{{< /tab >}}
 
-//Or using the name instead
-driver.SwitchTo().Frame("myframe");
-
-//Now we can click the button
-driver.FindElement(By.TagName("button")).Click();
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Switch by ID
-driver.switch_to.frame 'buttonframe'
-
-    # Now, Click on the button
-driver.find_element(:tag_name,'button').click
-  {{< /tab >}}
   {{< tab header="JavaScript" >}}
 // Using the ID
 await driver.switchTo().frame('buttonframe');
@@ -203,25 +166,29 @@ queried using _window.frames_ in JavaScript.
 
 {{< tabpane langEqualsHeader=true >}}
 {{< badge-examples >}}
-  {{< tab header="Java" >}}
-// Switches to the second frame
-driver.switchTo().frame(1);
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Switch to the second frame
-driver.switch_to.frame(1)
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Switches to the second frame
-driver.SwitchTo().Frame(1);
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # switching to second iframe based on index
-iframe = driver.find_elements(By.TAG_NAME,'iframe')[1]
 
-    # switch to selected iframe
-driver.switch_to.frame(iframe)
+    {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/FramesTest.java#L62-L63" >}}
   {{< /tab >}}
+  
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_frames.py#L45-L46" >}}
+{{< /tab >}}
+  
+ 
+
+
+    {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/FramesTest.cs#L62-L63" >}}
+{{< /tab >}}
+
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/frames_spec.rb#L46-L47" >}}
+{{< /tab >}}
+
+
+
+
   {{< tab header="JavaScript" >}}
 // Switches to the second frame
 await driver.switchTo().frame(1);
@@ -240,22 +207,24 @@ like so:
 
 {{< tabpane langEqualsHeader=true >}}
 {{< badge-examples >}}
-  {{< tab header="Java" >}}
-// Return to the top level
-driver.switchTo().defaultContent();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # switch back to default content
-driver.switch_to.default_content()
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Return to the top level
-driver.SwitchTo().DefaultContent();
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Return to the top level
-driver.switch_to.default_content
+    {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/FramesTest.java#L66-L67" >}}
   {{< /tab >}}
+
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_frames.py#L49-L50" >}}
+{{< /tab >}}
+  
+  
+      {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/FramesTest.cs#L66-L67" >}}
+{{< /tab >}}
+ 
+
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/frames_spec.rb#L49-L50" >}}
+{{< /tab >}}
+
   {{< tab header="JavaScript" >}}
 // Return to the top level
 await driver.switchTo().defaultContent();
diff --git a/website_and_docs/content/documentation/webdriver/interactions/frames.ja.md b/website_and_docs/content/documentation/webdriver/interactions/frames.ja.md
index 43408d5f6979..8f340dbdc358 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/frames.ja.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/frames.ja.md
@@ -61,46 +61,24 @@ WebDriverは、Frameに切り替える3つの方法を提供します。
 WebElementを使用した切り替えは、最も柔軟なオプションです。好みのセレクタを使用してFrameを見つけ、それに切り替えることができます。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-//Store the web element
-WebElement iframe = driver.findElement(By.cssSelector("#modal>iframe"));
-
-//Switch to the frame
-driver.switchTo().frame(iframe);
-
-//Now we can click the button
-driver.findElement(By.tagName("button")).click();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Store iframe web element
-iframe = driver.find_element(By.CSS_SELECTOR, "#modal > iframe")
+ {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/FramesTest.java#L38-L46" >}}
+{{< /tab >}}
+    {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_frames.py#L24-L32" >}}
+{{< /tab >}}
+  
+    {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/FramesTest.cs#L38-L46" >}}
+{{< /tab >}}
+  
 
-    # switch to selected iframe
-driver.switch_to.frame(iframe)
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/frames_spec.rb#L26-L36" >}}
+{{< /tab >}}
 
-    # Now click on button
-driver.find_element(By.TAG_NAME, 'button').click()
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-//Store the web element
-IWebElement iframe = driver.FindElement(By.CssSelector("#modal>iframe"));
-
-//Switch to the frame
-driver.SwitchTo().Frame(iframe);
-
-//Now we can click the button
-driver.FindElement(By.TagName("button")).Click();
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Store iframe web element
-iframe = driver.find_element(:css,'#modal > iframe')
 
-    # Switch to the frame
-driver.switch_to.frame iframe
 
-    # Now, Click on the button
-driver.find_element(:tag_name,'button').click
-  {{< /tab >}}
   {{< tab header="JavaScript" >}}
 // Store the web element
 const iframe = driver.findElement(By.css('#modal > iframe'));
@@ -129,40 +107,24 @@ FrameまたはiFrameにidまたはname属性がある場合、代わりにこれ
 名前またはIDがページ上で一意でない場合、最初に見つかったものに切り替えます。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-//Using the ID
-driver.switchTo().frame("buttonframe");
-
-//Or using the name instead
-driver.switchTo().frame("myframe");
-
-//Now we can click the button
-driver.findElement(By.tagName("button")).click();
+ {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/FramesTest.java#L50-L58" >}}
   {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Switch frame by id
-driver.switch_to.frame('buttonframe')
+  
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_frames.py#L34-L42" >}}
+{{< /tab >}}
+  
+ {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/FramesTest.cs#L50-L58" >}}
+{{< /tab >}}
 
-    # Now, Click on the button
-driver.find_element(By.TAG_NAME, 'button').click()
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-//Using the ID
-driver.SwitchTo().Frame("buttonframe");
 
-//Or using the name instead
-driver.SwitchTo().Frame("myframe");
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/frames_spec.rb#L36-L43" >}}
+{{< /tab >}}
 
-//Now we can click the button
-driver.FindElement(By.TagName("button")).Click();
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Switch by ID
-driver.switch_to.frame 'buttonframe'
 
-    # Now, Click on the button
-driver.find_element(:tag_name,'button').click
-  {{< /tab >}}
   {{< tab header="JavaScript" >}}
 // Using the ID
 await driver.switchTo().frame('buttonframe');
@@ -173,6 +135,8 @@ await driver.switchTo().frame('myframe');
 // Now we can click the button
 await driver.findElement(By.css('button')).click();
   {{< /tab >}}
+
+
   {{< tab header="Kotlin" >}}
 //Using the ID
 driver.switchTo().frame("buttonframe")
@@ -190,33 +154,29 @@ driver.findElement(By.tagName("button")).click()
 JavaScriptの _window.frames_ を使用して照会できるように、Frameのインデックスを使用することもできます。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-// Switches to the second frame
-driver.switchTo().frame(1);
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Switch to the second frame
-driver.switch_to.frame(1)
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Switches to the second frame
-driver.SwitchTo().Frame(1);
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # switching to second iframe based on index
-iframe = driver.find_elements(By.TAG_NAME,'iframe')[1]
-
-    # switch to selected iframe
-driver.switch_to.frame(iframe)
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/FramesTest.java#L62-L63" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_frames.py#L45-L46" >}}
+{{< /tab >}}
+{
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/FramesTest.cs#L62-L63" >}}
+{{< /tab >}}
+
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/frames_spec.rb#L46-L47" >}}
+{{< /tab >}}
+
+{{< tab header="JavaScript" >}}
 // Switches to the second frame
 await driver.switchTo().frame(1);
-  {{< /tab >}}
-  {{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
 // Switches to the second frame
 driver.switchTo().frame(1)
-  {{< /tab >}}
+{{< /tab >}}
 {{< /tabpane >}}
 
 
@@ -225,22 +185,21 @@ driver.switchTo().frame(1)
 iFrameまたはFrameセットを終了するには、次のようにデフォルトのコンテンツに切り替えます。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-// Return to the top level
-driver.switchTo().defaultContent();
+    {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/FramesTest.java#L66-L67" >}}
   {{< /tab >}}
   {{< tab header="Python" >}}
     # switch back to default content
 driver.switch_to.default_content()
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Return to the top level
-driver.SwitchTo().DefaultContent();
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Return to the top level
-driver.switch_to.default_content
-  {{< /tab >}}
+       {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/FramesTest.cs#L66-L67" >}}
+{{< /tab >}}
+
+ {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/frames_spec.rb#L49-L50" >}}
+{{< /tab >}}
+
   {{< tab header="JavaScript" >}}
 // Return to the top level
 await driver.switchTo().defaultContent();
diff --git a/website_and_docs/content/documentation/webdriver/interactions/frames.pt-br.md b/website_and_docs/content/documentation/webdriver/interactions/frames.pt-br.md
index 7a2c0025c3fa..c4530191e055 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/frames.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/frames.pt-br.md
@@ -69,46 +69,21 @@ Alternar usando um WebElement é a opção mais flexível. Você pode
 encontrar o quadro usando seu seletor preferido e mudar para ele.
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-//Store the web element
-WebElement iframe = driver.findElement(By.cssSelector("#modal>iframe"));
-
-//Switch to the frame
-driver.switchTo().frame(iframe);
-
-//Now we can click the button
-driver.findElement(By.tagName("button")).click();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Store iframe web element
-iframe = driver.find_element(By.CSS_SELECTOR, "#modal > iframe")
+ {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/FramesTest.java#L38-L46" >}}
+{{< /tab >}}
+     {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_frames.py#L24-L32" >}}
+{{< /tab >}}
+      {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/FramesTest.cs#L38-L46" >}}
+{{< /tab >}}
+  
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/frames_spec.rb#L26-L33" >}}
+{{< /tab >}}
 
-    # switch to selected iframe
-driver.switch_to.frame(iframe)
 
-    # Now click on button
-driver.find_element(By.TAG_NAME, 'button').click()
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-//Store the web element
-IWebElement iframe = driver.FindElement(By.CssSelector("#modal>iframe"));
-
-//Switch to the frame
-driver.SwitchTo().Frame(iframe);
-
-//Now we can click the button
-driver.FindElement(By.TagName("button")).Click();
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Store iframe web element
-iframe = driver.find_element(:css,'#modal > iframe')
-
-    # Switch to the frame
-driver.switch_to.frame iframe
-
-    # Now, Click on the button
-driver.find_element(:tag_name,'button').click
-  {{< /tab >}}
   {{< tab header="JavaScript" >}}
 // Store the web element
 const iframe = driver.findElement(By.css('#modal > iframe'));
@@ -137,40 +112,25 @@ usado alternativamente. Se o name ou ID não for exclusivo na página, o
 primeiro encontrado será utilizado.
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-//Using the ID
-driver.switchTo().frame("buttonframe");
+ {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/FramesTest.java#L50-L58" >}}
+  {{< /tab >}}
 
-//Or using the name instead
-driver.switchTo().frame("myframe");
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_frames.py#L34-L42" >}}
+{{< /tab >}}
 
-//Now we can click the button
-driver.findElement(By.tagName("button")).click();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Switch frame by id
-driver.switch_to.frame('buttonframe')
+   {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/FramesTest.cs#L50-L58" >}}
+{{< /tab >}}
+ 
 
-    # Now, Click on the button
-driver.find_element(By.TAG_NAME, 'button').click()
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-//Using the ID
-driver.SwitchTo().Frame("buttonframe");
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/frames_spec.rb#L36-L43" >}}
+{{< /tab >}}
 
-//Or using the name instead
-driver.SwitchTo().Frame("myframe");
 
-//Now we can click the button
-driver.FindElement(By.TagName("button")).Click();
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Switch by ID
-driver.switch_to.frame 'buttonframe'
 
-    # Now, Click on the button
-driver.find_element(:tag_name,'button').click
-  {{< /tab >}}
   {{< tab header="JavaScript" >}}
 // Using the ID
 await driver.switchTo().frame('buttonframe');
@@ -199,33 +159,30 @@ Também é possível usar o índice do frame, podendo ser
 consultado usando _window.frames_ em JavaScript.
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-// Switches to the second frame
-driver.switchTo().frame(1);
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Switch to the second frame
-driver.switch_to.frame(1)
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Switches to the second frame
-driver.SwitchTo().Frame(1);
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # switching to second iframe based on index
-iframe = driver.find_elements(By.TAG_NAME,'iframe')[1]
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/FramesTest.java#L62-L63" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_frames.py#L45-L46" >}}
+{{< /tab >}}
 
-    # switch to selected iframe
-driver.switch_to.frame(iframe)
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/FramesTest.cs#L62-L63" >}}
+{{< /tab >}}
+
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/frames_spec.rb#L46-L47" >}}
+{{< /tab >}}
+
+
+{{< tab header="JavaScript" >}}
 // Switches to the second frame
 await driver.switchTo().frame(1);
-  {{< /tab >}}
-  {{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
 // Switches to the second frame
 driver.switchTo().frame(1)
-  {{< /tab >}}
+{{< /tab >}}
 {{< /tabpane >}}
 
 
@@ -235,28 +192,27 @@ Para deixar um iframe ou frameset, volte para o conteúdo padrão
 como a seguir:
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-// Return to the top level
-driver.switchTo().defaultContent();
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # switch back to default content
-driver.switch_to.default_content()
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Return to the top level
-driver.SwitchTo().DefaultContent();
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Return to the top level
-driver.switch_to.default_content
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/FramesTest.java#L66-L67" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_frames.py#L49-L50" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/FramesTest.cs#L66-L67" >}}
+{{< /tab >}}
+
+ {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/frames_spec.rb#L49-L50" >}}
+{{< /tab >}}
+
+
+{{< tab header="JavaScript" >}}
 // Return to the top level
 await driver.switchTo().defaultContent();
-  {{< /tab >}}
-  {{< tab header="Kotlin" >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
 // Return to the top level
 driver.switchTo().defaultContent()
-  {{< /tab >}}
+{{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/interactions/frames.zh-cn.md b/website_and_docs/content/documentation/webdriver/interactions/frames.zh-cn.md
index fe5028c720ef..01e207910f89 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/frames.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/frames.zh-cn.md
@@ -60,46 +60,24 @@ driver.findElement(By.tagName("button")).click()
 使用 WebElement 进行切换是最灵活的选择。您可以使用首选的选择器找到框架并切换到它。
 
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
-// 存储网页元素
-WebElement iframe = driver.findElement(By.cssSelector("#modal>iframe"));
 
-// 切换到 frame
-driver.switchTo().frame(iframe);
+ {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/FramesTest.java#L38-L46" >}}
+  {{< /tab >}}
 
-// 现在可以点击按钮
-driver.findElement(By.tagName("button")).click();
+     {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_frames.py#L24-L32" >}}
 {{< /tab >}}
-{{< tab header="Python" >}}
-    # 存储网页元素
-iframe = driver.find_element(By.CSS_SELECTOR, "#modal > iframe")
 
-    # 切换到选择的 iframe
-driver.switch_to.frame(iframe)
-
-    # 单击按钮
-driver.find_element(By.TAG_NAME, 'button').click()
+      {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/FramesTest.cs#L38-L46" >}}
 {{< /tab >}}
-{{< tab header="CSharp" >}}
-// 存储网页元素
-IWebElement iframe = driver.FindElement(By.CssSelector("#modal>iframe"));
-
-// 切换到 frame
-driver.SwitchTo().Frame(iframe);
 
-// 现在可以点击按钮
-driver.FindElement(By.TagName("button")).Click();
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/frames_spec.rb#L26-L33" >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-    # Store iframe web element
-iframe = driver.find_element(:css,'#modal> iframe')
 
-    # 切换到 frame
-driver.switch_to.frame iframe
 
-    # 单击按钮
-driver.find_element(:tag_name,'button').click
-{{< /tab >}}
 {{< tab header="JavaScript" >}}
 // 存储网页元素
 const iframe = driver.findElement(By.css('#modal> iframe'));
@@ -128,40 +106,24 @@ driver.findElement(By.tagName("button")).click()
 那么将切换到找到的第一个。
 
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
-// 使用 ID
-driver.switchTo().frame("buttonframe");
-
-// 或者使用 name 代替
-driver.switchTo().frame("myframe");
-
-// 现在可以点击按钮
-driver.findElement(By.tagName("button")).click();
+ {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/FramesTest.java#L50-L58" >}}
+  {{< /tab >}}
+  
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_frames.py#L34-L42" >}}
 {{< /tab >}}
-{{< tab header="Python" >}}
-    # 通过 id 切换框架
-driver.switch_to.frame('buttonframe')
-
-    # 单击按钮
-driver.find_element(By.TAG_NAME, 'button').click()
+  
+  {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/FramesTest.cs#L50-L58" >}}
 {{< /tab >}}
-{{< tab header="CSharp" >}}
-// 使用 ID
-driver.SwitchTo().Frame("buttonframe");
 
-// 或者使用 name 代替
-driver.SwitchTo().Frame("myframe");
 
-// 现在可以点击按钮
-driver.FindElement(By.TagName("button")).Click();
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/frames_spec.rb#L36-L43" >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-    # Switch by ID
-driver.switch_to.frame 'buttonframe'
 
-    # 单击按钮
-driver.find_element(:tag_name,'button').click
-{{< /tab >}}
+
 {{< tab header="JavaScript" >}}
 // 使用 ID
 await driver.switchTo().frame('buttonframe');
@@ -191,25 +153,24 @@ driver.findElement(By.tagName("button")).click()
 _window.frames_ 进行查询.
 
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
-// 切换到第 2 个框架
-driver.switchTo().frame(1);
-{{< /tab >}}
-{{< tab header="Ruby" >}}
-    # 切换到第 2 个框架
-driver.switch_to.frame(1)
+         {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/FramesTest.java#L62-L63" >}}
+  {{< /tab >}}
+ 
+  {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_frames.py#L45-L46" >}}
 {{< /tab >}}
-{{< tab header="CSharp" >}}
-// 切换到第 2 个框架
-driver.SwitchTo().Frame(1);
+
+
+
+      {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/FramesTest.cs#L62-L63" >}}
 {{< /tab >}}
-{{< tab header="Python" >}}
-    # 基于索引切换到第 2 个 iframe
-iframe = driver.find_elements(By.TAG_NAME,'iframe')[1]
 
-    # 切换到选择的 iframe
-driver.switch_to.frame(iframe)
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/frames_spec.rb#L46-L47" >}}
 {{< /tab >}}
+
 {{< tab header="JavaScript" >}}
 // 切换到第 2 个框架
 await driver.switchTo().frame(1);
@@ -226,22 +187,21 @@ driver.switchTo().frame(1)
 离开 iframe 或 frameset，切换回默认内容，如下所示:
 
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
-// 回到顶层
-driver.switchTo().defaultContent();
-{{< /tab >}}
-{{< tab header="Python" >}}
-    # 切回到默认内容
-driver.switch_to.default_content()
+    {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/FramesTest.java#L66-L67" >}}
+  {{< /tab >}}
+    {{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_frames.py#L49-L50" >}}
 {{< /tab >}}
-{{< tab header="CSharp" >}}
-// 回到顶层
-driver.SwitchTo().DefaultContent();
+        {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/FramesTest.cs#L66-L67" >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-    # 回到顶层
-driver.switch_to.default_content
+
+ {{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/frames_spec.rb#L49-L50" >}}
 {{< /tab >}}
+
+
 {{< tab header="JavaScript" >}}
 // 回到顶层
 await driver.switchTo().defaultContent();
diff --git a/website_and_docs/content/documentation/webdriver/interactions/navigation.en.md b/website_and_docs/content/documentation/webdriver/interactions/navigation.en.md
index aa75643dc1e0..41cd07aa3138 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/navigation.en.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/navigation.en.md
@@ -14,25 +14,20 @@ The first thing you will want to do after launching a browser is to
 open your website. This can be achieved in a single line:
 
 {{< tabpane langEqualsHeader=true >}}
-{{< badge-examples >}}
-  {{< tab header="Java" >}}
-//Convenient
-driver.get("https://selenium.dev");
-
-//Longer way
-driver.navigate().to("https://selenium.dev");
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-driver.get("https://selenium.dev")
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-driver.Navigate().GoToUrl(@"https://selenium.dev");
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/NavigationTest.java#L14-L18" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_navigation.py#L6" >}}
+{{< /tab >}}
+  {{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/NavigationTest.cs#L17-L20" >}}
   {{< /tab >}}
-  {{< tab header="Ruby" >}}
-driver.navigate.to 'https://selenium.dev'
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-await driver.get('https://selenium.dev');
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/navigation_spec.rb#L7-L9" >}}
+{{< /tab >}}
+  {{< tab header="JavaScript" text=true >}}
+  {{< gh-codeblock path="/examples/javascript/test/interactions/navigation.spec.js#L16-L20" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 //Convenient
@@ -47,13 +42,23 @@ driver.navigate().to("https://selenium.dev")
 
 Pressing the browser's back button:
 
+
 {{< tabpane langEqualsHeader=true >}}
-{{< badge-examples >}}
-  {{< tab header="Java" >}}driver.navigate().back();{{< /tab >}}
-  {{< tab header="Python" >}}driver.back(){{< /tab >}}
-  {{< tab header="CSharp" >}}driver.Navigate().Back();{{< /tab >}}
-  {{< tab header="Ruby" >}}driver.navigate.back{{< /tab >}}
-  {{< tab header="JavaScript" >}}await driver.navigate().back();{{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/NavigationTest.java#L22-L23" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_navigation.py#L11" >}}
+{{< /tab >}}
+  {{< tab header="CSharp" text=true >}}
+ {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/NavigationTest.cs#L24-L25" >}}
+  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/navigation_spec.rb#L15" >}}
+{{< /tab >}}
+  {{< tab header="JavaScript" text=true >}}
+  {{< gh-codeblock path="/examples/javascript/test/interactions/navigation.spec.js#L24-L25" >}}
+  {{< /tab >}}
   {{< tab header="Kotlin" >}}driver.navigate().back() {{< /tab >}}
 {{< /tabpane >}}
 
@@ -61,12 +66,21 @@ Pressing the browser's back button:
 Pressing the browser's forward button:
 
 {{< tabpane langEqualsHeader=true >}}
-{{< badge-examples >}}
-  {{< tab header="Java" >}}driver.navigate().forward();{{< /tab >}}
-  {{< tab header="Python" >}}driver.forward(){{< /tab >}}
-  {{< tab header="CSharp" >}}driver.Navigate().Forward();{{< /tab >}}
-  {{< tab header="Ruby" >}}driver.navigate.forward{{< /tab >}}
-  {{< tab header="JavaScript" >}}await driver.navigate().forward();{{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/NavigationTest.java#L27-L28" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_navigation.py#L15" >}}
+{{< /tab >}}
+   {{< tab header="CSharp" text=true >}}
+ {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/NavigationTest.cs#L29-L30" >}}
+  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/navigation_spec.rb#L23" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/navigation.spec.js#L29-L30" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}driver.navigate().forward(){{< /tab >}}
 {{< /tabpane >}}
 
@@ -75,11 +89,20 @@ Pressing the browser's forward button:
 Refresh the current page:
 
 {{< tabpane langEqualsHeader=true >}}
-{{< badge-examples >}}
-  {{< tab header="Java" >}}driver.navigate().refresh();{{< /tab >}}
-  {{< tab header="Python" >}}driver.refresh(){{< /tab >}}
-  {{< tab header="CSharp" >}}driver.Navigate().Refresh();{{< /tab >}}
-  {{< tab header="Ruby" >}}driver.navigate.refresh{{< /tab >}}
-  {{< tab header="JavaScript" >}}await driver.navigate().refresh();{{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/NavigationTest.java#L32-L33" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_navigation.py#L19" >}}
+{{< /tab >}}
+  {{< tab header="CSharp" text=true >}}
+ {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/NavigationTest.cs#L34-L35" >}}
+  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/navigation_spec.rb#L29" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/navigation.spec.js#L34-L35" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}driver.navigate().refresh(){{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/interactions/navigation.ja.md b/website_and_docs/content/documentation/webdriver/interactions/navigation.ja.md
index db0ba04d564a..b36fd3583676 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/navigation.ja.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/navigation.ja.md
@@ -11,30 +11,23 @@ aliases: [
 
 ブラウザーを起動した後に最初に行うことは、Webサイトを開くことです。これは1行で実現できます。
 
-{{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-//Convenient
-driver.get("https://selenium.dev");
-
-//Longer way
-driver.navigate().to("https://selenium.dev");
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-driver.get("https://selenium.dev")
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-driver.Navigate().GoToUrl(@"https://selenium.dev");
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Convenient way
-driver.get 'https://selenium.dev'
 
-    # Longer Way
-driver.navigate.to 'https://selenium.dev'
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-await driver.get('https://selenium.dev');
+{{< tabpane langEqualsHeader=true >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/NavigationTest.java#L14-L18" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_navigation.py#L6" >}}
+{{< /tab >}}
+  {{< tab header="CSharp" text=true  >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/NavigationTest.cs#L17-L20" >}}
   {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/navigation_spec.rb#L7-L9" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/navigation.spec.js#L16-L20" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 //Convenient
 driver.get("https://selenium.dev")
@@ -47,13 +40,22 @@ driver.navigate().to("https://selenium.dev")
 ## 戻る
 
 ブラウザーの戻るボタンを押す。
-
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}driver.navigate().back();{{< /tab >}}
-  {{< tab header="Python" >}}driver.back(){{< /tab >}}
-  {{< tab header="CSharp" >}}driver.Navigate().Back();{{< /tab >}}
-  {{< tab header="Ruby" >}}driver.navigate.back{{< /tab >}}
-  {{< tab header="JavaScript" >}}await driver.navigate().back();{{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/NavigationTest.java#L22-L23" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_navigation.py#L11" >}}
+{{< /tab >}}
+   {{< tab header="CSharp" text=true  >}}
+ {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/NavigationTest.cs#L24-L25" >}}
+  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/navigation_spec.rb#L15" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/navigation.spec.js#L24-L25" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}driver.navigate().back() {{< /tab >}}
 {{< /tabpane >}}
 
@@ -61,12 +63,23 @@ driver.navigate().to("https://selenium.dev")
 
 ブラウザーの次へボタンを押す。
 
+
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}driver.navigate().forward();{{< /tab >}}
-  {{< tab header="Python" >}}driver.forward(){{< /tab >}}
-  {{< tab header="CSharp" >}}driver.Navigate().Forward();{{< /tab >}}
-  {{< tab header="Ruby" >}}driver.navigate.forward{{< /tab >}}
-  {{< tab header="JavaScript" >}}await driver.navigate().forward();{{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/NavigationTest.java#L27-L28" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_navigation.py#L15" >}}
+{{< /tab >}}
+  {{< tab header="CSharp" text=true  >}}
+ {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/NavigationTest.cs#L29-L30" >}}
+  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/navigation_spec.rb#L23" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/navigation.spec.js#L29-L30" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}driver.navigate().forward(){{< /tab >}}
 {{< /tabpane >}}
 
@@ -74,11 +87,22 @@ driver.navigate().to("https://selenium.dev")
 
 現在のページを更新する。
 
+
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}driver.navigate().refresh();{{< /tab >}}
-  {{< tab header="Python" >}}driver.refresh(){{< /tab >}}
-  {{< tab header="CSharp" >}}driver.Navigate().Refresh();{{< /tab >}}
-  {{< tab header="Ruby" >}}driver.navigate.refresh{{< /tab >}}
-  {{< tab header="JavaScript" >}}await driver.navigate().refresh();{{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/NavigationTest.java#L32-L33" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_navigation.py#L19" >}}
+{{< /tab >}}
+  {{< tab header="CSharp" text=true >}}
+ {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/NavigationTest.cs#L34-L35" >}}
+  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/navigation_spec.rb#L29" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/navigation.spec.js#L34-L35" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}driver.navigate().refresh(){{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/interactions/navigation.pt-br.md b/website_and_docs/content/documentation/webdriver/interactions/navigation.pt-br.md
index ee7f3c50808e..d807f836635b 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/navigation.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/navigation.pt-br.md
@@ -12,30 +12,23 @@ aliases: [
 A primeira coisa que você vai querer fazer depois de iniciar um navegador é
 abrir o seu site. Isso pode ser feito em uma única linha, utilize o seguinte comando:
 
-{{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-//Convenient
-driver.get("https://selenium.dev");
-
-//Longer way
-driver.navigate().to("https://selenium.dev");
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-driver.get("https://selenium.dev")
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-driver.Navigate().GoToUrl(@"https://selenium.dev");
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Convenient way
-driver.get 'https://selenium.dev'
 
-    # Longer Way
-driver.navigate.to 'https://selenium.dev'
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-await driver.get('https://selenium.dev');
+{{< tabpane langEqualsHeader=true >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/NavigationTest.java#L14-L18" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_navigation.py#L6" >}}
+{{< /tab >}}
+  {{< tab header="CSharp" text=true  >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/NavigationTest.cs#L17-L20" >}}
   {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/navigation_spec.rb#L7-L9" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/navigation.spec.js#L16-L20" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 //Convenient
 driver.get("https://selenium.dev")
@@ -48,13 +41,22 @@ driver.navigate().to("https://selenium.dev")
 ## Voltar
 
 Pressionando o botão Voltar do navegador:
-
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}driver.navigate().back();{{< /tab >}}
-  {{< tab header="Python" >}}driver.back(){{< /tab >}}
-  {{< tab header="CSharp" >}}driver.Navigate().Back();{{< /tab >}}
-  {{< tab header="Ruby" >}}driver.navigate.back{{< /tab >}}
-  {{< tab header="JavaScript" >}}await driver.navigate().back();{{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/NavigationTest.java#L22-L23" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_navigation.py#L11" >}}
+{{< /tab >}}
+  {{< tab header="CSharp" text=true >}}
+ {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/NavigationTest.cs#L24-L25" >}}
+  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/navigation_spec.rb#L15" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/navigation.spec.js#L24-L25" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}driver.navigate().back() {{< /tab >}}
 {{< /tabpane >}}
 
@@ -62,11 +64,21 @@ Pressionando o botão Voltar do navegador:
 Pressionando o botão Avançar do navegador:
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}driver.navigate().forward();{{< /tab >}}
-  {{< tab header="Python" >}}driver.forward(){{< /tab >}}
-  {{< tab header="CSharp" >}}driver.Navigate().Forward();{{< /tab >}}
-  {{< tab header="Ruby" >}}driver.navigate.forward{{< /tab >}}
-  {{< tab header="JavaScript" >}}await driver.navigate().forward();{{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/NavigationTest.java#L27-L28" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_navigation.py#L15" >}}
+{{< /tab >}}
+  {{< tab header="CSharp" text=true >}}
+ {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/NavigationTest.cs#L29-L30" >}}
+  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/navigation_spec.rb#L23" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/navigation.spec.js#L29-L30" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}driver.navigate().forward(){{< /tab >}}
 {{< /tabpane >}}
 
@@ -75,10 +87,20 @@ Pressionando o botão Avançar do navegador:
 Atualizando a página atual:
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}driver.navigate().refresh();{{< /tab >}}
-  {{< tab header="Python" >}}driver.refresh(){{< /tab >}}
-  {{< tab header="CSharp" >}}driver.Navigate().Refresh();{{< /tab >}}
-  {{< tab header="Ruby" >}}driver.navigate.refresh{{< /tab >}}
-  {{< tab header="JavaScript" >}}await driver.navigate().refresh();{{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/NavigationTest.java#L32-L33" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_navigation.py#L19" >}}
+{{< /tab >}}
+  {{< tab header="CSharp" text=true >}}
+ {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/NavigationTest.cs#L34-L35" >}}
+  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/navigation_spec.rb#L29" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/navigation.spec.js#L34-L35" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}driver.navigate().refresh(){{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/interactions/navigation.zh-cn.md b/website_and_docs/content/documentation/webdriver/interactions/navigation.zh-cn.md
index 827a0e70811d..f92e0fca0447 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/navigation.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/navigation.zh-cn.md
@@ -11,29 +11,22 @@ aliases: [
 
 启动浏览器后你要做的第一件事就是打开你的网站。这可以通过一行代码实现:
 
-{{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
-// 简便的方法
-driver.get("https://selenium.dev");
 
-// 更长的方法
-driver.navigate().to("https://selenium.dev");
+{{< tabpane langEqualsHeader=true >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/NavigationTest.java#L14-L18" >}}
 {{< /tab >}}
-{{< tab header="Python" >}}
-driver.get("https://selenium.dev")
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_navigation.py#L6" >}}
 {{< /tab >}}
-{{< tab header="CSharp" >}}
-driver.Navigate().GoToUrl(@"https://selenium.dev");
+{{< tab header="CSharp" text=true >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/NavigationTest.cs#L17-L20" >}}
 {{< /tab >}}
-{{< tab header="Ruby" >}}
-    # 简便的方法
-driver.get 'https://selenium.dev'
-
-    # 更长的方法
-driver.navigate.to 'https://selenium.dev'
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/navigation_spec.rb#L7-L9" >}}
 {{< /tab >}}
-{{< tab header="JavaScript" >}}
-await driver.get('https://selenium.dev');
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/navigation.spec.js#L16-L20" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 // 简便的方法
@@ -47,13 +40,22 @@ driver.navigate().to("https://selenium.dev")
 ## 后退
 
 按下浏览器的后退按钮:
-
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}driver.navigate().back();{{< /tab >}}
-{{< tab header="Python" >}}driver.back(){{< /tab >}}
-{{< tab header="CSharp" >}}driver.Navigate().Back();{{< /tab >}}
-{{< tab header="Ruby" >}}driver.navigate.back{{< /tab >}}
-{{< tab header="JavaScript" >}}await driver.navigate().back();{{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/NavigationTest.java#L22-L23" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_navigation.py#L11" >}}
+{{< /tab >}}
+ {{< tab header="CSharp" text=true >}}
+ {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/NavigationTest.cs#L24-L25" >}}
+  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/navigation_spec.rb#L15" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/navigation.spec.js#L24-L25" >}}
+{{< /tab >}}
 {{< tab header="Kotlin" >}}driver.navigate().back() {{< /tab >}}
 {{< /tabpane >}}
 
@@ -61,11 +63,21 @@ driver.navigate().to("https://selenium.dev")
 按下浏览器的前进键:
 
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}driver.navigate().forward();{{< /tab >}}
-{{< tab header="Python" >}}driver.forward(){{< /tab >}}
-{{< tab header="CSharp" >}}driver.Navigate().Forward();{{< /tab >}}
-{{< tab header="Ruby" >}}driver.navigate.forward{{< /tab >}}
-{{< tab header="JavaScript" >}}await driver.navigate().forward();{{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/NavigationTest.java#L27-L28" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_navigation.py#L15" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+ {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/NavigationTest.cs#L29-L30" >}}
+  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/navigation_spec.rb#L23" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/navigation.spec.js#L29-L30" >}}
+{{< /tab >}}
 {{< tab header="Kotlin" >}}driver.navigate().forward(){{< /tab >}}
 {{< /tabpane >}}
 
@@ -73,10 +85,20 @@ driver.navigate().to("https://selenium.dev")
 刷新当前页面:
 
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}driver.navigate().refresh();{{< /tab >}}
-{{< tab header="Python" >}}driver.refresh(){{< /tab >}}
-{{< tab header="CSharp" >}}driver.Navigate().Refresh();{{< /tab >}}
-{{< tab header="Ruby" >}}driver.navigate.refresh{{< /tab >}}
-{{< tab header="JavaScript" >}}await driver.navigate().refresh();{{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/NavigationTest.java#L32-L33" >}}
+{{< /tab >}}
+{{< tab header="Python" text=true >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_navigation.py#L19" >}}
+{{< /tab >}}
+{{< tab header="CSharp" text=true >}}
+ {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/NavigationTest.cs#L34-L35" >}}
+  {{< /tab >}}
+{{< tab header="Ruby" text=true >}}
+{{< gh-codeblock path="/examples/ruby/spec/interactions/navigation_spec.rb#L29" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/navigation.spec.js#L34-L35" >}}
+{{< /tab >}}
 {{< tab header="Kotlin" >}}driver.navigate().refresh(){{< /tab >}}
 {{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/interactions/print_page.en.md b/website_and_docs/content/documentation/webdriver/interactions/print_page.en.md
new file mode 100644
index 000000000000..ab209d171e77
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/interactions/print_page.en.md
@@ -0,0 +1,223 @@
+---
+title: "Print Page"
+linkTitle: "Print Page"
+weight: 7
+aliases: [
+"/documentation/en/support_packages/print_page/",
+]
+---
+
+Printing a webpage is a common task, whether for sharing information or maintaining archives. 
+Selenium simplifies this process through its PrintOptions, PrintsPage, and browsingContext 
+classes, which provide a flexible and intuitive interface for automating the printing of web pages. 
+These classes enable you to configure printing preferences, such as page layout, margins, and scaling, 
+ensuring that the output meets your specific requirements.
+
+## Configuring
+
+### Orientation
+Using the `getOrientation()` and `setOrientation()` methods, you can get/set the page orientation --- either `PORTRAIT` or `LANDSCAPE`.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L14-L17" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L12-L19" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L12-L14" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Range
+Using the `getPageRanges()` and `setPageRanges()` methods, you can get/set the range of pages to print --- e.g. "2-4".
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L23-L26" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L22-L29" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L18-L20" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Size
+Using the `getPageSize()` and `setPageSize()` methods, you can get/set the paper size to print --- e.g. "A0", "A6", "Legal", "Tabloid", etc.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L32-L35" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L32-L38" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L24-L26" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Margins
+Using the `getPageMargin()` and `setPageMargin()` methods, you can set the margin sizes of the page you wish to print --- i.e. top, bottom, left, and right margins.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L41-L48" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L51-L57" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L30-L35" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Scale
+Using `getScale()` and `setScale()` methods, you can get/set the scale of the page you wish to print --- e.g. 1.0 is 100% or default, 0.25 is 25%, etc.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L53-L57" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L61-L68" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L42-L45" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Background
+Using `getBackground()` and `setBackground()` methods, you can get/set whether background colors and images appear --- boolean `true` or `false`.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L63-L66" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L41-L48" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L49-L51" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### ShrinkToFit
+Using `getShrinkToFit()` and `setShrinkToFit()` methods, you can get/set whether the page will shrink-to-fit content on the page --- boolean `true` or `false`.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L72-L75" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L71-L78" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L55-L57" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Printing
+
+Once you've configured your PrintOptions, you're ready to print the page. To do this, 
+you can invoke the print function, which generates a PDF representation of the web page. 
+The resulting PDF can be saved to your local storage for further use or distribution. 
+Using `PrintsPage()`, the print command will return the PDF data in base64-encoded format, which can be decoded 
+and written to a file in your desired location, and using `BrowsingContext()` will return a String. 
+
+There may currently be multiple implementations depending on your language of choice. For example, with Java you
+have the ability to print using either `BrowingContext()` or `PrintsPage()`. Both take `PrintOptions()` objects as a
+parameter.
+
+Note: `BrowsingContext()` is part of Selenium's BiDi implementation. To enable BiDi see [Enabling Bidi]({{< ref "bidi/" >}}) 
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+**PrintsPage()**
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintsPageTest.java#L27-L31" >}}
+**BrowsingContext()**
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintsPageTest.java#L37-L41" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L81-L88" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{% tab header="Python" %}}
+**print_page()**
+{{< gh-codeblock path="/examples/python/tests/interactions/test_prints_page.py#L12-L14" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/interactions/print_page.ja.md b/website_and_docs/content/documentation/webdriver/interactions/print_page.ja.md
new file mode 100644
index 000000000000..89b1de707538
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/interactions/print_page.ja.md
@@ -0,0 +1,223 @@
+---
+title: "Print Page"
+linkTitle: "Print Page"
+weight: 7
+aliases: [
+"/documentation/ja/support_packages/print_page/",
+]
+---
+
+Printing a webpage is a common task, whether for sharing information or maintaining archives. 
+Selenium simplifies this process through its PrintOptions, PrintsPage, and browsingContext 
+classes, which provide a flexible and intuitive interface for automating the printing of web pages. 
+These classes enable you to configure printing preferences, such as page layout, margins, and scaling, 
+ensuring that the output meets your specific requirements.
+
+## Configuring
+
+### Orientation
+Using the `getOrientation()` and `setOrientation()` methods, you can get/set the page orientation --- either `PORTRAIT` or `LANDSCAPE`.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L14-L17" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L12-L19" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L12-L14" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Range
+Using the `getPageRanges()` and `setPageRanges()` methods, you can get/set the range of pages to print --- e.g. "2-4".
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L23-L26" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L22-L29" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L18-L20" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Size
+Using the `getPageSize()` and `setPageSize()` methods, you can get/set the paper size to print --- e.g. "A0", "A6", "Legal", "Tabloid", etc.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L32-L35" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L32-L38" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L24-L26" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Margins
+Using the `getPageMargin()` and `setPageMargin()` methods, you can set the margin sizes of the page you wish to print --- i.e. top, bottom, left, and right margins.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L41-L48" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L51-L57" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L30-L35" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Scale
+Using `getScale()` and `setScale()` methods, you can get/set the scale of the page you wish to print --- e.g. 1.0 is 100% or default, 0.25 is 25%, etc.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L53-L57" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L61-L68" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L42-L45" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Background
+Using `getBackground()` and `setBackground()` methods, you can get/set whether background colors and images appear --- boolean `true` or `false`.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L63-L66" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L41-L48" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L49-L51" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### ShrinkToFit
+Using `getShrinkToFit()` and `setShrinkToFit()` methods, you can get/set whether the page will shrink-to-fit content on the page --- boolean `true` or `false`.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L72-L75" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L71-L78" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L55-L57" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Printing
+
+Once you've configured your PrintOptions, you're ready to print the page. To do this, 
+you can invoke the print function, which generates a PDF representation of the web page. 
+The resulting PDF can be saved to your local storage for further use or distribution. 
+Using `PrintsPage()`, the print command will return the PDF data in base64-encoded format, which can be decoded 
+and written to a file in your desired location, and using `BrowsingContext()` will return a String. 
+
+There may currently be multiple implementations depending on your language of choice. For example, with Java you
+have the ability to print using either `BrowingContext()` or `PrintsPage()`. Both take `PrintOptions()` objects as a
+parameter.
+
+Note: `BrowsingContext()` is part of Selenium's BiDi implementation. To enable BiDi see [Enabling Bidi]({{< ref "bidi/" >}}) 
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+**PrintsPage()**
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintsPageTest.java#L27-L31" >}}
+**BrowsingContext()**
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintsPageTest.java#L37-L41" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L81-L88" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{% tab header="Python" %}}
+**print_page()**
+{{< gh-codeblock path="/examples/python/tests/interactions/test_prints_page.py#L12-L14" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/interactions/print_page.pt-br.md b/website_and_docs/content/documentation/webdriver/interactions/print_page.pt-br.md
new file mode 100644
index 000000000000..9c8733a93dba
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/interactions/print_page.pt-br.md
@@ -0,0 +1,223 @@
+---
+title: "Print Page"
+linkTitle: "Print Page"
+weight: 7
+aliases: [
+"/documentation/pt-br/support_packages/print_page/",
+]
+---
+
+Printing a webpage is a common task, whether for sharing information or maintaining archives. 
+Selenium simplifies this process through its PrintOptions, PrintsPage, and browsingContext 
+classes, which provide a flexible and intuitive interface for automating the printing of web pages. 
+These classes enable you to configure printing preferences, such as page layout, margins, and scaling, 
+ensuring that the output meets your specific requirements.
+
+## Configuring
+
+### Orientation
+Using the `getOrientation()` and `setOrientation()` methods, you can get/set the page orientation --- either `PORTRAIT` or `LANDSCAPE`.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L14-L17" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L12-L19" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L12-L14" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Range
+Using the `getPageRanges()` and `setPageRanges()` methods, you can get/set the range of pages to print --- e.g. "2-4".
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L23-L26" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L22-L29" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L18-L26" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Size
+Using the `getPageSize()` and `setPageSize()` methods, you can get/set the paper size to print --- e.g. "A0", "A6", "Legal", "Tabloid", etc.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L32-L35" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L32-L38" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L24-L27" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Margins
+Using the `getPageMargin()` and `setPageMargin()` methods, you can set the margin sizes of the page you wish to print --- i.e. top, bottom, left, and right margins.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#41-L48" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L51-L57" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L30-L35" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Scale
+Using `getScale()` and `setScale()` methods, you can get/set the scale of the page you wish to print --- e.g. 1.0 is 100% or default, 0.25 is 25%, etc.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L53-L57" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L61-L68" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L42-L45" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### Background
+Using `getBackground()` and `setBackground()` methods, you can get/set whether background colors and images appear --- boolean `true` or `false`.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L63-L66" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L41-L48" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L49-L51" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### ShrinkToFit
+Using `getShrinkToFit()` and `setShrinkToFit()` methods, you can get/set whether the page will shrink-to-fit content on the page --- boolean `true` or `false`.
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L72-L75" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L71-L78" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L55-L57" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## Printing
+
+Once you've configured your PrintOptions, you're ready to print the page. To do this, 
+you can invoke the print function, which generates a PDF representation of the web page. 
+The resulting PDF can be saved to your local storage for further use or distribution. 
+Using `PrintsPage()`, the print command will return the PDF data in base64-encoded format, which can be decoded 
+and written to a file in your desired location, and using `BrowsingContext()` will return a String. 
+
+There may currently be multiple implementations depending on your language of choice. For example, with Java you
+have the ability to print using either `BrowingContext()` or `PrintsPage()`. Both take `PrintOptions()` objects as a
+parameter.
+
+Note: `BrowsingContext()` is part of Selenium's BiDi implementation. To enable BiDi see [Enabling Bidi]({{< ref "bidi/" >}}) 
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+**PrintsPage()**
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintsPageTest.java#L27-L31" >}}
+**BrowsingContext()**
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintsPageTest.java#L37-L41" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L81-L88" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{% tab header="Python" %}}
+**print_page()**
+{{< gh-codeblock path="/examples/python/tests/interactions/test_prints_page.py#L12-L14" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/interactions/print_page.zh-cn.md b/website_and_docs/content/documentation/webdriver/interactions/print_page.zh-cn.md
new file mode 100644
index 000000000000..e4f4c45aa8bf
--- /dev/null
+++ b/website_and_docs/content/documentation/webdriver/interactions/print_page.zh-cn.md
@@ -0,0 +1,219 @@
+---
+title: "打印页面"
+linkTitle: "打印页面"
+weight: 7
+aliases: [
+"/documentation/zh-cn/support_packages/print_page/",
+]
+---
+
+无论是共享信息还是维护档案，打印网页都是一项常见任务。
+Selenium 通过其 PrintOptions、PrintsPage 和 browsingContext 类简化了这一过程，这些类为网页自动打印提供了灵活直观的接口。
+这些类使得用户可以配置打印首选项，如页面布局、页边距和缩放比例，以确保输出满足特定要求。
+
+## 配置
+
+### 方向
+通过 `getOrientation()` 和 `setOrientation()` 方法，可以获取/设置页面方向（`PORTRAIT` 或 `LANDSCAPE`）。
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L14-L17" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L12-L19" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L12-L14" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### 范围
+通过 `getPageRanges()` 和 `setPageRanges()` 方法，可以获取设置要打印页面的范围（如 "2-4"）。
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L23-L26" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L22-L29" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L18-L20" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### 尺寸
+通过 `getPageSize()` 和 `setPageSize()` 方法，可以获取/设置要打印页面的纸张尺寸（如"A0"、"A6"、"Legal"、"Tabloid" 等）。
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L32-L35" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L32-L38" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L24-L26" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### 边距
+通过 `getPageMargin()` 和 `setPageMargin()` 方法，可以获取/设置要打印页面的边距大小（也就是上、下、左右边距）。
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L41-L48" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L51-L57" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L30-L35" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### 缩放
+通过 `getScale()` 和 `setScale()` 方法，可以获取/设置要打印页面的缩放尺寸（如 1.0 为 100% 或默认缩放，0.25 为 25% 等）。
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L53-L57" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L61-L68" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L42-L45" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### 背景
+通过 `getBackground()` 和 `setBackground()` 方法，可以获取/设置背景色和图片出现，其为布尔值 `true` 或 `false`。
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L63-L66" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L41-L48" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L49-L51" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+### 缩放至合适大小
+通过 `getShrinkToFit()` 和 `setShrinkToFit()` 方法，可以获取/设置页面是否会根据页面内容缩小，其为布尔值 `true` 或 `false`。
+
+{{< tabpane text=true >}}
+{{< tab header="Java" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintOptionsTest.java#L72-L75" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L71-L78" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_print_options.py#L55-L57" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
+
+## 打印
+
+配置好打印选项后，就可以打印页面了。为此，您可以调用打印功能，生成网页的 PDF 表示形式。
+生成的 PDF 文件可以保存到本地存储器中，以便进一步使用或分发。
+使用 `PrintsPage()` 时，打印命令将以 base64 编码格式返回 PDF
+数据，该格式可以解码并写入所需位置的文件，而使用 `BrowsingContext()` 时将返回字符串。
+
+目前可能有多种实现方式，这取决于您所选择的语言。例如，Java 可以使用 `BrowingContext()`
+或 `PrintsPage()` 进行打印。两者都将 `PrintOptions()` 对象作为一个参数。
+
+注意：`BrowsingContext()` 是 Selenium BiDi 实现的一部分。为启用 BiDi，请参见[启用 Bidi]({{< ref "bidi/" >}}) 
+
+{{< tabpane text=true >}}
+{{% tab header="Java" %}}
+**PrintsPage()**
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintsPageTest.java#L27-L31" >}}
+**BrowsingContext()**
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/PrintsPageTest.java#L37-L41" >}}
+{{< /tab >}}
+{{< tab header="CSharp" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/PrintOptionsTest.cs#L81-L88" >}}
+{{< /tab >}}
+{{< tab header="Ruby" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{% tab header="Python" %}}
+**print_page()**
+{{< gh-codeblock path="/examples/python/tests/interactions/test_prints_page.py#L12-L14" >}}
+{{< /tab >}}
+{{< tab header="JavaScript" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+{{< badge-implementation >}}
+{{< /tab >}}
+{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/interactions/virtual_authenticator.en.md b/website_and_docs/content/documentation/webdriver/interactions/virtual_authenticator.en.md
index 7ce33ba795bf..d449777cbf30 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/virtual_authenticator.en.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/virtual_authenticator.en.md
@@ -22,20 +22,19 @@ These properties are mapped as VirtualAuthenticatorOptions in the Selenium bindi
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L55-L61" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L55-L61" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L48-55" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L48-55" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L40-L46" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/virtual_authenticator/virtualAuthenticatorOptions.spec.js#L10-L16" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticatorOptions.spec.js#L11-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -49,19 +48,19 @@ It creates a new virtual authenticator with the provided properties.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L68-L73" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L68-L73" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L63-71" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L63-71" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L53-L58" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L51-L55" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L51-L55" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -74,19 +73,19 @@ Removes the previously added virtual authenticator.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L86" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L86" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#80-86" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#80-86" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L68-L74" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L62-L63" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L62-L63" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -99,19 +98,19 @@ Creates a resident (stateful) credential with the given required credential [par
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L100-L103" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L100-L103" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#103-107" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#103-107" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L89-L97" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L80-L94" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -124,19 +123,19 @@ Creates a resident (stateless) credential with the given required credential [pa
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L143-L145" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L143-L145" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L145-148" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L145-148" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L140-L147" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L136-L140" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -149,19 +148,19 @@ Registers the credential with the authenticator.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L137-L146" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L137-L146" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L139-150" >}}   
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L139-150" >}}   
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L150" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L131-L142" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -174,19 +173,19 @@ Returns the list of credentials owned by the authenticator.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L157-L171" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L157-L171" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L162-178" >}}  
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L162-178" >}}  
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L183" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L154-L170" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -199,16 +198,16 @@ Removes a credential from the authenticator based on the passed credential id.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L181-L190" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L181-L190" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L189-198" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L189-198" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L209" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -225,19 +224,19 @@ Removes all the credentials from the authenticator.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L196-L205" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L196-L205" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L207-216" >}} 
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L207-216" >}} 
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L239" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L181-L190" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -250,19 +249,19 @@ Sets whether the authenticator will simulate success or fail on user verificatio
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L211-L212" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L211-L212" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L224-225" >}} 
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L224-225" >}} 
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L245-L247" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L197-L197" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/interactions/virtual_authenticator.ja.md b/website_and_docs/content/documentation/webdriver/interactions/virtual_authenticator.ja.md
index a8e9d1caf01d..b68bb7b0f093 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/virtual_authenticator.ja.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/virtual_authenticator.ja.md
@@ -31,19 +31,19 @@ These properties are mapped as VirtualAuthenticatorOptions in the Selenium bindi
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L55-L61" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L55-L61" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L48-55" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L48-55" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L40-L46" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/virtual_authenticator/virtualAuthenticatorOptions.spec.js#L10-L16" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticatorOptions.spec.js#L11-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -56,19 +56,19 @@ It creates a new virtual authenticator with the provided properties.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L68-L73" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L68-L73" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L63-71" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L63-71" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L53-L58" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L51-L55" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L51-L55" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -80,19 +80,19 @@ Removes the previously added virtual authenticator.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L86" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L86" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#80-86" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#80-86" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L68-L74" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L62-L63" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L62-L63" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -104,18 +104,19 @@ Creates a resident (stateful) credential with the given required credential [par
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L100-L103" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L100-L103" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#103-107" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#103-107" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L89-L97" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L80-L94" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -127,18 +128,19 @@ Creates a resident (stateless) credential with the given required credential [pa
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L143-L145" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L143-L145" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L145-148" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L145-148" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L140-L147" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L136-L140" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -150,18 +152,19 @@ Registers the credential with the authenticator.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L137-L146" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L137-L146" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L139-150" >}}   
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L139-150" >}}   
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L150" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L131-L142" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -173,18 +176,19 @@ Returns the list of credentials owned by the authenticator.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L157-L171" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L157-L171" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L162-178" >}}  
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L162-178" >}}  
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L183" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L154-L170" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -197,16 +201,16 @@ Removes a credential from the authenticator based on the passed credential id.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L181-L190" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L181-L190" >}}
 {{< /tab >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L189-198" >}} 
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L189-198" >}} 
 {{< tab header="CSharp" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L209" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< /tab >}}
@@ -221,18 +225,19 @@ Removes all the credentials from the authenticator.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L196-L205" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L196-L205" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L207-216" >}} 
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L207-216" >}} 
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L239" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L181-L190" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -244,19 +249,20 @@ Sets whether the authenticator will simulate success or fail on user verificatio
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L211-L212" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L211-L212" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L224-225" >}} 
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L224-225" >}} 
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L245-L247" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L197-L197" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
-{{< /tab >}}{{< /tabpane >}}
\ No newline at end of file
+{{< /tab >}}{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/interactions/virtual_authenticator.pt-br.md b/website_and_docs/content/documentation/webdriver/interactions/virtual_authenticator.pt-br.md
index 0cd294e0f01c..0565926dfb65 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/virtual_authenticator.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/virtual_authenticator.pt-br.md
@@ -22,18 +22,19 @@ Essas propriedades são mapeadas como VirtualAuthenticatorOptions nos bindings d
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L55-L61" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L55-L61" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L48-55" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L48-55" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
-
+{{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L40-L46" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/virtual_authenticator/virtualAuthenticatorOptions.spec.js#L10-L16" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticatorOptions.spec.js#L11-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -46,18 +47,19 @@ Cria um novo autenticador virtual com as propriedades fornecidas.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L68-L73" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L68-L73" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L63-71" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L63-71" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L53-L58" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L51-L55" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L51-L55" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -69,18 +71,19 @@ Remove o autenticador virtual adicionado anteriormente.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L86" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L86" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#80-86" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#80-86" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L68-L74" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L62-L63" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L62-L63" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -92,18 +95,19 @@ Cria uma resident (stateful) credential com os requeridos [parâmetros](https://
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L100-L103" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L100-L103" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#103-107" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#103-107" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L89-L97" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L80-L94" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -115,18 +119,19 @@ Cria uma resident (stateless) credential com os requeridos [parâmetros](https:/
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L143-L145" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L143-L145" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L145-148" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L145-148" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L140-L147" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L136-L140" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -138,18 +143,19 @@ Registra a credencial com o autenticador.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L137-L146" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L137-L146" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L139-150" >}}   
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L139-150" >}}   
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L150" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L131-L142" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -161,18 +167,19 @@ Retorna a lista de credenciais que o autenticador possui.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L157-L171" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L157-L171" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L162-178" >}}  
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L162-178" >}}  
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L183" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L154-L170" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -185,16 +192,16 @@ Remove a credencial do autenticador baseado na id da credencial passado.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L181-L190" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L181-L190" >}}
 {{< /tab >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L189-198" >}} 
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L189-198" >}} 
 {{< tab header="CSharp" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L209" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< /tab >}}
@@ -209,18 +216,19 @@ Remove todas as credenciais do autenticador.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L196-L205" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L196-L205" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L207-216" >}} 
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L207-216" >}} 
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L239" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L181-L190" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -232,19 +240,20 @@ Diz se o autenticador simulará sucesso ou falha na verificação de usuário.
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L211-L212" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L211-L212" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L224-225" >}} 
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L224-225" >}} 
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L245-L247" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L197-L197" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
-{{< /tab >}}{{< /tabpane >}}
\ No newline at end of file
+{{< /tab >}}{{< /tabpane >}}
diff --git a/website_and_docs/content/documentation/webdriver/interactions/virtual_authenticator.zh-cn.md b/website_and_docs/content/documentation/webdriver/interactions/virtual_authenticator.zh-cn.md
index e40be266ccc5..6d6a8b208361 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/virtual_authenticator.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/virtual_authenticator.zh-cn.md
@@ -22,19 +22,19 @@ Web 应用程序可以启用基于公钥的身份验证机制（称为 Web 身
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L55-L61" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L55-L61" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L48-55" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L48-55" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L40-L46" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/virtual_authenticator/virtualAuthenticatorOptions.spec.js#L10-L16" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticatorOptions.spec.js#L11-L17" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -47,19 +47,19 @@ Web 应用程序可以启用基于公钥的身份验证机制（称为 Web 身
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L68-L73" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L68-L73" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L63-71" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L63-71" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L53-L58" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L51-L55" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L51-L55" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -71,19 +71,19 @@ Web 应用程序可以启用基于公钥的身份验证机制（称为 Web 身
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L86" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L86" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#80-86" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#80-86" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L68-L74" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L62-L63" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L62-L63" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -95,18 +95,19 @@ Web 应用程序可以启用基于公钥的身份验证机制（称为 Web 身
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L100-L103" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L100-L103" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#103-107" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#103-107" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L89-L97" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L80-L94" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -118,18 +119,19 @@ Web 应用程序可以启用基于公钥的身份验证机制（称为 Web 身
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L143-L145" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L143-L145" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L145-148" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L145-148" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L140-L147" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L136-L140" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -141,18 +143,19 @@ Web 应用程序可以启用基于公钥的身份验证机制（称为 Web 身
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L137-L146" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L137-L146" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L139-150" >}}   
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L139-150" >}}   
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L150" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L131-L142" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -164,18 +167,19 @@ Web 应用程序可以启用基于公钥的身份验证机制（称为 Web 身
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L157-L171" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L157-L171" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L162-178" >}}  
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L162-178" >}}  
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L183" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L154-L170" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -188,16 +192,16 @@ Web 应用程序可以启用基于公钥的身份验证机制（称为 Web 身
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L181-L190" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L181-L190" >}}
 {{< /tab >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L189-198" >}} 
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L189-198" >}} 
 {{< tab header="CSharp" >}}
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L209" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
 {{< /tab >}}
@@ -212,18 +216,19 @@ Web 应用程序可以启用基于公钥的身份验证机制（称为 Web 身
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L196-L205" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L196-L205" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L207-216" >}} 
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L207-216" >}} 
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L239" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L181-L190" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -235,18 +240,19 @@ Web 应用程序可以启用基于公钥的身份验证机制（称为 Web 身
 
 {{< tabpane text=true >}}
 {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L211-L212" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/VirtualAuthenticatorTest.java#L211-L212" >}}
 {{< /tab >}}
 {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L224-225" >}} 
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/VirtualAuthenticatorTest.cs#L224-225" >}} 
 {{< /tab >}}
 {{< tab header="Ruby" >}}
 {{< badge-code >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
-{{< badge-code >}}
+{{< gh-codeblock path="/examples/python/tests/interactions/test_virtual_authenticator.py#L245-L247" >}}
 {{< /tab >}}
 {{< tab header="JavaScript" >}}
+{{< gh-codeblock path="/examples/javascript/test/virtual_authenticator/virtualAuthenticator.spec.js#L197-L197" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/interactions/windows.en.md b/website_and_docs/content/documentation/webdriver/interactions/windows.en.md
index a8422419160d..7458724e1d2b 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/windows.en.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/windows.en.md
@@ -19,9 +19,13 @@ current window by using:
 
 {{< tabpane langEqualsHeader=true >}}
 {{< badge-examples >}}
-  {{< tab header="Java" >}}driver.getWindowHandle();{{< /tab >}}
+{{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java#L16-L20" >}}
+{{< /tab >}}
   {{< tab header="Python" >}}driver.current_window_handle{{< /tab >}}
-  {{< tab header="CSharp" >}}driver.CurrentWindowHandle;{{< /tab >}}
+  {{< tab header="CSharp" text=true >}}
+  {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs#L17-L21" >}}
+  {{< /tab >}}
   {{< tab header="Ruby" >}}driver.window_handle{{< /tab >}}
   {{< tab header="JavaScript" >}}await driver.getWindowHandle();{{< /tab >}}
   {{< tab header="Kotlin" >}}driver.windowHandle{{< /tab >}}
@@ -33,40 +37,15 @@ Clicking a link which opens in a
 <a href="https://seleniumhq.github.io" target="_blank"> new window</a>
 will focus the new window or tab on screen, but WebDriver will not know which
 window the Operating System considers active.  To work with the new window
-you will need to switch to it. If you have only two tabs or windows open,
-and you know which window you start with, by the process of elimination
-you can loop over both windows or tabs that WebDriver can see, and switch
-to the one which is not the original.
-
-However, Selenium 4 provides a new api [NewWindow](#create-new-window-or-new-tab-and-switch) 
-which creates a new tab (or) new window and automatically switches to it.
+you will need to switch to it. For this, we fetch all window handles,
+and store them in an array. The array position fills in the order the
+window is launched. So first position will be default browser, and so on.
 
 {{< tabpane langEqualsHeader=true >}}
 {{< badge-examples >}}
-  {{< tab header="Java" >}}
-//Store the ID of the original window
-String originalWindow = driver.getWindowHandle();
-
-//Check we don't have other windows open already
-assert driver.getWindowHandles().size() == 1;
-
-//Click the link which opens in a new window
-driver.findElement(By.linkText("new window")).click();
-
-//Wait for the new window or tab
-wait.until(numberOfWindowsToBe(2));
-
-//Loop through until we find a new window handle
-for (String windowHandle : driver.getWindowHandles()) {
-    if(!originalWindow.contentEquals(windowHandle)) {
-        driver.switchTo().window(windowHandle);
-        break;
-    }
-}
-
-//Wait for the new tab to finish loading content
-wait.until(titleIs("Selenium documentation"));
-  {{< /tab >}}
+  {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java#L22-L29" >}}
+{{< /tab >}}
   {{< tab header="Python" >}}
 from selenium import webdriver
 from selenium.webdriver.support.ui import WebDriverWait
@@ -100,31 +79,11 @@ with webdriver.Firefox() as driver:
     # Wait for the new tab to finish loading content
     wait.until(EC.title_is("SeleniumHQ Browser Automation"))
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-//Store the ID of the original window
-string originalWindow = driver.CurrentWindowHandle;
-
-//Check we don't have other windows open already
-Assert.AreEqual(driver.WindowHandles.Count, 1);
-
-//Click the link which opens in a new window
-driver.FindElement(By.LinkText("new window")).Click();
-
-//Wait for the new window or tab
-wait.Until(wd => wd.WindowHandles.Count == 2);
-
-//Loop through until we find a new window handle
-foreach(string window in driver.WindowHandles)
-{
-    if(originalWindow != window)
-    {
-        driver.SwitchTo().Window(window);
-        break;
-    }
-}
-//Wait for the new tab to finish loading content
-wait.Until(wd => wd.Title == "Selenium documentation");
+  
+  {{< tab header="CSharp" text=true >}}
+  {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs#L23-L30" >}}
   {{< /tab >}}
+  
   {{< tab header="Ruby" >}}
 
     # Store the ID of the original window
@@ -204,64 +163,6 @@ wait.until(titleIs("Selenium documentation"))
   {{< /tab >}}
 {{< /tabpane >}}
 
-### Create new window (or) new tab and switch
-Creates a new window (or) tab and will focus the new window or tab on screen.
-You don't need to switch to work with the new window (or) tab. If you have more than two windows
-(or) tabs opened other than the new window, you can loop over both windows or tabs that WebDriver can see,
-and switch to the one which is not the original.
-
-__Note: This feature works with Selenium 4 and later versions.__
-
-{{< tabpane langEqualsHeader=true >}}
-{{< badge-examples >}}
-  {{< tab header="Java" >}}
-// Opens a new tab and switches to new tab
-driver.switchTo().newWindow(WindowType.TAB);
-
-// Opens a new window and switches to new window
-driver.switchTo().newWindow(WindowType.WINDOW);
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Opens a new tab and switches to new tab
-driver.switch_to.new_window('tab')
-
-    # Opens a new window and switches to new window
-driver.switch_to.new_window('window')
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Opens a new tab and switches to new tab
-driver.SwitchTo().NewWindow(WindowType.Tab)
-
-// Opens a new window and switches to new window
-driver.SwitchTo().NewWindow(WindowType.Window)
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Note: The new_window in ruby only opens a new tab (or) Window and will not switch automatically
-    # The user has to switch to new tab (or) new window
-
-    # Opens a new tab and switches to new tab
-driver.manage.new_window(:tab)
-
-    # Opens a new window and switches to new window
-driver.manage.new_window(:window)
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-// Opens a new tab and switches to new tab
-await driver.switchTo().newWindow('tab');
-
-// Opens a new window and switches to new window
-await driver.switchTo().newWindow('window');
-
-  {{< /tab >}}
-  {{< tab header="Kotlin" >}}
-// Opens a new tab and switches to new tab
-driver.switchTo().newWindow(WindowType.TAB)
-
-// Opens a new window and switches to new window
-driver.switchTo().newWindow(WindowType.WINDOW)
-  {{< /tab >}}
-{{< /tabpane >}}
-
 ### Closing a window or tab
 
 When you are finished with a window or tab _and_ it is not the
@@ -272,13 +173,9 @@ handle stored in a variable. Put this together and you will get:
 
 {{< tabpane langEqualsHeader=true >}}
 {{< badge-examples >}}
-  {{< tab header="Java" >}}
-//Close the tab or window
-driver.close();
-
-//Switch back to the old tab or window
-driver.switchTo().window(originalWindow);
-  {{< /tab >}}
+ {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java#L31-L34" >}}
+{{< /tab >}}
   {{< tab header="Python" >}}
     #Close the tab or window
 driver.close()
@@ -286,13 +183,11 @@ driver.close()
     #Switch back to the old tab or window
 driver.switch_to.window(original_window)
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-//Close the tab or window
-driver.Close();
-
-//Switch back to the old tab or window
-driver.SwitchTo().Window(originalWindow);
+  
+    {{< tab header="CSharp" text=true >}}
+  {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs#L32-L35" >}}
   {{< /tab >}}
+  
   {{< tab header="Ruby" >}}
     #Close the tab or window
 driver.close
@@ -322,6 +217,57 @@ window will leave WebDriver executing on the now closed page, and will
 trigger a **No Such Window Exception**. You must switch
 back to a valid window handle in order to continue execution.
 
+### Create new window (or) new tab and switch
+Creates a new window (or) tab and will focus the new window or tab on screen.
+You don't need to switch to work with the new window (or) tab. If you have more than two windows
+(or) tabs opened other than the new window, you can loop over both windows or tabs that WebDriver can see,
+and switch to the one which is not the original.
+
+__Note: This feature works with Selenium 4 and later versions.__
+
+{{< tabpane langEqualsHeader=true >}}
+{{< badge-examples >}}
+   {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java#L36-L42" >}}
+{{< /tab >}}
+  {{< tab header="Python" >}}
+    # Opens a new tab and switches to new tab
+driver.switch_to.new_window('tab')
+
+    # Opens a new window and switches to new window
+driver.switch_to.new_window('window')
+  {{< /tab >}}
+  
+  
+  {{< tab header="CSharp" text=true >}}
+  {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs#L37-L43" >}}
+  {{< /tab >}}
+  
+  {{% tab header="Ruby" text=true %}}
+Opens a new tab and switches to new tab:
+{{< gh-codeblock path="/examples/ruby/spec/interactions/windows_spec.rb#L9" >}}
+
+Opens a new window and switches to new window:
+{{< gh-codeblock path="/examples/ruby/spec/interactions/windows_spec.rb#L15" >}}
+  {{% /tab %}}
+{{< tab header="JavaScript" text=true >}}
+Opens a new tab and switches to new tab
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L70" >}}
+
+Opens a new window and switches to new window:
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L75" >}}
+{{< /tab >}}
+  {{< tab header="Kotlin" >}}
+// Opens a new tab and switches to new tab
+driver.switchTo().newWindow(WindowType.TAB)
+
+// Opens a new window and switches to new window
+driver.switchTo().newWindow(WindowType.WINDOW)
+  {{< /tab >}}
+{{< /tabpane >}}
+
+
+
 ### Quitting the browser at the end of a session
 
 When you are finished with the browser session you should call quit,
@@ -329,9 +275,15 @@ instead of close:
 
 {{< tabpane langEqualsHeader=true >}}
 {{< badge-examples >}}
-  {{< tab header="Java" >}}driver.quit();{{< /tab >}}
+     {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java#L44-L45" >}}
+{{< /tab >}}
   {{< tab header="Python" >}}driver.quit(){{< /tab >}}
-  {{< tab header="CSharp" >}}driver.Quit();{{< /tab >}}
+    
+  {{< tab header="CSharp" text=true >}}
+  {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs#L45-L46" >}}
+  {{< /tab >}}
+  
   {{< tab header="Ruby" >}}driver.quit{{< /tab >}}
   {{< tab header="JavaScript" >}}await driver.quit();{{< /tab >}}
   {{< tab header="Kotlin" >}}driver.quit(){{< /tab >}}
@@ -519,15 +471,13 @@ size = driver.manage.window.size
 width1 = size.width
 height1 = size.height
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-// Access each dimension individually
-const { width, height } = await driver.manage().window().getRect();
+{{< tab header="JavaScript" text=true >}}
+Access each dimension individually
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L93" >}}
 
-// Or store the dimensions and query them later
-const rect = await driver.manage().window().getRect();
-const width1 = rect.width;
-const height1 = rect.height;
-  {{< /tab >}}
+(or) store the dimensions and query them later
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L96-L98" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 //Access each dimension individually
 val width = driver.manage().window().size.width
@@ -599,15 +549,13 @@ rect  = driver.manage.window.rect
 x1 = rect.x
 y1 = rect.y
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-// Access each dimension individually
-const { x, y } = await driver.manage().window().getRect();
+{{< tab header="JavaScript" text=true >}}
+Access each dimension individually
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L108" >}}
 
-// Or store the dimensions and query them later
-const rect = await driver.manage().window().getRect();
-const x1 = rect.x;
-const y1 = rect.y;
-  {{< /tab >}}
+(or) store the dimensions and query them later
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L111-L113" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 // Access each dimension individually
 val x = driver.manage().window().position.x
@@ -759,22 +707,9 @@ begin
 
 end
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-let {Builder} = require('selenium-webdriver');
-let fs = require('fs');
-
-(async function example() {
-    let driver = await new Builder()
-      .forBrowser('chrome')
-      .build();
-
-    await driver.get('https://www.example.com');
-    // Returns base64 encoded string
-    let encodedString = await driver.takeScreenshot();
-    await fs.writeFileSync('./image.png', encodedString, 'base64');
-    await driver.quit();
-}())
-  {{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L56-L59" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 import com.oracle.tools.packager.IOUtils.copyFile
 import org.openqa.selenium.*
@@ -861,22 +796,8 @@ begin
   ele.save_screenshot('./image.jpg')
 end
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-const {Builder, By} = require('selenium-webdriver');
-let fs = require('fs');
-
-(async function example() {
-   let driver = await new Builder()
-       .forBrowser('chrome')
-       .build();
-
-   await driver.get('https://www.example.com');
-   let ele = await driver.findElement(By.css("h1"));
-   // Captures the element screenshot
-   let encodedString = await ele.takeScreenshot(true);
-   await fs.writeFileSync('./image.png', encodedString, 'base64');
-   await driver.quit();
-}())
+  {{< tab header="JavaScript" text=true >}}
+  {{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L44-L48" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.apache.commons.io.FileUtils
@@ -946,13 +867,9 @@ result = driver.execute_script("return arguments[0].innerText", header)
     # Executing JavaScript directly
 driver.execute_script("alert('hello world')")
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-// Stores the header element
-let header = await driver.findElement(By.css('h1'));
-
-// Executing JavaScript to capture innerText of header element
-let text = await driver.executeScript('return arguments[0].innerText', header);
-  {{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L33-L37" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 // Stores the header element
 val header = driver.findElement(By.cssSelector("h1"))
@@ -1004,25 +921,8 @@ _Note: This requires Chromium Browsers to be in headless mode_
 
     base64encodedContent = driver.print_page(orientation: 'landscape')
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-  const {Builder} = require('selenium-webdriver');
-  const chrome = require('selenium-webdriver/chrome');
-  let opts = new chrome.Options();
-  let fs = require('fs');
-  (async function example() {
-    let driver = new Builder()
-      .forBrowser('chrome')
-      .setChromeOptions(opts.headless())
-      .build();
-    await driver.get('https://www.selenium.dev');
-    try {
-      let base64 = await driver.printPage({pageRanges:["1-2"]});
-      await fs.writeFileSync('./test.pdf', base64, 'base64');
-    } catch (e) {
-      console.log(e)
-    }
-    await driver.quit();
-  })();
+  {{< tab header="JavaScript" text=true >}}
+  {{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L22-L25" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
     driver.get("https://www.selenium.dev")
diff --git a/website_and_docs/content/documentation/webdriver/interactions/windows.ja.md b/website_and_docs/content/documentation/webdriver/interactions/windows.ja.md
index 5c637a7f69c8..d589b86dc745 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/windows.ja.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/windows.ja.md
@@ -17,9 +17,13 @@ WebDriverは、ウィンドウとタブを区別しません。
 次のコードを使用して、現在のウィンドウのウィンドウハンドルを取得できます。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}driver.getWindowHandle();{{< /tab >}}
+  {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java#L16-L20" >}}
+{{< /tab >}}
   {{< tab header="Python" >}}driver.current_window_handle{{< /tab >}}
-  {{< tab header="CSharp" >}}driver.CurrentWindowHandle;{{< /tab >}}
+    {{< tab header="CSharp" text=true >}}
+  {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs#L17-L21" >}}
+  {{< /tab >}}
   {{< tab header="Ruby" >}}driver.window_handle{{< /tab >}}
   {{< tab header="JavaScript" >}}await driver.getWindowHandle();{{< /tab >}}
   {{< tab header="Kotlin" >}}driver.windowHandle{{< /tab >}}
@@ -34,30 +38,9 @@ WebDriverは、ウィンドウとタブを区別しません。
 ただし、Selenium 4には、新しいタブ（または）新しいウィンドウを作成して自動的に切り替える新しいAPI [NewWindow](#新しいウィンドウまたは新しいタブを作成して切り替える) が用意されています。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-//Store the ID of the original window
-String originalWindow = driver.getWindowHandle();
-
-//Check we don't have other windows open already
-assert driver.getWindowHandles().size() == 1;
-
-//Click the link which opens in a new window
-driver.findElement(By.linkText("new window")).click();
-
-//Wait for the new window or tab
-wait.until(numberOfWindowsToBe(2));
-
-//Loop through until we find a new window handle
-for (String windowHandle : driver.getWindowHandles()) {
-    if(!originalWindow.contentEquals(windowHandle)) {
-        driver.switchTo().window(windowHandle);
-        break;
-    }
-}
-
-//Wait for the new tab to finish loading content
-wait.until(titleIs("Selenium documentation"));
-  {{< /tab >}}
+  {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java#L22-L29" >}}
+{{< /tab >}}
   {{< tab header="Python" >}}
 from selenium import webdriver
 from selenium.webdriver.support.ui import WebDriverWait
@@ -92,31 +75,12 @@ with webdriver.Firefox() as driver:
     # Wait for the new tab to finish loading content
     wait.until(EC.title_is("SeleniumHQ Browser Automation"))
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-//Store the ID of the original window
-string originalWindow = driver.CurrentWindowHandle;
-
-//Check we don't have other windows open already
-Assert.AreEqual(driver.WindowHandles.Count, 1);
-
-//Click the link which opens in a new window
-driver.FindElement(By.LinkText("new window")).Click();
-
-//Wait for the new window or tab
-wait.Until(wd => wd.WindowHandles.Count == 2);
-
-//Loop through until we find a new window handle
-foreach(string window in driver.WindowHandles)
-{
-    if(originalWindow != window)
-    {
-        driver.SwitchTo().Window(window);
-        break;
-    }
-}
-//Wait for the new tab to finish loading content
-wait.Until(wd => wd.Title == "Selenium documentation");
+  
+    {{< tab header="CSharp" text=true >}}
+  {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs#L23-L30" >}}
   {{< /tab >}}
+  
+  
   {{< tab header="Ruby" >}}
     #Store the ID of the original window
 original_window = driver.window_handle
@@ -195,63 +159,6 @@ wait.until(titleIs("Selenium documentation"))
   {{< /tab >}}
 {{< /tabpane >}}
 
-### 新しいウィンドウ（または）新しいタブを作成して切り替える
-
-新しいウィンドウ（または）タブを作成し、画面上の新しいウィンドウまたはタブにフォーカスします。
-新しいウィンドウ（または）タブを使用するように切り替える必要はありません。
-新しいウィンドウ以外に3つ以上のウィンドウ（または）タブを開いている場合、WebDriverが表示できる両方のウィンドウまたはタブをループして、元のものではないものに切り替えることができます。
-
-__注意: この機能は、Selenium 4以降のバージョンで機能します。__
-
-{{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-// Opens a new tab and switches to new tab
-driver.switchTo().newWindow(WindowType.TAB);
-
-// Opens a new window and switches to new window
-driver.switchTo().newWindow(WindowType.WINDOW);
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Opens a new tab and switches to new tab
-driver.switch_to.new_window('tab')
-
-    # Opens a new window and switches to new window
-driver.switch_to.new_window('window')
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Opens a new tab and switches to new tab
-driver.SwitchTo().NewWindow(WindowType.Tab)
-
-// Opens a new window and switches to new window
-driver.SwitchTo().NewWindow(WindowType.Window)
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Note: The new_window in ruby only opens a new tab (or) Window and will not switch automatically
-    # The user has to switch to new tab (or) new window
-
-    # Opens a new tab and switches to new tab
-driver.manage.new_window(:tab)
-
-    # Opens a new window and switches to new window
-driver.manage.new_window(:window)
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-// Opens a new tab and switches to new tab
-await driver.switchTo().newWindow('tab');
-
-// Opens a new window and switches to new window
-await driver.switchTo().newWindow('window');
-
-  {{< /tab >}}
-  {{< tab header="Kotlin" >}}
-// Opens a new tab and switches to new tab
-driver.switchTo().newWindow(WindowType.TAB)
-
-// Opens a new window and switches to new window
-driver.switchTo().newWindow(WindowType.WINDOW)
-  {{< /tab >}}
-{{< /tabpane >}}
-
 ### ウィンドウまたはタブを閉じる
 
 ウィンドウまたはタブでの作業が終了し、 _かつ_ ブラウザーで最後に開いたウィンドウまたはタブではない場合、それを閉じて、以前使用していたウィンドウに切り替える必要があります。
@@ -259,13 +166,9 @@ driver.switchTo().newWindow(WindowType.WINDOW)
 これをまとめると以下のようになります。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-//Close the tab or window
-driver.close();
-
-//Switch back to the old tab or window
-driver.switchTo().window(originalWindow);
-  {{< /tab >}}
+ {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java#L31-L34" >}}
+{{< /tab >}}
   {{< tab header="Python" >}}
     #Close the tab or window
 driver.close()
@@ -273,13 +176,12 @@ driver.close()
     #Switch back to the old tab or window
 driver.switch_to.window(original_window)
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-//Close the tab or window
-driver.Close();
 
-//Switch back to the old tab or window
-driver.SwitchTo().Window(originalWindow);
+   {{< tab header="CSharp" text=true >}}
+  {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs#L32-L35" >}}
   {{< /tab >}}
+  
+
   {{< tab header="Ruby" >}}
     #Close the tab or window
 driver.close
@@ -306,14 +208,70 @@ driver.switchTo().window(originalWindow)
 
 ウィンドウを閉じた後に別のウィンドウハンドルに切り替えるのを忘れると、現在閉じられているページでWebDriverが実行されたままになり、 **No Such Window Exception** が発行されます。実行を継続するには、有効なウィンドウハンドルに切り替える必要があります。
 
+### 新しいウィンドウ（または）新しいタブを作成して切り替える
+
+新しいウィンドウ（または）タブを作成し、画面上の新しいウィンドウまたはタブにフォーカスします。
+新しいウィンドウ（または）タブを使用するように切り替える必要はありません。
+新しいウィンドウ以外に3つ以上のウィンドウ（または）タブを開いている場合、WebDriverが表示できる両方のウィンドウまたはタブをループして、元のものではないものに切り替えることができます。
+
+__注意: この機能は、Selenium 4以降のバージョンで機能します。__
+
+{{< tabpane langEqualsHeader=true >}}
+   {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java#L36-L42" >}}
+{{< /tab >}}
+  {{< tab header="Python" >}}
+    # Opens a new tab and switches to new tab
+driver.switch_to.new_window('tab')
+
+    # Opens a new window and switches to new window
+driver.switch_to.new_window('window')
+  {{< /tab >}}
+    
+  {{< tab header="CSharp" text=true >}}
+  {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs#L37-L43" >}}
+  {{< /tab >}}
+  
+  
+  {{% tab header="Ruby" text=true %}}
+Opens a new tab and switches to new tab
+{{< gh-codeblock path="/examples/ruby/spec/interactions/windows_spec.rb#L9" >}}
+
+Opens a new window and switches to new window
+{{< gh-codeblock path="/examples/ruby/spec/interactions/windows_spec.rb#L15" >}}
+  {{% /tab %}}
+  
+{{< tab header="JavaScript" text=true >}}
+Opens a new tab and switches to new tab
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L70" >}}
+
+Opens a new window and switches to new window:
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L75" >}}
+{{< /tab >}}
+
+  {{< tab header="Kotlin" >}}
+// Opens a new tab and switches to new tab
+driver.switchTo().newWindow(WindowType.TAB)
+
+// Opens a new window and switches to new window
+driver.switchTo().newWindow(WindowType.WINDOW)
+  {{< /tab >}}
+  
+{{< /tabpane >}}
+
+
 ### セッションの終了時にブラウザーを終了する
 
 ブラウザーセッションを終了したら、closeではなく、quitを呼び出す必要があります。
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}driver.quit();{{< /tab >}}
+ {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java#L44-L45" >}}
+{{< /tab >}}
   {{< tab header="Python" >}}driver.quit(){{< /tab >}}
-  {{< tab header="CSharp" >}}driver.Quit();{{< /tab >}}
+  {{< tab header="CSharp" text=true >}}
+  {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs#L45-L46" >}}
+  {{< /tab >}}
   {{< tab header="Ruby" >}}driver.quit{{< /tab >}}
   {{< tab header="JavaScript" >}}await driver.quit();{{< /tab >}}
   {{< tab header="Kotlin" >}}driver.quit(){{< /tab >}}
@@ -491,15 +449,13 @@ size = driver.manage.window.size
 width1 = size.width
 height1 = size.height
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-// Access each dimension individually
-const { width, height } = await driver.manage().window().getRect();
+{{< tab header="JavaScript" text=true >}}
+Access each dimension individually
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L93" >}}
 
-// Or store the dimensions and query them later
-const rect = await driver.manage().window().getRect();
-const width1 = rect.width;
-const height1 = rect.height;
-  {{< /tab >}}
+(or) store the dimensions and query them later
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L96-L98" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 //Access each dimension individually
 val width = driver.manage().window().size.width
@@ -570,15 +526,13 @@ rect  = driver.manage.window.rect
 x1 = rect.x
 y1 = rect.y
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-// Access each dimension individually
-const { x, y } = await driver.manage().window().getRect();
+{{< tab header="JavaScript" text=true >}}
+Access each dimension individually
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L108" >}}
 
-// Or store the dimensions and query them later
-const rect = await driver.manage().window().getRect();
-const x1 = rect.x;
-const y1 = rect.y;
-  {{< /tab >}}
+(or) store the dimensions and query them later
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L111-L113" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 // Access each dimension individually
 val x = driver.manage().window().position.x
@@ -724,22 +678,9 @@ begin
 
 end
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-let {Builder} = require('selenium-webdriver');
-let fs = require('fs');
-
-(async function example() {
-    let driver = await new Builder()
-      .forBrowser('chrome')
-      .build();
-
-    await driver.get('https://www.example.com');
-    // Returns base64 encoded string
-    let encodedString = await driver.takeScreenshot();
-    await fs.writeFileSync('./image.png', encodedString, 'base64');
-    await driver.quit();
-}())
-  {{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L56-L59" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 import com.oracle.tools.packager.IOUtils.copyFile
 import org.openqa.selenium.*
@@ -826,22 +767,8 @@ begin
   ele.save_screenshot('./image.jpg')
 end
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-const {Builder, By} = require('selenium-webdriver');
-let fs = require('fs');
-
-(async function example() {
-   let driver = await new Builder()
-       .forBrowser('chrome')
-       .build();
-
-   await driver.get('https://www.example.com');
-   let ele = await driver.findElement(By.css("h1"));
-   // Captures the element screenshot
-   let encodedString = await ele.takeScreenshot(true);
-   await fs.writeFileSync('./image.png', encodedString, 'base64');
-   await driver.quit();
-}())
+  {{< tab header="JavaScript" text=true >}}
+  {{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L44-L48" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.apache.commons.io.FileUtils
@@ -908,13 +835,9 @@ result = driver.execute_script("return arguments[0].innerText", header)
     # Executing JavaScript directly
 driver.execute_script("alert('hello world')")
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-// Stores the header element
-let header = await driver.findElement(By.css('h1'));
-
-// Executing JavaScript to capture innerText of header element
-let text = await driver.executeScript('return arguments[0].innerText', header);
-  {{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L33-L37" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 // Stores the header element
 val header = driver.findElement(By.cssSelector("h1"))
@@ -965,24 +888,8 @@ _Note: Chromium ブラウザがヘッドレスモードである必要があり
 
     base64encodedContent = driver.print_page(orientation: 'landscape')
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-  const {Builder} = require('selenium-webdriver');
-  const chrome = require('selenium-webdriver/chrome');
-  let opts = new chrome.Options();
-  let fs = require('fs');
-  (async function example() {
-  let driver = new Builder()
-  .forBrowser('chrome')
-  .setChromeOptions(opts.headless())
-  .build();
-  await driver.get('https://www.selenium.dev');
-  try {
-  let base64 = await driver.printPage({pageRanges:["1-2"]});
-  await fs.writeFileSync('./test.pdf', base64, 'base64');
-  } catch (e) {
-  console.log(e)
-  }
-  await driver.quit();
+  {{< tab header="JavaScript" text=true >}}
+  {{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L22-L25" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
     driver.get("https://www.selenium.dev")
diff --git a/website_and_docs/content/documentation/webdriver/interactions/windows.pt-br.md b/website_and_docs/content/documentation/webdriver/interactions/windows.pt-br.md
index 4c86aa6259aa..c383a720aa5c 100644
--- a/website_and_docs/content/documentation/webdriver/interactions/windows.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/interactions/windows.pt-br.md
@@ -17,9 +17,13 @@ usando um identificador. Cada janela tem um identificador único que permanece
 persistente em uma única sessão. Você pode pegar o identificador atual usando:
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}driver.getWindowHandle();{{< /tab >}}
+    {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java#L16-L20" >}}
+{{< /tab >}}
   {{< tab header="Python" >}}driver.current_window_handle{{< /tab >}}
-  {{< tab header="CSharp" >}}driver.CurrentWindowHandle;{{< /tab >}}
+     {{< tab header="CSharp" text=true >}}
+  {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs#L17-L21" >}}
+  {{< /tab >}}
   {{< tab header="Ruby" >}}driver.window_handle{{< /tab >}}
   {{< tab header="JavaScript" >}}await driver.getWindowHandle();{{< /tab >}}
   {{< tab header="Kotlin" >}}driver.windowHandle{{< /tab >}}
@@ -40,30 +44,9 @@ No entanto, o Selenium 4 fornece uma nova API [NewWindow](#criar-nova-janela-ou-
 que cria uma nova guia (ou) nova janela e muda automaticamente para ela.
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-//Store the ID of the original window
-String originalWindow = driver.getWindowHandle();
-
-//Check we don't have other windows open already
-assert driver.getWindowHandles().size() == 1;
-
-//Click the link which opens in a new window
-driver.findElement(By.linkText("new window")).click();
-
-//Wait for the new window or tab
-wait.until(numberOfWindowsToBe(2));
-
-//Loop through until we find a new window handle
-for (String windowHandle : driver.getWindowHandles()) {
-    if(!originalWindow.contentEquals(windowHandle)) {
-        driver.switchTo().window(windowHandle);
-        break;
-    }
-}
-
-//Wait for the new tab to finish loading content
-wait.until(titleIs("Selenium documentation"));
-  {{< /tab >}}
+   {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java#L22-L29" >}}
+{{< /tab >}}
   {{< tab header="Python" >}}
 from selenium import webdriver
 from selenium.webdriver.support.ui import WebDriverWait
@@ -98,31 +81,13 @@ with webdriver.Firefox() as driver:
     # Wait for the new tab to finish loading content
     wait.until(EC.title_is("SeleniumHQ Browser Automation"))
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-//Store the ID of the original window
-string originalWindow = driver.CurrentWindowHandle;
 
-//Check we don't have other windows open already
-Assert.AreEqual(driver.WindowHandles.Count, 1);
-
-//Click the link which opens in a new window
-driver.FindElement(By.LinkText("new window")).Click();
+    {{< tab header="CSharp" text=true >}}
+  {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs#L23-L30" >}}
+  {{< /tab >}}
+  
 
-//Wait for the new window or tab
-wait.Until(wd => wd.WindowHandles.Count == 2);
 
-//Loop through until we find a new window handle
-foreach(string window in driver.WindowHandles)
-{
-    if(originalWindow != window)
-    {
-        driver.SwitchTo().Window(window);
-        break;
-    }
-}
-//Wait for the new tab to finish loading content
-wait.Until(wd => wd.Title == "Selenium documentation");
-  {{< /tab >}}
   {{< tab header="Ruby" >}}
     #Store the ID of the original window
 original_window = driver.window_handle
@@ -201,63 +166,6 @@ wait.until(titleIs("Selenium documentation"))
   {{< /tab >}}
 {{< /tabpane >}}
 
-### Criar nova janela (ou) nova guia e alternar
-Cria uma nova janela (ou) guia e focará a nova janela ou guia na tela.
-Você não precisa mudar para trabalhar com a nova janela (ou) guia. Se você tiver mais de duas janelas
-(ou) guias abertas diferentes da nova janela, você pode percorrer as janelas ou guias que o WebDriver pode ver
-e mudar para aquela que não é a original.
-
-__Nota: este recurso funciona com Selenium 4 e versões posteriores.__
-
-{{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-// Opens a new tab and switches to new tab
-driver.switchTo().newWindow(WindowType.TAB);
-
-// Opens a new window and switches to new window
-driver.switchTo().newWindow(WindowType.WINDOW);
-  {{< /tab >}}
-  {{< tab header="Python" >}}
-    # Opens a new tab and switches to new tab
-driver.switch_to.new_window('tab')
-
-    # Opens a new window and switches to new window
-driver.switch_to.new_window('window')
-  {{< /tab >}}
-  {{< tab header="CSharp" >}}
-// Opens a new tab and switches to new tab
-driver.SwitchTo().NewWindow(WindowType.Tab)
-
-// Opens a new window and switches to new window
-driver.SwitchTo().NewWindow(WindowType.Window)
-  {{< /tab >}}
-  {{< tab header="Ruby" >}}
-    # Note: The new_window in ruby only opens a new tab (or) Window and will not switch automatically
-    # The user has to switch to new tab (or) new window
-
-    # Opens a new tab and switches to new tab
-driver.manage.new_window(:tab)
-
-    # Opens a new window and switches to new window
-driver.manage.new_window(:window)
-  {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-// Opens a new tab and switches to new tab
-await driver.switchTo().newWindow('tab');
-
-// Opens a new window and switches to new window
-await driver.switchTo().newWindow('window');
-
-  {{< /tab >}}
-  {{< tab header="Kotlin" >}}
-// Opens a new tab and switches to new tab
-driver.switchTo().newWindow(WindowType.TAB)
-
-// Opens a new window and switches to new window
-driver.switchTo().newWindow(WindowType.WINDOW)
-  {{< /tab >}}
-{{< /tabpane >}}
-
 ### Fechando uma janela ou guia
 
 Quando você fechar uma janela ou guia _e_ que não é a
@@ -267,13 +175,9 @@ amostra de código na seção anterior, você terá o identificador da janela
 anterior armazenado em uma variável. Junte isso e você obterá:
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}
-//Close the tab or window
-driver.close();
-
-//Switch back to the old tab or window
-driver.switchTo().window(originalWindow);
-  {{< /tab >}}
+ {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java#L31-L34" >}}
+{{< /tab >}}
   {{< tab header="Python" >}}
     #Close the tab or window
 driver.close()
@@ -281,13 +185,11 @@ driver.close()
     #Switch back to the old tab or window
 driver.switch_to.window(original_window)
   {{< /tab >}}
-  {{< tab header="CSharp" >}}
-//Close the tab or window
-driver.Close();
 
-//Switch back to the old tab or window
-driver.SwitchTo().Window(originalWindow);
+   {{< tab header="CSharp" text=true >}}
+  {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs#L32-L35" >}}
   {{< /tab >}}
+
   {{< tab header="Ruby" >}}
     #Close the tab or window
 driver.close
@@ -316,6 +218,55 @@ Esquecer de voltar para outro gerenciador de janela após fechar uma
 janela deixará o WebDriver em execução na página agora fechada e
 acionara uma **No Such Window Exception**. Você deve trocar
 de volta para um identificador de janela válido para continuar a execução.
+### Criar nova janela (ou) nova guia e alternar
+Cria uma nova janela (ou) guia e focará a nova janela ou guia na tela.
+Você não precisa mudar para trabalhar com a nova janela (ou) guia. Se você tiver mais de duas janelas
+(ou) guias abertas diferentes da nova janela, você pode percorrer as janelas ou guias que o WebDriver pode ver
+e mudar para aquela que não é a original.
+
+__Nota: este recurso funciona com Selenium 4 e versões posteriores.__
+
+{{< tabpane langEqualsHeader=true >}}
+  {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java#L36-L42" >}}
+{{< /tab >}}
+  {{< tab header="Python" >}}
+    # Opens a new tab and switches to new tab
+driver.switch_to.new_window('tab')
+
+    # Opens a new window and switches to new window
+driver.switch_to.new_window('window')
+  {{< /tab >}}
+  
+  {{< tab header="CSharp" text=true >}}
+  {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs#L37-L43" >}}
+  {{< /tab >}}
+  
+  
+  {{% tab header="Ruby" text=true %}}
+Opens a new tab and switches to new tab
+{{< gh-codeblock path="/examples/ruby/spec/interactions/windows_spec.rb#L9" >}}
+
+Opens a new window and switches to new window
+{{< gh-codeblock path="/examples/ruby/spec/interactions/windows_spec.rb#L15" >}}
+  {{% /tab %}}
+{{< tab header="JavaScript" text=true >}}
+Opens a new tab and switches to new tab
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L70" >}}
+
+Opens a new window and switches to new window:
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L75" >}}
+{{< /tab >}}
+  {{< tab header="Kotlin" >}}
+// Opens a new tab and switches to new tab
+driver.switchTo().newWindow(WindowType.TAB)
+
+// Opens a new window and switches to new window
+driver.switchTo().newWindow(WindowType.WINDOW)
+  {{< /tab >}}
+{{< /tabpane >}}
+
+
 
 ### Sair do navegador no final de uma sessão
 
@@ -323,9 +274,15 @@ Quando você terminar a sessão do navegador, você deve chamar a função _quit
 em vez de fechar:
 
 {{< tabpane langEqualsHeader=true >}}
-  {{< tab header="Java" >}}driver.quit();{{< /tab >}}
+  
+  {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java#L44-L45" >}}
+{{< /tab >}}
+  
   {{< tab header="Python" >}}driver.quit(){{< /tab >}}
-  {{< tab header="CSharp" >}}driver.Quit();{{< /tab >}}
+  {{< tab header="CSharp" text=true >}}
+  {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs#L45-L46" >}}
+  {{< /tab >}}
   {{< tab header="Ruby" >}}driver.quit{{< /tab >}}
   {{< tab header="JavaScript" >}}await driver.quit();{{< /tab >}}
   {{< tab header="Kotlin" >}}driver.quit(){{< /tab >}}
@@ -507,15 +464,13 @@ size = driver.manage.window.size
 width1 = size.width
 height1 = size.height
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-// Access each dimension individually
-const { width, height } = await driver.manage().window().getRect();
+{{< tab header="JavaScript" text=true >}}
+Access each dimension individually
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L93" >}}
 
-// Or store the dimensions and query them later
-const rect = await driver.manage().window().getRect();
-const width1 = rect.width;
-const height1 = rect.height;
-  {{< /tab >}}
+(or) store the dimensions and query them later
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L96-L98" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 //Access each dimension individually
 val width = driver.manage().window().size.width
@@ -585,15 +540,13 @@ rect  = driver.manage.window.rect
 x1 = rect.x
 y1 = rect.y
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-// Access each dimension individually
-const { x, y } = await driver.manage().window().getRect();
+{{< tab header="JavaScript" text=true >}}
+Access each dimension individually
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L108" >}}
 
-// Or store the dimensions and query them later
-const rect = await driver.manage().window().getRect();
-const x1 = rect.x;
-const y1 = rect.y;
-  {{< /tab >}}
+(or) store the dimensions and query them later
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L111-L113" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 // Access each dimension individually
 val x = driver.manage().window().position.x
@@ -741,22 +694,9 @@ begin
 
 end
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-let {Builder} = require('selenium-webdriver');
-let fs = require('fs');
-
-(async function example() {
-    let driver = await new Builder()
-      .forBrowser('chrome')
-      .build();
-
-    await driver.get('https://www.example.com');
-    // Returns base64 encoded string
-    let encodedString = await driver.takeScreenshot();
-    await fs.writeFileSync('./image.png', encodedString, 'base64');
-    await driver.quit();
-}())
-  {{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L56-L59" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 import com.oracle.tools.packager.IOUtils.copyFile
 import org.openqa.selenium.*
@@ -843,22 +783,8 @@ begin
   ele.save_screenshot('./image.jpg')
 end
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-const {Builder, By} = require('selenium-webdriver');
-let fs = require('fs');
-
-(async function example() {
-   let driver = await new Builder()
-       .forBrowser('chrome')
-       .build();
-
-   await driver.get('https://www.example.com');
-   let ele = await driver.findElement(By.css("h1"));
-   // Captures the element screenshot
-   let encodedString = await ele.takeScreenshot(true);
-   await fs.writeFileSync('./image.png', encodedString, 'base64');
-   await driver.quit();
-}())
+  {{< tab header="JavaScript" text=true >}}
+  {{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L44-L48" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 import org.apache.commons.io.FileUtils
@@ -927,13 +853,9 @@ result = driver.execute_script("return arguments[0].innerText", header)
     # Executing JavaScript directly
 driver.execute_script("alert('hello world')")
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-// Stores the header element
-let header = await driver.findElement(By.css('h1'));
-
-// Executing JavaScript to capture innerText of header element
-let text = await driver.executeScript('return arguments[0].innerText', header);
-  {{< /tab >}}
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L33-L37" >}}
+{{< /tab >}}
   {{< tab header="Kotlin" >}}
 // Stores the header element
 val header = driver.findElement(By.cssSelector("h1"))
@@ -983,24 +905,8 @@ _Nota: isto requer que navegadores Chromium estejam no modo sem cabeçalho_
 
     base64encodedContent = driver.print_page(orientation: 'landscape')
   {{< /tab >}}
-  {{< tab header="JavaScript" >}}
-  const {Builder} = require('selenium-webdriver');
-  const chrome = require('selenium-webdriver/chrome');
-  let opts = new chrome.Options();
-  let fs = require('fs');
-  (async function example() {
-  let driver = new Builder()
-  .forBrowser('chrome')
-  .setChromeOptions(opts.headless())
-  .build();
-  await driver.get('https://www.selenium.dev');
-  try {
-  let base64 = await driver.printPage({pageRanges:["1-2"]});
-  await fs.writeFileSync('./test.pdf', base64, 'base64');
-  } catch (e) {
-  console.log(e)
-  }
-  await driver.quit();
+  {{< tab header="JavaScript" text=true >}}
+  {{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L22-L25" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
     driver.get("https://www.selenium.dev")
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 fa5c5c85054c..fddc5fb6498c 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
@@ -13,9 +13,13 @@ WebDriver 没有区分窗口和标签页。如果你的站点打开了一个新
 每个窗口都有一个唯一的标识符，该标识符在单个会话中保持持久性。你可以使用以下方法获得当前窗口的窗口句柄:
 
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}driver.getWindowHandle();{{< /tab >}}
+  {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java#L16-L20" >}}
+{{< /tab >}}
 {{< tab header="Python" >}}driver.current_window_handle{{< /tab >}}
-{{< tab header="CSharp" >}}driver.CurrentWindowHandle;{{< /tab >}}
+    {{< tab header="CSharp" text=true >}}
+  {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs#L17-L21" >}}
+  {{< /tab >}}
 {{< tab header="Ruby" >}}driver.window_handle{{< /tab >}}
 {{< tab header="JavaScript" >}}await driver.getWindowHandle();{{< /tab >}}
 {{< tab header="Kotlin" >}}driver.windowHandle{{< /tab >}}
@@ -33,29 +37,8 @@ WebDriver 没有区分窗口和标签页。如果你的站点打开了一个新
 它创建一个新选项卡 (或) 新窗口并自动切换到它。
 
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
-// 存储原始窗口的 ID
-String originalWindow = driver.getWindowHandle();
-
-// 检查一下，我们还没有打开其他的窗口
-assert driver.getWindowHandles().size() == 1;
-
-// 点击在新窗口中打开的链接
-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;
-	}
-}
-
-// 等待新标签完成加载内容
-wait.until(titleIs("Selenium documentation"));
+ {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java#L22-L29" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
 from selenium import webdriver
@@ -91,29 +74,11 @@ driver.get("https://seleniumhq.github.io")
     # 等待新标签页完成加载内容
     wait.until(EC.title_is("SeleniumHQ Browser Automation"))
 {{< /tab >}}
-{{< tab header="CSharp" >}}
-// 存储原始窗口的 ID
-string originalWindow = driver.CurrentWindowHandle;
 
-// 检查一下，我们还没有打开其他的窗口
-Assert.AreEqual(driver.WindowHandles.Count, 1);
-
-// 单击在新窗口中打开的链接
-driver.FindElement(By.LinkText("new window")).Click();
-
-// 等待新窗口或标签页
-wait.Until(wd => wd.WindowHandles.Count == 2);
+ {{< tab header="CSharp" text=true >}}
+  {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs#L23-L30" >}}
+  {{< /tab >}}
 
-// 循环执行，直到找到一个新的窗口句柄
-foreach(string window in driver.WindowHandles)
-{if(originalWindow != window)
-{driver.SwitchTo().Window(window);
-break;
-}
-}
-// 等待新标签页完成加载内容
-wait.Until(wd => wd.Title == "Selenium documentation");
-{{< /tab >}}
 {{< tab header="Ruby" >}}
     # 存储原始窗口的 ID
 original_window = driver.window_handle
@@ -189,74 +154,14 @@ wait.until(titleIs("Selenium documentation"))
 {{< /tab >}}
 {{< /tabpane >}}
 
-### 创建新窗口(或)新标签页并且切换
-
-创建一个新窗口 (或) 标签页，屏幕焦点将聚焦在新窗口或标签在上。您不需要切换到新窗口 (或) 标签页。如果除了新窗口之外，
-您打开了两个以上的窗口 (或) 标签页，您可以通过遍历 WebDriver 看到两个窗口或选项卡，并切换到非原始窗口。
-
-_注意: 该特性适用于 Selenium 4 及其后续版本。_
-
-{{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
-// 打开新标签页并切换到新标签页
-driver.switchTo().newWindow(WindowType.TAB);
-
-// 打开一个新窗口并切换到新窗口
-driver.switchTo().newWindow(WindowType.WINDOW);
-{{< /tab >}}
-{{< tab header="Python" >}}
-    # 打开新标签页并切换到新标签页
-driver.switch_to.new_window('tab')
-
-    # 打开一个新窗口并切换到新窗口
-driver.switch_to.new_window('window')
-{{< /tab >}}
-{{< tab header="CSharp" >}}
-// 打开新标签页并切换到新标签页
-driver.SwitchTo().NewWindow(WindowType.Tab)
-
-// 打开一个新窗口并切换到新窗口
-driver.SwitchTo().NewWindow(WindowType.Window)
-{{< /tab >}}
-{{< tab header="Ruby" >}}
-    # 注意：ruby 中的 new_window 只打开一个新标签页(或)窗口，不会自动切换
-    # 用户必须切换到新选项卡 (或) 新窗口
-
-    # 打开新标签页并切换到新标签页
-driver.manage.new_window(:tab)
-
-    # 打开一个新窗口并切换到新窗口
-driver.manage.new_window(:window)
-{{< /tab >}}
-{{< tab header="JavaScript" >}}
-// 打开新标签页并切换到新标签页
-await driver.switchTo().newWindow('tab');
-
-// 打开一个新窗口并切换到新窗口
-await driver.switchTo().newWindow('window');
-
-{{< /tab >}}
-{{< tab header="Kotlin" >}}
-// 打开新标签页并切换到新标签页
-driver.switchTo().newWindow(WindowType.TAB)
-
-// 打开一个新窗口并切换到新窗口
-driver.switchTo().newWindow(WindowType.WINDOW)
-{{< /tab >}}
-{{< /tabpane >}}
-
 ### 关闭窗口或标签页
 
 当你完成了一个窗口或标签页的工作时，_并且_它不是浏览器中最后一个打开的窗口或标签页时，你应该关闭它并切换回你之前使用的窗口。
 假设您遵循了前一节中的代码示例，您将把前一个窗口句柄存储在一个变量中。把这些放在一起，你会得到:
 
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
-//关闭标签页或窗口
-driver.close();
-
-//切回到之前的标签页或窗口
-driver.switchTo().window(originalWindow);
+ {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java#L31-L34" >}}
 {{< /tab >}}
 {{< tab header="Python" >}}
     #关闭标签页或窗口
@@ -265,13 +170,11 @@ driver.close()
     #切回到之前的标签页或窗口
 driver.switch_to.window(original_window)
 {{< /tab >}}
-{{< tab header="CSharp" >}}
-//关闭标签页或窗口
-driver.Close();
 
-//切回到之前的标签页或窗口
-driver.SwitchTo().Window(originalWindow);
-{{< /tab >}}
+   {{< tab header="CSharp" text=true >}}
+  {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs#L32-L35" >}}
+  {{< /tab >}}
+
 {{< tab header="Ruby" >}}
     #关闭标签页或窗口
 driver.close
@@ -299,13 +202,69 @@ driver.switchTo().window(originalWindow)
 如果在关闭一个窗口后忘记切换回另一个窗口句柄，WebDriver 将在当前关闭的页面上执行，并触发一个
 **No Such Window Exception 无此窗口异常**。必须切换回有效的窗口句柄才能继续执行。
 
+### 创建新窗口(或)新标签页并且切换
+
+创建一个新窗口 (或) 标签页，屏幕焦点将聚焦在新窗口或标签在上。您不需要切换到新窗口 (或) 标签页。如果除了新窗口之外，
+您打开了两个以上的窗口 (或) 标签页，您可以通过遍历 WebDriver 看到两个窗口或选项卡，并切换到非原始窗口。
+
+_注意: 该特性适用于 Selenium 4 及其后续版本。_
+
+{{< tabpane langEqualsHeader=true >}}
+ {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java#L36-L42" >}}
+{{< /tab >}}
+{{< tab header="Python" >}}
+    # 打开新标签页并切换到新标签页
+driver.switch_to.new_window('tab')
+
+    # 打开一个新窗口并切换到新窗口
+driver.switch_to.new_window('window')
+{{< /tab >}}
+  
+  {{< tab header="CSharp" text=true >}}
+  {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs#L37-L43" >}}
+  {{< /tab >}}
+  
+  
+  {{% tab header="Ruby" text=true %}}
+打开新标签页并切换到新标签页
+{{< gh-codeblock path="/examples/ruby/spec/interactions/windows_spec.rb#L9" >}}
+
+打开一个新窗口并切换到新窗口
+{{< gh-codeblock path="/examples/ruby/spec/interactions/windows_spec.rb#L15" >}}
+  {{% /tab %}}
+{{< tab header="JavaScript" text=true >}}
+// 打开新标签页并切换到新标签页
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L70" >}}
+
+// 打开一个新窗口并切换到新窗口
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L75" >}}
+
+{{< /tab >}}
+{{< tab header="Kotlin" >}}
+// 打开新标签页并切换到新标签页
+driver.switchTo().newWindow(WindowType.TAB)
+
+// 打开一个新窗口并切换到新窗口
+driver.switchTo().newWindow(WindowType.WINDOW)
+{{< /tab >}}
+{{< /tabpane >}}
+
+
+
 ### 在会话结束时退出浏览器
 
 当你完成了浏览器会话，你应该调用 quit 退出，而不是 close 关闭:
 {{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}driver.quit();{{< /tab >}}
+
+ {{< tab header="Java" text=true >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/interactions/WindowsTest.java#L44-L45" >}}
+{{< /tab >}}
+
 {{< tab header="Python" >}}driver.quit(){{< /tab >}}
-{{< tab header="CSharp" >}}driver.Quit();{{< /tab >}}
+  {{< tab header="CSharp" text=true >}}
+  {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Interactions/WindowsTest.cs#L45-L46" >}}
+  {{< /tab >}}
 {{< tab header="Ruby" >}}driver.quit{{< /tab >}}
 {{< tab header="JavaScript" >}}await driver.quit();{{< /tab >}}
 {{< tab header="Kotlin" >}}driver.quit(){{< /tab >}}
@@ -471,14 +430,12 @@ size = driver.manage.window.size
 width1 = size.width
 height1 = size.height
 {{< /tab >}}
-{{< tab header="JavaScript" >}}
-// 分别获取每个尺寸
-const {width, height} = await driver.manage().window().getRect();
+{{< tab header="JavaScript" text=true >}}
+分别获取每个尺寸
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L93" >}}
 
-// 或者存储尺寸并在以后查询它们
-const rect = await driver.manage().window().getRect();
-const width1 = rect.width;
-const height1 = rect.height;
+或者存储尺寸并在以后查询它们
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L96-L98" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 // 分别获取每个尺寸
@@ -549,14 +506,12 @@ rect  = driver.manage.window.rect
 x1 = rect.x
 y1 = rect.y
 {{< /tab >}}
-{{< tab header="JavaScript" >}}
-// 分别获取每个尺寸
-const {x, y} = await driver.manage().window().getRect();
+{{< tab header="JavaScript" text=true >}}
+分别获取每个尺寸
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L108" >}}
 
-// 或者存储尺寸并在以后查询它们
-const rect = await driver.manage().window().getRect();
-const x1 = rect.x;
-const y1 = rect.y;
+或者存储尺寸并在以后查询它们
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L111-L113" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 // 分别获取每个尺寸
@@ -703,21 +658,8 @@ driver.save_screenshot('./image.png')
 
 end
 {{< /tab >}}
-{{< tab header="JavaScript" >}}
-let {Builder} = require('selenium-webdriver');
-let fs = require('fs');
-
-(async function example() {
-let driver = await new Builder()
-.forBrowser('chrome')
-.build();
-
-    await driver.get('https://www.example.com');
-    // Returns base64 encoded string
-    let encodedString = await driver.takeScreenshot();
-    await fs.writeFileSync('./image.png', encodedString, 'base64');
-    await driver.quit();
-}())
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L56-L59" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 import com.oracle.tools.packager.IOUtils.copyFile
@@ -806,22 +748,8 @@ ele = driver.find_element(:css, 'h1')
 ele.save_screenshot('./image.jpg')
 end
 {{< /tab >}}
-{{< tab header="JavaScript" >}}
-const {Builder, By} = require('selenium-webdriver');
-let fs = require('fs');
-
-(async function example() {
-let driver = await new Builder()
-.forBrowser('chrome')
-.build();
-
-await driver.get('https://www.example.com');
-let ele = await driver.findElement(By.css("h1"));
-// Captures the element screenshot
-let encodedString = await ele.takeScreenshot(true);
-await fs.writeFileSync('./image.png', encodedString, 'base64');
-await driver.quit();
-}())
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L44-L48" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 import org.apache.commons.io.FileUtils
@@ -888,12 +816,8 @@ result = driver.execute_script("return arguments[0].innerText", header)
     # Executing JavaScript directly
 driver.execute_script("alert('hello world')")
 {{< /tab >}}
-{{< tab header="JavaScript" >}}
-// Stores the header element
-let header = await driver.findElement(By.css('h1'));
-
-// Executing JavaScript to capture innerText of header element
-let text = await driver.executeScript('return arguments[0].innerText', header);
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L33-L37" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 // Stores the header element
@@ -945,24 +869,8 @@ driver.navigate_to 'https://www.selenium.dev'
 
     base64encodedContent = driver.print_page(orientation: 'landscape')
 {{< /tab >}}
-{{< tab header="JavaScript" >}}
-const {Builder} = require('selenium-webdriver');
-const chrome = require('selenium-webdriver/chrome');
-let opts = new chrome.Options();
-let fs = require('fs');
-(async function example() {
-let driver = new Builder()
-.forBrowser('chrome')
-.setChromeOptions(opts.headless())
-.build();
-await driver.get('https://www.selenium.dev');
-try {
-let base64 = await driver.printPage({pageRanges:["1-2"]});
-await fs.writeFileSync('./test.pdf', base64, 'base64');
-} catch (e) {
-console.log(e)
-}
-await driver.quit();
+{{< tab header="JavaScript" text=true >}}
+{{< gh-codeblock path="/examples/javascript/test/interactions/windows.spec.js#L22-L25" >}}
 {{< /tab >}}
 {{< tab header="Kotlin" >}}
 driver.get("https://www.selenium.dev")
diff --git a/website_and_docs/content/documentation/webdriver/support_features/_index.ja.md b/website_and_docs/content/documentation/webdriver/support_features/_index.ja.md
index 34943b8ff25a..739935402ecc 100644
--- a/website_and_docs/content/documentation/webdriver/support_features/_index.ja.md
+++ b/website_and_docs/content/documentation/webdriver/support_features/_index.ja.md
@@ -1,9 +1,9 @@
 ---
-title: "Support features"
-linkTitle: "Support Features"
+title: "サポート機能"
+linkTitle: "サポート機能"
 weight: 18
 description: >
-  Support classes provide optional higher level features.
+  サポート クラスは、オプションの上位レベル機能を提供します。
 aliases: [
 "/documentation/ja/support_packages/",
 "/ja/documentation/support_packages/",
diff --git a/website_and_docs/content/documentation/webdriver/support_features/expected_conditions.en.md b/website_and_docs/content/documentation/webdriver/support_features/expected_conditions.en.md
index 729ccb3908a1..2513b3eeb5df 100644
--- a/website_and_docs/content/documentation/webdriver/support_features/expected_conditions.en.md
+++ b/website_and_docs/content/documentation/webdriver/support_features/expected_conditions.en.md
@@ -24,10 +24,9 @@ These methods can include conditions such as:
 [Expected Conditions Documentation](https://www.selenium.dev/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html)
 {{< badge-code >}}
 {{% /tab %}}
-{{< tab header="Python" >}}
-[Expected Conditions Documentation](https://www.selenium.dev/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.expected_conditions.html)
-{{< badge-code >}}
-{{< /tab >}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/support/test_expected_conditions.py#L14-L15" >}}
+{{% /tab %}}
 {{< tab header="CSharp" >}}
 .NET stopped supporting Expected Conditions in Selenium 4 to minimize maintenance hassle and redundancy.
 {{< /tab >}}
diff --git a/website_and_docs/content/documentation/webdriver/support_features/expected_conditions.ja.md b/website_and_docs/content/documentation/webdriver/support_features/expected_conditions.ja.md
index 729ccb3908a1..2513b3eeb5df 100644
--- a/website_and_docs/content/documentation/webdriver/support_features/expected_conditions.ja.md
+++ b/website_and_docs/content/documentation/webdriver/support_features/expected_conditions.ja.md
@@ -24,10 +24,9 @@ These methods can include conditions such as:
 [Expected Conditions Documentation](https://www.selenium.dev/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html)
 {{< badge-code >}}
 {{% /tab %}}
-{{< tab header="Python" >}}
-[Expected Conditions Documentation](https://www.selenium.dev/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.expected_conditions.html)
-{{< badge-code >}}
-{{< /tab >}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/support/test_expected_conditions.py#L14-L15" >}}
+{{% /tab %}}
 {{< tab header="CSharp" >}}
 .NET stopped supporting Expected Conditions in Selenium 4 to minimize maintenance hassle and redundancy.
 {{< /tab >}}
diff --git a/website_and_docs/content/documentation/webdriver/support_features/expected_conditions.pt-br.md b/website_and_docs/content/documentation/webdriver/support_features/expected_conditions.pt-br.md
index 298cbe838688..4fc55ec35984 100644
--- a/website_and_docs/content/documentation/webdriver/support_features/expected_conditions.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/support_features/expected_conditions.pt-br.md
@@ -24,10 +24,9 @@ These methods can include conditions such as:
 [Expected Conditions Documentation](https://www.selenium.dev/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html)
 {{< badge-code >}}
 {{% /tab %}}
-{{< tab header="Python" >}}
-[Expected Conditions Documentation](https://www.selenium.dev/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.expected_conditions.html)
-{{< badge-code >}}
-{{< /tab >}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/support/test_expected_conditions.py#L14-L15" >}}
+{{% /tab %}}
 {{< tab header="CSharp" >}}
 .NET stopped supporting Expected Conditions in Selenium 4 to minimize maintenance hassle and redundancy.
 {{< /tab >}}
diff --git a/website_and_docs/content/documentation/webdriver/support_features/expected_conditions.zh-cn.md b/website_and_docs/content/documentation/webdriver/support_features/expected_conditions.zh-cn.md
index 729ccb3908a1..9e1db265772b 100644
--- a/website_and_docs/content/documentation/webdriver/support_features/expected_conditions.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/support_features/expected_conditions.zh-cn.md
@@ -1,33 +1,32 @@
 ---
-title: "Waiting with Expected Conditions"
-linkTitle: "Expected Conditions"
+title: "期望状态的等待"
+linkTitle: "期望状态"
 weight: 1
 description: >
-  These are classes used to describe what needs to be waited for.
+  本文档描述了一系列类, 这些类用于明确指定在测试中需要等待的各种条件.
 ---
 
-Expected Conditions are used with [Explicit Waits]({{< ref "../waits#explicit-waits" >}}).
-Instead of defining the block of code to be executed with a _lambda_, an expected
-conditions method can be created to represent common things that get waited on. Some
-methods take locators as arguments, others take elements as arguments.
+期望状态与 [显示等待]({{< ref "../waits#explicit-waits" >}}) 一起使用.
+与其定义要使用 _lambda_ 执行的代码块, 
+不如使用 _lambda_ 执行可以创建 Conditions 方法来表示等待的常见事物.
+有些方法将定位器作为参数, 有些方法将元素作为参数.
 
-These methods can include conditions such as:
+这些方法可以包括以下条件:
 
-* element exists
-* element is stale
-* element is visible
-* text is visible
-* title contains specified value
+* 元素存在
+* 元素已过期
+* 元素可见
+* 文本可见
+* 标题包含特定值
 
 {{< tabpane text=true >}}
 {{% tab header="Java" %}}
 [Expected Conditions Documentation](https://www.selenium.dev/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html)
 {{< badge-code >}}
 {{% /tab %}}
-{{< tab header="Python" >}}
-[Expected Conditions Documentation](https://www.selenium.dev/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.expected_conditions.html)
-{{< badge-code >}}
-{{< /tab >}}
+{{% tab header="Python" %}}
+{{< gh-codeblock path="/examples/python/tests/support/test_expected_conditions.py#L14-L15" >}}
+{{% /tab %}}
 {{< tab header="CSharp" >}}
 .NET stopped supporting Expected Conditions in Selenium 4 to minimize maintenance hassle and redundancy.
 {{< /tab >}}
diff --git a/website_and_docs/content/documentation/webdriver/troubleshooting/_index.en.md b/website_and_docs/content/documentation/webdriver/troubleshooting/_index.en.md
index 7963e483b58e..428fc3eaba6d 100644
--- a/website_and_docs/content/documentation/webdriver/troubleshooting/_index.en.md
+++ b/website_and_docs/content/documentation/webdriver/troubleshooting/_index.en.md
@@ -3,7 +3,7 @@ title: "Troubleshooting Assistance"
 linkTitle: "Troubleshooting"
 weight: 20
 description: >
-  How to get manage WebDriver problems.
+  How to solve WebDriver problems.
 ---
 
 It is not always obvious the root cause of errors in Selenium.
diff --git a/website_and_docs/content/documentation/webdriver/troubleshooting/_index.ja.md b/website_and_docs/content/documentation/webdriver/troubleshooting/_index.ja.md
index 7963e483b58e..250c55519b42 100644
--- a/website_and_docs/content/documentation/webdriver/troubleshooting/_index.ja.md
+++ b/website_and_docs/content/documentation/webdriver/troubleshooting/_index.ja.md
@@ -1,9 +1,9 @@
 ---
-title: "Troubleshooting Assistance"
+title: "トラブルシューティングの支援"
 linkTitle: "Troubleshooting"
 weight: 20
 description: >
-  How to get manage WebDriver problems.
+  WebDriverの問題を管理する方法。
 ---
 
 It is not always obvious the root cause of errors in Selenium.
diff --git a/website_and_docs/content/documentation/webdriver/troubleshooting/_index.pt-br.md b/website_and_docs/content/documentation/webdriver/troubleshooting/_index.pt-br.md
index 7963e483b58e..428fc3eaba6d 100644
--- a/website_and_docs/content/documentation/webdriver/troubleshooting/_index.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/troubleshooting/_index.pt-br.md
@@ -3,7 +3,7 @@ title: "Troubleshooting Assistance"
 linkTitle: "Troubleshooting"
 weight: 20
 description: >
-  How to get manage WebDriver problems.
+  How to solve WebDriver problems.
 ---
 
 It is not always obvious the root cause of errors in Selenium.
diff --git a/website_and_docs/content/documentation/webdriver/troubleshooting/errors/_index.en.md b/website_and_docs/content/documentation/webdriver/troubleshooting/errors/_index.en.md
index 8bc3e7c6eede..f18c5c335a7e 100644
--- a/website_and_docs/content/documentation/webdriver/troubleshooting/errors/_index.en.md
+++ b/website_and_docs/content/documentation/webdriver/troubleshooting/errors/_index.en.md
@@ -3,7 +3,7 @@ title: "Understanding Common Errors"
 linkTitle: "Errors"
 weight: 2
 description: >
-  How to get deal with various problems in your Selenium code.
+  How to solve various problems in your Selenium code.
 aliases: [
 "/exceptions/",
 "/exceptions/invalid_selector_exception.html",
@@ -12,13 +12,15 @@ aliases: [
 ]
 ---
 
-## Invalid Selector Exception
+## InvalidSelectorException
 
 CSS and XPath Selectors are sometimes difficult to get correct.
 
 ### Likely Cause
 
-The CSS or XPath selector you are trying to use has invalid characters or an invalid query.
+* The CSS or XPath selector you are trying to use has invalid characters or an invalid query.
+* You may have placed an XPATH value as a parameter to a CSS selector, or vice versa.
+* You may have used a CSS or XPATH selector as a parameter to an ID selector.
 
 ### Possible Solutions
 
@@ -29,7 +31,7 @@ Run your selector through a validator service:
 Or use a browser extension to get a known good value:
 * [SelectorsHub](https://selectorshub.com/selectorshub/)
 
-## No Such Element Exception
+## NoSuchElementException
 
 The element can not be found at the exact moment you attempted to locate it.
 
@@ -46,14 +48,14 @@ The element can not be found at the exact moment you attempted to locate it.
 * Update the locator with the browser's devtools console or use a browser extension like:
   * [SelectorsHub](https://selectorshub.com/selectorshub/)
 
-## Stale Element Reference Exception 
+## StaleElementReferenceException 
 
 An element goes stale when it was previously located, but can not be currently accessed.
 Elements do not get relocated automatically; the driver creates a reference ID for the element and
 has a particular place it expects to find it in the DOM. If it can not find the element
 in the current DOM, any action using that element will result in this exception.
 
-### Common Causes
+### Likely Cause
 
 This can happen when:
 
@@ -61,7 +63,7 @@ This can happen when:
 * You have navigated to a different page.
 * You have switched to another window or into or out of a frame or iframe.
 
-### Common Solutions
+### Possible Solutions
 
 **The DOM has changed**
 
@@ -97,3 +99,101 @@ and have destroyed the context in which the element was located.
 You can't just relocate it from the current context,
 and you can't switch back to an active context where it is valid. If this is the reason
 for your error, you must both navigate back to the correct location and relocate it.
+
+## ElementClickInterceptedException
+
+This exception occurs when Selenium tries to click an element, but the click would instead be received 
+by a different element. Before Selenium will click an element, it checks if the element is visible, 
+unobscured by any other elements, and enabled - if the element is obscured, it will raise this exception.
+
+### Likely Cause
+
+**UI Elements Overlapping** 
+
+Elements on the UI are typically placed next to each other, but occasionally elements may overlap. For example, 
+a navbar always staying at the top of your window as you scroll a page. If that navbar happens to be covering 
+an element we are trying to click, Selenium might believe it to be visible and enabled, but when you try to click 
+it will throw this exception. Pop-ups and Modals are also common offenders here.
+
+**Animations** 
+
+Elements with animations have the potential to cause this exception as well - it is recommended to wait for 
+animations to cease before attempting to click an element.
+
+### Possible Solutions
+
+**Use Explicit Waits** 
+
+[Explicit Waits]({{< ref "/documentation/webdriver/waits" >}}) will likely be your best friend in these instances. 
+A great way is to use `ExpectedCondition.ToBeClickable()` with `WebDriverWait` to wait until the right moment.
+
+**Scroll the Element into View** 
+
+In instances where the element is out of view, but Selenium still registers the element as visible 
+(e.g. navbars overlapping a section at the top of your screen), you can use the `WebDriver.executeScript()` 
+method to execute a javascript function to scroll (e.g. `WebDriver.executeScript('window.scrollBy(0,-250)')`) 
+or you can utilize the Actions class with `Actions.moveToElement(element)`.
+
+## InvalidSessionIdException
+
+Sometimes the session you're trying to access is different than what's currently available
+
+### Likely Cause
+
+This usually occurs when the session has been deleted (e.g. `driver.quit()`) or if the session has changed, 
+like when the last tab/browser has closed (e.g. `driver.close()`)
+
+### Possible Solutions
+
+Check your script for instances of `driver.close()` and `driver.quit()`, and any other possible causes 
+of closed tabs/browsers. It could be that you are locating an element before you should/can.
+
+## SessionNotCreatedException
+
+This exception occurs when the WebDriver is unable to create a new session for the browser. This often happens due to version mismatches, system-level restrictions, or configuration issues.
+
+### Likely Cause
+
+- The browser version and WebDriver version are incompatible (e.g., ChromeDriver v113 with Chrome v115).
+- macOS privacy settings may block the WebDriver from running.
+- The WebDriver binary is missing, inaccessible, or lacks the necessary execution permissions (e.g., on Linux/macOS, the driver file may not be executable).
+
+
+### Possible Solutions
+
+- Ensure the WebDriver version matches the browser version. For Chrome, check the browser version at `chrome://settings/help` and download the matching driver from [ChromeDriver Downloads](https://chromedriver.chromium.org/downloads).
+- On macOS, go to **System Settings > Privacy & Security**, and allow the driver to run if blocked.
+- Verify the driver binary is executable (`chmod +x /path/to/driver` on Linux/macOS).
+
+## ElementNotInteractableException
+
+This exception occurs when Selenium tries to interact with an element that is not interactable in its current state.
+
+### Likely Cause
+
+1. **Unsupported Operation**: Performing an action, like `sendKeys`, on an element that doesn’t support it (e.g., `<form>` or `<label>`).  
+2. **Multiple Elements Matching Locator**: The locator targets a non-interactable element, such as a `<td>` tag, instead of the intended `<input>` field.  
+3. **Hidden Elements**: The element is present in the DOM but not visible on the page due to CSS, the `hidden` attribute, or being outside the visible viewport.
+
+### Possible Solutions
+
+1. Use actions appropriate for the element type (e.g., use `sendKeys` with `<input>` fields only).  
+2. Ensure locators uniquely identify the intended element to avoid incorrect matches.  
+3. Check if the element is visible on the page before interacting with it. Use scrolling to bring the element into view, if required.  
+4. Use explicit waits to ensure the element is interactable before performing actions.
+
+## ElementNotVisibleException
+
+This exception is thrown when the element you are trying to interact with _is_ present in the DOM, but is not visible. 
+
+### Likely Cause
+
+This can occur in several situations:
+* Another element is blocking your intended element
+* The element is disabled/invisible to the user
+
+### Possible Solutions
+
+This issue cannot always be resolved on the user's end, however when it can it is usually solved by the following: 
+using an explicit wait, or interacting with the page in such a way to make the element visible 
+(scrolling, clicking a button, etc.)
diff --git a/website_and_docs/content/documentation/webdriver/troubleshooting/errors/_index.ja.md b/website_and_docs/content/documentation/webdriver/troubleshooting/errors/_index.ja.md
index 00af5d46c33d..df7742efe814 100644
--- a/website_and_docs/content/documentation/webdriver/troubleshooting/errors/_index.ja.md
+++ b/website_and_docs/content/documentation/webdriver/troubleshooting/errors/_index.ja.md
@@ -3,16 +3,18 @@ title: "Understanding Common Errors"
 linkTitle: "Errors"
 weight: 2
 description: >
-  How to get deal with various problems in your Selenium code.
+  How to solve various problems in your Selenium code.
 ---
 
-## Invalid Selector Exception
+## InvalidSelectorException
 
 CSS and XPath Selectors are sometimes difficult to get correct.
 
 ### Likely Cause
 
-The CSS or XPath selector you are trying to use has invalid characters or an invalid query.
+* The CSS or XPath selector you are trying to use has invalid characters or an invalid query.
+* You may have placed an XPATH value as a parameter to a CSS selector, or vice versa.
+* You may have used a CSS or XPATH selector as a parameter to an ID selector.
 
 ### Possible Solutions
 
@@ -23,7 +25,7 @@ Run your selector through a validator service:
 Or use a browser extension to get a known good value:
 * [SelectorsHub](https://selectorshub.com/selectorshub/)
 
-## No Such Element Exception
+## NoSuchElementException
 
 The element can not be found at the exact moment you attempted to locate it.
 
@@ -40,14 +42,14 @@ The element can not be found at the exact moment you attempted to locate it.
 * Update the locator with the browser's devtools console or use a browser extension like:
   * [SelectorsHub](https://selectorshub.com/selectorshub/)
 
-## Stale Element Reference Exception 
+## StaleElementReferenceException 
 
 An element goes stale when it was previously located, but can not be currently accessed.
 Elements do not get relocated automatically; the driver creates a reference ID for the element and
 has a particular place it expects to find it in the DOM. If it can not find the element
 in the current DOM, any action using that element will result in this exception.
 
-### Common Causes
+### Likely Cause
 
 This can happen when:
 
@@ -55,7 +57,7 @@ This can happen when:
 * You have navigated to a different page.
 * You have switched to another window or into or out of a frame or iframe.
 
-### Common Solutions
+### Possible Solutions
 
 **The DOM has changed**
 
@@ -91,3 +93,104 @@ and have destroyed the context in which the element was located.
 You can't just relocate it from the current context,
 and you can't switch back to an active context where it is valid. If this is the reason
 for your error, you must both navigate back to the correct location and relocate it.
+
+## ElementClickInterceptedException
+
+This exception occurs when Selenium tries to click an element, but the click would instead 
+be received by a different element. Before Selenium will click an element, it checks if the 
+element is visible, unobscured by any other elements, and enabled - if the element is obscured, 
+it will raise this exception.
+
+### Likely Cause
+
+**UI Elements Overlapping** 
+
+Elements on the UI are typically placed next to each other, but occasionally elements may overlap. 
+For example, a navbar always staying at the top of your window as you scroll a page. If that navbar 
+happens to be covering an element we are trying to click, Selenium might believe it to be visible 
+and enabled, but when you try to click it will throw this exception. Pop-ups and Modals are also 
+common offenders here.
+
+**Animations** 
+
+Elements with animations have the potential to cause this exception as well - it is recommended to 
+wait for animations to cease before attempting to click an element.
+
+### Possible Solutions
+
+**Use Explicit Waits** 
+
+[Explicit Waits]({{< ref "/documentation/webdriver/waits" >}}) will likely be your best friend in these instances. 
+A great way is to use `ExpectedCondition.ToBeClickable()` with `WebDriverWait` to wait until the right moment.
+
+**Scroll the Element into View** 
+
+In instances where the element is out of view, but Selenium still registers the element as visible 
+(e.g. navbars overlapping a section at the top of your screen), you can use the `WebDriver.executeScript()` 
+method to execute a javascript function to scroll (e.g. `WebDriver.executeScript('window.scrollBy(0,-250)')`) 
+or you can utilize the Actions class with `Actions.moveToElement(element)`.
+
+## InvalidSessionIdException
+
+Sometimes the session you're trying to access is different than what's currently available
+
+### Likely Cause
+
+This usually occurs when the session has been deleted (e.g. `driver.quit()`) or if the session has changed, 
+like when the last tab/browser has closed (e.g. `driver.close()`)
+
+### Possible Solutions
+
+Check your script for instances of `driver.close()` and `driver.quit()`, and any other possible causes of closed 
+tabs/browsers. It could be that you are locating an element before you should/can.
+
+## SessionNotCreatedException
+
+This exception occurs when the WebDriver is unable to create a new session for the browser. This often happens due to version mismatches, system-level restrictions, or configuration issues.
+
+### Likely Cause
+
+- The browser version and WebDriver version are incompatible (e.g., ChromeDriver v113 with Chrome v115).
+- macOS privacy settings may block the WebDriver from running.
+- The WebDriver binary is missing, inaccessible, or lacks the necessary execution permissions (e.g., on Linux/macOS, the driver file may not be executable).
+
+
+### Possible Solutions
+
+- Ensure the WebDriver version matches the browser version. For Chrome, check the browser version at `chrome://settings/help` and download the matching driver from [ChromeDriver Downloads](https://chromedriver.chromium.org/downloads).
+- On macOS, go to **System Settings > Privacy & Security**, and allow the driver to run if blocked.
+- Verify the driver binary is executable (`chmod +x /path/to/driver` on Linux/macOS).
+
+## ElementNotInteractableException
+
+This exception occurs when Selenium tries to interact with an element that is not interactable in its current state.
+
+### Likely Cause
+
+1. **Unsupported Operation**: Performing an action, like `sendKeys`, on an element that doesn’t support it (e.g., `<form>` or `<label>`).  
+2. **Multiple Elements Matching Locator**: The locator targets a non-interactable element, such as a `<td>` tag, instead of the intended `<input>` field.  
+3. **Hidden Elements**: The element is present in the DOM but not visible on the page due to CSS, the `hidden` attribute, or being outside the visible viewport.
+
+### Possible Solutions
+
+1. Use actions appropriate for the element type (e.g., use `sendKeys` with `<input>` fields only).  
+2. Ensure locators uniquely identify the intended element to avoid incorrect matches.  
+3. Check if the element is visible on the page before interacting with it. Use scrolling to bring the element into view, if required.  
+4. Use explicit waits to ensure the element is interactable before performing actions.
+
+## ElementNotVisibleException
+
+This exception is thrown when the element you are trying to interact with _is_ present in the DOM, but is not visible. 
+
+### Likely Cause
+
+This can occur in several situations:
+* Another element is blocking your intended element
+* The element is disabled/invisible to the user
+
+### Possible Solutions
+
+This issue cannot always be resolved on the user's end, however when it can it is usually solved by the following: 
+using an explicit wait, or interacting with the page in such a way to make the element visible 
+(scrolling, clicking a button, etc.)
+
diff --git a/website_and_docs/content/documentation/webdriver/troubleshooting/errors/_index.pt-br.md b/website_and_docs/content/documentation/webdriver/troubleshooting/errors/_index.pt-br.md
index 00af5d46c33d..915b0dae5cb4 100644
--- a/website_and_docs/content/documentation/webdriver/troubleshooting/errors/_index.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/troubleshooting/errors/_index.pt-br.md
@@ -3,16 +3,18 @@ title: "Understanding Common Errors"
 linkTitle: "Errors"
 weight: 2
 description: >
-  How to get deal with various problems in your Selenium code.
+  How to solve various problems in your Selenium code.
 ---
 
-## Invalid Selector Exception
+## InvalidSelectorException
 
 CSS and XPath Selectors are sometimes difficult to get correct.
 
 ### Likely Cause
 
-The CSS or XPath selector you are trying to use has invalid characters or an invalid query.
+* The CSS or XPath selector you are trying to use has invalid characters or an invalid query.
+* You may have placed an XPATH value as a parameter to a CSS selector, or vice versa.
+* You may have used a CSS or XPATH selector as a parameter to an ID selector.
 
 ### Possible Solutions
 
@@ -23,7 +25,7 @@ Run your selector through a validator service:
 Or use a browser extension to get a known good value:
 * [SelectorsHub](https://selectorshub.com/selectorshub/)
 
-## No Such Element Exception
+## NoSuchElementException
 
 The element can not be found at the exact moment you attempted to locate it.
 
@@ -40,14 +42,14 @@ The element can not be found at the exact moment you attempted to locate it.
 * Update the locator with the browser's devtools console or use a browser extension like:
   * [SelectorsHub](https://selectorshub.com/selectorshub/)
 
-## Stale Element Reference Exception 
+## StaleElementReferenceException 
 
 An element goes stale when it was previously located, but can not be currently accessed.
 Elements do not get relocated automatically; the driver creates a reference ID for the element and
 has a particular place it expects to find it in the DOM. If it can not find the element
 in the current DOM, any action using that element will result in this exception.
 
-### Common Causes
+### Likely Cause
 
 This can happen when:
 
@@ -55,7 +57,7 @@ This can happen when:
 * You have navigated to a different page.
 * You have switched to another window or into or out of a frame or iframe.
 
-### Common Solutions
+### Possible Solutions
 
 **The DOM has changed**
 
@@ -91,3 +93,103 @@ and have destroyed the context in which the element was located.
 You can't just relocate it from the current context,
 and you can't switch back to an active context where it is valid. If this is the reason
 for your error, you must both navigate back to the correct location and relocate it.
+
+## ElementClickInterceptedException
+
+This exception occurs when Selenium tries to click an element, but the click would instead 
+be received by a different element. Before Selenium will click an element, it checks if the 
+element is visible, unobscured by any other elements, and enabled - if the element is obscured, 
+it will raise this exception.
+
+### Likely Cause
+
+**UI Elements Overlapping** 
+
+Elements on the UI are typically placed next to each other, but occasionally elements may overlap. 
+For example, a navbar always staying at the top of your window as you scroll a page. If that navbar 
+happens to be covering an element we are trying to click, Selenium might believe it to be visible 
+and enabled, but when you try to click it will throw this exception. Pop-ups and Modals are also 
+common offenders here.
+
+**Animations** 
+
+Elements with animations have the potential to cause this exception as well - it is recommended 
+to wait for animations to cease before attempting to click an element.
+
+### Possible Solutions
+
+**Use Explicit Waits** 
+
+[Explicit Waits]({{< ref "/documentation/webdriver/waits" >}}) will likely be your best friend in these instances. 
+A great way is to use `ExpectedCondition.ToBeClickable()` with `WebDriverWait` 
+to wait until the right moment.
+
+**Scroll the Element into View** 
+
+In instances where the element is out of view, but Selenium still registers the element as visible 
+(e.g. navbars overlapping a section at the top of your screen), you can use the 
+`WebDriver.executeScript()` method to execute a javascript function to scroll 
+(e.g. `WebDriver.executeScript('window.scrollBy(0,-250)')`) or you can utilize the Actions 
+class with `Actions.moveToElement(element)`.
+
+## InvalidSessionIdException
+
+Sometimes the session you're trying to access is different than what's currently available
+
+### Likely Cause
+
+This usually occurs when the session has been deleted (e.g. `driver.quit()`) or if the session has changed, like when the last tab/browser has closed (e.g. `driver.close()`)
+
+### Possible Solutions
+
+Check your script for instances of `driver.close()` and `driver.quit()`, and any other possible causes of closed tabs/browsers. It could be that you are locating an element before you should/can.
+
+## SessionNotCreatedException
+
+This exception occurs when the WebDriver is unable to create a new session for the browser. This often happens due to version mismatches, system-level restrictions, or configuration issues.
+
+### Likely Cause
+
+- The browser version and WebDriver version are incompatible (e.g., ChromeDriver v113 with Chrome v115).
+- macOS privacy settings may block the WebDriver from running.
+- The WebDriver binary is missing, inaccessible, or lacks the necessary execution permissions (e.g., on Linux/macOS, the driver file may not be executable).
+
+
+### Possible Solutions
+
+- Ensure the WebDriver version matches the browser version. For Chrome, check the browser version at `chrome://settings/help` and download the matching driver from [ChromeDriver Downloads](https://chromedriver.chromium.org/downloads).
+- On macOS, go to **System Settings > Privacy & Security**, and allow the driver to run if blocked.
+- Verify the driver binary is executable (`chmod +x /path/to/driver` on Linux/macOS).
+
+## ElementNotInteractableException
+
+This exception occurs when Selenium tries to interact with an element that is not interactable in its current state.
+
+### Likely Cause
+
+1. **Unsupported Operation**: Performing an action, like `sendKeys`, on an element that doesn’t support it (e.g., `<form>` or `<label>`).  
+2. **Multiple Elements Matching Locator**: The locator targets a non-interactable element, such as a `<td>` tag, instead of the intended `<input>` field.  
+3. **Hidden Elements**: The element is present in the DOM but not visible on the page due to CSS, the `hidden` attribute, or being outside the visible viewport.
+
+### Possible Solutions
+
+1. Use actions appropriate for the element type (e.g., use `sendKeys` with `<input>` fields only).  
+2. Ensure locators uniquely identify the intended element to avoid incorrect matches.  
+3. Check if the element is visible on the page before interacting with it. Use scrolling to bring the element into view, if required.  
+4. Use explicit waits to ensure the element is interactable before performing actions.
+
+## ElementNotVisibleException
+
+This exception is thrown when the element you are trying to interact with _is_ present in the DOM, but is not visible. 
+
+### Likely Cause
+
+This can occur in several situations:
+* Another element is blocking your intended element
+* The element is disabled/invisible to the user
+
+### Possible Solutions
+
+This issue cannot always be resolved on the user's end, however when it can it is usually solved by the following: 
+using an explicit wait, or interacting with the page in such a way to make the element visible 
+(scrolling, clicking a button, etc.)
diff --git a/website_and_docs/content/documentation/webdriver/troubleshooting/errors/_index.zh-cn.md b/website_and_docs/content/documentation/webdriver/troubleshooting/errors/_index.zh-cn.md
index cafe1ec99efb..e2fe888d2d91 100644
--- a/website_and_docs/content/documentation/webdriver/troubleshooting/errors/_index.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/troubleshooting/errors/_index.zh-cn.md
@@ -6,13 +6,15 @@ description: >
   如何处理Selenium代码中的各种问题.
 ---
 
-## 无效选择器的异常 (Invalid Selector Exception)
+## 无效选择器的异常 (InvalidSelectorException)
 
 某些时候难以获得正确的CSS以及XPath选择器。
 
 ### 潜在原因
 
-您尝试使用的CSS或XPath选择器包含无效字符或无效查询。
+* The CSS or XPath selector you are trying to use has invalid characters or an invalid query.
+* You may have placed an XPATH value as a parameter to a CSS selector, or vice versa.
+* You may have used a CSS or XPATH selector as a parameter to an ID selector.
 
 ### 可行方案
 
@@ -23,7 +25,7 @@ description: >
 或者使用浏览器扩展程序来获取已知的良好值：
 * [SelectorsHub](https://selectorshub.com/selectorshub/)
 
-## 没有这样元素的异常 (No Such Element Exception)
+## 没有这样元素的异常 (NoSuchElementException)
 
 在您尝试找到该元素的当前时刻无法定位元素。
 
@@ -40,7 +42,7 @@ description: >
 * 使用浏览器的devtools控制台更新定位器或使用浏览器扩展程序，例如:
   * [SelectorsHub](https://selectorshub.com/selectorshub/)
 
-## 过时元素引用的异常 (Stale Element Reference Exception)
+## 过时元素引用的异常 (StaleElementReferenceException)
 
 当成功定位到元素时，
 WebDriver会为其设置一个引用ID作为标记，
@@ -98,3 +100,99 @@ WebDriver并不会自动重新定位，
 也无法切换回元素有效的活动上下文。
 如果这是您的错误原因，
 您必须回到正确的位置并重新定位元素。
+
+## ElementClickInterceptedException
+
+This exception occurs when Selenium tries to click an element, but the click would instead 
+be received by a different element. Before Selenium will click an element, it checks if the 
+element is visible, unobscured by any other elements, and enabled - if the element is obscured, 
+it will raise this exception.
+
+### Likely Cause
+
+**UI Elements Overlapping** 
+
+Elements on the UI are typically placed next to each other, but occasionally elements may overlap. 
+For example, a navbar always staying at the top of your window as you scroll a page. If that navbar 
+happens to be covering an element we are trying to click, Selenium might believe it to be visible 
+and enabled, but when you try to click it will throw this exception. Pop-ups and Modals are also 
+common offenders here.
+
+**Animations** 
+
+Elements with animations have the potential to cause this exception as well - it is recommended 
+to wait for animations to cease before attempting to click an element.
+
+### Possible Solutions
+
+**Use Explicit Waits** 
+
+[Explicit Waits]({{< ref "/documentation/webdriver/waits" >}}) will likely be your best friend 
+in these instances. A great way is to use `ExpectedCondition.ToBeClickable()` 
+with `WebDriverWait` to wait until the right moment.
+
+**Scroll the Element into View** 
+
+In instances where the element is out of view, but Selenium still registers the element as visible 
+(e.g. navbars overlapping a section at the top of your screen), you can use the 
+`WebDriver.executeScript()` method to execute a javascript function to scroll 
+(e.g. `WebDriver.executeScript('window.scrollBy(0,-250)')`) or you can utilize the 
+Actions class with `Actions.moveToElement(element)`.
+
+## 无效SessionId异常
+有时您尝试访问的会话与当前可用的会话不同。
+
+### 可能原因
+通常发生在会话被删除时（例如：`driver.quit()`）或会话发生更改时，例如最后一个标签页/浏览器已关闭（例如：`driver.close()`）。
+
+### 可能的解决方案
+检查脚本中是否有 `driver.close()` 和 `driver.quit()` 的实例，以及其他可能导致标签页/浏览器关闭的原因。可能是您在应该/能够定位元素之前就尝试定位了该元素。
+
+## SessionNotCreatedException
+
+此异常发生在 WebDriver 无法为浏览器创建新会话时。通常由于版本不匹配、系统级限制或配置问题导致。
+
+### 可能的原因
+
+- 浏览器版本和 WebDriver 版本不兼容（例如 ChromeDriver v113 和 Chrome v115）。
+- macOS 隐私设置可能会阻止 WebDriver 运行。
+- WebDriver 二进制文件丢失、不可访问或没有执行权限。
+
+### 可能的解决方案
+
+- 确保 WebDriver 版本与浏览器版本匹配。对于 Chrome，请在浏览器中访问 `chrome://settings/help` 检查浏览器版本，并从 [ChromeDriver 下载](https://chromedriver.chromium.org/downloads)页面下载匹配的驱动程序。
+- 在 macOS 上，转到 **系统设置 > 隐私与安全性**，并允许驱动程序运行（如果被阻止）。
+- 验证驱动程序二进制文件是否可执行（在 Linux/macOS 上运行 `chmod +x /path/to/driver`）。
+
+## ElementNotInteractableException
+
+当 Selenium 尝试与当前状态下无法交互的元素进行交互时，会发生此异常。
+
+### 可能的原因
+
+1. **不支持的操作**：尝试对不支持操作的元素执行操作，例如对 `<form>` 或 `<label>` 使用 `sendKeys`。  
+2. **多个元素匹配定位器**：定位器匹配到非可交互的元素，例如 `<td>` 标签，而不是目标的 `<input>` 字段。  
+3. **隐藏的元素**：元素存在于 DOM 中，但由于 CSS、`hidden` 属性或元素超出可见视口范围而不可见。
+
+### 可能的解决方案
+
+1. 根据元素类型使用适当的操作（例如，仅对 `<input>` 字段使用 `sendKeys`）。  
+2. 确保定位器唯一标识目标元素，以避免错误匹配。  
+3. 在与元素交互之前，检查其是否在页面上可见。如果需要，将元素滚动到视图中。  
+4. 使用显式等待以确保元素在执行操作前可交互。
+
+## ElementNotVisibleException
+
+This exception is thrown when the element you are trying to interact with _is_ present in the DOM, but is not visible. 
+
+### Likely Cause
+
+This can occur in several situations:
+* Another element is blocking your intended element
+* The element is disabled/invisible to the user
+
+### Possible Solutions
+
+This issue cannot always be resolved on the user's end, however when it can it is usually solved by the following: 
+using an explicit wait, or interacting with the page in such a way to make the element visible 
+(scrolling, clicking a button, etc.)
diff --git a/website_and_docs/content/documentation/webdriver/troubleshooting/logging.en.md b/website_and_docs/content/documentation/webdriver/troubleshooting/logging.en.md
index a95ab0b12abb..5ea0fc9a0bd0 100644
--- a/website_and_docs/content/documentation/webdriver/troubleshooting/logging.en.md
+++ b/website_and_docs/content/documentation/webdriver/troubleshooting/logging.en.md
@@ -27,11 +27,23 @@ take a look at the [Selenium Logger project](https://github.com/titusfortner/sel
 Python logs are typically created per module. You can match all submodules by referencing the top
 level module. So to work with all loggers in selenium module, you can do this:
 {{< gh-codeblock path="/examples/python/tests/troubleshooting/test_logging.py#L5" >}}
+You must also create and add a log handler (`StreamHandler`, `FileHandler`, etc).
+
+To save logs to a file, you can do this:
+```py
+log_path = '/path/to/log'
+handler = logging.FileHandler(log_path)
+logger.addHandler(handler)
+```
+
+To display logs in the console, you can do this:
+```py
+handler = logging.StreamHandler()
+logger.addHandler(handler)
+```
   {{% /tab %}}
   {{% tab header="CSharp" %}}
-```text
-.NET does not currently have a Logging implementation
-```
+.NET logger is managed with a static class, so all access to logging is managed simply by referencing `Log` from the `OpenQA.Selenium.Internal.Logging` namespace.
   {{% /tab %}}
   {{% tab header="Ruby" %}}
 If you want to see as much debugging as possible in all the classes,
@@ -93,9 +105,10 @@ logging.basicConfig(level=logging.WARN)
 ```
   {{% /tab %}}
   {{% tab header="CSharp" %}}
-```text
-.NET does not currently have a Logging implementation
-```
+.NET has 6 logger levels: `Error`, `Warn`, `Info`, `Debug`, `Trace` and `None`. The default level is `Warn`.
+
+To change the level of the logger:
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Troubleshooting/LoggingTest.cs#L18" >}}
   {{% /tab %}}
   {{% tab header="Ruby" %}}
   Ruby logger has 5 logger levels: `:debug`, `:info`, `:warn`, `:error`, `:fatal`. 
@@ -147,8 +160,11 @@ WARNING  selenium:test_logging.py:23 this is a warning
 ```
   {{% /tab %}}
   {{% tab header="CSharp" %}}
+.NET logs actionable content at logger level `Warn`.
+
+Example:
 ```text
-.NET does not currently have a Logging implementation
+11:04:40.986 WARN LoggingTest: this is a warning
 ```
   {{% /tab %}}
   {{% tab header="Ruby" %}}
@@ -193,8 +209,11 @@ INFO     selenium:test_logging.py:22 this is useful information
 ```
   {{% /tab %}}
   {{% tab header="CSharp" %}}
+.NET logs useful information at logger level `Info`.
+
+Example:
 ```text
-.NET does not currently have a Logging implementation
+11:04:40.986 INFO LoggingTest: this is useful information
 ```
   {{% /tab %}}
   {{% tab header="Ruby" %}}
@@ -237,8 +256,11 @@ DEBUG    selenium:test_logging.py:24 this is detailed debug information
 ```
   {{% /tab %}}
   {{% tab header="CSharp" %}}
+.NET logs most debug content at logger level `Debug`.
+
+Example:
 ```text
-.NET does not currently have a Logging implementation
+11:04:40.986 DEBUG LoggingTest: this is detailed debug information
 ```
   {{% /tab %}}
   {{% tab header="Ruby" %}}
@@ -273,9 +295,8 @@ handler with either a `StreamHandler` or a `FileHandler`:
 {{< gh-codeblock path="/examples/python/tests/troubleshooting/test_logging.py#L9-L10" >}}
   {{% /tab %}}
   {{% tab header="CSharp" %}}
-```text
-.NET does not currently have a Logging implementation
-```
+By default all logs are sent to `System.Console.Error` output. To direct output somewhere else, you need to add a handler with a `FileLogHandler`:
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Troubleshooting/LoggingTest.cs#L20" >}}
   {{% /tab %}}
   {{% tab header="Ruby" %}}
   By default, logs are sent to the console in `stdout`.  
@@ -312,9 +333,8 @@ different levels for different modules:
 {{< gh-codeblock path="/examples/python/tests/troubleshooting/test_logging.py#L12-L13" >}}
   {{< /tab >}}
   {{% tab header="CSharp" %}}
-```text
-.NET does not currently have a Logging implementation
-```
+.NET logging is managed on a per class level, set the level you want to use on a per-class basis:
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Troubleshooting/LoggingTest.cs#L22-L23" >}}
   {{% /tab %}}
   {{% tab header="Ruby" %}}
 Ruby's logger allows you to opt in ("allow") or opt out ("ignore") of log messages based on their IDs.
diff --git a/website_and_docs/content/documentation/webdriver/troubleshooting/logging.ja.md b/website_and_docs/content/documentation/webdriver/troubleshooting/logging.ja.md
index 7c25bde6040b..f3604af49009 100644
--- a/website_and_docs/content/documentation/webdriver/troubleshooting/logging.ja.md
+++ b/website_and_docs/content/documentation/webdriver/troubleshooting/logging.ja.md
@@ -27,11 +27,23 @@ take a look at the [Selenium Logger project](https://github.com/titusfortner/sel
 Python logs are typically created per module. You can match all submodules by referencing the top
 level module. So to work with all loggers in selenium module, you can do this:
 {{< gh-codeblock path="/examples/python/tests/troubleshooting/test_logging.py#L5" >}}
+You must also create and add a log handler (`StreamHandler`, `FileHandler`, etc).
+
+To save logs to a file, you can do this:
+```py
+log_path = '/path/to/log'
+handler = logging.FileHandler(log_path)
+logger.addHandler(handler)
+```
+
+To display logs in the console, you can do this:
+```py
+handler = logging.StreamHandler()
+logger.addHandler(handler)
+```
   {{% /tab %}}
   {{% tab header="CSharp" %}}
-```text
-.NET does not currently have a Logging implementation
-```
+.NET logger is managed with a static class, so all access to logging is managed simply by referencing `Log` from the `OpenQA.Selenium.Internal.Logging` namespace.
   {{% /tab %}}
   {{% tab header="Ruby" %}}
 If you want to see as much debugging as possible in all the classes,
@@ -92,9 +104,10 @@ logging.basicConfig(level=logging.WARN)
 ```
   {{% /tab %}}
   {{% tab header="CSharp" %}}
-```text
-.NET does not currently have a Logging implementation
-```
+.NET has 6 logger levels: `Error`, `Warn`, `Info`, `Debug`, `Trace` and `None`. The default level is `Warn`.
+
+To change the level of the logger:
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Troubleshooting/LoggingTest.cs#L18" >}}
   {{% /tab %}}
   {{% tab header="Ruby" %}}
   Ruby logger has 5 logger levels: `:debug`, `:info`, `:warn`, `:error`, `:fatal`. 
@@ -145,8 +158,11 @@ WARNING  selenium:test_logging.py:23 this is a warning
 ```
   {{% /tab %}}
   {{% tab header="CSharp" %}}
+.NET logs actionable content at logger level `Warn`.
+
+Example:
 ```text
-.NET does not currently have a Logging implementation
+11:04:40.986 WARN LoggingTest: this is a warning
 ```
   {{% /tab %}}
   {{% tab header="Ruby" %}}
@@ -191,8 +207,11 @@ INFO     selenium:test_logging.py:22 this is useful information
 ```
   {{% /tab %}}
   {{% tab header="CSharp" %}}
+.NET logs useful information at logger level `Info`.
+
+Example:
 ```text
-.NET does not currently have a Logging implementation
+11:04:40.986 INFO LoggingTest: this is useful information
 ```
   {{% /tab %}}
   {{% tab header="Ruby" %}}
@@ -235,8 +254,11 @@ DEBUG    selenium:test_logging.py:24 this is detailed debug information
 ```
   {{% /tab %}}
   {{% tab header="CSharp" %}}
+.NET logs most debug content at logger level `Debug`.
+
+Example:
 ```text
-.NET does not currently have a Logging implementation
+11:04:40.986 DEBUG LoggingTest: this is detailed debug information
 ```
   {{% /tab %}}
   {{% tab header="Ruby" %}}
@@ -271,9 +293,8 @@ handler with either a `StreamHandler` or a `FileHandler`:
 {{< gh-codeblock path="/examples/python/tests/troubleshooting/test_logging.py#L9-L10" >}}
   {{% /tab %}}
   {{% tab header="CSharp" %}}
-```text
-.NET does not currently have a Logging implementation
-```
+By default all logs are sent to `System.Console.Error` output. To direct output somewhere else, you need to add a handler with a `FileLogHandler`:
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Troubleshooting/LoggingTest.cs#L20" >}}
   {{% /tab %}}
   {{% tab header="Ruby" %}}
   By default, logs are sent to the console in `stdout`.  
@@ -309,9 +330,8 @@ different levels for different modules:
 {{< gh-codeblock path="/examples/python/tests/troubleshooting/test_logging.py#L12-L13" >}}
   {{< /tab >}}
   {{% tab header="CSharp" %}}
-```text
-.NET does not currently have a Logging implementation
-```
+.NET logging is managed on a per class level, set the level you want to use on a per-class basis:
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Troubleshooting/LoggingTest.cs#L22-L23" >}}
   {{% /tab %}}
   {{% tab header="Ruby" %}}
 Ruby's logger allows you to opt in ("allow") or opt out ("ignore") of log messages based on their IDs.
diff --git a/website_and_docs/content/documentation/webdriver/troubleshooting/logging.pt-br.md b/website_and_docs/content/documentation/webdriver/troubleshooting/logging.pt-br.md
index 7c25bde6040b..f3604af49009 100644
--- a/website_and_docs/content/documentation/webdriver/troubleshooting/logging.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/troubleshooting/logging.pt-br.md
@@ -27,11 +27,23 @@ take a look at the [Selenium Logger project](https://github.com/titusfortner/sel
 Python logs are typically created per module. You can match all submodules by referencing the top
 level module. So to work with all loggers in selenium module, you can do this:
 {{< gh-codeblock path="/examples/python/tests/troubleshooting/test_logging.py#L5" >}}
+You must also create and add a log handler (`StreamHandler`, `FileHandler`, etc).
+
+To save logs to a file, you can do this:
+```py
+log_path = '/path/to/log'
+handler = logging.FileHandler(log_path)
+logger.addHandler(handler)
+```
+
+To display logs in the console, you can do this:
+```py
+handler = logging.StreamHandler()
+logger.addHandler(handler)
+```
   {{% /tab %}}
   {{% tab header="CSharp" %}}
-```text
-.NET does not currently have a Logging implementation
-```
+.NET logger is managed with a static class, so all access to logging is managed simply by referencing `Log` from the `OpenQA.Selenium.Internal.Logging` namespace.
   {{% /tab %}}
   {{% tab header="Ruby" %}}
 If you want to see as much debugging as possible in all the classes,
@@ -92,9 +104,10 @@ logging.basicConfig(level=logging.WARN)
 ```
   {{% /tab %}}
   {{% tab header="CSharp" %}}
-```text
-.NET does not currently have a Logging implementation
-```
+.NET has 6 logger levels: `Error`, `Warn`, `Info`, `Debug`, `Trace` and `None`. The default level is `Warn`.
+
+To change the level of the logger:
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Troubleshooting/LoggingTest.cs#L18" >}}
   {{% /tab %}}
   {{% tab header="Ruby" %}}
   Ruby logger has 5 logger levels: `:debug`, `:info`, `:warn`, `:error`, `:fatal`. 
@@ -145,8 +158,11 @@ WARNING  selenium:test_logging.py:23 this is a warning
 ```
   {{% /tab %}}
   {{% tab header="CSharp" %}}
+.NET logs actionable content at logger level `Warn`.
+
+Example:
 ```text
-.NET does not currently have a Logging implementation
+11:04:40.986 WARN LoggingTest: this is a warning
 ```
   {{% /tab %}}
   {{% tab header="Ruby" %}}
@@ -191,8 +207,11 @@ INFO     selenium:test_logging.py:22 this is useful information
 ```
   {{% /tab %}}
   {{% tab header="CSharp" %}}
+.NET logs useful information at logger level `Info`.
+
+Example:
 ```text
-.NET does not currently have a Logging implementation
+11:04:40.986 INFO LoggingTest: this is useful information
 ```
   {{% /tab %}}
   {{% tab header="Ruby" %}}
@@ -235,8 +254,11 @@ DEBUG    selenium:test_logging.py:24 this is detailed debug information
 ```
   {{% /tab %}}
   {{% tab header="CSharp" %}}
+.NET logs most debug content at logger level `Debug`.
+
+Example:
 ```text
-.NET does not currently have a Logging implementation
+11:04:40.986 DEBUG LoggingTest: this is detailed debug information
 ```
   {{% /tab %}}
   {{% tab header="Ruby" %}}
@@ -271,9 +293,8 @@ handler with either a `StreamHandler` or a `FileHandler`:
 {{< gh-codeblock path="/examples/python/tests/troubleshooting/test_logging.py#L9-L10" >}}
   {{% /tab %}}
   {{% tab header="CSharp" %}}
-```text
-.NET does not currently have a Logging implementation
-```
+By default all logs are sent to `System.Console.Error` output. To direct output somewhere else, you need to add a handler with a `FileLogHandler`:
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Troubleshooting/LoggingTest.cs#L20" >}}
   {{% /tab %}}
   {{% tab header="Ruby" %}}
   By default, logs are sent to the console in `stdout`.  
@@ -309,9 +330,8 @@ different levels for different modules:
 {{< gh-codeblock path="/examples/python/tests/troubleshooting/test_logging.py#L12-L13" >}}
   {{< /tab >}}
   {{% tab header="CSharp" %}}
-```text
-.NET does not currently have a Logging implementation
-```
+.NET logging is managed on a per class level, set the level you want to use on a per-class basis:
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Troubleshooting/LoggingTest.cs#L22-L23" >}}
   {{% /tab %}}
   {{% tab header="Ruby" %}}
 Ruby's logger allows you to opt in ("allow") or opt out ("ignore") of log messages based on their IDs.
diff --git a/website_and_docs/content/documentation/webdriver/troubleshooting/logging.zh-cn.md b/website_and_docs/content/documentation/webdriver/troubleshooting/logging.zh-cn.md
index d7b036e30de1..ab3363d65de4 100644
--- a/website_and_docs/content/documentation/webdriver/troubleshooting/logging.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/troubleshooting/logging.zh-cn.md
@@ -30,11 +30,23 @@ Java日志并不简单直接,
 Python logs are typically created per module. You can match all submodules by referencing the top
 level module. So to work with all loggers in selenium module, you can do this:
 {{< gh-codeblock path="/examples/python/tests/troubleshooting/test_logging.py#L5" >}}
+You must also create and add a log handler (`StreamHandler`, `FileHandler`, etc).
+
+To save logs to a file, you can do this:
+```py
+log_path = '/path/to/log'
+handler = logging.FileHandler(log_path)
+logger.addHandler(handler)
+```
+
+To display logs in the console, you can do this:
+```py
+handler = logging.StreamHandler()
+logger.addHandler(handler)
+```
   {{% /tab %}}
   {{% tab header="CSharp" %}}
-```text
-.NET does not currently have a Logging implementation
-```
+.NET logger is managed with a static class, so all access to logging is managed simply by referencing `Log` from the `OpenQA.Selenium.Internal.Logging` namespace.
   {{% /tab %}}
   {{% tab header="Ruby" %}}
 If you want to see as much debugging as possible in all the classes,
@@ -95,9 +107,10 @@ logging.basicConfig(level=logging.WARN)
 ```
   {{% /tab %}}
   {{% tab header="CSharp" %}}
-```text
-.NET does not currently have a Logging implementation
-```
+.NET has 6 logger levels: `Error`, `Warn`, `Info`, `Debug`, `Trace` and `None`. The default level is `Warn`.
+
+To change the level of the logger:
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Troubleshooting/LoggingTest.cs#L18" >}}
   {{% /tab %}}
   {{% tab header="Ruby" %}}
   Ruby logger has 5 logger levels: `:debug`, `:info`, `:warn`, `:error`, `:fatal`. 
@@ -149,8 +162,11 @@ WARNING  selenium:test_logging.py:23 this is a warning
 ```
   {{% /tab %}}
   {{% tab header="CSharp" %}}
+.NET logs actionable content at logger level `Warn`.
+
+Example:
 ```text
-.NET does not currently have a Logging implementation
+11:04:40.986 WARN LoggingTest: this is a warning
 ```
   {{% /tab %}}
   {{% tab header="Ruby" %}}
@@ -195,8 +211,11 @@ INFO     selenium:test_logging.py:22 this is useful information
 ```
   {{% /tab %}}
   {{% tab header="CSharp" %}}
+.NET logs useful information at logger level `Info`.
+
+Example:
 ```text
-.NET does not currently have a Logging implementation
+11:04:40.986 INFO LoggingTest: this is useful information
 ```
   {{% /tab %}}
   {{% tab header="Ruby" %}}
@@ -239,8 +258,11 @@ DEBUG    selenium:test_logging.py:24 this is detailed debug information
 ```
   {{% /tab %}}
   {{% tab header="CSharp" %}}
+.NET logs most debug content at logger level `Debug`.
+
+Example:
 ```text
-.NET does not currently have a Logging implementation
+11:04:40.986 DEBUG LoggingTest: this is detailed debug information
 ```
   {{% /tab %}}
   {{% tab header="Ruby" %}}
@@ -277,9 +299,8 @@ handler with either a `StreamHandler` or a `FileHandler`:
 {{< gh-codeblock path="/examples/python/tests/troubleshooting/test_logging.py#L9-L10" >}}
   {{% /tab %}}
   {{% tab header="CSharp" %}}
-```text
-.NET does not currently have a Logging implementation
-```
+By default all logs are sent to `System.Console.Error` output. To direct output somewhere else, you need to add a handler with a `FileLogHandler`:
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Troubleshooting/LoggingTest.cs#L20" >}}
   {{% /tab %}}
   {{% tab header="Ruby" %}}
   By default, logs are sent to the console in `stdout`.  
@@ -316,9 +337,8 @@ different levels for different modules:
 {{< gh-codeblock path="/examples/python/tests/troubleshooting/test_logging.py#L12-L13" >}}
   {{< /tab >}}
   {{% tab header="CSharp" %}}
-```text
-.NET does not currently have a Logging implementation
-```
+.NET logging is managed on a per class level, set the level you want to use on a per-class basis:
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Troubleshooting/LoggingTest.cs#L22-L23" >}}
   {{% /tab %}}
   {{% tab header="Ruby" %}}
 Ruby's logger allows you to opt in ("allow") or opt out ("ignore") of log messages based on their IDs.
diff --git a/website_and_docs/content/documentation/webdriver/troubleshooting/upgrade_to_selenium_4.en.md b/website_and_docs/content/documentation/webdriver/troubleshooting/upgrade_to_selenium_4.en.md
index d5dfbb3d7dc8..3b74107311fd 100644
--- a/website_and_docs/content/documentation/webdriver/troubleshooting/upgrade_to_selenium_4.en.md
+++ b/website_and_docs/content/documentation/webdriver/troubleshooting/upgrade_to_selenium_4.en.md
@@ -54,25 +54,30 @@ For example, if your cloud vendor uses `build` and `name` capabilities for your
 to wrap them in a `cloud:options` block (check with your cloud vendor for the appropriate prefix).
 
 #### Before 
-{{< tabpane langEqualsHeader=true >}}
+{{< tabpane text=true >}}
 {{< badge-examples >}}
-{{< tab header="Java" >}}
+{{% tab header="Java" %}}
+```java
 DesiredCapabilities caps = DesiredCapabilities.firefox();
 caps.setCapability("platform", "Windows 10");
 caps.setCapability("version", "92");
 caps.setCapability("build", myTestBuild);
 caps.setCapability("name", myTestName);
 WebDriver driver = new RemoteWebDriver(new URL(cloudUrl), caps);
-{{< /tab >}}
-{{< tab header="JavaScript" >}}
+```
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+```javascript
 caps = {};
 caps['browserName'] = 'Firefox';
 caps['platform'] = 'Windows 10';
 caps['version'] = '92';
 caps['build'] = myTestBuild;
 caps['name'] = myTestName;
-{{< /tab >}}
-{{< tab header="CSharp" >}}
+```
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+```CSharp
 DesiredCapabilities caps = new DesiredCapabilities();
 caps.SetCapability("browserName", "firefox");
 caps.SetCapability("platform", "Windows 10");
@@ -80,16 +85,13 @@ caps.SetCapability("version", "92");
 caps.SetCapability("build", myTestBuild);
 caps.SetCapability("name", myTestName);
 var driver = new RemoteWebDriver(new Uri(CloudURL), caps);
-{{< /tab >}}
+```
+{{% /tab %}}
 {{< tab header="Ruby" >}}
-caps = Selenium::WebDriver::Remote::Capabilities.firefox
-caps[:platform] = 'Windows 10'
-caps[:version] = '92'
-caps[:build] = my_test_build
-caps[:name] = my_test_name
-driver = Selenium::WebDriver.for :remote, url: cloud_url, desired_capabilities: caps
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L123-L130">}}
 {{< /tab >}}
-{{< tab header="Python" >}}
+{{% tab header="Python" %}}
+```python
 caps = {}
 caps['browserName'] = 'firefox'
 caps['platform'] = 'Windows 10'
@@ -97,13 +99,15 @@ caps['version'] = '92'
 caps['build'] = my_test_build
 caps['name'] = my_test_name
 driver = webdriver.Remote(cloud_url, desired_capabilities=caps)
-{{< /tab >}}
+````
+{{% /tab %}}
 {{< /tabpane >}}
 
 #### After
-{{< tabpane langEqualsHeader=true >}}
+{{< tabpane text=true >}}
 {{< badge-examples >}}
-{{< tab header="Java" >}}
+{{% tab header="Java" %}}
+```java
 FirefoxOptions browserOptions = new FirefoxOptions();
 browserOptions.setPlatformName("Windows 10");
 browserOptions.setBrowserVersion("92");
@@ -112,8 +116,10 @@ cloudOptions.put("build", myTestBuild);
 cloudOptions.put("name", myTestName);
 browserOptions.setCapability("cloud:options", cloudOptions);
 WebDriver driver = new RemoteWebDriver(new URL(cloudUrl), browserOptions);
-{{< /tab >}}
-{{< tab header="JavaScript" >}}
+```
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+```javascript
 capabilities = {
   browserName: 'firefox',
   browserVersion: '92',
@@ -123,8 +129,10 @@ capabilities = {
      name: myTestName,
   }
 }
-{{< /tab >}}
-{{< tab header="CSharp" >}}
+````
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+```CSharp
 var browserOptions = new FirefoxOptions();
 browserOptions.PlatformName = "Windows 10";
 browserOptions.BrowserVersion = "92";
@@ -133,18 +141,13 @@ cloudOptions.Add("build", myTestBuild);
 cloudOptions.Add("name", myTestName);
 browserOptions.AddAdditionalOption("cloud:options", cloudOptions);
 var driver = new RemoteWebDriver(new Uri(CloudURL), browserOptions);
-{{< /tab >}}
+```
+{{% /tab %}}
 {{< tab header="Ruby" >}}
-options = Selenium::WebDriver::Options.firefox
-options.browser_version = 'latest'
-options.platform_name = 'Windows 10'
-cloud_options = {}
-cloud_options[:build] = my_test_build
-cloud_options[:name] = my_test_name
-options.add_option('cloud:options', cloud_options)
-driver = Selenium::WebDriver.for :remote, url: cloud_url, capabilities: options
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L38-L47">}}
 {{< /tab >}}
-{{< tab header="Python" >}}
+{{% tab header="Python" %}}
+```python
 from selenium.webdriver.firefox.options import Options as FirefoxOptions
 options = FirefoxOptions()
 options.browser_version = '92'
@@ -154,7 +157,8 @@ cloud_options['build'] = my_test_build
 cloud_options['name'] = my_test_name
 options.set_capability('cloud:options', cloud_options)
 driver = webdriver.Remote(cloud_url, options=options)
-{{< /tab >}}
+```
+{{% /tab %}}
 {{< /tabpane >}}
 
 ### Find element(s) utility methods in Java
diff --git a/website_and_docs/content/documentation/webdriver/troubleshooting/upgrade_to_selenium_4.ja.md b/website_and_docs/content/documentation/webdriver/troubleshooting/upgrade_to_selenium_4.ja.md
index 2e0e89d20c63..ee63e678d2b6 100644
--- a/website_and_docs/content/documentation/webdriver/troubleshooting/upgrade_to_selenium_4.ja.md
+++ b/website_and_docs/content/documentation/webdriver/troubleshooting/upgrade_to_selenium_4.ja.md
@@ -50,24 +50,30 @@ W3CWebDriverの標準機能のリストは次のとおりです。
 それらを `cloud:options` ブロックでラップする必要があります（適切なプレフィックスについては、クラウドベンダーに確認してください）。
 
 #### Before 
-{{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
+{{< tabpane text=true >}}
+{{< badge-examples >}}
+{{% tab header="Java" %}}
+```java
 DesiredCapabilities caps = DesiredCapabilities.firefox();
 caps.setCapability("platform", "Windows 10");
 caps.setCapability("version", "92");
 caps.setCapability("build", myTestBuild);
 caps.setCapability("name", myTestName);
 WebDriver driver = new RemoteWebDriver(new URL(cloudUrl), caps);
-{{< /tab >}}
-{{< tab header="JavaScript" >}}
+```
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+```javascript
 caps = {};
 caps['browserName'] = 'Firefox';
 caps['platform'] = 'Windows 10';
 caps['version'] = '92';
 caps['build'] = myTestBuild;
 caps['name'] = myTestName;
-{{< /tab >}}
-{{< tab header="CSharp" >}}
+```
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+```CSharp
 DesiredCapabilities caps = new DesiredCapabilities();
 caps.SetCapability("browserName", "firefox");
 caps.SetCapability("platform", "Windows 10");
@@ -75,16 +81,13 @@ caps.SetCapability("version", "92");
 caps.SetCapability("build", myTestBuild);
 caps.SetCapability("name", myTestName);
 var driver = new RemoteWebDriver(new Uri(CloudURL), caps);
-{{< /tab >}}
+```
+{{% /tab %}}
 {{< tab header="Ruby" >}}
-caps = Selenium::WebDriver::Remote::Capabilities.firefox
-caps[:platform] = 'Windows 10'
-caps[:version] = '92'
-caps[:build] = my_test_build
-caps[:name] = my_test_name
-driver = Selenium::WebDriver.for :remote, url: cloud_url, desired_capabilities: caps
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L123-L130">}}
 {{< /tab >}}
-{{< tab header="Python" >}}
+{{% tab header="Python" %}}
+```python
 caps = {}
 caps['browserName'] = 'firefox'
 caps['platform'] = 'Windows 10'
@@ -92,12 +95,15 @@ caps['version'] = '92'
 caps['build'] = my_test_build
 caps['name'] = my_test_name
 driver = webdriver.Remote(cloud_url, desired_capabilities=caps)
-{{< /tab >}}
+````
+{{% /tab %}}
 {{< /tabpane >}}
 
 #### After
-{{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
+{{< tabpane text=true >}}
+{{< badge-examples >}}
+{{% tab header="Java" %}}
+```java
 FirefoxOptions browserOptions = new FirefoxOptions();
 browserOptions.setPlatformName("Windows 10");
 browserOptions.setBrowserVersion("92");
@@ -106,8 +112,10 @@ cloudOptions.put("build", myTestBuild);
 cloudOptions.put("name", myTestName);
 browserOptions.setCapability("cloud:options", cloudOptions);
 WebDriver driver = new RemoteWebDriver(new URL(cloudUrl), browserOptions);
-{{< /tab >}}
-{{< tab header="JavaScript" >}}
+```
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+```javascript
 capabilities = {
   browserName: 'firefox',
   browserVersion: '92',
@@ -117,8 +125,10 @@ capabilities = {
      name: myTestName,
   }
 }
-{{< /tab >}}
-{{< tab header="CSharp" >}}
+````
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+```CSharp
 var browserOptions = new FirefoxOptions();
 browserOptions.PlatformName = "Windows 10";
 browserOptions.BrowserVersion = "92";
@@ -127,18 +137,13 @@ cloudOptions.Add("build", myTestBuild);
 cloudOptions.Add("name", myTestName);
 browserOptions.AddAdditionalOption("cloud:options", cloudOptions);
 var driver = new RemoteWebDriver(new Uri(CloudURL), browserOptions);
-{{< /tab >}}
+```
+{{% /tab %}}
 {{< tab header="Ruby" >}}
-options = Selenium::WebDriver::Options.firefox
-options.browser_version = 'latest'
-options.platform_name = 'Windows 10'
-cloud_options = {}
-cloud_options[:build] = my_test_build
-cloud_options[:name] = my_test_name
-options.add_option('cloud:options', cloud_options)
-driver = Selenium::WebDriver.for :remote, url: cloud_url, capabilities: options
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L38-L47">}}
 {{< /tab >}}
-{{< tab header="Python" >}}
+{{% tab header="Python" %}}
+```python
 from selenium.webdriver.firefox.options import Options as FirefoxOptions
 options = FirefoxOptions()
 options.browser_version = '92'
@@ -148,7 +153,8 @@ cloud_options['build'] = my_test_build
 cloud_options['name'] = my_test_name
 options.set_capability('cloud:options', cloud_options)
 driver = webdriver.Remote(cloud_url, options=options)
-{{< /tab >}}
+```
+{{% /tab %}}
 {{< /tabpane >}}
 
 ### Javaで要素ユーティリティメソッドを検索する
diff --git a/website_and_docs/content/documentation/webdriver/troubleshooting/upgrade_to_selenium_4.pt-br.md b/website_and_docs/content/documentation/webdriver/troubleshooting/upgrade_to_selenium_4.pt-br.md
index 589ff86d1a61..6a911747a91c 100644
--- a/website_and_docs/content/documentation/webdriver/troubleshooting/upgrade_to_selenium_4.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/troubleshooting/upgrade_to_selenium_4.pt-br.md
@@ -53,24 +53,30 @@ Por exemplo, se o seu fornecedor de nuvem usa os recursos `build` e `name` para
 envolvê-los em um bloco `cloud: options` (verifique com seu fornecedor de nuvem o prefixo apropriado).
 
 #### Antes 
-{{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
+{{< tabpane text=true >}}
+{{< badge-examples >}}
+{{% tab header="Java" %}}
+```java
 DesiredCapabilities caps = DesiredCapabilities.firefox();
 caps.setCapability("platform", "Windows 10");
 caps.setCapability("version", "92");
 caps.setCapability("build", myTestBuild);
 caps.setCapability("name", myTestName);
 WebDriver driver = new RemoteWebDriver(new URL(cloudUrl), caps);
-{{< /tab >}}
-{{< tab header="JavaScript" >}}
+```
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+```javascript
 caps = {};
 caps['browserName'] = 'Firefox';
 caps['platform'] = 'Windows 10';
 caps['version'] = '92';
 caps['build'] = myTestBuild;
 caps['name'] = myTestName;
-{{< /tab >}}
-{{< tab header="CSharp" >}}
+```
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+```CSharp
 DesiredCapabilities caps = new DesiredCapabilities();
 caps.SetCapability("browserName", "firefox");
 caps.SetCapability("platform", "Windows 10");
@@ -78,16 +84,13 @@ caps.SetCapability("version", "92");
 caps.SetCapability("build", myTestBuild);
 caps.SetCapability("name", myTestName);
 var driver = new RemoteWebDriver(new Uri(CloudURL), caps);
-{{< /tab >}}
+```
+{{% /tab %}}
 {{< tab header="Ruby" >}}
-caps = Selenium::WebDriver::Remote::Capabilities.firefox
-caps[:platform] = 'Windows 10'
-caps[:version] = '92'
-caps[:build] = my_test_build
-caps[:name] = my_test_name
-driver = Selenium::WebDriver.for :remote, url: cloud_url, desired_capabilities: caps
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L123-L130">}}
 {{< /tab >}}
-{{< tab header="Python" >}}
+{{% tab header="Python" %}}
+```python
 caps = {}
 caps['browserName'] = 'firefox'
 caps['platform'] = 'Windows 10'
@@ -95,12 +98,15 @@ caps['version'] = '92'
 caps['build'] = my_test_build
 caps['name'] = my_test_name
 driver = webdriver.Remote(cloud_url, desired_capabilities=caps)
-{{< /tab >}}
+````
+{{% /tab %}}
 {{< /tabpane >}}
 
 #### Depois
-{{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
+{{< tabpane text=true >}}
+{{< badge-examples >}}
+{{% tab header="Java" %}}
+```java
 FirefoxOptions browserOptions = new FirefoxOptions();
 browserOptions.setPlatformName("Windows 10");
 browserOptions.setBrowserVersion("92");
@@ -109,8 +115,10 @@ cloudOptions.put("build", myTestBuild);
 cloudOptions.put("name", myTestName);
 browserOptions.setCapability("cloud:options", cloudOptions);
 WebDriver driver = new RemoteWebDriver(new URL(cloudUrl), browserOptions);
-{{< /tab >}}
-{{< tab header="JavaScript" >}}
+```
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+```javascript
 capabilities = {
   browserName: 'firefox',
   browserVersion: '92',
@@ -120,8 +128,10 @@ capabilities = {
      name: myTestName,
   }
 }
-{{< /tab >}}
-{{< tab header="CSharp" >}}
+````
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+```CSharp
 var browserOptions = new FirefoxOptions();
 browserOptions.PlatformName = "Windows 10";
 browserOptions.BrowserVersion = "92";
@@ -130,18 +140,13 @@ cloudOptions.Add("build", myTestBuild);
 cloudOptions.Add("name", myTestName);
 browserOptions.AddAdditionalOption("cloud:options", cloudOptions);
 var driver = new RemoteWebDriver(new Uri(CloudURL), browserOptions);
-{{< /tab >}}
+```
+{{% /tab %}}
 {{< tab header="Ruby" >}}
-options = Selenium::WebDriver::Options.firefox
-options.browser_version = 'latest'
-options.platform_name = 'Windows 10'
-cloud_options = {}
-cloud_options[:build] = my_test_build
-cloud_options[:name] = my_test_name
-options.add_option('cloud:options', cloud_options)
-driver = Selenium::WebDriver.for :remote, url: cloud_url, capabilities: options
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L38-L47">}}
 {{< /tab >}}
-{{< tab header="Python" >}}
+{{% tab header="Python" %}}
+```python
 from selenium.webdriver.firefox.options import Options as FirefoxOptions
 options = FirefoxOptions()
 options.browser_version = '92'
@@ -151,7 +156,8 @@ cloud_options['build'] = my_test_build
 cloud_options['name'] = my_test_name
 options.set_capability('cloud:options', cloud_options)
 driver = webdriver.Remote(cloud_url, options=options)
-{{< /tab >}}
+```
+{{% /tab %}}
 {{< /tabpane >}}
 
 ### Utilitário para encontrar elemento (s) no Java
diff --git a/website_and_docs/content/documentation/webdriver/troubleshooting/upgrade_to_selenium_4.zh-cn.md b/website_and_docs/content/documentation/webdriver/troubleshooting/upgrade_to_selenium_4.zh-cn.md
index 090c72929657..5b52f3bab2ba 100644
--- a/website_and_docs/content/documentation/webdriver/troubleshooting/upgrade_to_selenium_4.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/troubleshooting/upgrade_to_selenium_4.zh-cn.md
@@ -64,24 +64,30 @@ Selenium 4 移除了对遗留协议的支持,
 (请与您的云供应商联系以获取适当的前缀). 
 
 #### Before 
-{{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
+{{< tabpane text=true >}}
+{{< badge-examples >}}
+{{% tab header="Java" %}}
+```java
 DesiredCapabilities caps = DesiredCapabilities.firefox();
 caps.setCapability("platform", "Windows 10");
 caps.setCapability("version", "92");
 caps.setCapability("build", myTestBuild);
 caps.setCapability("name", myTestName);
 WebDriver driver = new RemoteWebDriver(new URL(cloudUrl), caps);
-{{< /tab >}}
-{{< tab header="JavaScript" >}}
+```
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+```javascript
 caps = {};
 caps['browserName'] = 'Firefox';
 caps['platform'] = 'Windows 10';
 caps['version'] = '92';
 caps['build'] = myTestBuild;
 caps['name'] = myTestName;
-{{< /tab >}}
-{{< tab header="CSharp" >}}
+```
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+```CSharp
 DesiredCapabilities caps = new DesiredCapabilities();
 caps.SetCapability("browserName", "firefox");
 caps.SetCapability("platform", "Windows 10");
@@ -89,16 +95,13 @@ caps.SetCapability("version", "92");
 caps.SetCapability("build", myTestBuild);
 caps.SetCapability("name", myTestName);
 var driver = new RemoteWebDriver(new Uri(CloudURL), caps);
-{{< /tab >}}
+```
+{{% /tab %}}
 {{< tab header="Ruby" >}}
-caps = Selenium: : WebDriver: : Remote: : Capabilities.firefox
-caps[: platform] = 'Windows 10'
-caps[: version] = '92'
-caps[: build] = my_test_build
-caps[: name] = my_test_name
-driver = Selenium: : WebDriver.for : remote, url:  cloud_url, desired_capabilities:  caps
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L123-L130">}}
 {{< /tab >}}
-{{< tab header="Python" >}}
+{{% tab header="Python" %}}
+```python
 caps = {}
 caps['browserName'] = 'firefox'
 caps['platform'] = 'Windows 10'
@@ -106,53 +109,55 @@ caps['version'] = '92'
 caps['build'] = my_test_build
 caps['name'] = my_test_name
 driver = webdriver.Remote(cloud_url, desired_capabilities=caps)
-{{< /tab >}}
+````
+{{% /tab %}}
 {{< /tabpane >}}
 
 #### After
-{{< tabpane langEqualsHeader=true >}}
-{{< tab header="Java" >}}
+{{< tabpane text=true >}}
+{{< badge-examples >}}
+{{% tab header="Java" %}}
+```java
 FirefoxOptions browserOptions = new FirefoxOptions();
 browserOptions.setPlatformName("Windows 10");
 browserOptions.setBrowserVersion("92");
 Map<String, Object> cloudOptions = new HashMap<>();
 cloudOptions.put("build", myTestBuild);
 cloudOptions.put("name", myTestName);
-browserOptions.setCapability("cloud: options", cloudOptions);
+browserOptions.setCapability("cloud:options", cloudOptions);
 WebDriver driver = new RemoteWebDriver(new URL(cloudUrl), browserOptions);
-{{< /tab >}}
-{{< tab header="JavaScript" >}}
+```
+{{% /tab %}}
+{{% tab header="JavaScript" %}}
+```javascript
 capabilities = {
-  browserName:  'firefox',
-  browserVersion:  '92',
-  platformName:  'Windows 10',
-  'cloud: options':  {
-     build:  myTestBuild,
-     name:  myTestName,
+  browserName: 'firefox',
+  browserVersion: '92',
+  platformName: 'Windows 10',
+  'cloud:options': {
+     build: myTestBuild,
+     name: myTestName,
   }
 }
-{{< /tab >}}
-{{< tab header="CSharp" >}}
+````
+{{% /tab %}}
+{{% tab header="CSharp" %}}
+```CSharp
 var browserOptions = new FirefoxOptions();
 browserOptions.PlatformName = "Windows 10";
 browserOptions.BrowserVersion = "92";
 var cloudOptions = new Dictionary<string, object>();
 cloudOptions.Add("build", myTestBuild);
 cloudOptions.Add("name", myTestName);
-browserOptions.AddAdditionalOption("cloud: options", cloudOptions);
+browserOptions.AddAdditionalOption("cloud:options", cloudOptions);
 var driver = new RemoteWebDriver(new Uri(CloudURL), browserOptions);
-{{< /tab >}}
+```
+{{% /tab %}}
 {{< tab header="Ruby" >}}
-options = Selenium: : WebDriver: : Options.firefox
-options.browser_version = 'latest'
-options.platform_name = 'Windows 10'
-cloud_options = {}
-cloud_options[: build] = my_test_build
-cloud_options[: name] = my_test_name
-options.add_option('cloud: options', cloud_options)
-driver = Selenium: : WebDriver.for : remote, url:  cloud_url, capabilities:  options
+{{< gh-codeblock path="/examples/ruby/spec/drivers/options_spec.rb#L38-L47">}}
 {{< /tab >}}
-{{< tab header="Python" >}}
+{{% tab header="Python" %}}
+```python
 from selenium.webdriver.firefox.options import Options as FirefoxOptions
 options = FirefoxOptions()
 options.browser_version = '92'
@@ -160,9 +165,10 @@ options.platform_name = 'Windows 10'
 cloud_options = {}
 cloud_options['build'] = my_test_build
 cloud_options['name'] = my_test_name
-options.set_capability('cloud: options', cloud_options)
+options.set_capability('cloud:options', cloud_options)
 driver = webdriver.Remote(cloud_url, options=options)
-{{< /tab >}}
+```
+{{% /tab %}}
 {{< /tabpane >}}
 
 ### 在 Java 中查找元素工具方法
diff --git a/website_and_docs/content/documentation/webdriver/waits.en.md b/website_and_docs/content/documentation/webdriver/waits.en.md
index 82a5bf52d196..75a0ff3528ef 100644
--- a/website_and_docs/content/documentation/webdriver/waits.en.md
+++ b/website_and_docs/content/documentation/webdriver/waits.en.md
@@ -67,19 +67,19 @@ Solving our example with an implicit wait looks like this:
 
 {{< tabpane text=true >}}
   {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L50" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L50" >}}
   {{< /tab >}}
   {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/waits/test_waits.py#L27" >}}
+{{< gh-codeblock path="/examples/python/tests/waits/test_waits.py#L27" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L39" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L39" >}}
   {{< /tab >}}
   {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/waits/waits_spec.rb#L28" >}}
+{{< gh-codeblock path="/examples/ruby/spec/waits/waits_spec.rb#L28" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/waits/waits.spec.js#L37-L41" >}}
+{{< gh-codeblock path="/examples/javascript/test/waits/waits.spec.js#L39" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -92,7 +92,7 @@ _Explicit waits_ are loops added to the code that poll the application
 for a specific condition to evaluate as true before it exits the loop and
 continues to the next command in the code. If the condition is not met before a designated timeout value, 
 the code will give a timeout error. Since there are many ways for the application not to be in the desired state,
-so explicit waits are a great choice to specify the exact condition to wait for
+explicit waits are a great choice to specify the exact condition to wait for
 in each place it is needed. 
 Another nice feature is that, by default, the Selenium Wait class automatically waits for the designated element to exist.
 
@@ -100,22 +100,22 @@ Another nice feature is that, by default, the Selenium Wait class automatically
   {{% tab header="Java" %}}
 This example shows the condition being waited for as a _lambda_. Java also supports
 [Expected Conditions]({{< ref "support_features/expected_conditions" >}})
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L67-L68" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L67-L68" >}}
   {{% /tab %}}
   {{% tab header="Python" %}}
 This example shows the condition being waited for as a _lambda_. Python also supports
 [Expected Conditions]({{< ref "support_features/expected_conditions" >}})
-{{< gh-codeblock path="examples/python/tests/waits/test_waits.py#L41-L42" >}}
+{{< gh-codeblock path="/examples/python/tests/waits/test_waits.py#L41-L42" >}}
   {{% /tab %}}
   {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L56-L57" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L56-L57" >}}
   {{< /tab >}}
   {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/waits/waits_spec.rb#L42-L43" >}}
+{{< gh-codeblock path="/examples/ruby/spec/waits/waits_spec.rb#L42-L43" >}}
   {{< /tab >}}
   {{% tab header="JavaScript" %}}
 JavaScript also supports [Expected Conditions]({{< ref "support_features/expected_conditions" >}})
-{{< gh-codeblock path="examples/javascript/test/waits/waits.spec.js#L47-L51" >}}
+{{< gh-codeblock path="/examples/javascript/test/waits/waits.spec.js#L52" >}}
   {{% /tab %}}
   {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -139,16 +139,16 @@ make sure that the code returns `true` when it is successful):
 {{< tabpane text=true >}}
   {{% tab header="Java" %}}
 The easiest way to customize Waits in Java is to use the `FluentWait` class:
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L82-L92" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L82-L92" >}}
   {{% /tab %}}
   {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/waits/test_waits.py#L53-L55" >}}
+{{< gh-codeblock path="/examples/python/tests/waits/test_waits.py#L53-L55" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L70-L79" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L70-L79" >}}
   {{< /tab >}}
   {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/waits/waits_spec.rb#L54-L60" >}}
+{{< gh-codeblock path="/examples/ruby/spec/waits/waits_spec.rb#L54-L60" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/waits.ja.md b/website_and_docs/content/documentation/webdriver/waits.ja.md
index 9799e0604f8c..af33834feaea 100644
--- a/website_and_docs/content/documentation/webdriver/waits.ja.md
+++ b/website_and_docs/content/documentation/webdriver/waits.ja.md
@@ -67,19 +67,19 @@ Solving our example with an implicit wait looks like this:
 
 {{< tabpane text=true >}}
   {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L50" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L50" >}}
   {{< /tab >}}
   {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/waits/test_waits.py#L27" >}}
+{{< gh-codeblock path="/examples/python/tests/waits/test_waits.py#L27" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L39" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L39" >}}
   {{< /tab >}}
   {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/waits/waits_spec.rb#L28" >}}
+{{< gh-codeblock path="/examples/ruby/spec/waits/waits_spec.rb#L28" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/waits/waits.spec.js#L37-L41" >}}
+{{< gh-codeblock path="/examples/javascript/test/waits/waits.spec.js#L39" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -92,7 +92,7 @@ _Explicit waits_ are loops added to the code that poll the application
 for a specific condition to evaluate as true before it exits the loop and
 continues to the next command in the code. If the condition is not met before a designated timeout value,
 the code will give a timeout error. Since there are many ways for the application not to be in the desired state,
-so explicit waits are a great choice to specify the exact condition to wait for
+explicit waits are a great choice to specify the exact condition to wait for
 in each place it is needed.
 Another nice feature is that, by default, the Selenium Wait class automatically waits for the designated element to exist.
 
@@ -100,22 +100,22 @@ Another nice feature is that, by default, the Selenium Wait class automatically
   {{% tab header="Java" %}}
 This example shows the condition being waited for as a _lambda_. Java also supports
 [Expected Conditions]({{< ref "support_features/expected_conditions" >}})
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L67-L68" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L67-L68" >}}
   {{% /tab %}}
   {{% tab header="Python" %}}
 This example shows the condition being waited for as a _lambda_. Python also supports
 [Expected Conditions]({{< ref "support_features/expected_conditions" >}})
-{{< gh-codeblock path="examples/python/tests/waits/test_waits.py#L41-L42" >}}
+{{< gh-codeblock path="/examples/python/tests/waits/test_waits.py#L41-L42" >}}
   {{% /tab %}}
   {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L56-L57" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L56-L57" >}}
   {{< /tab >}}
   {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/waits/waits_spec.rb#L42-L43" >}}
+{{< gh-codeblock path="/examples/ruby/spec/waits/waits_spec.rb#L42-L43" >}}
   {{< /tab >}}
   {{% tab header="JavaScript" %}}
 JavaScript also supports [Expected Conditions]({{< ref "support_features/expected_conditions" >}})
-{{< gh-codeblock path="examples/javascript/test/waits/waits.spec.js#L47-L51" >}}
+{{< gh-codeblock path="/examples/javascript/test/waits/waits.spec.js#L52" >}}
   {{% /tab %}}
   {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -139,16 +139,16 @@ make sure that the code returns `true` when it is successful):
 {{< tabpane text=true >}}
   {{% tab header="Java" %}}
 The easiest way to customize Waits in Java is to use the `FluentWait` class:
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L82-L92" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L82-L92" >}}
   {{% /tab %}}
   {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/waits/test_waits.py#L53-L55" >}}
+{{< gh-codeblock path="/examples/python/tests/waits/test_waits.py#L53-L55" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L70-L79" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L70-L79" >}}
   {{< /tab >}}
   {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/waits/waits_spec.rb#L54-L60" >}}
+{{< gh-codeblock path="/examples/ruby/spec/waits/waits_spec.rb#L54-L60" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/waits.pt-br.md b/website_and_docs/content/documentation/webdriver/waits.pt-br.md
index 83a7f7d11a96..e5e3b47f0a08 100644
--- a/website_and_docs/content/documentation/webdriver/waits.pt-br.md
+++ b/website_and_docs/content/documentation/webdriver/waits.pt-br.md
@@ -67,19 +67,19 @@ Solving our example with an implicit wait looks like this:
 
 {{< tabpane text=true >}}
   {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L50" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L50" >}}
   {{< /tab >}}
   {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/waits/test_waits.py#L27" >}}
+{{< gh-codeblock path="/examples/python/tests/waits/test_waits.py#L27" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L39" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L39" >}}
   {{< /tab >}}
   {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/waits/waits_spec.rb#L28" >}}
+{{< gh-codeblock path="/examples/ruby/spec/waits/waits_spec.rb#L28" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/waits/waits.spec.js#L37-L41" >}}
+{{< gh-codeblock path="/examples/javascript/test/waits/waits.spec.js#L39" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -92,7 +92,7 @@ _Explicit waits_ are loops added to the code that poll the application
 for a specific condition to evaluate as true before it exits the loop and
 continues to the next command in the code. If the condition is not met before a designated timeout value,
 the code will give a timeout error. Since there are many ways for the application not to be in the desired state,
-so explicit waits are a great choice to specify the exact condition to wait for
+explicit waits are a great choice to specify the exact condition to wait for
 in each place it is needed.
 Another nice feature is that, by default, the Selenium Wait class automatically waits for the designated element to exist.
 
@@ -100,22 +100,22 @@ Another nice feature is that, by default, the Selenium Wait class automatically
   {{% tab header="Java" %}}
 This example shows the condition being waited for as a _lambda_. Java also supports
 [Expected Conditions]({{< ref "support_features/expected_conditions" >}})
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L67-L68" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L67-L68" >}}
   {{% /tab %}}
   {{% tab header="Python" %}}
 This example shows the condition being waited for as a _lambda_. Python also supports
 [Expected Conditions]({{< ref "support_features/expected_conditions" >}})
-{{< gh-codeblock path="examples/python/tests/waits/test_waits.py#L41-L42" >}}
+{{< gh-codeblock path="/examples/python/tests/waits/test_waits.py#L41-L42" >}}
   {{% /tab %}}
   {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L56-L57" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L56-L57" >}}
   {{< /tab >}}
   {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/waits/waits_spec.rb#L42-L43" >}}
+{{< gh-codeblock path="/examples/ruby/spec/waits/waits_spec.rb#L42-L43" >}}
   {{< /tab >}}
   {{% tab header="JavaScript" %}}
 JavaScript also supports [Expected Conditions]({{< ref "support_features/expected_conditions" >}})
-{{< gh-codeblock path="examples/javascript/test/waits/waits.spec.js#L47-L51" >}}
+{{< gh-codeblock path="/examples/javascript/test/waits/waits.spec.js#L52" >}}
   {{% /tab %}}
   {{< tab header="Kotlin" >}}
 {{< badge-code >}}
@@ -139,16 +139,16 @@ make sure that the code returns `true` when it is successful):
 {{< tabpane text=true >}}
   {{% tab header="Java" %}}
 The easiest way to customize Waits in Java is to use the `FluentWait` class:
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L82-L92" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L82-L92" >}}
   {{% /tab %}}
   {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/waits/test_waits.py#L53-L55" >}}
+{{< gh-codeblock path="/examples/python/tests/waits/test_waits.py#L53-L55" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L70-L79" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L70-L79" >}}
   {{< /tab >}}
   {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/waits/waits_spec.rb#L54-L60" >}}
+{{< gh-codeblock path="/examples/ruby/spec/waits/waits_spec.rb#L54-L60" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
 {{< badge-code >}}
diff --git a/website_and_docs/content/documentation/webdriver/waits.zh-cn.md b/website_and_docs/content/documentation/webdriver/waits.zh-cn.md
index e857ff78533b..7aee4f2b557f 100644
--- a/website_and_docs/content/documentation/webdriver/waits.zh-cn.md
+++ b/website_and_docs/content/documentation/webdriver/waits.zh-cn.md
@@ -1,154 +1,174 @@
 ---
-title: "等待"
+title: "等待策略"
 linkTitle: "等待"
 weight: 6
 aliases: ["/documentation/zh-cn/webdriver/waits/"]
 ---
 
-Perhaps the most common challenge for browser automation is ensuring
-that the web application is in a state to execute a particular
-Selenium command as desired. The processes often end up in
-a _race condition_ where sometimes the browser gets into the right
-state first (things work as intended) and sometimes the Selenium code
-executes first (things do not work as intended). This is one of the
-primary causes of _flaky tests_.
-
-All navigation commands wait for a specific `readyState` value
-based on the [page load strategy]({{< ref "drivers/options#pageloadstrategy" >}}) (the
-default value to wait for is `"complete"`) before the driver returns control to the code.
-The `readyState` only concerns itself with loading assets defined in the HTML, 
-but loaded JavaScript assets often result in changes to the site,
-and elements that need to be interacted with may not yet be on the page
-when the code is ready to execute the next Selenium command.
-
-Similarly, in a lot of single page applications, elements get dynamically
-added to a page or change visibility based on a click.
-An element must be both present and
-[displayed]({{< ref "elements/information/#is-displayed" >}}) on the page
-in order for Selenium to interact with it.
-
-Take this page for example: https://www.selenium.dev/selenium/web/dynamic.html
-When the "Add a box!" button is clicked, a "div" element that does not exist is created.
-When the "Reveal a new input" button is clicked, a hidden text field element is displayed.
-In both cases the transition takes a couple seconds.
-If the Selenium code is to click one of these buttons and interact with the resulting element,
-it will do so before that element is ready and fail.
-
-The first solution many people turn to is adding a sleep statement to
-pause the code execution for a set period of time.
-Because the code can't know exactly how long it needs to wait, this
-can fail when it doesn't sleep long enough. Alternately, if the value is set too high
-and a sleep statement is added in every place it is needed, the duration of
-the session can become prohibitive.
-
-Selenium provides two different mechanisms for synchronization that are better.
-
-
-## Implicit waits
-Selenium has a built-in way to automatically wait for elements called an _implicit wait_.
-An implicit wait value can be set either with the [timeouts]({{< ref "drivers/options#timeouts" >}})
-capability in the browser options, or with a driver method (as shown below).
-
-This is a global setting that applies to every element location call for the entire session.
-The default value is `0`, which means that if the element is not found, it will
-immediately return an error. If an implicit wait is set, the driver will wait for the 
-duration of the provided value before returning the error. Note that as soon as the 
-element is located, the driver will return the element reference and the code will continue executing, 
-so a larger implicit wait value won't necessarily increase the duration of the session.
-
-*Warning:*
-Do not mix implicit and explicit waits.
-Doing so can cause unpredictable wait times.
-For example, setting an implicit wait of 10 seconds
-and an explicit wait of 15 seconds
-could cause a timeout to occur after 20 seconds.
-
-Solving our example with an implicit wait looks like this:
+
+或许浏览器自动化面临的最常见挑战在于,
+确保网络应用程序处于能够按预期执行特定 Selenium 命令的状态. 
+这些过程常常陷入一种 _竞态条件_ , 
+有时浏览器会先达到正确状态 (一切按预期运行) , 
+有时 Selenium 代码会先执行 (一切未按预期运行) . 
+这是导致 _不稳定测试_ 的主要原因之一. 
+
+
+所有导航命令都会等待特定基于 [页面加载策略]({{< ref "drivers/options#pageloadstrategy">}}) 的值 `readyState` 
+ (默认等待的值为 `"complete"` ) , 
+然后驱动程序才会将控制权交还给代码. 
+`readyState`  仅关注 HTML 中定义的资源加载, 
+但加载的 JavaScript 资源常常会导致网站发生变化, 
+而当代码准备执行下一个 Selenium 命令时, 
+需要交互的元素可能尚未出现在页面上. 
+
+
+同样, 在许多单页应用程序中, 
+元素会根据点击操作动态添加到页面上或改变可见性.  
+对于 Selenium 能够与之交互, 
+该元素必须既存在于页面上又处于[displayed]({{< ref "elements/information/#is-displayed">}}) 状态. 
+
+
+以这个页面为例: https://www.selenium.dev/selenium/web/dynamic.html 
+当点击 "Add a box!" 按钮时, 
+会创建一个原本不存在的 "div" 元素.  
+当点击 "Reveal a new input" 按钮时, 
+一个隐藏的文本字段元素会被显示出来.  
+在这两种情况下, 过渡都需要几秒钟.  
+如果 Selenium 代码要点击其中一个按钮并与生成的元素进行交互,  
+它会在该元素准备好之前就执行操作, 从而导致失败. 
+
+
+许多人首先想到的解决办法是在代码中添加一个睡眠语句, 
+让代码暂停执行一段设定的时间. 
+由于代码无法确切知道需要等待多久, 
+如果设置的睡眠时间不够长, 
+这种方法可能会失败. 
+相反, 如果睡眠时间设置得过高, 并且在每个需要的地方都添加睡眠语句, 
+那么会话的持续时间可能会变得难以接受. 
+
+Selenium 提供了更好的两种不同的同步机制, 
+
+
+## 隐式等待
+Selenium 内置了一种自动等待元素出现的方式, 称为 _隐式等待_ .  
+隐式等待的值可以通过浏览器选项中的 [timeouts]({{< ref "drivers/options#timeouts">}}) 设置来设定, 
+也可以通过驱动程序的方法来设定 (如下所示) . 
+
+这是一个全局设置, 适用于整个会话期间的每个元素定位调用. 
+默认值为 `0` , 
+这意味着如果未找到元素, 
+将立即返回错误. 
+如果设置了隐式等待, 
+驱动程序将在返回错误之前等待所提供的时长. 
+请注意, 一旦定位到元素, 
+驱动程序将返回元素引用, 
+代码将继续执行, 
+因此较大的隐式等待值不一定增加会话的持续时间. 
+
+*警告:*
+请勿混合使用隐式等待和显式等待.  
+这样做可能会导致等待时间不可预测. 
+例如, 设置 10 秒的隐式等待和 15 秒的显式等待,  
+可能会导致在 20 秒后发生超时. 
+
+使用隐式等待解决我们的示例代码如下: 
+
 
 {{< tabpane text=true >}}
   {{< tab header="Java" >}}
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L50" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L50" >}}
   {{< /tab >}}
   {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/waits/test_waits.py#L27" >}}
+{{< gh-codeblock path="/examples/python/tests/waits/test_waits.py#L27" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L39" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L39" >}}
   {{< /tab >}}
   {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/waits/waits_spec.rb#L28" >}}
+{{< gh-codeblock path="/examples/ruby/spec/waits/waits_spec.rb#L28" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
-{{< gh-codeblock path="examples/javascript/test/waits/waits.spec.js#L37-L41" >}}
+{{< gh-codeblock path="/examples/javascript/test/waits/waits.spec.js#L39" >}}
   {{< /tab >}}
   {{< tab header="Kotlin" >}}
 {{< badge-code >}}
   {{< /tab >}}
 {{< /tabpane >}}
 
-## Explicit waits
 
-_Explicit waits_ are loops added to the code that poll the application
-for a specific condition to evaluate as true before it exits the loop and
-continues to the next command in the code. If the condition is not met before a designated timeout value,
-the code will give a timeout error. Since there are many ways for the application not to be in the desired state,
-so explicit waits are a great choice to specify the exact condition to wait for
-in each place it is needed.
-Another nice feature is that, by default, the Selenium Wait class automatically waits for the designated element to exist.
+
+## 显式等待
+
+_显式等待_ 是在代码中添加的, 用于轮询应用程序的循环, 
+直到特定条件评估为真时, 才退出循环并继续执行代码中的下一个命令. 
+如果在指定的超时值之前条件未满足, 
+代码将给出超时错误. 
+由于应用程序未处于所需状态的方式有很多, 
+因此显式等待是为每个需要等待的地方指定确切等待条件的绝佳选择.  
+另一个不错的特性是, 默认情况下, 
+Selenium 等待类会自动等待指定的元素存在. 
+
+
 
 {{< tabpane text=true >}}
   {{% tab header="Java" %}}
 This example shows the condition being waited for as a _lambda_. Java also supports
 [Expected Conditions]({{< ref "support_features/expected_conditions" >}})
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L67-L68" >}}
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L67-L68" >}}
   {{% /tab %}}
   {{% tab header="Python" %}}
 This example shows the condition being waited for as a _lambda_. Python also supports
 [Expected Conditions]({{< ref "support_features/expected_conditions" >}})
-{{< gh-codeblock path="examples/python/tests/waits/test_waits.py#L41-L42" >}}
+{{< gh-codeblock path="/examples/python/tests/waits/test_waits.py#L41-L42" >}}
   {{% /tab %}}
   {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L56-L57" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L56-L57" >}}
   {{< /tab >}}
   {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/waits/waits_spec.rb#L42-L43" >}}
+{{< gh-codeblock path="/examples/ruby/spec/waits/waits_spec.rb#L42-L43" >}}
   {{< /tab >}}
   {{% tab header="JavaScript" %}}
 JavaScript also supports [Expected Conditions]({{< ref "support_features/expected_conditions" >}})
-{{< gh-codeblock path="examples/javascript/test/waits/waits.spec.js#L47-L51" >}}
+{{< gh-codeblock path="/examples/javascript/test/waits/waits.spec.js#L52" >}}
   {{% /tab %}}
   {{< tab header="Kotlin" >}}
 {{< badge-code >}}
   {{< /tab >}}
 {{< /tabpane >}}
 
-### Customization
 
-The Wait class can be instantiated with various parameters that will change how the conditions are evaluated.
 
-This can include:
-* Changing how often the code is evaluated (polling interval)
-* Specifying which exceptions should be handled automatically
-* Changing the total timeout length
-* Customizing the timeout message
+### 定制
+
+Wait 类可以通过各种参数进行实例化, 
+这些参数会改变条件的评估方式. 
+
+这可以包括：
+* 更改代码的评估频率 (轮询间隔) 
+* 指定哪些异常应自动处理
+* 更改总超时时长
+* 自定义超时消息
+
+例如, 如果默认情况下对 _元素不可交互_ 错误进行重试, 
+那么我们可以在执行中的代码里的某个方法内添加一个操作
+ (我们只需要确保代码在成功时返回  `true`  即可)：
+
 
-For instance, if the _element not interactable_ error is retried by default, then we can
-add an action on a method inside the code getting executed (we just need to 
-make sure that the code returns `true` when it is successful):
 
 {{< tabpane text=true >}}
   {{% tab header="Java" %}}
-The easiest way to customize Waits in Java is to use the `FluentWait` class:
-{{< gh-codeblock path="examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L82-L92" >}}
+The easiest way to customize Waits in Java is to use the `FluentWait` class: 
+{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/waits/WaitsTest.java#L82-L92" >}}
   {{% /tab %}}
   {{< tab header="Python" >}}
-{{< gh-codeblock path="examples/python/tests/waits/test_waits.py#L53-L55" >}}
+{{< gh-codeblock path="/examples/python/tests/waits/test_waits.py#L53-L55" >}}
   {{< /tab >}}
   {{< tab header="CSharp" >}}
-{{< gh-codeblock path="examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L70-L79" >}}
+{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Waits/WaitsTest.cs#L70-L79" >}}
   {{< /tab >}}
   {{< tab header="Ruby" >}}
-{{< gh-codeblock path="examples/ruby/spec/waits/waits_spec.rb#L54-L60" >}}
+{{< gh-codeblock path="/examples/ruby/spec/waits/waits_spec.rb#L54-L60" >}}
   {{< /tab >}}
   {{< tab header="JavaScript" >}}
 {{< badge-code >}}
@@ -157,3 +177,4 @@ The easiest way to customize Waits in Java is to use the `FluentWait` class:
 {{< badge-code >}}
   {{< /tab >}}
 {{< /tabpane >}}
+
diff --git a/website_and_docs/content/ecosystem/_index.html b/website_and_docs/content/ecosystem/_index.html
index 91babb344c31..0e6cb5de1785 100644
--- a/website_and_docs/content/ecosystem/_index.html
+++ b/website_and_docs/content/ecosystem/_index.html
@@ -2,33 +2,33 @@
 title: Ecosystem
 linkTitle: ecosystem
 aliases:
-          [
-            "/pt-br/ecosystem/",
-            "/zh-cn/ecosystem/",
-            "/ja/ecosystem/",
-            "/other/ecosystem/",
-            "/documentation/en/getting_started_with_webdriver/third_party_drivers_and_plugins/",
-            "/documentation/ja/getting_started_with_webdriver/third_party_drivers_and_plugins/",
-            "/documentation/pt-br/getting_started_with_webdriver/third_party_drivers_and_plugins/",
-            "/documentation/zh-cn/getting_started_with_webdriver/third_party_drivers_and_plugins/"
-          ]
+  [
+    "/pt-br/ecosystem/",
+    "/zh-cn/ecosystem/",
+    "/ja/ecosystem/",
+    "/other/ecosystem/",
+    "/documentation/en/getting_started_with_webdriver/third_party_drivers_and_plugins/",
+    "/documentation/ja/getting_started_with_webdriver/third_party_drivers_and_plugins/",
+    "/documentation/pt-br/getting_started_with_webdriver/third_party_drivers_and_plugins/",
+    "/documentation/zh-cn/getting_started_with_webdriver/third_party_drivers_and_plugins/",
+  ]
 ---
+
 {{< blocks/section color="selenium-purple" height="min" >}}
-<div class="mx-auto text-center p-4">
-	<h1 class="d-1">Ecosystem</h1>
-	<p class="lead mt-3 mb-0">
-    There is an ecosystem full of Open Source projects around Selenium and WebDriver, and some 
-    of them are featured on this page. Here are a number of drivers, bindings, plugins,
-    and frameworks created and maintained by third parties.
+<div class="mx-auto p-4">
+  <h1 class="d-1 text-center">Ecosystem</h1>
+  <p class="lead mt-3 mb-0">
+    The Selenium and WebDriver ecosystem includes numerous open source projects, 
+    with several highlighted on this page. This collection features various drivers, 
+    bindings, plugins, and frameworks developed and maintained by third-party contributors. 
+    If you are working on a project that would fit well in this listing, we would love to hear from you.
   </p>
 </div>
-{{< /blocks/section >}}
-
-{{% blocks/section color="selenium-yellow" %}}
+{{< /blocks/section >}} {{% blocks/section color="selenium-yellow" %}}
 
 <div class="card bg-transparent border-0">
   <div class="row no-gutters align-items-center">
-    <div class="col-md-1 text-danger ">
+    <div class="col-md-1 text-danger">
       <p class="d-1 text-center">
         <i class="fas fa-exclamation"></i>
       </p>
@@ -36,12 +36,13 @@ <h1 class="d-1">Ecosystem</h1>
     <div class="col-md-11">
       <div class="card-body">
         <p class="card-text text-dark">
-          Please note that these projects are not supported, maintained, hosted, or endorsed by the
-          Selenium project. In addition, be advised that the projects listed below are not necessarily
-          licensed under the Apache License v.2.0. Some of the projects are available under another
-          free and open source software license; others are only available under a proprietary license.
-          Any questions about projects and their license of distribution need to be raised with their
-          respective developer(s).
+          Please note that these projects are not supported, maintained, hosted,
+          or endorsed by the Selenium project. In addition, be advised that the
+          projects listed below are not necessarily licensed under the Apache
+          License v.2.0. Some of the projects are available under another free
+          and open source software license; others are only available under a
+          proprietary license. Any questions about projects and their license of
+          distribution need to be raised with their respective developer(s).
         </p>
       </div>
     </div>
@@ -57,26 +58,40 @@ <h2 id="browser-drivers">Browser Drivers</h2>
   <div class="col-sm-4 p-3">
     <div class="card h-100 bg-transparent border-0">
       <div class="card-header bg-transparent border-0 text-center py-0">
-        <img class="w-100 shadow-1-strong rounded" style="max-width: 100px;" src="/images/browsers/firefox.svg" alt="Firefox"/>
+        <img
+          class="w-100 shadow-1-strong rounded"
+          style="max-width: 100px"
+          src="/images/browsers/firefox.svg"
+          alt="Firefox"
+        />
       </div>
       <div class="card-body px-0">
         <p class="card-title fw-bold text-center h6">
-          <a href="https://github.com/mozilla/geckodriver/">
+          <a href="https://github.com/mozilla/geckodriver/" target="_blank" rel="noopener noreferrer">
             Mozilla GeckoDriver
           </a>
         </p>
         <p class="card-text text-center m-0 pb-1">
-          <a href="https://github.com/mozilla/geckodriver/releases" class="card-link">
+          <a
+            href="https://github.com/mozilla/geckodriver/releases" 
+            class="card-link" target="_blank" rel="noopener noreferrer"
+          >
             Releases
           </a>
         </p>
         <p class="card-text text-center m-0 pb-1">
-          <a href="https://github.com/mozilla/geckodriver/blob/release/CHANGES.md" class="card-link">
+          <a
+            href="https://github.com/mozilla/geckodriver/blob/release/CHANGES.md"
+            class="card-link" target="_blank" rel="noopener noreferrer"
+          >
             Changelog
           </a>
         </p>
         <p class="card-text text-center">
-          <a href="https://github.com/mozilla/geckodriver/issues" class="card-link">
+          <a
+            href="https://github.com/mozilla/geckodriver/issues"
+            class="card-link" target="_blank" rel="noopener noreferrer"
+          >
             Issue tracker
           </a>
         </p>
@@ -86,21 +101,34 @@ <h2 id="browser-drivers">Browser Drivers</h2>
   <div class="col-sm-4 p-3">
     <div class="card h-100 bg-transparent border-0">
       <div class="card-header bg-transparent border-0 text-center py-0">
-        <img class="w-100 shadow-1-strong rounded" style="max-width: 100px;" src="/images/browsers/edge.svg" alt="Edge"/>
+        <img
+          class="w-100 shadow-1-strong rounded"
+          style="max-width: 100px"
+          src="/images/browsers/edge.svg"
+          alt="Edge"
+        />
       </div>
       <div class="card-body px-0">
         <p class="card-title fw-bold text-center h6">
-          <a href="https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/">
+          <a
+            href="https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/" target="_blank" rel="noopener noreferrer"
+          >
             Microsoft EdgeDriver
           </a>
         </p>
         <p class="card-text text-center m-0 pb-1">
-          <a href="https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/#downloads" class="card-link">
+          <a
+            href="https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/#downloads" 
+            class="card-link" target="_blank" rel="noopener noreferrer"
+          >
             Releases
           </a>
         </p>
         <p class="card-text text-center">
-          <a href="https://github.com/MicrosoftEdge/EdgeWebDriver" class="card-link">
+          <a
+            href="https://github.com/MicrosoftEdge/EdgeWebDriver" 
+            class="card-link" target="_blank" rel="noopener noreferrer"
+          >
             Issue tracker
           </a>
         </p>
@@ -110,21 +138,30 @@ <h2 id="browser-drivers">Browser Drivers</h2>
   <div class="col-sm-4 p-3">
     <div class="card h-100 bg-transparent border-0">
       <div class="card-header bg-transparent border-0 text-center py-0">
-        <img class="w-100 shadow-1-strong rounded" style="max-width: 100px;" src="/images/browsers/chrome.svg" alt="Chrome"/>
+        <img
+          class="w-100 shadow-1-strong rounded"
+          style="max-width: 100px"
+          src="/images/browsers/chrome.svg"
+          alt="Chrome"
+        />
       </div>
       <div class="card-body px-0">
         <p class="card-title fw-bold text-center h6">
-          <a href="https://chromedriver.chromium.org/">
-            Google ChromeDriver
-          </a>
+          <a href="https://chromedriver.chromium.org/" target="_blank" rel="noopener noreferrer"> Google ChromeDriver </a>
         </p>
         <p class="card-text text-center m-0 pb-1">
-          <a href="https://chromedriver.chromium.org/downloads" class="card-link">
+          <a
+            href="https://chromedriver.chromium.org/downloads"
+            class="card-link" target="_blank" rel="noopener noreferrer"
+          >
             Releases and changelog
           </a>
         </p>
         <p class="card-text text-center">
-          <a href="https://bugs.chromium.org/p/chromedriver/issues/list" class="card-link">
+          <a
+            href="https://bugs.chromium.org/p/chromedriver/issues/list" target="_blank" rel="noopener noreferrer"
+            class="card-link" 
+          >
             Issue tracker
           </a>
         </p>
@@ -134,21 +171,32 @@ <h2 id="browser-drivers">Browser Drivers</h2>
   <div class="col-sm-4 p-3">
     <div class="card h-100 bg-transparent border-0">
       <div class="card-header bg-transparent border-0 text-center py-0">
-        <img class="w-100 shadow-1-strong rounded" style="max-width: 100px;" src="/images/browsers/opera.svg" alt="Opera"/>
+        <img
+          class="w-100 shadow-1-strong rounded"
+          style="max-width: 100px"
+          src="/images/browsers/opera.svg"
+          alt="Opera"
+        />
       </div>
       <div class="card-body px-0">
         <p class="card-title fw-bold text-center h6">
-          <a href="https://github.com/operasoftware/operachromiumdriver">
+          <a href="https://github.com/operasoftware/operachromiumdriver" target="_blank" rel="noopener noreferrer">
             Opera ChromiumDriver
           </a>
         </p>
         <p class="card-text text-center m-0 pb-1">
-          <a href="https://github.com/operasoftware/operachromiumdriver/releases" class="card-link">
+          <a
+            href="https://github.com/operasoftware/operachromiumdriver/releases" target="_blank" rel="noopener noreferrer"
+            class="card-link"
+          >
             Releases
           </a>
         </p>
         <p class="card-text text-center">
-          <a href="https://github.com/operasoftware/operachromiumdriver/issues" class="card-link">
+          <a
+            href="https://github.com/operasoftware/operachromiumdriver/issues" target="_blank" rel="noopener noreferrer"
+            class="card-link" target="_blank" rel="noopener noreferrer"
+          >
             Issue tracker
           </a>
         </p>
@@ -158,16 +206,23 @@ <h2 id="browser-drivers">Browser Drivers</h2>
   <div class="col-sm-4 p-3">
     <div class="card h-100 bg-transparent border-0">
       <div class="card-header bg-transparent border-0 text-center py-0">
-        <img class="w-100 shadow-1-strong rounded" style="max-width: 100px;" src="/images/browsers/safari.svg" alt="Safari"/>
+        <img
+          class="w-100 shadow-1-strong rounded"
+          style="max-width: 100px"
+          src="/images/browsers/safari.svg"
+          alt="Safari"
+        />
       </div>
       <div class="card-body px-0">
         <p class="card-title fw-bold text-center h6">
-          <a href="https://developer.apple.com/documentation/webkit/about_webdriver_for_safari">
+          <a
+            href="https://developer.apple.com/documentation/webkit/about_webdriver_for_safari" target="_blank" rel="noopener noreferrer"
+          >
             Apple SafariDriver
           </a>
         </p>
         <p class="card-text text-center">
-          <a href="https://bugreport.apple.com/" class="card-link">
+          <a href="https://bugreport.apple.com/" class="card-link" target="_blank" rel="noopener noreferrer">
             Issue tracker
           </a>
         </p>
@@ -193,9 +248,7 @@ <h2 id="language-bindings">Language Bindings</h2>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://github.com/tebeka/selenium">
-                Selenium
-              </a>
+              <a href="https://github.com/tebeka/selenium" target="_blank" rel="noopener noreferrer"> Selenium </a>
             </p>
           </th>
           <td>Go</td>
@@ -204,7 +257,7 @@ <h2 id="language-bindings">Language Bindings</h2>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://github.com/kallisti-dev/hs-webdriver">
+              <a href="https://github.com/kallisti-dev/hs-webdriver" target="_blank" rel="noopener noreferrer">
                 hs-webdriver
               </a>
             </p>
@@ -215,9 +268,7 @@ <h2 id="language-bindings">Language Bindings</h2>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://github.com/admc/wd">
-                wd
-              </a>
+              <a href="https://github.com/admc/wd" target="_blank" rel="noopener noreferrer"> wd </a>
             </p>
           </th>
           <td>JavaScript</td>
@@ -226,7 +277,7 @@ <h2 id="language-bindings">Language Bindings</h2>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://github.com/teodesian/Selenium-Remote-Driver">
+              <a href="https://github.com/teodesian/Selenium-Remote-Driver" target="_blank" rel="noopener noreferrer">
                 Selenium-Remote-Driver
               </a>
             </p>
@@ -237,7 +288,7 @@ <h2 id="language-bindings">Language Bindings</h2>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://github.com/php-webdriver/php-webdriver">
+              <a href="https://github.com/php-webdriver/php-webdriver" target="_blank" rel="noopener noreferrer">
                 php-webdriver
               </a>
             </p>
@@ -248,9 +299,7 @@ <h2 id="language-bindings">Language Bindings</h2>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://github.com/ropensci/RSelenium">
-                RSelenium
-              </a>
+              <a href="https://github.com/ropensci/RSelenium" target="_blank" rel="noopener noreferrer"> RSelenium </a>
             </p>
           </th>
           <td>R</td>
@@ -259,7 +308,7 @@ <h2 id="language-bindings">Language Bindings</h2>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://github.com/google/webdriver.dart">
+              <a href="https://github.com/google/webdriver.dart" target="_blank" rel="noopener noreferrer">
                 webdriver.dart
               </a>
             </p>
@@ -270,9 +319,7 @@ <h2 id="language-bindings">Language Bindings</h2>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://github.com/SeasideSt/Parasol">
-                Parasol
-              </a>
+              <a href="https://github.com/SeasideSt/Parasol" target="_blank" rel="noopener noreferrer"> Parasol </a>
             </p>
           </th>
           <td>Pharo Smalltalk</td>
@@ -288,18 +335,19 @@ <h2 id="language-bindings">Language Bindings</h2>
     <div class="card-body ps-0">
       <h2 class="card-title" id="frameworks">Frameworks</h2>
       <p class="card-text w-lg-75">
-        Programming languages are supported through Selenium drivers.
-        These are libraries made for each language that expose commands
-        from the Selenium API natively in the form of methods/functions.
+        Programming languages are supported through Selenium drivers. These are
+        libraries made for each language that expose commands from the Selenium
+        API natively in the form of methods/functions.
       </p>
       <p class="card-text pb-4 w-lg-75">
-        Selenium is often used for automating web applications for testing purposes,
-        but it does not include a testing framework.
-        Some testing frameworks that can be used with Selenium are listed below.
+        Selenium is often used for automating web applications for testing
+        purposes, but it does not include a testing framework. Some testing
+        frameworks that can be used with Selenium are listed below.
       </p>
     </div>
   </div>
 </div>
+
 <div class="row justify-content-center p-5 td-box--100">
   <div class="table-responsive">
     <table class="table">
@@ -314,7 +362,16 @@ <h2 class="card-title" id="frameworks">Frameworks</h2>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://github.com/AutomateThePlanet/BELLATRIX">
+              <a href="https://github.com/atata-framework/atata" target="_blank" rel="noopener noreferrer"> Atata </a>
+            </p>
+          </th>
+          <td>C#</td>
+          <td>Yevgeniy Shunevych</td>
+        </tr>
+        <tr>
+          <th scope="row">
+            <p>
+              <a href="https://github.com/AutomateThePlanet/BELLATRIX" target="_blank" rel="noopener noreferrer">
                 BELLATRIX
               </a>
             </p>
@@ -325,18 +382,27 @@ <h2 class="card-title" id="frameworks">Frameworks</h2>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://github.com/teamcapybara/capybara">
-                Capybara
+              <a href="https://github.com/BoykaFramework/boyka-framework" target="_blank" rel="noopener noreferrer">
+                Boyka Framework
               </a>
             </p>
           </th>
+          <td>Java</td>
+          <td>Wasiq Bhamla</td>
+        </tr>
+        <tr>
+          <th scope="row">
+            <p>
+              <a href="https://github.com/teamcapybara/capybara" target="_blank" rel="noopener noreferrer"> Capybara </a>
+            </p>
+          </th>
           <td>Ruby</td>
           <td>Thomas Walpole</td>
         </tr>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://github.com/Codeception/CodeceptJS">
+              <a href="https://github.com/Codeception/CodeceptJS" target="_blank" rel="noopener noreferrer">
                 CodeceptJS
               </a>
             </p>
@@ -347,7 +413,7 @@ <h2 class="card-title" id="frameworks">Frameworks</h2>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://github.com/FluentLenium/FluentLenium">
+              <a href="https://github.com/FluentLenium/FluentLenium" target="_blank" rel="noopener noreferrer">
                 FluentLenium
               </a>
             </p>
@@ -358,7 +424,7 @@ <h2 class="card-title" id="frameworks">Frameworks</h2>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://github.com/mherrmann/selenium-python-helium">
+              <a href="https://github.com/mherrmann/selenium-python-helium" target="_blank" rel="noopener noreferrer">
                 Helium
               </a>
             </p>
@@ -369,9 +435,7 @@ <h2 class="card-title" id="frameworks">Frameworks</h2>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://github.com/watir/nerodia">
-                Nerodia
-              </a>
+              <a href="https://github.com/watir/nerodia" target="_blank" rel="noopener noreferrer"> Nerodia </a>
             </p>
           </th>
           <td>Python</td>
@@ -380,9 +444,7 @@ <h2 class="card-title" id="frameworks">Frameworks</h2>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://qmetry.github.io/qaf/">
-                QAF
-              </a>
+              <a href="https://qmetry.github.io/qaf/" target="_blank" rel="noopener noreferrer"> QAF </a>
             </p>
           </th>
           <td>Java</td>
@@ -391,9 +453,7 @@ <h2 class="card-title" id="frameworks">Frameworks</h2>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://github.com/selenide/selenide">
-                Selenide
-              </a>
+              <a href="https://github.com/selenide/selenide" target="_blank" rel="noopener noreferrer"> Selenide </a>
             </p>
           </th>
           <td>Java</td>
@@ -402,7 +462,7 @@ <h2 class="card-title" id="frameworks">Frameworks</h2>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://github.com/seleniumbase/SeleniumBase">
+              <a href="https://github.com/seleniumbase/SeleniumBase" target="_blank" rel="noopener noreferrer">
                 SeleniumBase
               </a>
             </p>
@@ -413,7 +473,8 @@ <h2 class="card-title" id="frameworks">Frameworks</h2>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://github.com/robotframework/SeleniumLibrary#seleniumlibrary">
+              <a
+                href="https://github.com/robotframework/SeleniumLibrary#seleniumlibrary" target="_blank" rel="noopener noreferrer">
                 SeleniumLibrary
               </a>
             </p>
@@ -424,9 +485,7 @@ <h2 class="card-title" id="frameworks">Frameworks</h2>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://github.com/watir/watir">
-                Watir
-              </a>
+              <a href="https://github.com/watir/watir" target="_blank" rel="noopener noreferrer"> Watir </a>
             </p>
           </th>
           <td>Ruby</td>
@@ -435,7 +494,7 @@ <h2 class="card-title" id="frameworks">Frameworks</h2>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://github.com/webdriverio/webdriverio">
+              <a href="https://github.com/webdriverio/webdriverio" target="_blank" rel="noopener noreferrer">
                 WebdriverIO
               </a>
             </p>
@@ -446,7 +505,7 @@ <h2 class="card-title" id="frameworks">Frameworks</h2>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://github.com/nightwatchjs/nightwatch">
+              <a href="https://github.com/nightwatchjs/nightwatch" target="_blank" rel="noopener noreferrer">
                 Nightwatch.js
               </a>
             </p>
@@ -457,7 +516,7 @@ <h2 class="card-title" id="frameworks">Frameworks</h2>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://github.com/ShaftHQ/SHAFT_ENGINE">
+              <a href="https://github.com/ShaftHQ/SHAFT_ENGINE" target="_blank" rel="noopener noreferrer">
                 SHAFT_Engine
               </a>
             </p>
@@ -468,30 +527,85 @@ <h2 class="card-title" id="frameworks">Frameworks</h2>
         <tr>
           <th scope="row">
             <p>
-              <a href="https://github.com/vaadin/testbench">
-                TestBench
+              <a href="https://github.com/Abdelrhman-Ellithy/Ellithium" target="_blank" rel="noopener noreferrer">
+                Ellithium
               </a>
             </p>
           </th>
           <td>Java</td>
+          <td>Abdelrahman Ellithy</td>
+        </tr>
+        <tr>
+          <th scope="row">
+            <p>
+              <a href="https://github.com/vaadin/testbench" target="_blank" rel="noopener noreferrer"> TestBench </a>
+            </p>
+          </th>
+          <td>Java</td>
           <td>Vaadin</td>
         </tr>
-	<tr>
+        <tr>
           <th scope="row">
             <p>
-              <a href="https://yapoml.dev/selenium">
-                Yapoml
-              </a>
+              <a href="https://github.com/yapoml" target="_blank" rel="noopener noreferrer"> Yapoml </a>
             </p>
           </th>
           <td>C#</td>
           <td>Nikolay Borisenko</td>
         </tr>
+         <tr>
+          <th scope="row">
+            <p>
+              <a href="https://github.com/RaiderHQ/ruby_raider" target="_blank" rel="noopener noreferrer"> Ruby Raider</a>
+            </p>
+          </th>
+          <td>Ruby</td>
+          <td>Augustin Gottlieb</td>
+        </tr>
       </tbody>
     </table>
   </div>
 </div>
 
+<div class="row justify-content-left pt-5 ps-5">
+  <h2 id="aisolutions">AI Solutions</h2>
+</div>
+
+<div class="row justify-content-center p-5">
+  <div class="table-responsive">
+    <table class="table">
+      <thead>
+        <tr>
+          <th scope="col">Name</th>
+          <th scope="col">Language</th>
+          <th scope="col">Author</th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <th scope="row">
+            <p>
+              <a href="https://github.com/alumnium-hq/alumnium/" target="_blank" rel="noopener noreferrer"> Alumnium</a>
+            </p>
+          </th>
+          <td>Python</td>
+          <td>Alex Rodionov </td>
+        </tr>
+       
+        <tr>
+          <th scope="row">
+            <p>
+              <a href="https://github.com/angiejones/mcp-selenium" target="_blank" rel="noopener noreferrer"> MCP-Selenium</a>
+            </p>
+          </th>
+          <td>Javascript</td>
+          <td>Angie Jones </td>
+        </tr>
+      </tbody>
+    </table>
+  </div>
+  </div>
+  
 <div class="row justify-content-left pt-5 ps-5">
   <h2 id="tools">Tools</h2>
 </div>
@@ -499,23 +613,21 @@ <h2 id="tools">Tools</h2>
   <div class="table-responsive">
     <table class="table">
       <thead>
-      <tr>
-        <th scope="col">Name</th>
-        <th scope="col">Language</th>
-        <th scope="col">Author</th>
-      </tr>
+        <tr>
+          <th scope="col">Name</th>
+          <th scope="col">Language</th>
+          <th scope="col">Author</th>
+        </tr>
       </thead>
       <tbody>
-      <tr>
-        <th scope="row">
-          <p>
-            <a href="https://testcontainers.com/">
-              Testcontainers
-            </a>
-          </p>
-        </th>
-        <td>.NET, Java, Python, Node.js</td>
-      </tr>
+        <tr>
+          <th scope="row">
+            <p>
+              <a href="https://testcontainers.com/" target="_blank" rel="noopener noreferrer"> Testcontainers</a>
+            </p>
+          </th>
+          <td>.NET, Java, Python, Node.js</td>
+        </tr>
       </tbody>
     </table>
   </div>
diff --git a/website_and_docs/content/events/_index.html b/website_and_docs/content/events/_index.html
index b2fe400effe2..c4a78af2507b 100644
--- a/website_and_docs/content/events/_index.html
+++ b/website_and_docs/content/events/_index.html
@@ -45,18 +45,28 @@ <h2 class="card-title">Selenium Meetups</h2>
       <div class="card-body">
         <h2 class="card-title">Selenium Conference</h2>
         <p class="card-text pt-4">
-          The next flagship Selenium conference will be an in-person event held in Chicago, IL on March 28-30, 2023 The SeConf brings
-          together Selenium developers & enthusiasts from around the world to share ideas,
-          socialize, and work together on advancing the present and future success of the project.
+          The last flagship Selenium conference was held together
+          with Appium conference. It was an in-person event and was
+          held in Valencia, Spain on March 26-28, 2025. The Selenium Conference
+          and Appium Conference brought together Selenium and Appium developers & enthusiasts
+          from around the world to share ideas, socialize, and work together on
+          advancing the present and future success of the project.
         </p>
       </div>
       <div class="card-footer bg-transparent border-0">
         <div class="selenium-button-container justify-content-md-end">
-          <a href="https://seleniumconf.com/" class="selenium-button selenium text-uppercase fw-bold">
+          <a href="https://seleniumconf.com/" class="selenium-button selenium text-uppercase fw-bold" target="_blank">
             Learn more
             <i class="ps-3 fas fa-caret-right"></i>
           </a>
         </div>
+        <br>
+         <div class="selenium-button-container justify-content-md-end">
+          <a href="https://www.selenium.dev/conf-archive/" class="selenium-button selenium text-uppercase fw-bold" target="_blank">
+            Archive of Selenium Conferences
+            <i class="ps-3 fas fa-caret-right"></i>
+          </a>
+        </div>
       </div>
     </div>
   </div>
diff --git a/website_and_docs/content/getinvolved/_index.html b/website_and_docs/content/getinvolved/_index.html
index e17f55ba9c5e..8450623ea274 100644
--- a/website_and_docs/content/getinvolved/_index.html
+++ b/website_and_docs/content/getinvolved/_index.html
@@ -11,8 +11,8 @@
 ---
 
 {{< blocks/section color="selenium-orange" height="min" >}}
-<div class="mx-auto text-center p-4">
-	<h1 class="d-1">Getting Involved</h1>
+<div class="mx-auto p-4">
+	<h1 class="d-1 text-center">Getting Involved</h1>
   <p class="lead mt-3 mb-0">
     Selenium is certainly a team effort! There are several ways you can help out, whether you are a
     programmer, designer, QA engineer, writer, project manager, or just willing to help. If you are
diff --git a/website_and_docs/content/history/_index.html b/website_and_docs/content/history/_index.html
index 3662c67a73f3..14f3944cccc9 100644
--- a/website_and_docs/content/history/_index.html
+++ b/website_and_docs/content/history/_index.html
@@ -128,8 +128,8 @@ <h2 class="alert-heading pb-3">Google Too!</h2>
         'higher level' API than Selenium-RC and showed lots of promise. Simon presented
         the tool at GTAC, and started work on compatibility with Selenium-RC, which gave
         rise to the obvious conclusion that the two projects should merge. Simon, at
-        Google from 2007 to 2012, and now at Facebook, gets to spend some of his time
-        making that a reality.
+        Google from 2007 to 2012, but later at Facebook, Deliveroo, and Apple, got to
+        spend some of his time making that a reality.
       </p>
     </div>
   </div>
diff --git a/website_and_docs/content/meetings/2023/joint-03-31.md b/website_and_docs/content/meetings/2023/joint-03-31.md
index 927e26058805..d56b8ea4f643 100644
--- a/website_and_docs/content/meetings/2023/joint-03-31.md
+++ b/website_and_docs/content/meetings/2023/joint-03-31.md
@@ -10,18 +10,18 @@ Technical and Project Leadership Committees).
 ### Participation
 
 People present included:
-* [Alex Rodionov](p0deje)
-* [Bill McGee](testbot206)
-* [Corina Pip](iamalittletester)
-* [Daniel Pono Takamori](pono)
-* [David Burns](AutomatedTester)
-* [Diego Molina](diemol)
-* [Maaret Pyhäjärvi](maaretp)
-* [Manoj Kumar](manoj9788)
-* [Marcus Merrell](mmerrell)
-* [Simon Stewart](shs96c)
-* [Sri Harsha](harsha509)
-* [Titus Fortner](titusfortner)
+* [Alex Rodionov]
+* [Bill McGee]
+* [Corina Pip]
+* [Daniel Pono Takamori]
+* [David Burns]
+* [Diego Molina]
+* [Maaret Pyhäjärvi]
+* [Manoj Kumar]
+* [Marcus Merrell]
+* [Simon Stewart]
+* [Sri Harsha]
+* [Titus Fortner]
 
 ## Agenda
 
@@ -79,15 +79,15 @@ editable rolling agenda and published minutes.
 
 Plan to discuss specifics of roles, community actions, marketing and training considerations in next meeting.
 
-[p0deje]: https://github.com/p0deje/
-[testbot206]: https://github.com/testbot206
-[iamalittletester]: https://github.com/iamalittletester
-[pono]: https://github.com/pono
-[AutomatedTester]: https://github.com/AutomatedTester/
-[diemol]: https://github.com/diemol/
-[maaretp]: https://github.com/maaretp
-[manoj9788]: https://github.com/manoj9788
-[mmerrell]: https://github.com/mmerrell
-[shs96c]: https://github.com/shs96c
-[harsha509]: https://github.com/harsha509/
-[titusfortner]: https://github.com/titusfortner/
+[Alex Rodionov]: https://github.com/p0deje/
+[Bill McGee]: https://github.com/testbot206
+[Corina Pip]: https://github.com/iamalittletester
+[Daniel Pono Takamori]: https://github.com/pono
+[David Burns]: https://github.com/AutomatedTester/
+[Diego Molina]: https://github.com/diemol/
+[Maaret Pyhäjärvi]: https://github.com/maaretp
+[Manoj Kumar]: https://github.com/manoj9788
+[Marcus Merrell]: https://github.com/mmerrell
+[Simon Stewart]: https://github.com/shs96c
+[Sri Harsha]: https://github.com/harsha509/
+[Titus Fortner]: https://github.com/titusfortner/
diff --git a/website_and_docs/content/project/_index.html b/website_and_docs/content/project/_index.html
index 39bb8ea90598..71da3e91f4dc 100644
--- a/website_and_docs/content/project/_index.html
+++ b/website_and_docs/content/project/_index.html
@@ -11,8 +11,8 @@
 ---
 
 {{< blocks/section color="selenium-orange" height="min" >}}
-<div class="mx-auto text-center p-4">
-	<h1 class="d-1">Project Structure and Governance</h1>
+<div class="mx-auto p-4">
+	<h1 class="d-1 text-center">Project Structure and Governance</h1>
 	<p class="lead mt-3 mb-0">
     The Selenium Project is formed by a community of users and Open Source contributors who develop, use and promote the different
     Selenium projects (IDE, Grid, WebDriver) and other related activities, with the end goal of benefiting the community as a whole.
@@ -62,6 +62,9 @@ <h2 class="card-title">Structure</h2>
       <p class="card-text w-lg-75">
         <a href="/project/structure/#ide_committers">Selenium IDE Committers</a>
       </p>
+      <p class="card-text w-lg-75">
+        <a href="/project/structure/#html_unit_committers">Selenium Html Unit Committers</a>
+      </p>
       <p class="card-text w-lg-75">
         <a href="/project/structure/#selenium_committers">Selenium Committers</a>
       </p>
diff --git a/website_and_docs/content/project/governance/_index.html b/website_and_docs/content/project/governance/_index.html
index 7b456621b372..5c342f5689c4 100644
--- a/website_and_docs/content/project/governance/_index.html
+++ b/website_and_docs/content/project/governance/_index.html
@@ -5,8 +5,8 @@
 ---
 
 {{< blocks/section color="selenium-green" height="min" >}}
-<div class="mx-auto text-center p-4">
-	<h1 class="d-1">Selenium Project Governance</h1>
+<div class="mx-auto p-4">
+	<h1 class="d-1 text-center">Selenium Project Governance</h1>
 	<p class="lead mt-3 mb-0">
     The Selenium Project wants as much as possible to operate using procedures that are fair, open, inviting, and ultimately
     good for the community. For that reason, we find it valuable to codify some of the ways that the Project goes about its
diff --git a/website_and_docs/content/project/structure/_index.html b/website_and_docs/content/project/structure/_index.html
index 3d6074ad033d..e45cc9eecb55 100644
--- a/website_and_docs/content/project/structure/_index.html
+++ b/website_and_docs/content/project/structure/_index.html
@@ -23,12 +23,12 @@ <h2>Structure</h2>
     <div id="plc" class="pb-4">
       <h3 class="pb-3">Project Leadership Committee</h3>
       <div class="row">
-        {{< gh-user "https://api.github.com/users/manoj9788" >}}
         {{< gh-user "https://api.github.com/users/AutomatedTester" >}}
-        {{< gh-user "https://api.github.com/users/mmerrell" >}}
-        {{< gh-user "https://api.github.com/users/maaretp" >}}
-        <!-- diemol is the TLC rep, starting on 30.08.2023 -->
-        {{< gh-user "https://api.github.com/users/diemol" >}} 
+        {{< gh-user "https://api.github.com/users/janetmoreno" >}}
+        {{< gh-user "https://api.github.com/users/jason-baum" >}}
+        {{< gh-user "https://api.github.com/users/manoj9788" >}}
+        <!-- diemol is the TLC rep, starting on 14.08.2025 -->
+        {{< gh-user "https://api.github.com/users/diemol" >}}
       </div>
     </div>
     <div id="tlc" class="pb-4">
@@ -41,6 +41,7 @@ <h3 class="pb-3">Technical Leadership Committee</h3>
         {{< gh-user "https://api.github.com/users/p0deje" >}}
         {{< gh-user "https://api.github.com/users/pujagani" >}}
         {{< gh-user "https://api.github.com/users/Harsha509" >}}
+        {{< gh-user "https://api.github.com/users/bonigarcia" >}}
       </div>
     </div>
     <div id="ide_committers" class="pb-4">
@@ -55,6 +56,7 @@ <h3 class="pb-3">Selenium IDE Committers</h3>
       <h3 class="pb-3">Selenium Committers</h3>
       <div class="row">
         {{< gh-user "https://api.github.com/users/adamgoucher" >}}
+        {{< gh-user "https://api.github.com/users/aguspe" >}}
         {{< gh-user "https://api.github.com/users/andreastt" >}}
         {{< gh-user "https://api.github.com/users/AutomatedTester" >}}
         {{< gh-user "https://api.github.com/users/barancev" >}}
@@ -63,6 +65,7 @@ <h3 class="pb-3">Selenium Committers</h3>
         {{< gh-user "https://api.github.com/users/corevo" >}}
         {{< gh-user "https://api.github.com/users/davehunt" >}}
         {{< gh-user "https://api.github.com/users/ddavison" >}}
+	      {{< gh-user "https://api.github.com/users/Delta456" >}}
         {{< gh-user "https://api.github.com/users/dfabulich" >}}
         {{< gh-user "https://api.github.com/users/diemol" >}}
         {{< gh-user "https://api.github.com/users/DominikDary" >}}
@@ -84,17 +87,28 @@ <h3 class="pb-3">Selenium Committers</h3>
         {{< gh-user "https://api.github.com/users/luke-hill" >}}
         {{< gh-user "https://api.github.com/users/mach6" >}}
         {{< gh-user "https://api.github.com/users/mtscout6" >}}
+	      {{< gh-user "https://api.github.com/users/navin772" >}}
         {{< gh-user "https://api.github.com/users/nirvdrum" >}}
         {{< gh-user "https://api.github.com/users/nvborisenko" >}}
+        {{< gh-user "https://api.github.com/users/paul-hammant" >}}
         {{< gh-user "https://api.github.com/users/p0deje" >}}
         {{< gh-user "https://api.github.com/users/pujagani" >}}
         {{< gh-user "https://api.github.com/users/santiycr" >}}
         {{< gh-user "https://api.github.com/users/sevaseva" >}}
+        {{< gh-user "https://api.github.com/users/shbenzer" >}}
         {{< gh-user "https://api.github.com/users/shs96c" >}}
         {{< gh-user "https://api.github.com/users/symonk" >}}
+        {{< gh-user "https://api.github.com/users/TamsilAmani" >}}
         {{< gh-user "https://api.github.com/users/titusfortner" >}}
         {{< gh-user "https://api.github.com/users/tourdedave" >}}
         {{< gh-user "https://api.github.com/users/twalpole" >}}
+        {{< gh-user "https://api.github.com/users/VietND96" >}}
+      </div>
+    </div>
+    <div id="html_unit_committers" class="pb-4">
+      <h3 class="pb-3">Selenium HtmlUnit Driver Committers</h3>
+      <div class="row">
+        {{< gh-user "https://api.github.com/users/rbri" >}}
       </div>
     </div>
     <div id="docs_site_committers" class="pb-4">
@@ -130,6 +144,7 @@ <h3 class="pb-3">Docker Selenium Committers</h3>
         {{< gh-user "https://api.github.com/users/kayabendroth" >}}
         {{< gh-user "https://api.github.com/users/mtscout6" >}}
         {{< gh-user "https://api.github.com/users/WillAbides" >}}
+        {{< gh-user "https://api.github.com/users/VietND96" >}}
       </div>
     </div>
     <div id="selenium_triagers" class="pb-4">
@@ -140,6 +155,14 @@ <h3 class="pb-3">Selenium Triagers</h3>
         {{< gh-user "https://api.github.com/users/raju249" >}}
         {{< gh-user "https://api.github.com/users/SalmonMode" >}}
         {{< gh-user "https://api.github.com/users/toddtarsi" >}}
+        {{< gh-user "https://api.github.com/users/navin772" >}}
+        {{< gh-user "https://api.github.com/users/Delta456" >}}
+      </div>
+    </div>
+    <div id="conference-committee" class="pb-4">
+      <h3 class="pb-3">Conference Committee</h3>
+      <div class="row">
+        {{< gh-user "https://api.github.com/users/mmerrell" >}}
       </div>
     </div>
   </div>
diff --git a/website_and_docs/content/sponsor/_index.html b/website_and_docs/content/sponsor/_index.html
index 32ae8e4eb9ca..f920ad3e0f75 100644
--- a/website_and_docs/content/sponsor/_index.html
+++ b/website_and_docs/content/sponsor/_index.html
@@ -5,18 +5,18 @@
 ---
 
 {{< blocks/section color="selenium-green" height="min" >}}
-<div class="mx-auto text-center p-4">
-	<h1 class="d-1">Sponsor</h1>
+<div class="mx-auto p-4">
+	<h1 class="d-1 text-center">Sponsor</h1>
 	<p class="lead mt-3 mb-0">
-    The Selenium project is a member of the Software Freedom Conservancy, a 501(c)3 
-    non-profit organization. The Conservancy has allowed us to pool organizational 
-    resources with other projects, such as Inkscape, Samba, and Wine, in order to reduce 
+    The Selenium project is a member of the Software Freedom Conservancy, a 501(c)3
+    non-profit organization. The Conservancy has allowed us to pool organizational
+    resources with other projects, such as Inkscape, Samba, and Wine, in order to reduce
     the management overhead associated with creating our own, dedicated legal entity.
 	</p>
 	<p class="lead mb-0">
-    The majority of sponsorship funds go directly towards supporting the Selenium project, 
-    such as server and software expenses. A small portion of the funds are set aside for 
-    the Conservancy to continue their work in supporting Selenium and other open source 
+    The majority of sponsorship funds go directly towards supporting the Selenium project,
+    such as server and software expenses. A small portion of the funds are set aside for
+    the Conservancy to continue their work in supporting Selenium and other open source
     initiatives.
 	</p>
 </div>
@@ -28,10 +28,10 @@ <h1 class="d-1">Sponsor</h1>
     <h2 class="alert-heading pb-3">Goals</h2>
     <div class="w-lg-75">
       <p>
-        Our goals are simple: we want to be able to continue improving Selenium -- everything from code reviews to specialized
-        bug fixes to paying hosting bills -- for the benefit of the entire Selenium user and the public at large.
-        We want sponsors to be able to make tax-deductible donations and for the project to publicly acknowledge
-        these donations.
+        Our goals are straightforward: we aim to enhance Selenium by performing tasks such as
+        code reviews, specialized bug fixes, and paying hosting bills, all for the benefit of
+        the entire Selenium user community and the public. Additionally, we want to enable
+        sponsors to make tax-deductible donations and publicly recognize these contributions.
       </p>
     </div>
   </div>
@@ -39,80 +39,162 @@ <h2 class="alert-heading pb-3">Goals</h2>
 
 <div class="row p-5">
   <div class="alert alert-orange bg-transparent ps-lg-5" role="alert">
-    <h2 class="alert-heading pb-3">Benefits of Sponsorship</h2>
+    <h2 class="alert-heading pb-3">General Benefits</h2>
     <div class="w-lg-75">
       <p>
         <ul>
           <li>
-            You (or your company) are contributing to an extraordinary open source project.
+            You (or your company) are contributing to an extraordinary open-source project.
           </li>
           <li>
-            For corporate donations that equal or are more than the Platinum level, your logo 
-            will be placed on our site for one year, as well as on the sponsor wiki pages.
+            The support of Selenium by your company will be more widely known in the Selenium
+            community, increasing community awareness of your company.
           </li>
           <li>
-            For each six months of non-sponsorship, your logo will be moved to the next lowest 
-            sponsorship level on the sponsor wiki page. If your logo is in the Bronze level 
-            when this happens it will be removed from the sponsor wiki page.
+            Our website is the first place people learn about Selenium. By having a link to your
+            website, you will be seen as a supporter of the Selenium project that our users adore.
           </li>
           <li>
-            Community consciousness of your company (and its use of Selenium) will be increased 
-            in the minds of the wider Selenium community.
+            Contributions are tax-deductible.
           </li>
           <li>
-            People find out about Selenium first from our website; having a link from our 
-            website therefore will associate you and/or your company as a supporter of the 
-            Selenium project that our users love.
+            Sponsoring us may involve participation in a Sponsors Online Summit, webinars and social
+            media cross-promotion, offering valuable exposure and engagement opportunities.
           </li>
           <li>
-            Contributions are tax-deductible.
+            Check the <a href="#support-levels">Sponsorship Levels</a> for more benefits.
           </li>
         </ul>
-      </p>
     </div>
   </div>
 </div>
 
 <div class="row td-box--100 p-5">
-  <div class="alert alert-cyan bg-transparent ps-lg-5" role="alert">
-    <h2 class="alert-heading pb-3">Logos</h2>
+  <div class="alert alert-purple bg-transparent ps-lg-5" role="alert">
+    <h2 class="alert-heading pb-3" id="support-levels">Sponsorship Levels</h2>
     <div class="w-lg-75">
       <p>
+        Below are the names and amounts associated with levels of
+        sponsorship (all values in USD).
+      </p>
+      <div>
+        <p class="h3">
+          Selenium: $16,000
+        </p>
         <ul>
           <li>
-            <p class="m-0">
-              Placement on the front page of <a href="http://selenium.dev">http://selenium.dev</a> 
-              will be for donations that equal or are more than the Platinum level.  
-            </p>
+            Your logo will be placed on each page of our website
           </li>
           <li>
-            <p class="m-0">
-              For donations that are equal to the Selenium level, your logo will be placed on 
-              each page of the documentation hosted at 
-              <a href="http://selenium.dev/documentation/">http://selenium.dev/documentation/</a>  
-            </p>
+            20% discount available on sponsorship packages for the
+            <a href="https://seleniumconf.com/" target="_blank" rel="noopener noreferrer">
+              Selenium Conference
+            </a>
           </li>
           <li>
-            Logo placement is time-based, per category: the first to donate is at the top, 
-            with subsequent sponsors' logos placed in the order they donated. Position will 
-            be maintained as long as sponsorship is continued each year.
+            If you were a sponsor of the most recent
+            <a href="https://seleniumconf.com/" target="_blank" rel="noopener noreferrer">
+              Selenium Conference
+            </a>
+            , you are eligible for a 20% discount.
           </li>
           <li>
-            Logos on the front page will only be there for a year, starting from when your 
-            logo is put up on the page.
+            After one year, your logo will automatically move to the Gold level if sponsorship
+            isn't renewed; after two years, it will be eligible for removal.
           </li>
+          <li>Fortnightly retweets of <b>Selenium related content</b></li>
         </ul>
+      </div>
+      <p class="h3">
+        Development
       </p>
+      <ul>
+        <li>
+          This level has the same benefits as the Selenium level above, but instead
+          of making a monetary contribution, at least one employee from your company
+          needs to be actively contributing to the project.
+        </li>
+        <li>
+          Currently limited to 3 companies but reviewed yearly.
+        </li>
+        <li>Special mention at Selenium events</li>
+        <li>
+          Weekly cross-promotion of <b>Selenium related content</b> through the
+          social media platforms where Selenium is present.
+        </li>
+        <li>
+          <b>Note:</b> If the employee(s) are removed from the project then the company will
+          lose this sponsorship level.
+        </li>
+      </ul>
+    <div>
+        <p class="h3">
+          Gold: $8,000
+        </p>
+        <ul>
+          <li>
+            Your logo will be placed on the
+            <a href="/sponsors" target="_blank" rel="noopener noreferrer">sponsors</a> page
+          </li>
+          <li>
+            10% discount available on sponsorship packages for the
+            <a href="https://seleniumconf.com/" target="_blank" rel="noopener noreferrer">
+              Selenium Conference
+            </a>
+          </li>
+          <li>
+            If you were a sponsor of the most recent
+            <a href="https://seleniumconf.com/" target="_blank" rel="noopener noreferrer">
+              Selenium Conference
+            </a>
+            , you are eligible for a 10% discount.
+          </li>
+          <li>
+            After one year, your logo will automatically move to the Silver level if sponsorship
+            isn't renewed; after two years, it will be eligible for removal.
+          </li>
+        </ul>
+      </div>
+      <div>
+        <p class="h3">
+          Silver: $4,000
+        </p>
+        <ul>
+          <li>
+            Your logo will be placed on the
+            <a href="/sponsors" target="_blank" rel="noopener noreferrer">sponsors</a> page
+          </li>
+          <li>
+            After one year, your logo will automatically move to the Bronze level if sponsorship
+            isn't renewed; after two years, it will be eligible for removal.
+          </li>
+        </ul>
+      </div>
+      <div>
+        <p class="h3">
+          Bronze: $1,000
+        </p>
+        <ul>
+          <li>
+            Your logo will be placed on the
+            <a href="/sponsors" target="_blank" rel="noopener noreferrer">sponsors</a> page
+          </li>
+          <li>
+            After one year, your logo will automatically removed if sponsorship
+            isn't renewed.
+          </li>
+        </ul>
+      </div>
     </div>
   </div>
 </div>
 
 <div class="row p-5">
   <div class="alert alert-blue bg-transparent ps-lg-5" role="alert">
-    <h2 class="alert-heading pb-3">Logo Requirements</h2>
+    <h2 class="alert-heading pb-3">Logos</h2>
     <div class="w-lg-75">
       <p>
-        Logos may be up to 468 pixels wide and 80 pixels tall. 
+        Logos may be up to 468 pixels wide and 80 pixels tall.
         Selenium-level sponsors may be up to 600 pixels wide and 250 pixels tall.
       </p>
       <p>
@@ -123,37 +205,16 @@ <h2 class="alert-heading pb-3">Logo Requirements</h2>
   </div>
 </div>
 
-<div class="row td-box--100 p-5">
-  <div class="alert alert-purple bg-transparent ps-lg-5" role="alert">
-    <h2 class="alert-heading pb-3">Sponsorship Levels</h2>
-    <div class="w-lg-75">
-      <p>
-        Below are the names and amounts associated with levels of 
-        sponsorship (all values in USD).
-      </p>
-      <p>
-        <ul>
-          <li>Selenium: $20,000</li>
-          <li>Platinum: $10,000</li>
-          <li>Gold: $5,000</li>
-          <li>Silver: $1,000</li>
-          <li>Bronze: $500</li>
-        </ul>        
-      </p>
-    </div>
-  </div>
-</div>
-
 <div class="row p-5">
   <div class="alert alert-webdriver bg-transparent ps-lg-5" role="alert">
     <h2 class="alert-heading pb-3">Non-Monetary Donations</h2>
     <div class="w-lg-75">
       <p>
-        The Selenium project will consider the value of non-monetary donations 
-        to the project - for example, donations of hardware, software licenses, 
-        or hosting - on a case-by-case basis. We will set a sponsorship level 
-        appropriately. We note that non-monetary donations may not be tax-deductible; 
-        to confirm, you should seek the counsel of a qualified tax professional. 
+        The Selenium project will consider the value of non-monetary donations
+        to the project - for example, donations of hardware, software licenses,
+        or hosting - on a case-by-case basis. We will set a sponsorship level
+        appropriately. We note that non-monetary donations may not be tax-deductible;
+        to confirm, you should seek the counsel of a qualified tax professional.
         In general, we suggest cash donations, as that process is much simpler.
       </p>
     </div>
@@ -165,35 +226,14 @@ <h2 class="alert-heading pb-3">Non-Monetary Donations</h2>
     <h2 class="alert-heading pb-3">How to Donate</h2>
     <div class="w-lg-75">
       <p>
-        Silver and Bronze sponsors can sign up using this PayPal form:
+        Bronze sponsors can donate through our
+        <a href="https://opencollective.com/selenium" target="_blank" rel="noopener noreferrer">Open Collective</a>
+        profile.
       </p>
-      <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
-        <input type="hidden" name="cmd" value="_s-xclick">
-        <input type="hidden" name="hosted_button_id" value="ZJYU8CWFVKLES">
-        <table>
-            <tbody>
-                <tr>
-                    <td>
-                        <input type="hidden" name="on0" value="Sponsorship Type">Sponsorship Type</td>
-                </tr>
-                <tr>
-                    <td>
-                        <select name="os0">
-                            <option value="Silver Sponsor">Silver Sponsor $1,000.00 USD</option>
-                            <option value="Bronze Sponsor">Bronze Sponsor $500.00 USD</option>
-                        </select>
-                    </td>
-                </tr>
-            </tbody>
-        </table>
-        <input type="hidden" name="currency_code" value="USD">
-        <input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_paynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
-        <img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
-      </form>
       <p class="pt-4">
-        For larger donations (Gold and higher), we request that payment is remitted by check 
-        or wire transfer. This ensures 100% of the donation goes to the project and that we 
-        don't pay unnecessarily large transaction fees. To pay by check, make it payable to 
+        For larger donations (Silver and higher), we request that payment is remitted by check
+        or wire transfer. This ensures 100% of the donation goes to the project and that we
+        don't pay unnecessarily large transaction fees. To pay by check, make it payable to
         "Software Freedom Conservancy" and write "Selenium Sponsorship" in the "memo" field.
         Checks should be sent to the following address, so that the Conservancy can process them:
       </p>
@@ -202,17 +242,17 @@ <h2 class="alert-heading pb-3">How to Donate</h2>
           Software Freedom Conservancy, Inc.<br>
           137 MONTAGUE ST STE 380<br>
           Brooklyn, NY 11201-3548
-        </code>    
+        </code>
       </p>
       <p>
-        We can also email you wire transfer instructions and/or provide an invoice for your 
+        We can also email you wire transfer instructions and/or provide an invoice for your
         sponsorship.
       </p>
       <p>
-        Regardless, please email: 
+        Regardless, please email:
         <a href="mailto:sponsorship@seleniumhq.org" class="fw-bold">sponsorship@seleniumhq.org</a>
         to let us know that you've sent a check or PayPal payment, or to request the invoice.
       </p>
     </div>
   </div>
-</div>
\ No newline at end of file
+</div>
diff --git a/website_and_docs/content/sponsors/_index.html b/website_and_docs/content/sponsors/_index.html
index 2fcc33ca15ce..a19ec3257e97 100644
--- a/website_and_docs/content/sponsors/_index.html
+++ b/website_and_docs/content/sponsors/_index.html
@@ -15,7 +15,7 @@
 	<h1 class="d-1">Sponsors</h1>
 	<p class="lead mt-3 mb-0">
     The following companies have sponsored the Selenium project. We thank
-    each and every one of them for their generous support.
+    each one of them for their generous support.
 	</p>
 </div>
-{{< /blocks/section >}}
\ No newline at end of file
+{{< /blocks/section >}}
diff --git a/website_and_docs/content/support/_index.html b/website_and_docs/content/support/_index.html
index ac70ad7b7f81..faf929c73b8f 100644
--- a/website_and_docs/content/support/_index.html
+++ b/website_and_docs/content/support/_index.html
@@ -61,7 +61,7 @@ <h2 class="alert-heading pb-3" id="ChatRoom">Chat Room</h2>
       </p>
       <p>
         Another option, if you prefer, is to use the 
-        <a href="https://join.slack.com/t/seleniumhq/shared_invite/zt-22b85hmhv-krEcWUFQCOWh8XfQTWOATQ">
+        <a href="https://inviter.co/seleniumhq">
           Selenium Slack channel
         </a>.
       </p>
diff --git a/website_and_docs/data/sponsors.yml b/website_and_docs/data/sponsors.yml
index 94059502169a..5c7664296af5 100644
--- a/website_and_docs/data/sponsors.yml
+++ b/website_and_docs/data/sponsors.yml
@@ -1,39 +1,47 @@
-selenium:
-  # Set to false if no items are present
+development:
   enable: true
   item:
-    # Sponsorship start date: July 30, 2014, renewed January 2020
+      # Sponsorship start date: July 30, 2014 - Renewed April 2024 under the "Development" level
     - logo: "/images/sponsors/browserstack.png"
-      url: "http://www.browserstack.com/automate/?utm_campaign=open-source-sponsor&utm_source=seleniumorg&utm_medium=referral"
+      url: "https://www.browserstack.com/automate?utm_campaign=open-source-sponsor&utm_campaigncode=701OW000009sQwVYAU&utm_medium=partnered&utm_source=seleniumorg"
       name: "BrowserStack"
-    # Sponsorship start date: August 23, 2014
+    # Sponsorship start date: August 23, 2014 - Renewed April 2024 under the "Development" level
     - logo: "/images/sponsors/saucelabs.png"
-      url: "http://saucelabs.com"
+      url: "https://saucelabs.com/resources/topic-hub/selenium?utm_source=selenium&utm_medium=website&utm_campaign=selenium-sponsorship-fy25"
       name: "Sauce Labs"
-    # Sponsorship start date: June 24, 2015, updated July 2023
-    - logo: "/images/sponsors/Digital.ai.jpg"
-      url: "http://bit.ly/36uZ7ad"
-      name: "Digital.ai"
-    # Sponsorship start date: March 21, 2017
+    # Sponsorship renewed October 16, 2024. Renewed again on April 8, 2025, under the "Development" level
+    - logo: "/images/sponsors/lambda-test.png"
+      url: "https://www.lambdatest.com/selenium-automation?utm_source=selenium&utm_medium=open-source-sponsor&utm_campaign=nov_14&utm_term=sk&utm_content=web"
+      name: "LambdaTest"
+
+selenium:
+  # Set to false if no items are present
+  enable: true
+  item:
+    # Sponsorship start date: April 16, 2024
+    - logo: "/images/sponsors/bright-data.png"
+      url: "https://brightdata.com/?utm_source=brand&utm_campaign=brnd-mkt_partners_selenium"
+      name: "Bright Data"
+    # Sponsorship renewal date: Jan 21, 2025
     - logo: "/images/sponsors/applitools.png"
       url: "https://applitools.com/"
       name: "Applitools"
+    # Sponsorship start date: June 24, 2015, updated July 2023 (only logo, not the agreement)
+    # - logo: "/images/sponsors/Digital.ai.jpg"
+    #   url: "http://bit.ly/36uZ7ad"
+    #   name: "Digital.ai"
     # Sponsorship start date: August 13, 2020
-    - logo: "/images/sponsors/perfecto-perforce.jpg"
-      url: "https://www.perfecto.io/"
-      name: "Perfecto"
-    # Sponsorship start date: July 08, 2021
-    - logo: "/images/sponsors/lambda-test.png"
-      url: "https://www.lambdatest.com/selenium-automation?utm_source=selenium&utm_medium=open-source-sponsor&utm_campaign=nov_14&utm_term=sk&utm_content=web"
-      name: "LambdaTest"
+    # - logo: "/images/sponsors/perfecto-perforce.jpg"
+    #   url: "https://www.perfecto.io/"
+    #   name: "Perfecto"
     # Added: December 17, 2017
-    - logo: "/images/sponsors/subject7_logo.png"
-      url: "https://www.subject-7.com/unified-testing/?utm_source=selenium&utm_medium=unifiedtesting&utm_campaign=product"
-      name: "Subject7"
+    # - logo: "/images/sponsors/subject7_logo.png"
+    #   url: "https://www.subject-7.com/unified-testing/?utm_source=selenium&utm_medium=unifiedtesting&utm_campaign=product"
+    #   name: "Subject7"
     # Added: November 30, 2021
-    - logo: "/images/sponsors/Avo_logo.png"
-      url: "https://www.avoautomation.ai/why-avo//?utm_source=SeleniumHQ&utm_medium=listing&utm_campaign=SeleniumHQ"
-      name: "Avo Automation"
+    # - logo: "/images/sponsors/Avo_logo.png"
+    #   url: "https://www.avoautomation.ai/why-avo//?utm_source=SeleniumHQ&utm_medium=listing&utm_campaign=SeleniumHQ"
+    #   name: "Avo Automation"
 
 platinum:
   # Set to false if no items are present
@@ -42,103 +50,132 @@ platinum:
 
 gold:
   # Set to false if no items are present
-  enable: true
+  enable: false
   item:
     # Added: September 12, 2017
-    - logo: "/images/sponsors/microfocus_logo.png"
-      url: "https://software.microfocus.com/en-us/software/leanft"
-      name: "MicroFocus"
+    # - logo: "/images/sponsors/microfocus_logo.png"
+    #   url: "https://software.microfocus.com/en-us/software/leanft"
+    #   name: "MicroFocus"
 
 silver:
   # Set to false if no items are present
-  enable: true
+  enable: false
   item:
-    # Sponsorship start date: May 18, 2020
-    - logo: "/images/sponsors/alpi.jpg"
-      url: "http://www.alpi.com/courses-opensource/index.cfm"
-      name: "Alpi"
     # Sponsorship start date: Nov 05, 2020
-    - logo: "/images/sponsors/Cigniti.jpg"
-      url: "http://www.cigniti.com/"
-      name: "Cigniti"
+    # - logo: "/images/sponsors/Cigniti.jpg"
+    #   url: "http://www.cigniti.com/"
+    #   name: "Cigniti"
     # Sponsorship start date: Nov 05, 2020
-    - logo: "/images/sponsors/gridlastic-selenium-grid-in-the-cloud.png"
-      url: "https://www.gridlastic.com/?utm_source=seleniumhq&utm_campaign=seleniumhq-sponsorship&utm_medium=bannerad"
-      name: "GridLastic"
     # Sponsorship start date: Aug 04, 2021
-    - logo: "/images/sponsors/QaseLogo2X.png"
-      url: "https://qase.io/?utm_source=selenium&utm_medium=sponsorship&utm_campaign=promo"
-      name: "Qase"
+    # - logo: "/images/sponsors/QaseLogo2X.png"
+    #   url: "https://qase.io/?utm_source=selenium&utm_medium=sponsorship&utm_campaign=promo"
+    #   name: "Qase"
     # Sponsorship start date: Sep 04, 2020
-    - logo: "/images/sponsors/testmo.svg"
-      url: "https://www.testmo.com/"
-      name: "Testmo Test Management"
+    # - logo: "/images/sponsors/testmo.svg"
+    #   url: "https://www.testmo.com/"
+    #   name: "Testmo Test Management"
     # Sponsorship start date: May 30, 2021
-    - logo: "/images/sponsors/TopBargains_Website_Logo.png"
-      url: "https://www.topbargains.com.au/"
-      name: "Top Bargains"
+    # - logo: "/images/sponsors/TopBargains_Website_Logo.png"
+    #   url: "https://www.topbargains.com.au/"
+    #   name: "Top Bargains"
      # Sponsorship start date: Feb 08, 2022
-    - logo: "/images/sponsors/Scraping_Bee_Logo.png"
-      url: "https://www.scrapingbee.com/?utm_source=selenium_sponsor&utm_medium=selenium_sponsor&utm_campaign=selenium_sponsor&utm_id=selenium_sponsor"
-      name: "ScrapingBee"
+    # - logo: "/images/sponsors/Scraping_Bee_Logo.png"
+    #   url: "https://www.scrapingbee.com/?utm_source=selenium_sponsor&utm_medium=selenium_sponsor&utm_campaign=selenium_sponsor&utm_id=selenium_sponsor"
+    #   name: "ScrapingBee"
 
 bronze:
   # Set to false if no items are present
   enable: true
   item:
+    # Sponsorship renewal date: Apr 12, 2026
+    - logo: "/images/sponsors/kualtee.png"
+      url: "http://www.kualitee.com/?utm_source=selenium&utm_medium=website&utm_campaign=seleniumpartnership"
+      name: "Kualitee"
+    # Sponsorship renewal date: Feb 4, 2025
+    - logo: "/images/sponsors/alpi.jpg"
+      url: "http://www.alpi.com/courses-opensource/index.cfm"
+      name: "Alpi"
+    # Sponsorship renewed date: Jan 25, 2025
+    - logo: "/images/sponsors/gridlastic-selenium-grid-in-the-cloud.png"
+      url: "https://www.gridlastic.com/"
+      name: "Gridlastic"
+    # Sponsorship start date: Jan 24, 2025
+    - logo: "/images/sponsors/gwenify-logo.png"
+      url: "https://www.gwenify.com/"
+      name: "Gwenify - Robotic Process Automation"
+    # Sponsorship start date: Aug 21, 2024
+    - logo: "/images/sponsors/testingbot.png"
+      url: "https://testingbot.com/"
+      name: "Selenium Cloud Testing - TestingBot"
+    # Sponsorship start date: Jul 12, 2024
+    - logo: "/images/sponsors/route4me-logo.png"
+      url: "https://route4me.com/"
+      name: "Route Planner and Route Optimizer - Route4Me Inc."
+    # Sponsorship start date: Jul 5, 2024
+    - logo: "/images/sponsors/rtts-logo.png"
+      url: "https://www.rttsweb.com/?utm_source=Selenium-org&utm_medium=ads&utm_campaign=Selenium-sponsor"
+      name: "Real-Time Technology Solutions Inc."
+    # Sponsorship start date: Oct 9, 2024
+    - logo: "/images/sponsors/mailsac-logo.png"
+      url: "https://mailsac.com/?utm_source=selenium&utm_medium=ads&utm_campaign=selenium-sponsor&utm_content=logolink"
+      name: "Mailsac - Receive test emails with confidence"
+    # Sponsorship start date: June 02, 2025
+    - logo: "/images/sponsors/Jetify-Wordmark.svg"
+      url: "https://www.jetify.com/"
+      name: "AI Automation Agency"
     # Sponsorship start date: Mar 20, 2023
-    - logo: "/images/sponsors/kiwiqa-logo.png"
-      url: "https://www.kiwiqa.com/"
-      name: "KiwiQA"
+    # - 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/"
-      name: "SelectorsHub"
+    # - logo: "/images/sponsors/SelectorsHub_logo.png"
+    #   url: "https://selectorshub.com/"
+    #   name: "SelectorsHub"
     # Sponsorship start date: April 20, 2022
-    - logo: "/images/sponsors/AdsPower.png"
-      url: "https://www.adspower.com/?source=selenium"
-      name: "AdsPower"
+    # - logo: "/images/sponsors/AdsPower.png"
+    #   url: "https://www.adspower.com/?source=selenium"
+    #   name: "AdsPower"
     # Sponsorship start date: 2020-03-11
-    - logo: "/images/sponsors/landingi_logo.png"
-      url: "https://landingi.com/"
-      name: "Landingi"
+    # - logo: "/images/sponsors/landingi_logo.png"
+    #   url: "https://landingi.com/"
+    #   name: "Landingi"
     # Sponsorship start date: 2019-12-22
-    - logo: "/images/sponsors/luminati_logo.png"
-      url: "https://luminati.io/?cam=tb_selenium&bizdev=L_yariv"
-      name: "Luminati"
+    # - logo: "/images/sponsors/luminati_logo.png"
+    #   url: "https://luminati.io/?cam=tb_selenium&bizdev=L_yariv"
+    #   name: "Luminati"
     # Sponsorship start date: 2019-09-30
-    - logo: "/images/sponsors/zenscrape.png"
-      url: "https://zenscrape.com/"
-      name: "Zenscrape"
+    # - logo: "/images/sponsors/zenscrape.png"
+    #   url: "https://zenscrape.com/"
+    #   name: "Zenscrape"
     # Sponsorship start date: 2019-09-23
-    - logo: "/images/sponsors/ScienceSoft.png"
-      url: "https://www.scnsoft.com/services/software-testing/automated"
-      name: "Science Soft"
+    # - logo: "/images/sponsors/ScienceSoft.png"
+    #   url: "https://www.scnsoft.com/services/software-testing/automated"
+    #   name: "Science Soft"
     # Sponsorship start date: 2020-12-18
-    - logo: "/images/sponsors/Selenium-cloud.png"
-      url: "https://selenium.cloud/"
-      name: "Selenium Cloud"
+    # - logo: "/images/sponsors/Selenium-cloud.png"
+    #   url: "https://selenium.cloud/"
+    #   name: "Selenium Cloud"
     # Sponsorship start date: 2021-04-16
-    - logo: "/images/sponsors/autify_logo.png"
-      url: "https://autify.com/"
-      name: "Autify"
+    # - logo: "/images/sponsors/autify_logo.png"
+    #   url: "https://autify.com/"
+    #   name: "Autify"
     # Sponsorship start date: February 2, 2017
-    - logo: "/images/sponsors/testbirds.png"
-      url: "https://www.testbirds.com/services/quality-assurance/testing-environment/?utm_source=seleniumhq&utm_campaign=int-cloud-logo-sponsoring-seleniumhq&utm_medium=logo-sponsoring"
-      name: "TestBirds"
+    # - logo: "/images/sponsors/testbirds.png"
+    #   url: "https://www.testbirds.com/services/quality-assurance/testing-environment/?utm_source=seleniumhq&utm_campaign=int-cloud-logo-sponsoring-seleniumhq&utm_medium=logo-sponsoring"
+    #   name: "TestBirds"
     # Sponsorship start date: December 3, 2019
-    - logo: "/images/sponsors/multilogin.png"
-      url: "https://multilogin.com/"
-      name: "Multilogin"
+    # - logo: "/images/sponsors/multilogin.png"
+    #   url: "https://multilogin.com/"
+    #   name: "Multilogin"
     # Sponsorship start date: April 26, 2015, Renewal & Upgrade: January 30, 2017
-    - logo: "/images/sponsors/CBT.png"
-      url: "https://crossbrowsertesting.com/selenium-testing?utm_source=seleniumhq&utm_campaign=sshp"
-      name: "CrossBrowserTesting"
+    # - logo: "/images/sponsors/CBT.png"
+    #   url: "https://crossbrowsertesting.com/selenium-testing?utm_source=seleniumhq&utm_campaign=sshp"
+    #   name: "CrossBrowserTesting"
     # Sponsorship start date: May 12, 2017
-    - logo: "/images/sponsors/selocity_banner_seleniumhq.png"
-      url: "https://www.ranorex.com/selocity/browser-extension.html"
-      name: "Ranorex - Selocity"
+    # - logo: "/images/sponsors/selocity_banner_seleniumhq.png"
+    #   url: "https://www.ranorex.com/selocity/browser-extension.html"
+    #   name: "Ranorex - Selocity"
     # Sponsorship start date: June 7, 2016
-    - logo: "/images/sponsors/synthetics.png"
-      url: "https://newrelic.com/synthetics?utm_campaign=brn+awr+seleniumorg+FY17Q1&utm_medium=REF&utm_source=selenium.dev&utm_content=synthetics-logo+&mpc=REF-selenium.dev-EN-generic--synthetics-logo"
-      name: "NewRelic - Synthetics"
+    # - logo: "/images/sponsors/synthetics.png"
+    #   url: "https://newrelic.com/synthetics?utm_campaign=brn+awr+seleniumorg+FY17Q1&utm_medium=REF&utm_source=selenium.dev&utm_content=synthetics-logo+&mpc=REF-selenium.dev-EN-generic--synthetics-logo"
+    #   name: "NewRelic - Synthetics"
diff --git a/website_and_docs/go.mod b/website_and_docs/go.mod
index 02258d05d9ea..5f2d0c8acfc4 100644
--- a/website_and_docs/go.mod
+++ b/website_and_docs/go.mod
@@ -2,4 +2,7 @@ module github.com/SeleniumHQseleniumhq.github.io
 
 go 1.20
 
-require github.com/google/docsy v0.7.2 // indirect
+require (
+	github.com/google/docsy v0.10.0 // indirect
+	github.com/google/docsy/dependencies v0.7.2 // indirect
+)
diff --git a/website_and_docs/go.sum b/website_and_docs/go.sum
index c1f632de7709..4fe9d7e72bd1 100644
--- a/website_and_docs/go.sum
+++ b/website_and_docs/go.sum
@@ -1,5 +1,15 @@
 github.com/FortAwesome/Font-Awesome v0.0.0-20230327165841-0698449d50f2/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo=
+github.com/FortAwesome/Font-Awesome v0.0.0-20240108205627-a1232e345536/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo=
+github.com/FortAwesome/Font-Awesome v0.0.0-20240402185447-c0f460dca7f7/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo=
 github.com/google/docsy v0.7.2 h1:KzhFgTd3taF1jq9HDemH3omlUqn9qfdE68sxRyTySpM=
 github.com/google/docsy v0.7.2/go.mod h1:ol3w2s1FBUzENdKSAEeNjtuaISUzHYHTw60xv5QH3Dg=
+github.com/google/docsy v0.8.0 h1:RgHyKRTo8YwScMThrf01Ky2yCGpUS1hpkspwNv6szT4=
+github.com/google/docsy v0.8.0/go.mod h1:FqTNN2T7pWEGW8dc+v5hQ5VF29W5uaL00PQ1LdVw5F8=
+github.com/google/docsy v0.9.1 h1:+jqges1YCd+yHeuZ1BUvD8V8mEGVtPxULg5j/vaJ984=
+github.com/google/docsy v0.9.1/go.mod h1:saOqKEUOn07Bc0orM/JdIF3VkOanHta9LU5Y53bwN2U=
+github.com/google/docsy v0.10.0 h1:6tMDacPwAyRWNCfvsn/9qGOZDQ8b0aRzjRZvnZPY5dg=
+github.com/google/docsy v0.10.0/go.mod h1:c0nIAqmRTOuJ01F85U/wJPQtc3Zj9N58Kea9bOT2AJc=
+github.com/google/docsy/dependencies v0.7.2 h1:+t5ufoADQAj4XneFphz4A+UU0ICAxmNaRHVWtMYXPSI=
 github.com/google/docsy/dependencies v0.7.2/go.mod h1:gihhs5gmgeO+wuoay4FwOzob+jYJVyQbNaQOh788lD4=
 github.com/twbs/bootstrap v5.2.3+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0=
+github.com/twbs/bootstrap v5.3.3+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0=
diff --git a/website_and_docs/hugo.toml b/website_and_docs/hugo.toml
index a9c406c43063..940cf8d5c01e 100644
--- a/website_and_docs/hugo.toml
+++ b/website_and_docs/hugo.toml
@@ -1,4 +1,4 @@
-baseURL = "/"
+baseURL = "https://www.selenium.dev/"
 title = "Selenium"
 timeout = "60s"
 
@@ -53,35 +53,34 @@ anchor = "smart"
 [languages]
 [languages.en]
 title = "Selenium"
-description = "Selenium automates browsers. That's it!"
 languageName ="English"
 weight = 1
+[languages.en.params]
+description = "Selenium automates browsers. That's it!"
 [languages.pt-br]
 title = "Selenium"
-description = "Selenium automates browsers. That's it!"
 languageName ="Português (Brasileiro)"
 weight = 2
+[languages.pt-br.params]
+description = "Selenium automates browsers. That's it!"
 [languages.zh-cn]
 title = "Selenium"
-description = "Selenium automates browsers. That's it!"
 languageName = "中文简体"
 weight = 3
+[languages.zh-cn.params]
+description = "Selenium automates browsers. That's it!"
 [languages.ja]
 title = "Selenium"
-description = "Selenium automates browsers. That's it!"
 languageName = "日本語"
 weight = 4
-[languages.other]
-title = "Selenium"
+[languages.ja.params]
 description = "Selenium automates browsers. That's it!"
-languageName ="Other"
-weight = 5
 
 # Import docsy theme as module
 [module]
   proxy = "direct"
   # uncomment line below for temporary local development of module
-  # replacements = "github.com/google/docsy -> ../../docsy"
+  #replacements = "github.com/google/docsy -> ../../docsy"
   [module.hugoVersion]
     extended = true
     min = "0.73.0"
@@ -159,6 +158,7 @@ plausible_analytics = true
 prism_syntax_highlighting = true
 
 # Enable announcement banner below navbar (Go to announcement-banner.html to change the message)
+banner_flag = true
 announcement_banner = true
 
 # Enable Algolia DocSearch
@@ -200,26 +200,45 @@ enable = false
 
 [params.links]
 # End user relevant links. These will show up on left side of footer and in the community page if you have one.
+[[params.links.user]]
+	name = "Selenium Linkedin"
+	url = "https://www.linkedin.com/company/4826427/"
+	icon = "fab fa-linkedin-in"
+        desc = "Check all the Community talks!"
+# Developer relevant links. These will show up on right side of footer and in the community page if you have one.
+[[params.links.user]]
+	name ="Selenium X"
+	url = "https://x.com/SeleniumHQ"
+	icon = "fab fa-twitter"
+        desc = "Follow us on X to get the latest news!"
+[[params.links.user]]
+	name = "Selenium Community YouTube Channel"
+	url = "https://www.youtube.com/@SeleniumHQProject/"
+	icon = "fab fa-youtube"
+        desc = "Check all the Community talks!"
+# Developer relevant links. These will show up on right side of footer and in the community page if you have one.
+[[params.links.user]]
+	name = "Selenium Mastodon"
+	url = "https://mastodon.social/@seleniumHQ@fosstodon.org"
+	icon = "fab fa-mastodon"
+        desc = "Selenium mastodon!"
+# Developer relevant links. These will show up on right side of footer and in the community page if you have one.
+[[params.links.user]]
+	name = "Selenium BlueSky"
+	url = "https://bsky.app/profile/seleniumconf.bsky.social"
+	icon = "fab fa-bluesky"
+        desc = "Selenium BlueSky!"
+# Developer relevant links. These will show up on right side of footer and in the community page if you have one.
 [[params.links.user]]
 	name = "User mailing list"
 	url = "https://groups.google.com/group/selenium-users"
 	icon = "fas fa-mail-bulk"
         desc = "Discussion and help from your fellow users"
-[[params.links.user]]
-	name ="Selenium in Twitter"
-	url = "https://twitter.com/SeleniumHQ"
-	icon = "fab fa-twitter"
-        desc = "Follow us on Twitter to get the latest news!"
 [[params.links.user]]
 	name = "SeleniumConf YouTube Channel"
 	url = "https://www.youtube.com/channel/UCbDlgX_613xNMrDqCe3QNEw"
 	icon = "fab fa-youtube"
         desc = "Check all the conference talks and learn from the community!"
-[[params.links.user]]
-	name = "Selenium in Facebook"
-	url = "https://www.facebook.com/Selenium2.WebDriver"
-	icon = "fab fa-facebook"
-        desc = "Get news and updates in Facebook!"
 # Developer relevant links. These will show up on right side of footer and in the community page if you have one.
 [[params.links.developer]]
 	name = "Software Freedom Conservancy"
@@ -233,7 +252,7 @@ enable = false
         desc = "Development takes place here!"
 [[params.links.developer]]
 	name = "Slack"
-	url = "https://join.slack.com/t/seleniumhq/shared_invite/zt-22b85hmhv-krEcWUFQCOWh8XfQTWOATQ"
+	url = "https://inviter.co/seleniumhq"
 	icon = "fab fa-slack"
         desc = "Chat with other project developers and users in Slack"
 [[params.links.developer]]
@@ -295,6 +314,12 @@ parent = "About"
 url = "/sponsors"
 weight = 60
 
+[[menus.main]]
+name = "Sponsor Us"
+parent = "About"
+url = "/sponsor"
+weight = 70
+
 [[menus.main]]
 identifier = "Downloads"
 name = "Downloads"
@@ -333,7 +358,7 @@ year = "year"
 [security]
   enableInlineShortcodes = false
   [security.exec]
-    allow = ['^dart-sass-embedded$', '^go$', '^npx$', '^postcss$']
+    allow = ['^dart-sass-embedded$', '^go$', '^npx$', '^postcss$', '^git$']
     osEnv = ['(?i)^(PATH|PATHEXT|APPDATA|TMP|TEMP|TERM)$']
 
   [security.funcs]
diff --git a/website_and_docs/layouts/downloads/list.html b/website_and_docs/layouts/downloads/list.html
index df23450123ad..581cd93f3d83 100644
--- a/website_and_docs/layouts/downloads/list.html
+++ b/website_and_docs/layouts/downloads/list.html
@@ -25,12 +25,20 @@
       <div class="card-body">
         <p class="card-text">
           Latest stable version
-          <a href="https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.15.0/selenium-server-4.15.0.jar">4.15.0</a>
+          <a href="https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.35.0/selenium-server-4.35.0.jar">4.35.0</a>
         </p>
         <p class="card-text">
-          To use the Selenium Server in a Grid configuration see the
+          To use the Selenium Server in a Grid configuration, see the
           <a href="https://selenium.dev/documentation/en/grid/">documentation</a>.
         </p>
+        <p class="card-text">
+          To run the Grid with popular browsers using Docker, see the
+          <a href="https://github.com/SeleniumHQ/docker-selenium">repository</a>.
+        </p>
+        <p class="card-text">
+          To deploy the Grid to Kubernetes cluster, see the Helm chart
+          <a href="https://github.com/SeleniumHQ/docker-selenium/blob/trunk/charts/selenium-grid/README.md">configuration</a>.
+        </p>
       </div>
     </div>
   </div>
@@ -107,7 +115,7 @@ <h2 class="card-title">
     <div class="card-body">
       <h2 class="card-title">C# NuGet</h2>
       <p class="card-text w-lg-75">
-        Nuget latest release is 4.15.0 Released on November 1, 2023.
+        Nuget latest release is 4.35.0 Released on August 12, 2025.
       </p>
       <ul>
         <li>
diff --git a/website_and_docs/layouts/home.html b/website_and_docs/layouts/home.html
index 2334cee8251b..6f1cc5902387 100644
--- a/website_and_docs/layouts/home.html
+++ b/website_and_docs/layouts/home.html
@@ -2,10 +2,11 @@
 {{ with .Content }}
 {{ . }}
 
+{{ partial "development-level-sponsors.html" (dict "Data" $.Site.Data) }}
 {{ partial "selenium-level-sponsors.html" (dict "Data" $.Site.Data) }}
 {{ partial "platinum-level-sponsors.html" (dict "Data" $.Site.Data) }}
 {{ partial "news-feed.html" (dict "regular_pages" $.Site.RegularPages) }}
-{{ partial "selenium-container.html" (dict "title" "Support the Selenium Project" "text" "Want to support the Selenium project? Learn more or view the full list of sponsors." "color_bg" "selenium-cyan" "color_btn" "selenium-white-cyan" "btn_text" "Learn more") }}
+{{ partial "selenium-container.html" (dict "title" "Support the Selenium Project" "text" "Learn more or view the full list of sponsors." "color_bg" "selenium-cyan" "color_btn" "selenium-white-cyan" "btn_text" "Learn more") }}
 {{ partial "donate-to-selenium.html" . }}
 {{ end }}
 {{ end }}
diff --git a/website_and_docs/layouts/partials/announcement-banner.html b/website_and_docs/layouts/partials/announcement-banner.html
index 9fbab0b7fc56..46617faac0e3 100644
--- a/website_and_docs/layouts/partials/announcement-banner.html
+++ b/website_and_docs/layouts/partials/announcement-banner.html
@@ -4,13 +4,21 @@
 <section id="announcement-banner" class="alert-static g-0 row -bg-{{ $color }}">
   <div class="container g-0" style="padding: 10px;">
     <div class="row g-0 justify-content-center">
-      <div class="alert alert-{{ $color }} col-12 fade show mb-0 p-0 -bg-{{ $color }}" role="alert">
-        <h4 class="alert-heading text-center m-0">
-          SeleniumConf Chicago 2023 is a wrap! 
-          <a href="https://www.youtube.com/playlist?list=PLRdSclUtJDYXDEsWI0vwBmJxW17NgsaAk" target='_blank' aria-pressed="true">Watch the Videos</a>
-        </h4>
-      </div>
+        <div class="alert alert-{{ $color }} col-12 fade show mb-0 p-0 -bg-{{ $color }}" role="alert">
+          <!--Use this section to add announcement to the website. Ensure to switch flag off and on
+              depending on whether announcement is to be shown. TOML file-->
+             <h4 class="alert-heading text-center m-2">
+                <!--Sample Announcement -Tune in for the Selenium Community Live scheduled for July 30th, 2025. -->
+                <!--Add link -<a href="https://www.linkedin.com/events/seleniumcommunitylive-episode87345785775592042497/theater/"
+                    target='_blank' aria-pressed="true">Join us!</a> -->
+               SeleniumConf & AppiumConf 2026 CFP is now open!
+               <a href="https://seleniumconf.com/submit-a-talk/" target="_blank" aria-pressed="true">
+                 Submit your talk.
+               </a>
+
+            </h4>
+        </div>
     </div>
-  </div> 
+  </div>
 </section>
 
diff --git a/website_and_docs/layouts/partials/bronze-level-sponsors.html b/website_and_docs/layouts/partials/bronze-level-sponsors.html
index b1c2f793cbe3..3b0b924c5811 100644
--- a/website_and_docs/layouts/partials/bronze-level-sponsors.html
+++ b/website_and_docs/layouts/partials/bronze-level-sponsors.html
@@ -1,12 +1,16 @@
 {{ if .Data.sponsors.bronze.enable }}
 <div class="row justify-content-center p-5">
-  <h2 class="selenium text-center">Bronze Level Sponsors</h2>
+  <h2 class="selenium text-center" id="bronze-level">Bronze Level Sponsors</h2>
 </div>
 <div class="row justify-content-around pt-4 pb-5 px-5">
   {{ range .Data.sponsors.bronze.item }}
   <div class="col-lg-3 col-md-6 mb-4 mb-lg-0 align-self-center px-5 py-3">
     <a href="{{ .url }}" class="border-0">
-      <img class="w-100 shadow-1-strong rounded selenium-backer-logo" src="{{ .logo }}" alt="{{ .name }}"/>
+      <img class="w-100 shadow-1-strong rounded backer-logo"
+           src="{{ .logo }}"
+           alt="{{ .name }}"
+           title="{{ .name }}"
+      />
     </a>
   </div>
   {{ end }}
diff --git a/website_and_docs/layouts/partials/development-level-sponsors.html b/website_and_docs/layouts/partials/development-level-sponsors.html
new file mode 100644
index 000000000000..cb411082497f
--- /dev/null
+++ b/website_and_docs/layouts/partials/development-level-sponsors.html
@@ -0,0 +1,18 @@
+{{ if .Data.sponsors.selenium.enable }}
+<div class="row justify-content-center p-5">
+  <h2 class="selenium text-center" id="dev-partners">Development Partners</h2>
+</div>
+<div class="row justify-content-around pt-4 pb-5 px-5">
+  {{ range .Data.sponsors.development.item }}
+  <div class="col-lg-3 col-md-6 mb-4 mb-lg-0 align-self-center px-5 py-3">
+    <a href="{{ .url }}" class="border-0">
+      <img class="w-100 shadow-1-strong rounded selenium-backer-logo"
+           src="{{ .logo }}"
+           alt="{{ .name }}"
+           title="{{ .name }}"
+      />
+    </a>
+  </div>
+  {{ end }}
+</div>
+{{ end }}
diff --git a/website_and_docs/layouts/partials/donate-to-selenium.html b/website_and_docs/layouts/partials/donate-to-selenium.html
index 11bb2652e37e..b0daaa19939f 100644
--- a/website_and_docs/layouts/partials/donate-to-selenium.html
+++ b/website_and_docs/layouts/partials/donate-to-selenium.html
@@ -1,14 +1,10 @@
 <div class="row justify-content-center pt-2 pb-3 -bg-selenium-blue">
 	<div class="card text-center border-0 bg-transparent py-5">
 		<div class="card-body py-5">
-			<h2 class="card-title">Donate to Selenium</h2>
-			<h3 class="card-text">with PayPal</h3>
-			<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
-				<input type="hidden" name="cmd" value="_s-xclick">
-				<input type="hidden" name="hosted_button_id" value="V56W8WNRPQ5SS">
-				<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" name="submit" alt="PayPal - The safer, easier way to pay online!">
-				<img alt="PayPal" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
-			</form>
+			<h2 class="card-title text-white">Donate to Selenium</h2>
+			<h3 class="card-text text-white">through
+				<a href="https://opencollective.com/selenium" target="_blank" rel="noopener noreferrer">Open Collective</a>
+			</h3>
 		</div>
 	</div>
 </div>
diff --git a/website_and_docs/layouts/partials/footer.html b/website_and_docs/layouts/partials/footer.html
index fce902fdba09..f69a924c294f 100644
--- a/website_and_docs/layouts/partials/footer.html
+++ b/website_and_docs/layouts/partials/footer.html
@@ -1,7 +1,8 @@
 {{/* Avoiding showing extra sections for home page and sponsors */}}
 {{ if and (ne .Kind "home") (ne .Section "sponsors" ) }}
+{{ partial "development-level-sponsors.html" (dict "Data" $.Site.Data) }}
 {{ partial "selenium-level-sponsors.html" (dict "Data" $.Site.Data) }}
-{{ partial "selenium-container.html" (dict "title" "Support the Selenium Project" "text" "Want to support the Selenium project? Learn more or view the full list of sponsors." "color_bg" "selenium-cyan" "color_btn" "selenium-white-cyan" "btn_text" "Learn more") }}
+{{ partial "selenium-container.html" (dict "title" "Support the Selenium Project" "text" "Learn more or view the full list of sponsors." "color_bg" "selenium-cyan" "color_btn" "selenium-white-cyan" "btn_text" "Learn more") }}
 {{ end }}
 
 {{ $links := .Site.Params.links }}
diff --git a/website_and_docs/layouts/partials/gold-level-sponsors.html b/website_and_docs/layouts/partials/gold-level-sponsors.html
index b49feef8eee4..327308ed4d26 100644
--- a/website_and_docs/layouts/partials/gold-level-sponsors.html
+++ b/website_and_docs/layouts/partials/gold-level-sponsors.html
@@ -1,12 +1,16 @@
 {{ if .Data.sponsors.gold.enable }}
 <div class="row justify-content-center p-5">
-  <h2 class="selenium text-center">Gold Level Sponsors</h2>
+  <h2 class="selenium text-center" id="gold-level">Gold Level Sponsors</h2>
 </div>
 <div class="row justify-content-around pt-4 pb-5 px-5">
   {{ range .Data.sponsors.gold.item }}
   <div class="col-lg-3 col-md-6 mb-4 mb-lg-0 align-self-center px-5 py-3">
     <a href="{{ .url }}" class="border-0">
-      <img class="w-100 shadow-1-strong rounded selenium-backer-logo" src="{{ .logo }}" alt="{{ .name }}"/>
+      <img class="w-100 shadow-1-strong rounded backer-logo"
+           src="{{ .logo }}"
+           alt="{{ .name }}"
+           title="{{ .name }}"
+      />
     </a>
   </div>
   {{ end }}
diff --git a/website_and_docs/layouts/partials/hooks/body-end.html b/website_and_docs/layouts/partials/hooks/body-end.html
new file mode 100644
index 000000000000..0652394a4259
--- /dev/null
+++ b/website_and_docs/layouts/partials/hooks/body-end.html
@@ -0,0 +1,29 @@
+{{ if or .Site.Params.search.algolia .Site.Params.algolia_docsearch }}
+<script type="text/javascript">
+(function() {
+  window.addEventListener('DOMContentLoaded', function() {
+    setTimeout(function() {
+      const searchContainers = document.querySelectorAll('.td-search--algolia');
+      
+      if (searchContainers.length > 0 && typeof docsearch !== 'undefined') {
+        searchContainers.forEach((container) => {
+          if (container && !container.hasAttribute('data-docsearch-initialized')) {
+            try {
+              docsearch({
+                container: container,
+                appId: '{{ .Site.Params.search.algolia.appId | default .Site.Params.algolia_docsearch.appId }}',
+                apiKey: '{{ .Site.Params.search.algolia.apiKey | default .Site.Params.algolia_docsearch.apiKey }}',
+                indexName: '{{ .Site.Params.search.algolia.indexName | default .Site.Params.algolia_docsearch.indexName }}',
+              });
+              container.setAttribute('data-docsearch-initialized', 'true');
+            } catch (error) {
+              console.error('DocSearch initialization error:', error);
+            }
+          }
+        });
+      }
+    }, 100);
+  });
+})();
+</script>
+{{ end }}
diff --git a/website_and_docs/layouts/partials/hooks/head-end.html b/website_and_docs/layouts/partials/hooks/head-end.html
index a22bf871d042..2dcc8e6d4f19 100644
--- a/website_and_docs/layouts/partials/hooks/head-end.html
+++ b/website_and_docs/layouts/partials/hooks/head-end.html
@@ -1,3 +1,6 @@
 {{ with .Site.Params.plausible_analytics }}
 <script defer data-domain="selenium.dev" src="https://plausible.io/js/plausible.js"></script>
 {{ end }}
+{{ if or .Site.Params.search.algolia .Site.Params.algolia_docsearch }}
+<script src="/js/docsearch-fix.js"></script>
+{{ end }}
diff --git a/website_and_docs/layouts/partials/open-collective-level-sponsors.html b/website_and_docs/layouts/partials/open-collective-level-sponsors.html
new file mode 100644
index 000000000000..ae0b7078916f
--- /dev/null
+++ b/website_and_docs/layouts/partials/open-collective-level-sponsors.html
@@ -0,0 +1,7 @@
+<div class="row justify-content-center p-5">
+  <h2 class="selenium text-center" id="open-collective-level">OpenCollective Sponsors</h2>
+</div>
+
+<div class="row justify-content-around pt-4 pb-5 px-5">
+  <script src="https://opencollective.com/selenium/banner.js" data-use-new-format="true"></script>
+</div>
diff --git a/website_and_docs/layouts/partials/platinum-level-sponsors.html b/website_and_docs/layouts/partials/platinum-level-sponsors.html
index 1d1d2f6259ce..5ae5cf1f3c67 100644
--- a/website_and_docs/layouts/partials/platinum-level-sponsors.html
+++ b/website_and_docs/layouts/partials/platinum-level-sponsors.html
@@ -1,12 +1,16 @@
 {{ if .Data.sponsors.platinum.enable }}
 <div class="row justify-content-center p-5">
-  <h2 class="selenium text-center">Platinum Level Sponsors</h2>
+  <h2 class="selenium text-center" id="platinum-level">Platinum Level Sponsors</h2>
 </div>
 <div class="row justify-content-around pt-4 pb-5 px-5">
   {{ range .Data.sponsors.platinum.item }}
   <div class="col-lg-3 col-md-6 mb-4 mb-lg-0 align-self-center px-5 py-3">
     <a href="{{ .url }}" class="border-0">
-      <img class="w-100 shadow-1-strong rounded selenium-backer-logo" src="{{ .logo }}" alt="{{ .name }}"/>
+      <img class="w-100 shadow-1-strong rounded backer-logo"
+           src="{{ .logo }}"
+           alt="{{ .name }}"
+           title="{{ .name }}"
+      />
     </a>
   </div>
   {{ end }}
diff --git a/website_and_docs/layouts/partials/selenium-clients-and-webdriver-bindings.html b/website_and_docs/layouts/partials/selenium-clients-and-webdriver-bindings.html
index 9dce49226e10..9bcf436d8926 100644
--- a/website_and_docs/layouts/partials/selenium-clients-and-webdriver-bindings.html
+++ b/website_and_docs/layouts/partials/selenium-clients-and-webdriver-bindings.html
@@ -18,16 +18,16 @@ <h2 id="bindings" class="card-title">Selenium Clients and WebDriver Language Bin
   <div class="col-sm-4 p-3">
     <div class="card h-100 bg-transparent border-0">
       <div class="card-header bg-transparent border-0 text-center py-0">
-        <img class="w-100 shadow-1-strong rounded" style="max-width: 100px;" src="/images/programming/csharp.svg" alt="C Sharp"/>
+        <img class="w-100 shadow-1-strong rounded" style="max-width: 100px;" src="/images/programming/dotnet.svg" alt=".NET/Csharp"/>
       </div>
       <div class="card-body px-0 text-center">
         <p class="card-title fw-bold h6">
-          C#
+          .NET/C#
         </p>
         <p class="card-text m-0 pb-1">
           Stable:
           <a href="https://www.nuget.org/packages/Selenium.WebDriver" class="card-link">
-              4.15.0 (November 1, 2023)
+            4.35.0 (August 12, 2025)
           </a>
         </p>
         <p class="card-text m-0 pb-1">
@@ -36,7 +36,7 @@ <h2 id="bindings" class="card-title">Selenium Clients and WebDriver Language Bin
           </a>
         </p>
         <p class="card-text m-0 pb-1">
-          <a href="https://goo.gl/uutZjZ" class="card-link">
+          <a href="https://seleniumhq.github.io/selenium/docs/api/dotnet/index.html" class="card-link">
             API Docs
           </a>
         </p>
@@ -54,8 +54,8 @@ <h2 id="bindings" class="card-title">Selenium Clients and WebDriver Language Bin
         </p>
         <p class="card-text m-0 pb-1">
           Stable:
-          <a href="https://rubygems.org/gems/selenium-webdriver/versions/4.15.0" class="card-link">
-            4.15.0 (November 1, 2023)
+          <a href="https://rubygems.org/gems/selenium-webdriver/versions/4.35.0" class="card-link">
+            4.35.0 (August 12, 2025)
           </a>
         </p>
         <p class="card-text m-0 pb-1">
@@ -82,8 +82,8 @@ <h2 id="bindings" class="card-title">Selenium Clients and WebDriver Language Bin
         </p>
         <p class="card-text m-0 pb-1">
           Stable:
-          <a href="https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.15.0/selenium-java-4.15.0.zip" class="card-link">
-            4.15.0 (November 1, 2023)
+          <a href="https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.35.0/selenium-java-4.35.0.zip" class="card-link">
+            4.35.0 (August 12, 2025)
           </a>
         </p>
         <p class="card-text m-0 pb-1">
@@ -111,7 +111,7 @@ <h2 id="bindings" class="card-title">Selenium Clients and WebDriver Language Bin
         <p class="card-text m-0 pb-1">
           Stable:
           <a href="https://pypi.python.org/pypi/selenium" class="card-link">
-            4.15.2 (November 3, 2023)
+            4.35.0 (August 12, 2025)
           </a>
         </p>
         <p class="card-text m-0 pb-1">
@@ -139,11 +139,11 @@ <h2 id="bindings" class="card-title">Selenium Clients and WebDriver Language Bin
         <p class="card-text m-0 pb-1">
           Stable:
           <a href="https://npmjs.org/package/selenium-webdriver" class="card-link">
-            4.15.0 (November 1, 2023)
+            4.35.0 (August 12, 2025)
           </a>
         </p>
         <p class="card-text m-0 pb-1">
-          <a href="https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md" class="card-link">
+          <a href="https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/selenium-webdriver/CHANGES.md" class="card-link">
             Changelog
           </a>
         </p>
diff --git a/website_and_docs/layouts/partials/selenium-container.html b/website_and_docs/layouts/partials/selenium-container.html
index 8009d9dc88f5..70143e1ea176 100644
--- a/website_and_docs/layouts/partials/selenium-container.html
+++ b/website_and_docs/layouts/partials/selenium-container.html
@@ -3,7 +3,7 @@
 {{ $button_text := .btn_text }}
 <div class="row justify-content-center pt-2 pb-3 -bg-{{ $col_bg }}">
 	<div class="card text-center border-0 bg-transparent py-5">
-		<div class="card-body">
+		<div class="card-body text-white">
 			<h2 class="card-title">
         {{ if eq .Page.File.Ext "md" }}
           {{ .title | markdownify }}
diff --git a/website_and_docs/layouts/partials/selenium-level-sponsors.html b/website_and_docs/layouts/partials/selenium-level-sponsors.html
index 418a13aa3669..25b71c321787 100644
--- a/website_and_docs/layouts/partials/selenium-level-sponsors.html
+++ b/website_and_docs/layouts/partials/selenium-level-sponsors.html
@@ -1,12 +1,16 @@
 {{ if .Data.sponsors.selenium.enable }}
 <div class="row justify-content-center p-5">
-  <h2 class="selenium text-center">Selenium Level Sponsors</h2>
+  <h2 class="selenium text-center" id="selenium-level">Selenium Level Sponsors</h2>
 </div>
 <div class="row justify-content-around pt-4 pb-5 px-5">
   {{ range .Data.sponsors.selenium.item }}
   <div class="col-lg-3 col-md-6 mb-4 mb-lg-0 align-self-center px-5 py-3">
     <a href="{{ .url }}" class="border-0">
-      <img class="w-100 shadow-1-strong rounded selenium-backer-logo" src="{{ .logo }}" alt="{{ .name }}"/>
+      <img class="w-100 shadow-1-strong rounded selenium-backer-logo"
+           src="{{ .logo }}"
+           alt="{{ .name }}"
+           title="{{ .name }}"
+      />
     </a>
   </div>
   {{ end }}
diff --git a/website_and_docs/layouts/partials/selenium-nightly-builds.html b/website_and_docs/layouts/partials/selenium-nightly-builds.html
index ec25c988f6ee..6414d4a39c53 100644
--- a/website_and_docs/layouts/partials/selenium-nightly-builds.html
+++ b/website_and_docs/layouts/partials/selenium-nightly-builds.html
@@ -1,7 +1,7 @@
-<div class="row justify-content-left p-5" id="nightly">
+<div class="row justify-content-left p-5">
   <div class="card border-0 w-100 bg-transparent">
     <div class="card-body">
-      <h2 class="card-title">Selenium Nightly Builds</h2>
+      <h2 id="nightly" class="card-title">Selenium Nightly Builds</h2>
       <p class="card-text w-lg-75">
         If you need a bug fix or a feature that just landed on the codebase,
         or if you wish to test the next release before it is out, check the
@@ -17,12 +17,25 @@ <h2 class="card-title">Selenium Nightly Builds</h2>
           <div class="card mb-3 border-0">
             <div class="row no-gutters align-items-center">
               <div class="col-md-2 text-center">
-                <img class="w-100 shadow-1-strong rounded" style="max-width: 100px;" src="/images/programming/csharp.svg" alt="C Sharp"/>
+                <img class="w-100 shadow-1-strong rounded" style="max-width: 100px;" src="/images/programming/dotnet.svg" alt="C Sharp"/>
               </div>
               <div class="col-md-10">
                 <div class="card-body">
-                  <h4 class="card-title font-weight-bold">C#</h4>
-                  Work in progress.
+                  <h4 class="card-title font-weight-bold">.NET/C#</h4>
+                  <p class="card-text m-0 pb-1">
+                    <a href="https://github.com/SeleniumHQ/selenium/pkgs/nuget/Selenium.WebDriver" class="card-link">
+                      Selenium.WebDriver
+                    </a> &
+                    <a href="https://github.com/SeleniumHQ/selenium/pkgs/nuget/Selenium.Support" class="card-link mx-0">
+                      Selenium.Support
+                    </a>
+                  </p>
+                  <p class="card-text">
+                    You will need to authenticate to the GitHub NuGet registry, instructions can be seen at the
+                    <a href="https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-nuget-registry">
+                      GitHub documentation
+                    </a>.
+                  </p>
                 </div>
               </div>
             </div>
@@ -39,12 +52,12 @@ <h4 class="card-title font-weight-bold">Ruby</h4>
                     <a href="https://github.com/SeleniumHQ/selenium/pkgs/rubygems/selenium-webdriver" class="card-link">
                       WebDriver
                     </a> &
-                    <a href="https://github.com/SeleniumHQ/selenium/pkgs/rubygems/selenium-devtools" class="card-link ml-0">
+                    <a href="https://github.com/SeleniumHQ/selenium/pkgs/rubygems/selenium-devtools" class="card-link mx-0">
                       DevTools
                     </a>
-                  </p>          
+                  </p>
                   <p class="card-text">
-                    You will need to authenticate to the GitHub RubyGems registry, instructions can be seen at the 
+                    You will need to authenticate to the GitHub RubyGems registry, instructions can be seen at the
                     <a href="https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-rubygems-registry">
                       GitHub documentation
                     </a>.
@@ -62,7 +75,7 @@ <h4 class="card-title font-weight-bold">Ruby</h4>
                 <div class="card-body">
                   <h4 class="card-title font-weight-bold">Python</h4>
                   <p class="card-text">
-                    Work in progress.
+                    Nightly builds are pushed to <a href="https://test.pypi.org/project/selenium/">TestPyPI</a>.
                   </p>
                 </div>
               </div>
@@ -76,8 +89,16 @@ <h4 class="card-title font-weight-bold">Python</h4>
               <div class="col-md-10">
                 <div class="card-body">
                   <h4 class="card-title font-weight-bold">JavaScript</h4>
+                  <p class="card-text m-0 pb-1">
+                    <a href="https://github.com/SeleniumHQ/selenium/pkgs/npm/selenium-webdriver" class="card-link">
+                      selenium-webdriver
+                    </a>
+                  </p>
                   <p class="card-text">
-                    Work in progress.
+                    You will need to authenticate to the GitHub npm registry, instructions can be seen at the
+                    <a href="https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-npm-registry">
+                      GitHub documentation
+                    </a>.
                   </p>
                 </div>
               </div>
@@ -90,14 +111,14 @@ <h4 class="card-title font-weight-bold">JavaScript</h4>
               </div>
               <div class="col-md-10">
                 <div class="card-body">
-                  <h4 class="card-title font-weight-bold">Java</h4>                  
+                  <h4 class="card-title font-weight-bold">Java</h4>
                   <p class="card-text">
                     <a href="https://oss.sonatype.org/content/repositories/snapshots/org/seleniumhq/selenium/selenium-java/" class="card-link">
                       WebDriver
-                    </a> & 
-                    <a href="https://github.com/SeleniumHQ/selenium/releases/tag/nightly" class="card-link ml-0">
+                    </a> &
+                    <a href="https://github.com/SeleniumHQ/selenium/releases/tag/nightly" class="card-link mx-0">
                       Grid
-                    </a>                    
+                    </a>
                   </p>
                   <p class="card-text">
                     To use the Java SNAPSHOT versions, you will need to add the
@@ -109,7 +130,7 @@ <h4 class="card-title font-weight-bold">Java</h4>
               </div>
             </div>
           </div>
-        </div>        
+        </div>
     </div>
-  </div>  
+  </div>
 </div>
diff --git a/website_and_docs/layouts/partials/silver-level-sponsors.html b/website_and_docs/layouts/partials/silver-level-sponsors.html
index ad24047cee11..011397353227 100644
--- a/website_and_docs/layouts/partials/silver-level-sponsors.html
+++ b/website_and_docs/layouts/partials/silver-level-sponsors.html
@@ -1,12 +1,16 @@
 {{ if .Data.sponsors.silver.enable }}
 <div class="row justify-content-center p-5">
-  <h2 class="selenium text-center">Silver Level Sponsors</h2>
+  <h2 class="selenium text-center" id="silver-level">Silver Level Sponsors</h2>
 </div>
 <div class="row justify-content-around pt-4 pb-5 px-5">
   {{ range .Data.sponsors.silver.item }}
   <div class="col-lg-3 col-md-6 mb-4 mb-lg-0 align-self-center px-5 py-3">
     <a href="{{ .url }}" class="border-0">
-      <img class="w-100 shadow-1-strong rounded selenium-backer-logo" src="{{ .logo }}" alt="{{ .name }}"/>
+      <img class="w-100 shadow-1-strong rounded backer-logo"
+           src="{{ .logo }}"
+           alt="{{ .name }}"
+           title="{{ .name }}"
+      />
     </a>
   </div>
   {{ end }}
diff --git a/website_and_docs/layouts/shortcodes/blocks/section.html b/website_and_docs/layouts/shortcodes/blocks/section.html
index 23d1b9bb9b25..d0cee7a8a187 100644
--- a/website_and_docs/layouts/shortcodes/blocks/section.html
+++ b/website_and_docs/layouts/shortcodes/blocks/section.html
@@ -1,9 +1,9 @@
 {{ $_hugo_config := `{ "version": 1 }` }}
 {{ $col_id := .Get "color" | default .Ordinal }}
 {{ $height := .Get "height" | default "auto"  }}
-{{ $type   := .Get "type" | default "" }} 
+{{ $type   := .Get "type" | default "" }}
 <a id="td-block-{{ .Ordinal }}" class="td-offset-anchor"></a>
-<section class="row td-box td-box--gradient -bg-{{ $col_id }} p-2">
+<section class="row td-box td-box--gradient -bg-{{ $col_id }} p-2" {{ if not .Site.Params.banner_flag }}style="margin-top: 50px;"{{end}}>
 	<div class="col">
 		<div class="row {{ $type }}">
 			{{ if eq .Page.File.Ext "md" }}
diff --git a/website_and_docs/layouts/shortcodes/gh-codeblock.html b/website_and_docs/layouts/shortcodes/gh-codeblock.html
index ca3073301620..1db52648f837 100644
--- a/website_and_docs/layouts/shortcodes/gh-codeblock.html
+++ b/website_and_docs/layouts/shortcodes/gh-codeblock.html
@@ -6,21 +6,22 @@
 
 {{ $defaultBranchFromEnv := (getenv "SELENIUM_EXAMPLES_BRANCH") }}
 {{ if $defaultBranchFromEnv }}
-  {{ $branch = $defaultBranchFromEnv }}
+{{ $branch = $defaultBranchFromEnv }}
 {{ end }}
 
 {{ $defaultOrgFromEnv := (getenv "SELENIUM_EXAMPLES_ORG") }}
 {{ if $defaultOrgFromEnv }}
-  {{ $org = $defaultOrgFromEnv }}
+{{ $org = $defaultOrgFromEnv }}
 {{ end }}
 
 {{ $defaultRepoFromEnv := (getenv "SELENIUM_EXAMPLES_REPO") }}
 {{ if $defaultRepoFromEnv }}
-  {{ $repo = $defaultRepoFromEnv }}
+{{ $repo = $defaultRepoFromEnv }}
 {{ end }}
 
 {{ $fullPath := .Get "path" }}
 {{ $path := index (split $fullPath "#") 0 }}
+{{ $hasFragment := in $fullPath "#" }}
 
 {{ $apiUrl := printf "%s/%s/%s/contents%s?ref=%s" $apiBaseUrl $org $repo $path $branch }}
 {{ $webUrl := printf "%s/%s/%s/blob/%s/%s" $webBaseUrl $org $repo $branch $fullPath }}
@@ -30,34 +31,148 @@
 
 {{ $githubToken := (getenv "SELENIUM_CI_TOKEN") }}
 {{ if $githubToken }}
-  {{ $toReplace := printf "://%s@" $githubToken }}
-  {{ $tokenInUrl := cond (eq $githubToken "") "://" $toReplace }}
-  {{ $apiUrlWithToken := replace $apiUrl "://" $tokenInUrl }}
-
-  {{ $apiResults := getJSON $apiUrlWithToken  }}
-  {{ $content := base64Decode $apiResults.content }}
-  {{ $codeSnippet := $content }}
-
-  {{ $parsedApiUrl := urls.Parse $webUrl }}
-  {{ with $parsedApiUrl.Fragment }}
-    {{ $codeLines := split $parsedApiUrl.Fragment "-" }}
-    {{ $fromLine := sub (int (replace (index $codeLines 0) "L" "")) 1 }}
-    {{ $toLine := int (cond (eq (len $codeLines) 1) (replace (index $codeLines 0) "L" "") (replace (index $codeLines 1) "L" "")) }}
-    {{ $numOfLines := cond (eq (sub $toLine $fromLine) 0) 1 (sub $toLine $fromLine) }}
-    {{ $splitContent := split $content "\n" }}
-    {{ $codeSnippet = delimit (first $numOfLines (after $fromLine $splitContent)) "\n" }}
-  {{ end }}
-
-  {{ highlight $codeSnippet $language }}
-
-  <div class="text-end pb-2">
+{{ $toReplace := printf "://%s@" $githubToken }}
+{{ $tokenInUrl := cond (eq $githubToken "") "://" $toReplace }}
+{{ $apiUrlWithToken := replace $apiUrl "://" $tokenInUrl }}
+
+{{ $apiResults := getJSON $apiUrlWithToken  }}
+{{ $content := base64Decode $apiResults.content }}
+{{ $codeSnippet := $content }}
+
+{{ $parsedApiUrl := urls.Parse $webUrl }}
+{{ with $parsedApiUrl.Fragment }}
+{{ $codeLines := split $parsedApiUrl.Fragment "-" }}
+{{ $fromLine := sub (int (replace (index $codeLines 0) "L" "")) 1 }}
+{{ $toLine := int (cond (eq (len $codeLines) 1) (replace (index $codeLines 0) "L" "") (replace (index $codeLines 1) "L" "")) }}
+{{ $numOfLines := cond (eq (sub $toLine $fromLine) 0) 1 (sub $toLine $fromLine) }}
+{{ $splitContent := split $content "\n" }}
+{{ $codeSnippet = delimit (first $numOfLines (after $fromLine $splitContent)) "\n" }}
+{{ end }}
+
+{{ highlight $codeSnippet $language }}
+
+<style>
+div.code-toolbar > .toolbar {
+    display: none !important;
+}
+</style>
+
+{{ if $hasFragment }}
+{{ $uniqueId := md5 $path }}
+<div class="mt-4 pb-2">
+    <div style="border: 1px solid #dee2e6; border-radius: 6px; overflow: hidden; display: flex;">
+        <a onclick="showCodeModal('{{ $uniqueId }}')" style="flex: 1; display: flex; align-items: center; justify-content: center; padding: 8px 12px; text-decoration: none; color: #007bff; background: #f8f9fa; font-weight: 500; transition: background-color 0.2s; cursor: pointer; border-right: 1px solid #dee2e6;" onmouseover="this.style.backgroundColor='#e9ecef'" onmouseout="this.style.backgroundColor='#f8f9fa'">
+            View Complete Code
+        </a>
+        <a href="{{- $webUrl -}}" target="_blank" style="flex: 1; display: flex; align-items: center; justify-content: center; padding: 8px 12px; text-decoration: none; color: #007bff; background: #f8f9fa; font-weight: 500; transition: background-color 0.2s;" onmouseover="this.style.backgroundColor='#e9ecef'" onmouseout="this.style.backgroundColor='#f8f9fa'">
+            <i class="fas fa-external-link-alt" style="margin-right: 8px;"></i>
+            View on GitHub
+        </a>
+    </div>
+</div>
+
+<div id="codeModal_{{ $uniqueId }}" style="display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); z-index: 1050;">
+    <div style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: white; border-radius: 8px; max-width: 90%; max-height: 90%; overflow: auto; box-shadow: 0 4px 20px rgba(0,0,0,0.3);">
+        <div style="position: sticky; top: 0; z-index: 10; background: white; box-shadow: 0 2px 2px rgba(0,0,0,0.1); padding: 10px 15px; border-bottom: 1px solid #dee2e6; display: flex; justify-content: space-between; align-items: center; height: 50px;">
+            <h5 style="margin: 0;">{{ $path }}</h5>
+            <div>
+                <button onclick="copyCode('{{ $uniqueId }}', event)" style="margin-right: 10px; padding: 5px 10px; border: 1px solid #007bff; background: #007bff; color: white; border-radius: 4px; cursor: pointer; user-select: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none;">
+                    Copy
+                </button>
+                <button onclick="closeCodeModal('{{ $uniqueId }}')" style="padding: 5px 10px; border: 1px solid #6c757d; background: #6c757d; color: white; border-radius: 4px; cursor: pointer; user-select: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none;">
+                    Close
+                </button>
+            </div>
+        </div>
+        <div style="padding: 20px;">
+            <div id="codeContent_{{ $uniqueId }}">{{ highlight $content $language }}</div>
+        </div>
+    </div>
+</div>
+
+<script>
+document.addEventListener('DOMContentLoaded', function() {
+    const toolbars = document.querySelectorAll('div.code-toolbar > .toolbar');
+    toolbars.forEach(toolbar => toolbar.remove());
+});
+
+window.showCodeModal = window.showCodeModal || function(id) {
+    document.getElementById('codeModal_' + id).style.display = 'block';
+    document.body.style.overflow = 'hidden';
+};
+
+window.closeCodeModal = window.closeCodeModal || function(id) {
+    document.getElementById('codeModal_' + id).style.display = 'none';
+    document.body.style.overflow = '';
+};
+
+window.copyCode = window.copyCode || function(id, event) {
+    const codeElement = document.getElementById('codeContent_' + id);
+    const preElement = codeElement.querySelector('pre');
+    const code = preElement ? preElement.textContent : codeElement.textContent;
+
+    if (navigator.clipboard) {
+        navigator.clipboard.writeText(code).then(() => {
+            const btn = event.target;
+            const originalText = btn.textContent;
+            btn.textContent = 'Copied!';
+            btn.style.background = '#28a745';
+            btn.style.borderColor = '#28a745';
+            setTimeout(() => {
+                btn.textContent = originalText;
+                btn.style.background = '#007bff';
+                btn.style.borderColor = '#007bff';
+            }, 2000);
+        });
+    } else {
+        const textArea = document.createElement('textarea');
+        textArea.value = code;
+        document.body.appendChild(textArea);
+        textArea.select();
+        document.execCommand('copy');
+        document.body.removeChild(textArea);
+
+        const btn = event.target;
+        const originalText = btn.textContent;
+        btn.textContent = 'Copied!';
+        btn.style.background = '#28a745';
+        btn.style.borderColor = '#28a745';
+        setTimeout(() => {
+            btn.textContent = originalText;
+            btn.style.background = '#007bff';
+            btn.style.borderColor = '#007bff';
+        }, 2000);
+    }
+};
+
+document.addEventListener('click', function(e) {
+    if (e.target.id && e.target.id.startsWith('codeModal_')) {
+        const id = e.target.id.replace('codeModal_', '');
+        closeCodeModal(id);
+    }
+});
+
+document.addEventListener('keydown', function(e) {
+    if (e.key === 'Escape') {
+        const openModals = document.querySelectorAll('[id^="codeModal_"]');
+        openModals.forEach(modal => {
+            if (modal.style.display === 'block') {
+                const id = modal.id.replace('codeModal_', '');
+                closeCodeModal(id);
+            }
+        });
+    }
+});
+</script>
+{{ else }}
+<div class="text-end pb-2">
     <a href="{{- $webUrl -}}" target="_blank">
-      <i class="fas fa-external-link-alt pl-2"></i>
-        <strong>View full example on GitHub</strong>
+        <i class="fas fa-external-link-alt pl-2"></i>
+        <strong>View on GitHub</strong>
     </a>
-  </div>
-{{ else }}
-  {{ partial "github-content.html" }}
+</div>
 {{ end }}
 
-
+{{ else }}
+{{ partial "github-content.html" }}
+{{ end }}
diff --git a/website_and_docs/layouts/sponsors/list.html b/website_and_docs/layouts/sponsors/list.html
index 60b18dfc7e08..022c25074770 100644
--- a/website_and_docs/layouts/sponsors/list.html
+++ b/website_and_docs/layouts/sponsors/list.html
@@ -2,24 +2,28 @@
 
 <a class="td-offset-anchor"></a>
 <div class="td-content">
-	{{ .Content }}
+  {{ .Content }}
 </div>
 
+{{ partial "development-level-sponsors.html" (dict "Data" $.Site.Data) }}
 {{ partial "selenium-level-sponsors.html" (dict "Data" $.Site.Data) }}
 {{ partial "platinum-level-sponsors.html" (dict "Data" $.Site.Data) }}
 {{ partial "gold-level-sponsors.html" (dict "Data" $.Site.Data) }}
 {{ partial "silver-level-sponsors.html" (dict "Data" $.Site.Data) }}
 {{ partial "bronze-level-sponsors.html" (dict "Data" $.Site.Data) }}
+{{ partial "open-collective-level-sponsors.html" }}
 
 <div class="row td-box--100 ">
   <div class="card border-0 w-100 bg-transparent p-5">
     <div class="card-body">
       <h2 class="card-title">Sponsoring</h2>
       <p class="card-text pb-4 w-lg-75">
-				Would you like your company to be listed on this page? <a href="/sponsor">Learn more about sponsoring Selenium.</a>
-			</p>
+        Would you like your company to be listed on this page? <a href="/sponsor">Learn more about sponsoring
+          Selenium.</a>
+      </p>
     </div>
   </div>
 </div>
 
+
 {{ end }}
diff --git a/website_and_docs/package-lock.json b/website_and_docs/package-lock.json
index 23009b75b8c2..cf8a6b257f44 100644
--- a/website_and_docs/package-lock.json
+++ b/website_and_docs/package-lock.json
@@ -9,41 +9,9 @@
       "version": "0.1.0",
       "license": "Apache-2.0",
       "dependencies": {
-        "autoprefixer": "^10.4.14",
-        "postcss": "^8.4.31",
-        "postcss-cli": "^10.1.0"
-      }
-    },
-    "node_modules/@nodelib/fs.scandir": {
-      "version": "2.1.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
-      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
-      "dependencies": {
-        "@nodelib/fs.stat": "2.0.5",
-        "run-parallel": "^1.1.9"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nodelib/fs.stat": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nodelib/fs.walk": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
-      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
-      "dependencies": {
-        "@nodelib/fs.scandir": "2.1.5",
-        "fastq": "^1.6.0"
-      },
-      "engines": {
-        "node": ">= 8"
+        "autoprefixer": "^10.4.21",
+        "postcss": "^8.5.4",
+        "postcss-cli": "^11.0.1"
       }
     },
     "node_modules/ansi-regex": {
@@ -81,9 +49,9 @@
       }
     },
     "node_modules/autoprefixer": {
-      "version": "10.4.14",
-      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
-      "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==",
+      "version": "10.4.21",
+      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz",
+      "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==",
       "funding": [
         {
           "type": "opencollective",
@@ -92,14 +60,19 @@
         {
           "type": "tidelift",
           "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
         }
       ],
+      "license": "MIT",
       "dependencies": {
-        "browserslist": "^4.21.5",
-        "caniuse-lite": "^1.0.30001464",
-        "fraction.js": "^4.2.0",
+        "browserslist": "^4.24.4",
+        "caniuse-lite": "^1.0.30001702",
+        "fraction.js": "^4.3.7",
         "normalize-range": "^0.1.2",
-        "picocolors": "^1.0.0",
+        "picocolors": "^1.1.1",
         "postcss-value-parser": "^4.2.0"
       },
       "bin": {
@@ -121,20 +94,21 @@
       }
     },
     "node_modules/braces": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+      "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+      "license": "MIT",
       "dependencies": {
-        "fill-range": "^7.0.1"
+        "fill-range": "^7.1.1"
       },
       "engines": {
         "node": ">=8"
       }
     },
     "node_modules/browserslist": {
-      "version": "4.21.5",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
-      "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
+      "version": "4.24.4",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
+      "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
       "funding": [
         {
           "type": "opencollective",
@@ -143,13 +117,18 @@
         {
           "type": "tidelift",
           "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
         }
       ],
+      "license": "MIT",
       "dependencies": {
-        "caniuse-lite": "^1.0.30001449",
-        "electron-to-chromium": "^1.4.284",
-        "node-releases": "^2.0.8",
-        "update-browserslist-db": "^1.0.10"
+        "caniuse-lite": "^1.0.30001688",
+        "electron-to-chromium": "^1.5.73",
+        "node-releases": "^2.0.19",
+        "update-browserslist-db": "^1.1.1"
       },
       "bin": {
         "browserslist": "cli.js"
@@ -159,9 +138,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001497",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001497.tgz",
-      "integrity": "sha512-I4/duVK4wL6rAK/aKZl3HXB4g+lIZvaT4VLAn2rCgJ38jVLb0lv2Xug6QuqmxXFVRJMF74SPPWPJ/1Sdm3vCzw==",
+      "version": "1.0.30001702",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001702.tgz",
+      "integrity": "sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==",
       "funding": [
         {
           "type": "opencollective",
@@ -175,7 +154,8 @@
           "type": "github",
           "url": "https://github.com/sponsors/ai"
         }
-      ]
+      ],
+      "license": "CC-BY-4.0"
     },
     "node_modules/chokidar": {
       "version": "3.5.3",
@@ -233,28 +213,19 @@
       "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
     },
     "node_modules/dependency-graph": {
-      "version": "0.11.0",
-      "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz",
-      "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==",
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz",
+      "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==",
+      "license": "MIT",
       "engines": {
-        "node": ">= 0.6.0"
-      }
-    },
-    "node_modules/dir-glob": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
-      "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
-      "dependencies": {
-        "path-type": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
+        "node": ">=4"
       }
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.4.313",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.313.tgz",
-      "integrity": "sha512-QckB9OVqr2oybjIrbMI99uF+b9+iTja5weFe0ePbqLb5BHqXOJUO1SG6kDj/1WtWPRIBr51N153AEq8m7HuIaA=="
+      "version": "1.5.113",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.113.tgz",
+      "integrity": "sha512-wjT2O4hX+wdWPJ76gWSkMhcHAV2PTMX+QetUCPYEdCIe+cxmgzzSSiGRCKW8nuh4mwKZlpv0xvoW7OF2X+wmHg==",
+      "license": "ISC"
     },
     "node_modules/emoji-regex": {
       "version": "8.0.0",
@@ -262,40 +233,19 @@
       "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
     },
     "node_modules/escalade": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
-      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+      "license": "MIT",
       "engines": {
         "node": ">=6"
       }
     },
-    "node_modules/fast-glob": {
-      "version": "3.2.12",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
-      "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
-      "dependencies": {
-        "@nodelib/fs.stat": "^2.0.2",
-        "@nodelib/fs.walk": "^1.2.3",
-        "glob-parent": "^5.1.2",
-        "merge2": "^1.3.0",
-        "micromatch": "^4.0.4"
-      },
-      "engines": {
-        "node": ">=8.6.0"
-      }
-    },
-    "node_modules/fastq": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
-      "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
-      "dependencies": {
-        "reusify": "^1.0.4"
-      }
-    },
     "node_modules/fill-range": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+      "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+      "license": "MIT",
       "dependencies": {
         "to-regex-range": "^5.0.1"
       },
@@ -304,21 +254,21 @@
       }
     },
     "node_modules/fraction.js": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
-      "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
+      "version": "4.3.7",
+      "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+      "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
       "engines": {
         "node": "*"
       },
       "funding": {
         "type": "patreon",
-        "url": "https://www.patreon.com/infusion"
+        "url": "https://github.com/sponsors/rawify"
       }
     },
     "node_modules/fs-extra": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz",
-      "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==",
+      "version": "11.2.0",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+      "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
       "dependencies": {
         "graceful-fs": "^4.2.0",
         "jsonfile": "^6.0.1",
@@ -349,17 +299,6 @@
         "node": "6.* || 8.* || >= 10.*"
       }
     },
-    "node_modules/get-stdin": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz",
-      "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/glob-parent": {
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
@@ -371,48 +310,11 @@
         "node": ">= 6"
       }
     },
-    "node_modules/globby": {
-      "version": "13.1.3",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz",
-      "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==",
-      "dependencies": {
-        "dir-glob": "^3.0.1",
-        "fast-glob": "^3.2.11",
-        "ignore": "^5.2.0",
-        "merge2": "^1.4.1",
-        "slash": "^4.0.0"
-      },
-      "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/globby/node_modules/slash": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
-      "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/graceful-fs": {
       "version": "4.2.10",
       "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
       "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
     },
-    "node_modules/ignore": {
-      "version": "5.2.4",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
-      "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
-      "engines": {
-        "node": ">= 4"
-      }
-    },
     "node_modules/is-binary-path": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -455,6 +357,7 @@
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
       "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+      "license": "MIT",
       "engines": {
         "node": ">=0.12.0"
       }
@@ -471,37 +374,20 @@
       }
     },
     "node_modules/lilconfig": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
-      "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==",
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/merge2": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
-      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz",
+      "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==",
       "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/micromatch": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
-      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
-      "dependencies": {
-        "braces": "^3.0.2",
-        "picomatch": "^2.3.1"
+        "node": ">=14"
       },
-      "engines": {
-        "node": ">=8.6"
+      "funding": {
+        "url": "https://github.com/sponsors/antonk52"
       }
     },
     "node_modules/nanoid": {
-      "version": "3.3.6",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
-      "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+      "version": "3.3.11",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+      "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
       "funding": [
         {
           "type": "github",
@@ -516,9 +402,10 @@
       }
     },
     "node_modules/node-releases": {
-      "version": "2.0.10",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz",
-      "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w=="
+      "version": "2.0.19",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
+      "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
+      "license": "MIT"
     },
     "node_modules/normalize-path": {
       "version": "3.0.0",
@@ -536,18 +423,11 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/path-type": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
-      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/picocolors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
-      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+      "license": "ISC"
     },
     "node_modules/picomatch": {
       "version": "2.3.1",
@@ -569,9 +449,9 @@
       }
     },
     "node_modules/postcss": {
-      "version": "8.4.31",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
-      "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+      "version": "8.5.6",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+      "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
       "funding": [
         {
           "type": "opencollective",
@@ -587,66 +467,72 @@
         }
       ],
       "dependencies": {
-        "nanoid": "^3.3.6",
-        "picocolors": "^1.0.0",
-        "source-map-js": "^1.0.2"
+        "nanoid": "^3.3.11",
+        "picocolors": "^1.1.1",
+        "source-map-js": "^1.2.1"
       },
       "engines": {
         "node": "^10 || ^12 || >=14"
       }
     },
     "node_modules/postcss-cli": {
-      "version": "10.1.0",
-      "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-10.1.0.tgz",
-      "integrity": "sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA==",
+      "version": "11.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.1.tgz",
+      "integrity": "sha512-0UnkNPSayHKRe/tc2YGW6XnSqqOA9eqpiRMgRlV1S6HdGi16vwJBx7lviARzbV1HpQHqLLRH3o8vTcB0cLc+5g==",
+      "license": "MIT",
       "dependencies": {
         "chokidar": "^3.3.0",
-        "dependency-graph": "^0.11.0",
+        "dependency-graph": "^1.0.0",
         "fs-extra": "^11.0.0",
-        "get-stdin": "^9.0.0",
-        "globby": "^13.0.0",
         "picocolors": "^1.0.0",
-        "postcss-load-config": "^4.0.0",
+        "postcss-load-config": "^5.0.0",
         "postcss-reporter": "^7.0.0",
         "pretty-hrtime": "^1.0.3",
         "read-cache": "^1.0.0",
         "slash": "^5.0.0",
+        "tinyglobby": "^0.2.12",
         "yargs": "^17.0.0"
       },
       "bin": {
         "postcss": "index.js"
       },
       "engines": {
-        "node": ">=14"
+        "node": ">=18"
       },
       "peerDependencies": {
         "postcss": "^8.0.0"
       }
     },
     "node_modules/postcss-load-config": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
-      "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.0.3.tgz",
+      "integrity": "sha512-90pBBI5apUVruIEdCxZic93Wm+i9fTrp7TXbgdUCH+/L+2WnfpITSpq5dFU/IPvbv7aNiMlQISpUkAm3fEcvgQ==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
       "dependencies": {
-        "lilconfig": "^2.0.5",
-        "yaml": "^2.1.1"
+        "lilconfig": "^3.0.0",
+        "yaml": "^2.3.4"
       },
       "engines": {
-        "node": ">= 14"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/postcss/"
+        "node": ">= 18"
       },
       "peerDependencies": {
-        "postcss": ">=8.0.9",
-        "ts-node": ">=9.0.0"
+        "jiti": ">=1.21.0",
+        "postcss": ">=8.0.9"
       },
       "peerDependenciesMeta": {
-        "postcss": {
+        "jiti": {
           "optional": true
         },
-        "ts-node": {
+        "postcss": {
           "optional": true
         }
       }
@@ -683,25 +569,6 @@
         "node": ">= 0.8"
       }
     },
-    "node_modules/queue-microtask": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
-      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ]
-    },
     "node_modules/read-cache": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@@ -729,41 +596,11 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/reusify": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
-      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
-      "engines": {
-        "iojs": ">=1.0.0",
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/run-parallel": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
-      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "dependencies": {
-        "queue-microtask": "^1.2.2"
-      }
-    },
     "node_modules/slash": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-5.0.0.tgz",
-      "integrity": "sha512-n6KkmvKS0623igEVj3FF0OZs1gYYJ0o0Hj939yc1fyxl2xt+xYpLnzJB6xBSqOfV9ZFLEWodBBN/heZJahuIJQ==",
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+      "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+      "license": "MIT",
       "engines": {
         "node": ">=14.16"
       },
@@ -772,9 +609,9 @@
       }
     },
     "node_modules/source-map-js": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
-      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
       "engines": {
         "node": ">=0.10.0"
       }
@@ -808,10 +645,53 @@
       "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz",
       "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ=="
     },
+    "node_modules/tinyglobby": {
+      "version": "0.2.12",
+      "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz",
+      "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==",
+      "license": "MIT",
+      "dependencies": {
+        "fdir": "^6.4.3",
+        "picomatch": "^4.0.2"
+      },
+      "engines": {
+        "node": ">=12.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/SuperchupuDev"
+      }
+    },
+    "node_modules/tinyglobby/node_modules/fdir": {
+      "version": "6.4.3",
+      "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz",
+      "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==",
+      "license": "MIT",
+      "peerDependencies": {
+        "picomatch": "^3 || ^4"
+      },
+      "peerDependenciesMeta": {
+        "picomatch": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/tinyglobby/node_modules/picomatch": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+      "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
     "node_modules/to-regex-range": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
       "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+      "license": "MIT",
       "dependencies": {
         "is-number": "^7.0.0"
       },
@@ -828,9 +708,9 @@
       }
     },
     "node_modules/update-browserslist-db": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
-      "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+      "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
       "funding": [
         {
           "type": "opencollective",
@@ -839,14 +719,19 @@
         {
           "type": "tidelift",
           "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
         }
       ],
+      "license": "MIT",
       "dependencies": {
-        "escalade": "^3.1.1",
-        "picocolors": "^1.0.0"
+        "escalade": "^3.2.0",
+        "picocolors": "^1.1.1"
       },
       "bin": {
-        "browserslist-lint": "cli.js"
+        "update-browserslist-db": "cli.js"
       },
       "peerDependencies": {
         "browserslist": ">= 4.21.0"
@@ -877,9 +762,12 @@
       }
     },
     "node_modules/yaml": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz",
-      "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==",
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz",
+      "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==",
+      "bin": {
+        "yaml": "bin.mjs"
+      },
       "engines": {
         "node": ">= 14"
       }
@@ -911,29 +799,6 @@
     }
   },
   "dependencies": {
-    "@nodelib/fs.scandir": {
-      "version": "2.1.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
-      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
-      "requires": {
-        "@nodelib/fs.stat": "2.0.5",
-        "run-parallel": "^1.1.9"
-      }
-    },
-    "@nodelib/fs.stat": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
-    },
-    "@nodelib/fs.walk": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
-      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
-      "requires": {
-        "@nodelib/fs.scandir": "2.1.5",
-        "fastq": "^1.6.0"
-      }
-    },
     "ansi-regex": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -957,15 +822,15 @@
       }
     },
     "autoprefixer": {
-      "version": "10.4.14",
-      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
-      "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==",
+      "version": "10.4.21",
+      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz",
+      "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==",
       "requires": {
-        "browserslist": "^4.21.5",
-        "caniuse-lite": "^1.0.30001464",
-        "fraction.js": "^4.2.0",
+        "browserslist": "^4.24.4",
+        "caniuse-lite": "^1.0.30001702",
+        "fraction.js": "^4.3.7",
         "normalize-range": "^0.1.2",
-        "picocolors": "^1.0.0",
+        "picocolors": "^1.1.1",
         "postcss-value-parser": "^4.2.0"
       }
     },
@@ -975,28 +840,28 @@
       "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
     },
     "braces": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+      "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
       "requires": {
-        "fill-range": "^7.0.1"
+        "fill-range": "^7.1.1"
       }
     },
     "browserslist": {
-      "version": "4.21.5",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
-      "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
+      "version": "4.24.4",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
+      "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
       "requires": {
-        "caniuse-lite": "^1.0.30001449",
-        "electron-to-chromium": "^1.4.284",
-        "node-releases": "^2.0.8",
-        "update-browserslist-db": "^1.0.10"
+        "caniuse-lite": "^1.0.30001688",
+        "electron-to-chromium": "^1.5.73",
+        "node-releases": "^2.0.19",
+        "update-browserslist-db": "^1.1.1"
       }
     },
     "caniuse-lite": {
-      "version": "1.0.30001497",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001497.tgz",
-      "integrity": "sha512-I4/duVK4wL6rAK/aKZl3HXB4g+lIZvaT4VLAn2rCgJ38jVLb0lv2Xug6QuqmxXFVRJMF74SPPWPJ/1Sdm3vCzw=="
+      "version": "1.0.30001702",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001702.tgz",
+      "integrity": "sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA=="
     },
     "chokidar": {
       "version": "3.5.3",
@@ -1037,22 +902,14 @@
       "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
     },
     "dependency-graph": {
-      "version": "0.11.0",
-      "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz",
-      "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg=="
-    },
-    "dir-glob": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
-      "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
-      "requires": {
-        "path-type": "^4.0.0"
-      }
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz",
+      "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg=="
     },
     "electron-to-chromium": {
-      "version": "1.4.313",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.313.tgz",
-      "integrity": "sha512-QckB9OVqr2oybjIrbMI99uF+b9+iTja5weFe0ePbqLb5BHqXOJUO1SG6kDj/1WtWPRIBr51N153AEq8m7HuIaA=="
+      "version": "1.5.113",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.113.tgz",
+      "integrity": "sha512-wjT2O4hX+wdWPJ76gWSkMhcHAV2PTMX+QetUCPYEdCIe+cxmgzzSSiGRCKW8nuh4mwKZlpv0xvoW7OF2X+wmHg=="
     },
     "emoji-regex": {
       "version": "8.0.0",
@@ -1060,47 +917,27 @@
       "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
     },
     "escalade": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
-      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
-    },
-    "fast-glob": {
-      "version": "3.2.12",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
-      "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
-      "requires": {
-        "@nodelib/fs.stat": "^2.0.2",
-        "@nodelib/fs.walk": "^1.2.3",
-        "glob-parent": "^5.1.2",
-        "merge2": "^1.3.0",
-        "micromatch": "^4.0.4"
-      }
-    },
-    "fastq": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
-      "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
-      "requires": {
-        "reusify": "^1.0.4"
-      }
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="
     },
     "fill-range": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+      "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
       "requires": {
         "to-regex-range": "^5.0.1"
       }
     },
     "fraction.js": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
-      "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA=="
+      "version": "4.3.7",
+      "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+      "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew=="
     },
     "fs-extra": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz",
-      "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==",
+      "version": "11.2.0",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+      "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
       "requires": {
         "graceful-fs": "^4.2.0",
         "jsonfile": "^6.0.1",
@@ -1118,11 +955,6 @@
       "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
       "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
     },
-    "get-stdin": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz",
-      "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA=="
-    },
     "glob-parent": {
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
@@ -1131,35 +963,11 @@
         "is-glob": "^4.0.1"
       }
     },
-    "globby": {
-      "version": "13.1.3",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz",
-      "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==",
-      "requires": {
-        "dir-glob": "^3.0.1",
-        "fast-glob": "^3.2.11",
-        "ignore": "^5.2.0",
-        "merge2": "^1.4.1",
-        "slash": "^4.0.0"
-      },
-      "dependencies": {
-        "slash": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
-          "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew=="
-        }
-      }
-    },
     "graceful-fs": {
       "version": "4.2.10",
       "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
       "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
     },
-    "ignore": {
-      "version": "5.2.4",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
-      "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ=="
-    },
     "is-binary-path": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -1201,33 +1009,19 @@
       }
     },
     "lilconfig": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
-      "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg=="
-    },
-    "merge2": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
-      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
-    },
-    "micromatch": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
-      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
-      "requires": {
-        "braces": "^3.0.2",
-        "picomatch": "^2.3.1"
-      }
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz",
+      "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ=="
     },
     "nanoid": {
-      "version": "3.3.6",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
-      "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA=="
+      "version": "3.3.11",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+      "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="
     },
     "node-releases": {
-      "version": "2.0.10",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz",
-      "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w=="
+      "version": "2.0.19",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
+      "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="
     },
     "normalize-path": {
       "version": "3.0.0",
@@ -1239,15 +1033,10 @@
       "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
       "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="
     },
-    "path-type": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
-      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
-    },
     "picocolors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
-      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
     },
     "picomatch": {
       "version": "2.3.1",
@@ -1260,41 +1049,40 @@
       "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="
     },
     "postcss": {
-      "version": "8.4.31",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
-      "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+      "version": "8.5.6",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+      "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
       "requires": {
-        "nanoid": "^3.3.6",
-        "picocolors": "^1.0.0",
-        "source-map-js": "^1.0.2"
+        "nanoid": "^3.3.11",
+        "picocolors": "^1.1.1",
+        "source-map-js": "^1.2.1"
       }
     },
     "postcss-cli": {
-      "version": "10.1.0",
-      "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-10.1.0.tgz",
-      "integrity": "sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA==",
+      "version": "11.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.1.tgz",
+      "integrity": "sha512-0UnkNPSayHKRe/tc2YGW6XnSqqOA9eqpiRMgRlV1S6HdGi16vwJBx7lviARzbV1HpQHqLLRH3o8vTcB0cLc+5g==",
       "requires": {
         "chokidar": "^3.3.0",
-        "dependency-graph": "^0.11.0",
+        "dependency-graph": "^1.0.0",
         "fs-extra": "^11.0.0",
-        "get-stdin": "^9.0.0",
-        "globby": "^13.0.0",
         "picocolors": "^1.0.0",
-        "postcss-load-config": "^4.0.0",
+        "postcss-load-config": "^5.0.0",
         "postcss-reporter": "^7.0.0",
         "pretty-hrtime": "^1.0.3",
         "read-cache": "^1.0.0",
         "slash": "^5.0.0",
+        "tinyglobby": "^0.2.12",
         "yargs": "^17.0.0"
       }
     },
     "postcss-load-config": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
-      "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.0.3.tgz",
+      "integrity": "sha512-90pBBI5apUVruIEdCxZic93Wm+i9fTrp7TXbgdUCH+/L+2WnfpITSpq5dFU/IPvbv7aNiMlQISpUkAm3fEcvgQ==",
       "requires": {
-        "lilconfig": "^2.0.5",
-        "yaml": "^2.1.1"
+        "lilconfig": "^3.0.0",
+        "yaml": "^2.3.4"
       }
     },
     "postcss-reporter": {
@@ -1316,11 +1104,6 @@
       "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
       "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A=="
     },
-    "queue-microtask": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
-      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
-    },
     "read-cache": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@@ -1342,28 +1125,15 @@
       "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
       "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="
     },
-    "reusify": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
-      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
-    },
-    "run-parallel": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
-      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
-      "requires": {
-        "queue-microtask": "^1.2.2"
-      }
-    },
     "slash": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-5.0.0.tgz",
-      "integrity": "sha512-n6KkmvKS0623igEVj3FF0OZs1gYYJ0o0Hj939yc1fyxl2xt+xYpLnzJB6xBSqOfV9ZFLEWodBBN/heZJahuIJQ=="
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+      "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg=="
     },
     "source-map-js": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
-      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
     },
     "string-width": {
       "version": "4.2.3",
@@ -1388,6 +1158,28 @@
       "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz",
       "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ=="
     },
+    "tinyglobby": {
+      "version": "0.2.12",
+      "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz",
+      "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==",
+      "requires": {
+        "fdir": "^6.4.3",
+        "picomatch": "^4.0.2"
+      },
+      "dependencies": {
+        "fdir": {
+          "version": "6.4.3",
+          "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz",
+          "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==",
+          "requires": {}
+        },
+        "picomatch": {
+          "version": "4.0.2",
+          "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+          "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="
+        }
+      }
+    },
     "to-regex-range": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -1402,12 +1194,12 @@
       "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
     },
     "update-browserslist-db": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
-      "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+      "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
       "requires": {
-        "escalade": "^3.1.1",
-        "picocolors": "^1.0.0"
+        "escalade": "^3.2.0",
+        "picocolors": "^1.1.1"
       }
     },
     "wrap-ansi": {
@@ -1426,9 +1218,9 @@
       "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
     },
     "yaml": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz",
-      "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA=="
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz",
+      "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg=="
     },
     "yargs": {
       "version": "17.7.1",
diff --git a/website_and_docs/package.json b/website_and_docs/package.json
index bd2f401ea8f9..86efb58fae8b 100644
--- a/website_and_docs/package.json
+++ b/website_and_docs/package.json
@@ -9,8 +9,8 @@
   "author": "SeleniumHQ",
   "license": "Apache-2.0",
   "dependencies": {
-    "autoprefixer": "^10.4.14",
-    "postcss": "^8.4.31",
-    "postcss-cli": "^10.1.0"
+    "autoprefixer": "^10.4.21",
+    "postcss": "^8.5.4",
+    "postcss-cli": "^11.0.1"
   }
 }
diff --git a/website_and_docs/static/favicons/apple-touch-icon-180x180.png b/website_and_docs/static/favicons/apple-touch-icon-180x180.png
index 9cb5fc1c4efd..7ec2e3d5f244 100644
Binary files a/website_and_docs/static/favicons/apple-touch-icon-180x180.png and b/website_and_docs/static/favicons/apple-touch-icon-180x180.png differ
diff --git a/website_and_docs/static/favicons/favicon-16x16.png b/website_and_docs/static/favicons/favicon-16x16.png
index 466c8ed36ae6..37b406271ae3 100644
Binary files a/website_and_docs/static/favicons/favicon-16x16.png and b/website_and_docs/static/favicons/favicon-16x16.png differ
diff --git a/website_and_docs/static/favicons/favicon-32x32.png b/website_and_docs/static/favicons/favicon-32x32.png
index e5e0e41f38a0..3b32949c5d16 100644
Binary files a/website_and_docs/static/favicons/favicon-32x32.png and b/website_and_docs/static/favicons/favicon-32x32.png differ
diff --git a/website_and_docs/static/favicons/favicon.ico b/website_and_docs/static/favicons/favicon.ico
index b1c7fb6bb271..80bf7ae9a9ac 100644
Binary files a/website_and_docs/static/favicons/favicon.ico and b/website_and_docs/static/favicons/favicon.ico differ
diff --git a/website_and_docs/static/favicons/pwa-192x192.png b/website_and_docs/static/favicons/pwa-192x192.png
index 9da58c16eeec..689e9af6c366 100644
Binary files a/website_and_docs/static/favicons/pwa-192x192.png and b/website_and_docs/static/favicons/pwa-192x192.png differ
diff --git a/website_and_docs/static/favicons/pwa-512x512.png b/website_and_docs/static/favicons/pwa-512x512.png
index d231acc270a4..863b95c5ca6b 100644
Binary files a/website_and_docs/static/favicons/pwa-512x512.png and b/website_and_docs/static/favicons/pwa-512x512.png differ
diff --git a/website_and_docs/static/favicons/tile150x150.png b/website_and_docs/static/favicons/tile150x150.png
index 4fd9d1bed3e7..5f27ff6f8421 100644
Binary files a/website_and_docs/static/favicons/tile150x150.png and b/website_and_docs/static/favicons/tile150x150.png differ
diff --git a/website_and_docs/static/favicons/tile310x310.png b/website_and_docs/static/favicons/tile310x310.png
index 58e4902bad0b..b7f0d2c66090 100644
Binary files a/website_and_docs/static/favicons/tile310x310.png and b/website_and_docs/static/favicons/tile310x310.png differ
diff --git a/website_and_docs/static/favicons/tile70x70.png b/website_and_docs/static/favicons/tile70x70.png
index 66d5fb1e64b0..8860c52d8cd2 100644
Binary files a/website_and_docs/static/favicons/tile70x70.png and b/website_and_docs/static/favicons/tile70x70.png differ
diff --git a/website_and_docs/static/images/blog/2024/20-selenium.jpg b/website_and_docs/static/images/blog/2024/20-selenium.jpg
new file mode 100644
index 000000000000..3379da3a955b
Binary files /dev/null and b/website_and_docs/static/images/blog/2024/20-selenium.jpg differ
diff --git a/website_and_docs/static/images/blog/2024/chrome-woes.jpeg b/website_and_docs/static/images/blog/2024/chrome-woes.jpeg
new file mode 100644
index 000000000000..975b566328fa
Binary files /dev/null and b/website_and_docs/static/images/blog/2024/chrome-woes.jpeg differ
diff --git a/website_and_docs/static/images/blog/2024/html-unit-remote.jpg b/website_and_docs/static/images/blog/2024/html-unit-remote.jpg
new file mode 100644
index 000000000000..f2006f09ca3f
Binary files /dev/null and b/website_and_docs/static/images/blog/2024/html-unit-remote.jpg differ
diff --git a/website_and_docs/static/images/blog/2024/multi-arch-docker-selenium.jpeg b/website_and_docs/static/images/blog/2024/multi-arch-docker-selenium.jpeg
new file mode 100644
index 000000000000..683613a952e1
Binary files /dev/null and b/website_and_docs/static/images/blog/2024/multi-arch-docker-selenium.jpeg differ
diff --git a/website_and_docs/static/images/blog/2024/saucelabs-selenium-partnership.jpeg b/website_and_docs/static/images/blog/2024/saucelabs-selenium-partnership.jpeg
new file mode 100644
index 000000000000..34575e304c44
Binary files /dev/null and b/website_and_docs/static/images/blog/2024/saucelabs-selenium-partnership.jpeg differ
diff --git a/website_and_docs/static/images/blog/2024/selenium_4.19.png b/website_and_docs/static/images/blog/2024/selenium_4.19.png
new file mode 100644
index 000000000000..74e5768422f4
Binary files /dev/null and b/website_and_docs/static/images/blog/2024/selenium_4.19.png differ
diff --git a/website_and_docs/static/images/blog/2024/selenium_4.20.png b/website_and_docs/static/images/blog/2024/selenium_4.20.png
new file mode 100644
index 000000000000..60ed3b487dfe
Binary files /dev/null and b/website_and_docs/static/images/blog/2024/selenium_4.20.png differ
diff --git a/website_and_docs/static/images/blog/2024/selenium_4.21.png b/website_and_docs/static/images/blog/2024/selenium_4.21.png
new file mode 100644
index 000000000000..f424c9fef067
Binary files /dev/null and b/website_and_docs/static/images/blog/2024/selenium_4.21.png differ
diff --git a/website_and_docs/static/images/blog/2024/selenium_4.24.png b/website_and_docs/static/images/blog/2024/selenium_4.24.png
new file mode 100644
index 000000000000..1f681d2ce4a0
Binary files /dev/null and b/website_and_docs/static/images/blog/2024/selenium_4.24.png differ
diff --git a/website_and_docs/static/images/blog/2024/selenium_4.25.jpg b/website_and_docs/static/images/blog/2024/selenium_4.25.jpg
new file mode 100644
index 000000000000..280f1699d54c
Binary files /dev/null and b/website_and_docs/static/images/blog/2024/selenium_4.25.jpg differ
diff --git a/website_and_docs/static/images/blog/2024/selenium_4.26.jpg b/website_and_docs/static/images/blog/2024/selenium_4.26.jpg
new file mode 100644
index 000000000000..0e3e76f9f5d6
Binary files /dev/null and b/website_and_docs/static/images/blog/2024/selenium_4.26.jpg differ
diff --git a/website_and_docs/static/images/blog/2024/selenium_4.27.webp b/website_and_docs/static/images/blog/2024/selenium_4.27.webp
new file mode 100644
index 000000000000..583d828c6fd7
Binary files /dev/null and b/website_and_docs/static/images/blog/2024/selenium_4.27.webp differ
diff --git a/website_and_docs/static/images/blog/2024/seleniumconf-appiumconf-featured-img.png b/website_and_docs/static/images/blog/2024/seleniumconf-appiumconf-featured-img.png
new file mode 100644
index 000000000000..04bef1721a15
Binary files /dev/null and b/website_and_docs/static/images/blog/2024/seleniumconf-appiumconf-featured-img.png differ
diff --git a/website_and_docs/static/images/blog/2025/lambdatest-selenium-development-partner.png b/website_and_docs/static/images/blog/2025/lambdatest-selenium-development-partner.png
new file mode 100644
index 000000000000..712d0245cef7
Binary files /dev/null and b/website_and_docs/static/images/blog/2025/lambdatest-selenium-development-partner.png differ
diff --git a/website_and_docs/static/images/blog/2025/selenium_4.28.jpg b/website_and_docs/static/images/blog/2025/selenium_4.28.jpg
new file mode 100644
index 000000000000..fe9706b80a7f
Binary files /dev/null and b/website_and_docs/static/images/blog/2025/selenium_4.28.jpg differ
diff --git a/website_and_docs/static/images/blog/2025/selenium_4.29.jpg b/website_and_docs/static/images/blog/2025/selenium_4.29.jpg
new file mode 100644
index 000000000000..d627a415933d
Binary files /dev/null and b/website_and_docs/static/images/blog/2025/selenium_4.29.jpg differ
diff --git a/website_and_docs/static/images/blog/2025/selenium_4.30.jpg b/website_and_docs/static/images/blog/2025/selenium_4.30.jpg
new file mode 100644
index 000000000000..e4a948f087d3
Binary files /dev/null and b/website_and_docs/static/images/blog/2025/selenium_4.30.jpg differ
diff --git a/website_and_docs/static/images/blog/2025/selenium_4.31.jpg b/website_and_docs/static/images/blog/2025/selenium_4.31.jpg
new file mode 100644
index 000000000000..a8374b70e789
Binary files /dev/null and b/website_and_docs/static/images/blog/2025/selenium_4.31.jpg differ
diff --git a/website_and_docs/static/images/blog/2025/selenium_4.32.jpg b/website_and_docs/static/images/blog/2025/selenium_4.32.jpg
new file mode 100644
index 000000000000..1f24f76ff216
Binary files /dev/null and b/website_and_docs/static/images/blog/2025/selenium_4.32.jpg differ
diff --git a/website_and_docs/static/images/blog/2025/selenium_4.33.jpg b/website_and_docs/static/images/blog/2025/selenium_4.33.jpg
new file mode 100644
index 000000000000..0da5201b9f8e
Binary files /dev/null and b/website_and_docs/static/images/blog/2025/selenium_4.33.jpg differ
diff --git a/website_and_docs/static/images/blog/2025/selenium_4.34.jpg b/website_and_docs/static/images/blog/2025/selenium_4.34.jpg
new file mode 100644
index 000000000000..34f43e30ae12
Binary files /dev/null and b/website_and_docs/static/images/blog/2025/selenium_4.34.jpg differ
diff --git a/website_and_docs/static/images/blog/2025/selenium_4.35.jpg b/website_and_docs/static/images/blog/2025/selenium_4.35.jpg
new file mode 100644
index 000000000000..c5043c9e7d22
Binary files /dev/null and b/website_and_docs/static/images/blog/2025/selenium_4.35.jpg differ
diff --git a/website_and_docs/static/images/programming/csharp.svg b/website_and_docs/static/images/programming/csharp.svg
deleted file mode 100644
index 94002839174f..000000000000
--- a/website_and_docs/static/images/programming/csharp.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128">
-  <path fill="#9B4F96" d="M115.4 30.7L67.1 2.9c-.8-.5-1.9-.7-3.1-.7-1.2 0-2.3.3-3.1.7l-48 27.9c-1.7 1-2.9 3.5-2.9 5.4v55.7c0 1.1.2 2.4 1 3.5l106.8-62c-.6-1.2-1.5-2.1-2.4-2.7z"></path>
-  <path fill="#68217A" d="M10.7 95.3c.5.8 1.2 1.5 1.9 1.9l48.2 27.9c.8.5 1.9.7 3.1.7 1.2 0 2.3-.3 3.1-.7l48-27.9c1.7-1 2.9-3.5 2.9-5.4V36.1c0-.9-.1-1.9-.6-2.8l-106.6 62z"></path>
-  <path fill="#fff" d="M85.3 76.1C81.1 83.5 73.1 88.5 64 88.5c-13.5 0-24.5-11-24.5-24.5s11-24.5 24.5-24.5c9.1 0 17.1 5 21.3 12.5l13-7.5c-6.8-11.9-19.6-20-34.3-20-21.8 0-39.5 17.7-39.5 39.5s17.7 39.5 39.5 39.5c14.6 0 27.4-8 34.2-19.8l-12.9-7.6zM97 66.2l.9-4.3h-4.2v-4.7h5.1L100 51h4.9l-1.2 6.1h3.8l1.2-6.1h4.8l-1.2 6.1h2.4v4.7h-3.3l-.9 4.3h4.2v4.7h-5.1l-1.2 6h-4.9l1.2-6h-3.8l-1.2 6h-4.8l1.2-6h-2.4v-4.7H97zm4.8 0h3.8l.9-4.3h-3.8l-.9 4.3z"></path>
-</svg>
\ No newline at end of file
diff --git a/website_and_docs/static/images/programming/dotnet.svg b/website_and_docs/static/images/programming/dotnet.svg
new file mode 100644
index 000000000000..d204a0904247
--- /dev/null
+++ b/website_and_docs/static/images/programming/dotnet.svg
@@ -0,0 +1,7 @@
+<svg width="456" height="456" viewBox="0 0 456 456" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect width="456" height="456" fill="#512BD4"/>
+<path d="M81.2738 291.333C78.0496 291.333 75.309 290.259 73.052 288.11C70.795 285.906 69.6665 283.289 69.6665 280.259C69.6665 277.173 70.795 274.529 73.052 272.325C75.309 270.121 78.0496 269.019 81.2738 269.019C84.5518 269.019 87.3193 270.121 89.5763 272.325C91.887 274.529 93.0424 277.173 93.0424 280.259C93.0424 283.289 91.887 285.906 89.5763 288.11C87.3193 290.259 84.5518 291.333 81.2738 291.333Z" fill="white"/>
+<path d="M210.167 289.515H189.209L133.994 202.406C132.597 200.202 131.441 197.915 130.528 195.546H130.044C130.474 198.081 130.689 203.508 130.689 211.827V289.515H112.149V171H134.477L187.839 256.043C190.096 259.57 191.547 261.994 192.192 263.316H192.514C191.977 260.176 191.708 254.859 191.708 247.365V171H210.167V289.515Z" fill="white"/>
+<path d="M300.449 289.515H235.561V171H297.87V187.695H254.746V221.249H294.485V237.861H254.746V272.903H300.449V289.515Z" fill="white"/>
+<path d="M392.667 187.695H359.457V289.515H340.272V187.695H307.143V171H392.667V187.695Z" fill="white"/>
+</svg>
diff --git a/website_and_docs/static/images/sponsors/Jetify-Wordmark.svg b/website_and_docs/static/images/sponsors/Jetify-Wordmark.svg
new file mode 100644
index 000000000000..d4ce744d077f
--- /dev/null
+++ b/website_and_docs/static/images/sponsors/Jetify-Wordmark.svg
@@ -0,0 +1,11 @@
+<svg width="725" height="222" viewBox="0 0 725 222" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M429.55 125.33C427.16 132.51 421.09 136.66 412 136.66C399.55 136.66 391.42 129.32 389.34 116.55H453.8C453.8 116.55 454.28 111.29 454.28 107.3C454.28 87.99 440.88 64.86 409.92 64.86C379.61 64.86 366.05 88.31 366.05 110.49C366.05 132.67 381.2 156.12 411.2 156.12C427.12 156.12 441.51 150.68 448.99 138.18L429.55 125.33ZM389.82 100.12C392.21 88.47 399.39 82.12 409.92 82.12C421.73 82.12 428.43 89.46 428.92 100.12H389.82ZM354.1 20.47C351.181 18.52 347.749 17.4794 344.238 17.4799C340.728 17.4803 337.296 18.5217 334.377 20.4725C331.459 22.4232 329.184 25.1956 327.841 28.4391C326.498 31.6826 326.147 35.2515 326.832 38.6946C327.517 42.1376 329.208 45.3002 331.691 47.7823C334.173 50.2644 337.336 51.9546 340.779 52.6391C344.223 53.3237 347.791 52.9718 351.035 51.6281C354.278 50.2844 357.05 48.0091 359 45.09C361.612 41.1746 362.564 36.3823 361.645 31.7659C360.726 27.1495 358.013 23.0867 354.1 20.47ZM517.86 85.61V66.3H496.47V36.51L472.85 46.63V66.3H458.65V85.61H472.85V124.55C472.85 144.98 486.58 155.99 504.93 155.99C509.347 156.132 513.746 155.373 517.86 153.76V133.65C514.796 135.004 511.468 135.656 508.12 135.56C500.94 135.56 496.47 130.94 496.47 122.32V85.61H517.86ZM321 185.82C340.89 186.62 354.37 173.52 354.37 152.9V66.28H342.78C339.597 66.28 336.545 67.5443 334.295 69.7947C332.044 72.0451 330.78 75.0974 330.78 78.28V149.7C330.78 159.93 326.28 165.37 318.1 165.37H314.25V185.66L321 185.82Z" fill="#280459"/>
+<path d="M555.202 155.205H531.913V66.8055H555.202V155.205Z" fill="#280459"/>
+<path d="M543.74 18C547.25 17.998 550.682 19.0369 553.602 20.9855H553.563C557.483 23.5943 560.207 27.6536 561.135 32.2705C562.064 36.8874 561.12 41.684 558.512 45.6055C556.563 48.5251 553.792 50.8012 550.55 52.146C547.307 53.4907 543.738 53.8438 540.295 53.1605C536.852 52.4771 533.688 50.7882 531.205 48.3071C528.721 45.826 527.029 42.6642 526.343 39.2215C525.656 35.7788 526.006 32.2099 527.348 28.9659C528.689 25.722 530.963 22.9487 533.881 20.9968C536.798 19.0449 540.229 18.002 543.74 18Z" fill="#280459"/>
+<path d="M663.352 152.184L628.504 66.296H656.664L676.904 119.272L697.144 66.296H724.424L675.496 187.032H648.392L663.352 152.184Z" fill="#280459"/>
+<path d="M580.657 60.664C580.657 50.104 583.825 41.8906 590.161 36.024C596.614 30.1573 604.769 27.224 614.625 27.224C619.67 27.224 623.836 27.8693 627.121 29.16V51.512C624.188 50.3386 621.196 49.752 618.145 49.752C614.625 49.752 611.809 50.8666 609.697 53.096C607.702 55.208 606.705 58.2586 606.705 62.248V66.296H627.121V87.416H606.705V155H580.657V87.416H566.929V66.296H580.657V60.664Z" fill="#280459"/>
+<path d="M104.4 107.39V107.3C115.3 86.68 133.79 48.08 144.47 25.57C142.024 24.5817 139.407 24.087 136.769 24.1145C134.131 24.142 131.525 24.691 129.1 25.73L25.4 70.22C25.4 70.22 58.81 80.95 104.4 107.39Z" fill="#280459"/>
+<path d="M158.75 143.14C176.51 122.46 205.4 88.81 218 74.14C221.729 77.8784 223.828 82.9398 223.84 88.22L223.67 201.14C223.67 201.14 200.73 174.69 158.67 143.22L158.75 143.14Z" fill="#280459"/>
+<path d="M0.52002 221.56C47.45 190.79 88.23 137.86 104.36 107.39C113.14 112.48 122.29 118.1 131.91 124.45C141.53 130.8 150.45 137.13 158.65 143.26C135.39 170.36 85.05 221.56 0.52002 221.56Z" fill="#280459"/>
+<path d="M201.882 0.555603C205.759 0.55564 209.548 1.70562 212.77 3.86002C217.083 6.7438 220.077 11.221 221.093 16.3091C222.109 21.3973 221.065 26.6807 218.19 31C216.042 34.2269 212.985 36.744 209.407 38.2329C205.828 39.7217 201.888 40.1154 198.085 39.3641C194.282 38.6127 190.788 36.7501 188.044 34.0119C185.3 31.2738 183.431 27.7833 182.671 23.9821C181.912 20.1809 182.298 16.2399 183.779 12.658C185.261 9.07603 187.772 6.01414 190.994 3.85981C194.217 1.70548 198.006 0.555566 201.882 0.555603Z" fill="#280459"/>
+</svg>
diff --git a/website_and_docs/static/images/sponsors/bright-data.png b/website_and_docs/static/images/sponsors/bright-data.png
new file mode 100644
index 000000000000..33d4574a3e27
Binary files /dev/null and b/website_and_docs/static/images/sponsors/bright-data.png differ
diff --git a/website_and_docs/static/images/sponsors/gwenify-logo.png b/website_and_docs/static/images/sponsors/gwenify-logo.png
new file mode 100644
index 000000000000..50de1ccdc423
Binary files /dev/null and b/website_and_docs/static/images/sponsors/gwenify-logo.png differ
diff --git a/website_and_docs/static/images/sponsors/kualtee.png b/website_and_docs/static/images/sponsors/kualtee.png
new file mode 100644
index 000000000000..e38fc42c8bc3
Binary files /dev/null and b/website_and_docs/static/images/sponsors/kualtee.png differ
diff --git a/website_and_docs/static/images/sponsors/mailsac-logo.png b/website_and_docs/static/images/sponsors/mailsac-logo.png
new file mode 100644
index 000000000000..90c6639aeee1
Binary files /dev/null and b/website_and_docs/static/images/sponsors/mailsac-logo.png differ
diff --git a/website_and_docs/static/images/sponsors/route4me-logo.png b/website_and_docs/static/images/sponsors/route4me-logo.png
new file mode 100644
index 000000000000..735b84f3cb00
Binary files /dev/null and b/website_and_docs/static/images/sponsors/route4me-logo.png differ
diff --git a/website_and_docs/static/images/sponsors/rtts-logo.png b/website_and_docs/static/images/sponsors/rtts-logo.png
new file mode 100644
index 000000000000..86891be5a0fe
Binary files /dev/null and b/website_and_docs/static/images/sponsors/rtts-logo.png differ
diff --git a/website_and_docs/static/images/sponsors/testingbot.png b/website_and_docs/static/images/sponsors/testingbot.png
new file mode 100644
index 000000000000..26939b6068f9
Binary files /dev/null and b/website_and_docs/static/images/sponsors/testingbot.png differ
diff --git a/website_and_docs/static/js/docsearch-fix.js b/website_and_docs/static/js/docsearch-fix.js
new file mode 100644
index 000000000000..230a7b607984
--- /dev/null
+++ b/website_and_docs/static/js/docsearch-fix.js
@@ -0,0 +1,25 @@
+let originalDocsearch = null;
+
+Object.defineProperty(window, 'docsearch', {
+  get: function() {
+    return function(config) {
+      if (originalDocsearch) {
+        try {
+          const container = typeof config.container === 'string' 
+            ? document.querySelector(config.container) 
+            : config.container;
+          
+          if (container) {
+            return originalDocsearch(config);
+          }
+        } catch (error) {
+          // Silently ignore errors
+        }
+      }
+    };
+  },
+  set: function(value) {
+    originalDocsearch = value;
+  },
+  configurable: true
+});
