Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
04b389f
[java][bidi] Add BiDi code generator
pujagani Jul 14, 2026
733f0d8
Fixing CI. Fixing bugs to match the low-level contract
pujagani Jul 22, 2026
95e1e95
Address comments
pujagani Jul 22, 2026
e1c3689
Address comments
pujagani Jul 22, 2026
fad9cde
Fix tests
pujagani Jul 22, 2026
a2fa95c
Address comments
pujagani Jul 22, 2026
7e5e00c
Ensure Javadoc is there
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
9810406
[java][bidi] Add BiDi code generator
pujagani Jul 14, 2026
be81a6a
Fixing CI. Fixing bugs to match the low-level contract
pujagani Jul 22, 2026
2c82de3
Address comments
pujagani Jul 22, 2026
4139a8e
Address comments
pujagani Jul 22, 2026
cf5b6c7
Fix tests
pujagani Jul 22, 2026
2395d06
Address comments
pujagani Jul 22, 2026
fe68da5
Ensure Javadoc is there
pujagani Jul 29, 2026
c72ff7f
Merge branch 'java-bidi-codegen' of https://github.com/pujagani/selen…
pujagani Aug 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 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 @@ -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
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 .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
22.22.0
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ The repository README is aimed at contributors; end-user docs live elsewhere.
- If `.local/agent/skills/` exists, inspect its `*/SKILL.md` files and treat them as additional user-defined skills.

## Invariants (don't violate unless explicitly asked)
- Maintain API/ABI compatibility - users upgrade by changing only version number
- Maintain API/ABI compatibility by default (users upgrade by changing only the version number); public functionality may be removed only after it has gone through the [Deprecation policy](#deprecation-policy) below
- Avoid repo-wide refactors/formatting; prefer small, reversible diffs

## Toolchain
Expand Down
11 changes: 10 additions & 1 deletion MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,15 @@ single_version_override(
],
)

# Patch support for bazel-contrib/rules_ruby#393 remove in next rules_ruby release
single_version_override(
module_name = "rules_ruby",
patch_strip = 1,
patches = [
"//third_party/bazel:rules_ruby_windows_batch_crlf.patch",
],
)

multitool = use_extension("@rules_multitool//multitool:extension.bzl", "multitool")
multitool.hub(lockfile = "//:multitool.lock.json")
use_repo(multitool, "multitool")
Expand All @@ -76,7 +85,7 @@ linter.configure(
linter.register(name = "rust-rustfmt")

node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node")
node.toolchain(node_version = "22.22.0")
node.toolchain(node_version_from_nvmrc = "//:.nvmrc")

pnpm = use_extension(
"@aspect_rules_js//npm:extensions.bzl",
Expand Down
4 changes: 4 additions & 0 deletions common/bidi/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
exports_files(
glob(["*.cddl"]),
visibility = ["//javascript/selenium-webdriver:__pkg__"],
)
8 changes: 8 additions & 0 deletions common/bidi/webdriver-bidi-1140.cddl
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
; Local copy of w3c/webdriver-bidi#1140: adds the webExtension.install extension point.
; Overrides the upstream closed InstallParameters. Delete once #1140 merges and the
; pinned webref carries it. https://github.com/w3c/webdriver-bidi/pull/1140
webExtension.InstallParameters = {
extensionData: webExtension.ExtensionData,
webExtension.InstallParametersExtension,
}
webExtension.InstallParametersExtension = ( Extensible )
7 changes: 7 additions & 0 deletions common/bidi/webextension-install-extensions.cddl
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
; Firefox vendor fields for webExtension.install, matching Mozilla's agreed CDDL (bug 2057588,
; pending merge). Once it lands, repoint vendor_cddl_files at Mozilla's file and delete this.
; https://bugzilla.mozilla.org/show_bug.cgi?id=2057588
webExtension.InstallParametersExtension //= (
? "moz:allowPrivateBrowsing": bool .default false,
? "moz:permanent": bool .default false,
)
Loading
Loading