Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
cb38f24
[js] Ensure BiDi is not exposed on driver
pujagani Jul 28, 2026
a9f2bc5
[py] Include generated files in API docs published on Read the Docs (…
cgoldberg Jul 28, 2026
0293446
[py] Fix docs build for RtD (#17830)
cgoldberg Jul 28, 2026
3760c6c
[py] Revert RtD doc build changes (#17831)
cgoldberg Jul 28, 2026
9fd65b5
[build] BiDi schema generation cleanup (#17837)
titusfortner Jul 28, 2026
247f469
[java][bidi] Remove subscription scope (#17842)
pujagani Jul 29, 2026
e21617c
[build] Merge vendor cddl files into shared BiDi schema and implement…
titusfortner Jul 29, 2026
fc654de
[grid] honor client-advertised se:remoteUrl for reachable BiDi/CDP/VN…
titusfortner Jul 29, 2026
618f12b
[rb] tolerate and warn on missing required inbound BiDi fields, with …
titusfortner Jul 29, 2026
06be624
[build] reconcile API-compatibility invariant with the deprecation po…
titusfortner Jul 29, 2026
8daa0d1
[java][js][rb] remove deprecated FTP proxy support (#17846)
titusfortner Jul 30, 2026
bf18c11
[rust] locate Chrome and Edge in known install directories (#17838)
titusfortner Jul 30, 2026
144db0c
[dotnet][py][rb] prevent CDP access with Firefox (#17849)
titusfortner Jul 31, 2026
7cd29f9
[rb] test matchers assert log entries by id and optional messages and…
titusfortner Jul 31, 2026
2762f55
[rb] ensure ruby tests are properly linted (#17850)
titusfortner Jul 31, 2026
f47fbb6
[bidi] Correct float/enum type fidelity in the shared schema and vali…
titusfortner Jul 31, 2026
6d75941
[bidi] mark BiDi types extensible per spec and update Ruby handling (…
titusfortner Aug 1, 2026
83f26a2
[rb] add browser_family test guard and use it for chromium/safari fam…
titusfortner Aug 1, 2026
9912e65
[dotnet] [bidi] Don't warn if there are no subscribers (#17857)
nvborisenko Aug 2, 2026
89ad5bb
[rb] raise typed WebDriver errors for BiDi from a generated error-cod…
titusfortner Aug 2, 2026
47edefb
[grid] Store Dynamic Grid videos in a per-session subfolder via SE_VI…
VietND96 Aug 2, 2026
e107560
[grid] inherit the Node Pod container securityContext for Dynamic Gri…
VietND96 Aug 2, 2026
4c6f3a5
[rb] allow pending test guards to require matching provided exception…
titusfortner Aug 2, 2026
de243e1
[build] update rerun with debug so console sees all test output
titusfortner Aug 3, 2026
812df70
[build] failing .NET integration tests need to rerun with debug
titusfortner Aug 3, 2026
10eeb94
[dotnet][java][py][rb] pass --enable-chrome-logs unless CHROME_LOG_FI…
titusfortner Aug 3, 2026
0ad0c51
[rb] support custom vendor specific capabilities in options classes (…
titusfortner Aug 3, 2026
e0658c9
[rb] validate BiDi outbound ref fields against their declared type (#…
titusfortner Aug 3, 2026
014d72b
[rb] fix tests and custom matchers to work with SE_DEBUG (#17863)
titusfortner Aug 3, 2026
094f26f
[build] derive per-type inbound/outbound directionality in the shared…
titusfortner Aug 3, 2026
92223f9
[build] Automated Browser Version Update (#17839)
selenium-ci Aug 3, 2026
5b1cde1
[rb] generate BiDi domain type accessors and union variant factories …
titusfortner Aug 3, 2026
5ae1a8e
[build] update node versioning for testing and publishing (#17866)
titusfortner Aug 3, 2026
d9b3424
[build] Automated Browser Version Update (#17868)
selenium-ci Aug 4, 2026
778cc7a
[py] accept By in find_element/find_elements type hints (#17870)
titusfortner Aug 4, 2026
a421014
[build] update CDP from daily pin browser workflow (#17872)
titusfortner Aug 4, 2026
7e1c3fd
[build] re-lock Gemfile after CDP update
titusfortner Aug 4, 2026
88e2d0c
[js] Wait for async BiDi events and window resize in flaky tests (#17…
titusfortner Aug 5, 2026
05a002e
[dotnet] fix flaky cancellation test to accept OperationCanceledExcep…
titusfortner Aug 5, 2026
960abd2
[dotnet][java][js][rb] deprecate invalid Firefox profile code (#17871)
titusfortner Aug 5, 2026
a25afbb
[build] Automated Browser Version Update with CDP (#17873)
selenium-ci Aug 5, 2026
4376465
[build] patch rules_ruby to emit Windows batch launchers with CRLF
titusfortner Aug 5, 2026
4efbdf0
[grid] Dynamic K8s video always use the per-session subfolder; remove…
VietND96 Aug 5, 2026
b9d61b7
[rust] Prevent empty driver version from being cached in metadata (#1…
MathiasPaulenko Aug 5, 2026
62b6294
[dotnet] support SE_*DRIVER environment variables to set driver locat…
titusfortner Aug 5, 2026
4f1e333
[dotnet] [bidi] Make BiDi transport factories composable (#17877)
nvborisenko Aug 5, 2026
d879eda
[java] Fix By.className()/By.id() misescaping non-ASCII leading digit…
diemol Aug 6, 2026
06a692e
[py] fix no_proxy matching so empty entries and substrings do not byp…
navin772 Aug 7, 2026
e653359
[js] Ensure BiDi is not exposed on driver
pujagani Jul 28, 2026
2487694
Merge branch 'bidi-access-js' of https://github.com/pujagani/selenium…
pujagani Aug 7, 2026
6b2b086
[java] Fix By.name() double String.format on names containing '%' (#1…
titusfortner Aug 7, 2026
076d428
[dotnet] [bidi] Remove optional command timeout in command options (#…
nvborisenko Aug 7, 2026
8d23c98
[py] Ensure driver service subprocess resources are cleaned up (#17889)
cgoldberg Aug 9, 2026
f72f9ec
[build] Add java:local_dev rake task for IntelliJ IDEA project setup …
titusfortner Aug 9, 2026
f369e9f
[rust] Test Selenium Manager on Linux arm64 (#16045)
dennisameling Aug 10, 2026
abc24f4
[build] Automated Browser Version Update (#17880)
selenium-ci Aug 10, 2026
0979dd4
[js] Ensure BiDi is not exposed on driver
pujagani Jul 28, 2026
705971e
Merge branch 'bidi-access-js' of https://github.com/pujagani/selenium…
pujagani Aug 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 2 additions & 1 deletion .bazelignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ dotnet/src/support/bin
dotnet/src/support/obj
dotnet/src/webdriver/bin
dotnet/src/webdriver/obj
java/build/production
java-libs
java/build
java/client/build
java/server/build
javascript/atoms/node_modules
Expand Down
16 changes: 10 additions & 6 deletions .github/workflows/bazel.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ on:
type: boolean
default: false
node-version:
description: Custom Node version to install
description: Custom Node version to use
required: false
type: string
default: ''
Expand Down Expand Up @@ -91,11 +91,17 @@ on:
required: false
type: boolean
default: false
outputs:
output:
description: Value the run script writes to $GITHUB_OUTPUT as "output=..."; empty when unused
value: ${{ jobs.bazel.outputs.output }}

jobs:
bazel:
name: ${{ inputs.name }}
runs-on: ${{ contains(inputs.os, '-') && inputs.os || format('{0}-latest', inputs.os) }}
outputs:
output: ${{ steps.run-bazel.outputs.output }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SEL_M2_USER: ${{ secrets.SEL_M2_USER }}
Expand Down Expand Up @@ -145,7 +151,7 @@ jobs:
env:
GIT_REF: ${{ github.ref }}
- name: Delete browsers and drivers
if: inputs.os == 'ubuntu' || inputs.os == 'macos'
if: startsWith(inputs.os, 'ubuntu') || inputs.os == 'macos'
run: ./scripts/github-actions/delete-browsers-drivers.sh
- name: Delete drivers (Windows)
if: inputs.os == 'windows'
Expand Down Expand Up @@ -182,11 +188,9 @@ jobs:
- name: Set Ruby version
if: inputs.ruby-version != ''
run: echo '${{ inputs.ruby-version }}' > rb/.ruby-version
- name: Setup Node
- name: Set Node version
if: inputs.node-version != ''
uses: actions/setup-node@v6
with:
node-version: ${{ inputs.node-version }}
run: echo '${{ inputs.node-version }}' > .nvmrc
- name: Setup Bazel with caching
continue-on-error: true
timeout-minutes: 10
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/ci-dotnet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ jobs:
name: Browser Tests
os: windows
needs-display: true
rerun-with-debug: true
run: |
bazel test //dotnet/test/webdriver:ElementFindingTests-firefox //dotnet/test/webdriver:ElementFindingTests-chrome
Expand All @@ -41,5 +42,6 @@ jobs:
name: Remote Tests
os: windows
needs-display: true
rerun-with-debug: true
run: |
bazel test //dotnet/test/remote --flaky_test_attempts=3
30 changes: 30 additions & 0 deletions .github/workflows/ci-javascript.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: CI - JavaScript

on:
workflow_call:
workflow_dispatch:

permissions:
contents: read

jobs:
build:
name: Build
uses: ./.github/workflows/bazel.yml
with:
name: Build
run: bazel build //javascript/selenium-webdriver

unit-tests:
name: Unit Tests
uses: ./.github/workflows/bazel.yml
strategy:
fail-fast: false
matrix:
node-version: ['22.22.0', '24.14.1']
os: [ubuntu]
with:
name: Unit Tests (${{ matrix.node-version }}, ${{ matrix.os }})
os: ${{ matrix.os }}
node-version: ${{ matrix.node-version }}
run: bazel test --local_test_jobs 1 //javascript/selenium-webdriver:small-tests
12 changes: 9 additions & 3 deletions .github/workflows/ci-ruby.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@ name: CI - Ruby

on:
workflow_call:
inputs:
smoke:
description: Run smoke tests only (callers pass false to run the full matrix)
required: false
type: boolean
default: true
workflow_dispatch:
inputs:
smoke:
Expand All @@ -25,7 +31,7 @@ jobs:
# covers truffleruby and the most recent MRI release.
unit-tests:
name: Unit Tests
if: github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && !inputs.smoke)
if: github.event_name == 'schedule' || !inputs.smoke
uses: ./.github/workflows/bazel.yml
strategy:
fail-fast: false
Expand All @@ -48,7 +54,7 @@ jobs:

smoke:
name: ${{ matrix.os }}-smoke
if: github.event_name != 'schedule' && (github.event_name != 'workflow_dispatch' || inputs.smoke)
if: github.event_name != 'schedule' && inputs.smoke
uses: ./.github/workflows/bazel.yml
strategy:
fail-fast: false
Expand Down Expand Up @@ -79,7 +85,7 @@ jobs:

os-tests-full:
name: ${{ matrix.os }}-full
if: github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && !inputs.smoke)
if: github.event_name == 'schedule' || !inputs.smoke
uses: ./.github/workflows/bazel.yml
strategy:
fail-fast: false
Expand Down
36 changes: 32 additions & 4 deletions .github/workflows/ci-rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,12 @@ jobs:
include:
- os: macos
- os: ubuntu
- os: ubuntu-24.04-arm
- os: windows
with:
name: Tests (${{ matrix.os }})
os: ${{ matrix.os }}
rerun-with-debug: true
run: bazel test --test_env=RUST_BACKTRACE=full --test_env=RUST_TEST_NOCAPTURE=1 --flaky_test_attempts=3 //rust/...

windows-stable:
Expand Down Expand Up @@ -112,17 +114,28 @@ jobs:
- name: "Install cross"
run: |
cargo install cross --git https://github.com/cross-rs/cross
- name: "Build release binary"
- name: "Build release binary (x64)"
run: cross build --target x86_64-unknown-linux-musl --release
working-directory: rust
- name: "Build release binary (arm64)"
run: cross build --target aarch64-unknown-linux-musl --release
working-directory: rust
- name: "Rename binary"
run: mv rust/target/x86_64-unknown-linux-musl/release/selenium-manager selenium-manager-linux
run: |
mv rust/target/x86_64-unknown-linux-musl/release/selenium-manager selenium-manager-linux
mv rust/target/aarch64-unknown-linux-musl/release/selenium-manager selenium-manager-linux-arm64
- name: "Upload release binary"
uses: actions/upload-artifact@v7
with:
name: selenium-manager-linux
path: selenium-manager-linux
retention-days: 6
- name: "Upload release binary"
uses: actions/upload-artifact@v7
with:
name: selenium-manager-linux-arm64
path: selenium-manager-linux-arm64
retention-days: 6

linux-debug:
name: "Linux Debug"
Expand All @@ -141,18 +154,30 @@ jobs:
- name: "Install cross"
run: |
cargo install cross --git https://github.com/cross-rs/cross
- name: "Build release binary"
- name: "Build release binary (x64)"
run: |
cross build --target x86_64-unknown-linux-musl --profile dev
cd target/x86_64-unknown-linux-musl/debug
tar -cvf ../../../../selenium-manager-linux-debug.tar selenium-manager
working-directory: rust
- name: "Build release binary (arm64)"
run: |
cross build --target aarch64-unknown-linux-musl --profile dev
cd target/aarch64-unknown-linux-musl/debug
tar -cvf ../../../../selenium-manager-linux-arm64-debug.tar selenium-manager
working-directory: rust
- name: "Upload release binary"
uses: actions/upload-artifact@v7
with:
name: selenium-manager-linux-debug
path: selenium-manager-linux-debug.tar
retention-days: 6
- name: "Upload release binary"
uses: actions/upload-artifact@v7
with:
name: selenium-manager-linux-arm64-debug
path: selenium-manager-linux-arm64-debug.tar
retention-days: 6

macos-stable:
name: "MacOS Stable"
Expand Down Expand Up @@ -271,11 +296,12 @@ jobs:
- name: "Prepare and Commit"
run: |
linux_sha=$(shasum -a 256 artifacts/selenium-manager-linux/selenium-manager-linux | awk '{print $1}')
linux_arm64_sha=$(shasum -a 256 artifacts/selenium-manager-linux-arm64/selenium-manager-linux-arm64 | awk '{print $1}')
macos_sha=$(shasum -a 256 artifacts/selenium-manager-macos/selenium-manager-macos | awk '{print $1}')
windows_sha=$(shasum -a 256 artifacts/selenium-manager-windows/selenium-manager-windows.exe | awk '{print $1}')
sbom_sha=$(shasum -a 256 artifacts/selenium-manager-sbom/selenium-manager.cdx.json | awk '{print $1}')
notice_sha=$(shasum -a 256 artifacts/selenium-manager-sbom/selenium-manager-THIRD-PARTY-NOTICES.txt | awk '{print $1}')
echo "{\"macos\": \"$macos_sha\", \"windows\": \"$windows_sha\", \"linux\": \"$linux_sha\", \"sbom\": \"$sbom_sha\", \"notice\": \"$notice_sha\"}" > latest.json
echo "{\"macos\": \"$macos_sha\", \"windows\": \"$windows_sha\", \"linux\": \"$linux_sha\", \"linux-arm64\": \"$linux_arm64_sha\", \"sbom\": \"$sbom_sha\", \"notice\": \"$notice_sha\"}" > latest.json
git config --local user.email "selenium-ci@users.noreply.github.com"
git config --local user.name "Selenium CI Bot"
git add latest.json
Expand All @@ -294,9 +320,11 @@ jobs:
prerelease: false
files: |
artifacts/selenium-manager-linux/selenium-manager-linux
artifacts/selenium-manager-linux-arm64/selenium-manager-linux-arm64
artifacts/selenium-manager-macos/selenium-manager-macos
artifacts/selenium-manager-windows/selenium-manager-windows.exe
artifacts/selenium-manager-linux-debug/selenium-manager-linux-debug.tar
artifacts/selenium-manager-linux-arm64-debug/selenium-manager-linux-arm64-debug.tar
artifacts/selenium-manager-macos-debug/selenium-manager-macos-debug.tar
artifacts/selenium-manager-windows-debug/selenium-manager-windows-debug.exe
artifacts/selenium-manager-sbom/selenium-manager.cdx.json
Expand Down
14 changes: 12 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
[ "${{ github.event_name }}" == "workflow_call" ] || \
[ "${{ github.event_name }}" == "workflow_dispatch" ]; then
echo "Running all targets for ${{ github.event_name }} event"
echo "//java/... //py/... //rb/... //dotnet/... //rust/..." > bazel-targets.txt
echo "//java/... //py/... //rb/... //dotnet/... //rust/... //javascript/..." > bazel-targets.txt
else
if [ -n "${{ github.event.pull_request.base.sha }}" ]; then
BASE_SHA="HEAD^1"
Expand Down Expand Up @@ -70,6 +70,7 @@ jobs:
rb: ${{ steps.read.outputs.rb }}
dotnet: ${{ steps.read.outputs.dotnet }}
rust: ${{ steps.read.outputs.rust }}
js: ${{ steps.read.outputs.js }}
steps:
- name: Download targets
uses: actions/download-artifact@v8
Expand Down Expand Up @@ -101,6 +102,7 @@ jobs:
check_binding "openqa/selenium/grid" "grid"
check_binding "//dotnet" "dotnet"
check_binding "//rust" "rust"
check_binding "//javascript" "js"
process_binding "//rb" "rb"
process_binding "//py" "py"
- name: Upload target files
Expand Down Expand Up @@ -138,6 +140,8 @@ jobs:
needs: read-targets
uses: ./.github/workflows/ci-ruby.yml
if: needs.read-targets.outputs.rb != ''
with:
smoke: ${{ !(github.head_ref == 'pinned-browser-updates' && contains(github.event.pull_request.title, '(major)')) }}

rust:
name: Rust
Expand All @@ -147,10 +151,16 @@ jobs:
SELENIUM_CI_TOKEN: ${{ secrets.SELENIUM_CI_TOKEN }}
if: needs.read-targets.outputs.rust != ''

javascript:
name: JavaScript
needs: read-targets
uses: ./.github/workflows/ci-javascript.yml
if: needs.read-targets.outputs.js != ''

ci-success:
name: CI Success
if: always()
needs: [check, read-targets, dotnet, java, grid, python, ruby, rust]
needs: [check, read-targets, dotnet, java, grid, python, ruby, rust, javascript]
runs-on: ubuntu-latest
steps:
- name: Verify required jobs succeeded
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/pin-browsers.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
uses: ./.github/workflows/bazel.yml
with:
name: Pin Browsers
run: bazel run //scripts:pinned_browsers
run: ./scripts/github-actions/update_browsers.sh
artifact-name: pinned-browsers

create-pr:
Expand Down Expand Up @@ -49,9 +49,9 @@ jobs:
commit-message: "Update pinned browser versions"
author: Selenium CI Bot <selenium-ci@users.noreply.github.com>
base: trunk
title: "[build] Automated Browser Version Update"
title: "[build] Automated Browser Version Update${{ contains(needs.update.outputs.output, 'major') && ' (major)' || '' }}${{ contains(needs.update.outputs.output, 'cdp') && ' with CDP' || '' }}"
body: |
This is an automated pull request to update pinned browsers and drivers
This is an automated pull request to update pinned browsers and drivers.${{ contains(needs.update.outputs.output, 'major') && ' Major Chrome/Firefox bump: CI runs the full Ruby matrix.' || '' }}${{ contains(needs.update.outputs.output, 'cdp') && ' Chrome DevTools (CDP) was regenerated to match.' || '' }}

Merge after verifying the new browser versions are properly passing the tests
branch: "pinned-browser-updates"
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ jobs:
name: Publish ${{ matrix.language }}
gpg-sign: ${{ matrix.language == 'java' }}
gem-trusted-publishing: ${{ matrix.language == 'ruby' }}
node-version: ${{ matrix.language == 'javascript' && '24' || '' }}
node-version: ${{ matrix.language == 'javascript' && '24.14.1' || '' }}
run: |
if [ "${{ matrix.language == 'java' && (needs.parse-tag.outputs.language == 'all' || needs.parse-tag.outputs.language == 'java') && github.run_attempt > 1 }}" = "true" ]; then
echo "::error::Java release is not yet rerun-safe — check/drop the staging repo at https://central.sonatype.com/publishing/deployments and publish manually"
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ projectFilesBackup/
.svn
.credentials.dat
.ijwb
/java-libs
mockpiframe.log
mockpiframe.log.lck
junitvmwatcher*.properties
Expand Down
13 changes: 13 additions & 0 deletions .idea/libraries/java-libs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 0 additions & 21 deletions .idea/libraries/libcdp.xml

This file was deleted.

2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
22.22.0
Loading