From b1278378b501917e7d8b45cf71422d569db51384 Mon Sep 17 00:00:00 2001 From: Corey Goldberg <1113081+cgoldberg@users.noreply.github.com> Date: Sun, 26 Oct 2025 16:50:15 -0400 Subject: [PATCH 01/11] Upgrade tests to use 4.38 and Python 3.14 --- .github/workflows/python-examples.yml | 10 +++++----- examples/dotnet/SeleniumDocs/SeleniumDocs.csproj | 4 ++-- examples/java/build.gradle | 2 +- examples/java/pom.xml | 2 +- examples/kotlin/pom.xml | 2 +- examples/python/requirements.txt | 10 +++++----- examples/python/tox.ini | 4 ++-- examples/ruby/Gemfile | 4 ++-- examples/ruby/Gemfile.lock | 12 ++++++------ examples/ruby/spec/drivers/remote_webdriver_spec.rb | 2 +- 10 files changed, 26 insertions(+), 26 deletions(-) diff --git a/.github/workflows/python-examples.yml b/.github/workflows/python-examples.yml index 60fc47bc2feb..996798294969 100644 --- a/.github/workflows/python-examples.yml +++ b/.github/workflows/python-examples.yml @@ -28,22 +28,22 @@ jobs: include: - os: ubuntu release: stable - python: '3.9' + python: '3.10' - os: ubuntu release: nightly - python: '3.11' + python: '3.14' - os: windows release: stable - python: '3.9' + python: '3.10' - os: windows release: nightly - python: '3.12' + python: '3.14' - os: macos release: stable python: '3.10' - os: macos release: nightly - python: '3.13' + python: '3.14' runs-on: ${{ format('{0}-latest', matrix.os) }} steps: - name: Checkout GitHub repo diff --git a/examples/dotnet/SeleniumDocs/SeleniumDocs.csproj b/examples/dotnet/SeleniumDocs/SeleniumDocs.csproj index 688c6fe598b6..08582d0ea2b0 100644 --- a/examples/dotnet/SeleniumDocs/SeleniumDocs.csproj +++ b/examples/dotnet/SeleniumDocs/SeleniumDocs.csproj @@ -10,8 +10,8 @@ - - + + diff --git a/examples/java/build.gradle b/examples/java/build.gradle index ba3a2a0af90b..38a69565da1a 100644 --- a/examples/java/build.gradle +++ b/examples/java/build.gradle @@ -10,7 +10,7 @@ repositories { } dependencies { - testImplementation 'org.seleniumhq.selenium:selenium-java:4.35.0' + testImplementation 'org.seleniumhq.selenium:selenium-java:4.38.0' testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.13.4' } diff --git a/examples/java/pom.xml b/examples/java/pom.xml index 716651c36fcd..d5f8c184b8e0 100644 --- a/examples/java/pom.xml +++ b/examples/java/pom.xml @@ -13,7 +13,7 @@ 17 17 UTF-8 - 4.35.0 + 4.38.0 diff --git a/examples/kotlin/pom.xml b/examples/kotlin/pom.xml index 6a581f45258c..8ecdbd8a4980 100644 --- a/examples/kotlin/pom.xml +++ b/examples/kotlin/pom.xml @@ -19,7 +19,7 @@ 3.5.3 11 - 4.35.0 + 4.38.0 ${java.version} ${java.version} diff --git a/examples/python/requirements.txt b/examples/python/requirements.txt index a73ed85c8f66..f17042570c0a 100644 --- a/examples/python/requirements.txt +++ b/examples/python/requirements.txt @@ -1,9 +1,9 @@ -selenium==4.35.0 -pytest==8.4.1 -trio==0.30.0 +selenium==4.38.0 +pytest==8.4.2 +trio==0.31.0 pytest-trio==0.8.0 -pytest-rerunfailures==15.1 +pytest-rerunfailures==16.1 flake8==7.3.0 requests==2.32.5 -tox==4.28.4 +tox==4.32.0 pytest-xdist==3.8.0 diff --git a/examples/python/tox.ini b/examples/python/tox.ini index 49c6f636bb75..9438f9eb3999 100644 --- a/examples/python/tox.ini +++ b/examples/python/tox.ini @@ -2,7 +2,7 @@ # 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 " (i.e.: "tox -e py313") +# For a specific environment, run: "tox -e " (i.e.: "tox -e py314") # # 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 @@ -11,11 +11,11 @@ [tox] env_list = - py39 py310 py311 py312 py313 + py314 skip_missing_interpreters = True [testenv] diff --git a/examples/ruby/Gemfile b/examples/ruby/Gemfile index 7bc7e7bf0d5b..0c14907e08c9 100644 --- a/examples/ruby/Gemfile +++ b/examples/ruby/Gemfile @@ -7,5 +7,5 @@ gem 'rake', '~> 13.0' gem 'rspec', '~> 3.0' gem 'rubocop', '~> 1.35' gem 'rubocop-rspec', '~> 3.0' -gem 'selenium-devtools', '= 0.139.0' -gem 'selenium-webdriver', '= 4.35.0' +gem 'selenium-devtools', '= 0.142.0' +gem 'selenium-webdriver', '= 4.38.0' diff --git a/examples/ruby/Gemfile.lock b/examples/ruby/Gemfile.lock index 237489957a7c..6a30f9dfc322 100644 --- a/examples/ruby/Gemfile.lock +++ b/examples/ruby/Gemfile.lock @@ -17,7 +17,7 @@ GEM rainbow (3.1.1) rake (13.3.0) regexp_parser (2.11.2) - rexml (3.4.1) + rexml (3.4.4) rspec (3.13.1) rspec-core (~> 3.13.0) rspec-expectations (~> 3.13.0) @@ -49,10 +49,10 @@ GEM lint_roller (~> 1.1) rubocop (~> 1.72, >= 1.72.1) ruby-progressbar (1.13.0) - rubyzip (2.4.1) - selenium-devtools (0.139.0) + rubyzip (3.2.1) + selenium-devtools (0.142.0) selenium-webdriver (~> 4.2) - selenium-webdriver (4.35.0) + selenium-webdriver (4.38.0) base64 (~> 0.2) logger (~> 1.4) rexml (~> 3.2, >= 3.2.5) @@ -77,8 +77,8 @@ DEPENDENCIES rspec (~> 3.0) rubocop (~> 1.35) rubocop-rspec (~> 3.0) - selenium-devtools (= 0.139.0) - selenium-webdriver (= 4.35.0) + selenium-devtools (= 0.142.0) + selenium-webdriver (= 4.38.0) BUNDLED WITH 2.5.6 diff --git a/examples/ruby/spec/drivers/remote_webdriver_spec.rb b/examples/ruby/spec/drivers/remote_webdriver_spec.rb index d2d9c43e73d7..322f493425af 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.new(File.expand_path(File.join('..', '..', '..', 'selenium-server-4.35.0.jar'), __dir__), + Selenium::Server.new(File.expand_path(File.join('..', '..', '..', 'selenium-server-4.38.0.jar'), __dir__), background: true, args: %w[--selenium-manager true --enable-managed-downloads true]) end From 5897e34703e37c7cbeb8309f48c12f1f5815647c Mon Sep 17 00:00:00 2001 From: Corey Goldberg <1113081+cgoldberg@users.noreply.github.com> Date: Sun, 26 Oct 2025 17:02:58 -0400 Subject: [PATCH 02/11] Upgrade devtools versions in tests --- .../dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs | 14 +++++++------- .../java/dev/selenium/bidi/cdp/CdpApiTest.java | 8 ++++---- .../java/dev/selenium/bidi/cdp/NetworkTest.java | 8 ++++---- examples/python/tests/bidi/cdp/test_network.py | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs b/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs index 325092813e06..2bec43fe39bd 100644 --- a/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs +++ b/examples/dotnet/SeleniumDocs/BiDi/CDP/NetworkTest.cs @@ -4,8 +4,8 @@ using OpenQA.Selenium; using OpenQA.Selenium.DevTools; using System.Linq; -using OpenQA.Selenium.DevTools.V137.Network; -using OpenQA.Selenium.DevTools.V137.Performance; +using OpenQA.Selenium.DevTools.V142.Network; +using OpenQA.Selenium.DevTools.V142.Performance; namespace SeleniumDocs.BiDi.CDP @@ -16,7 +16,7 @@ public class NetworkTest : BaseTest [TestInitialize] public void Startup() { - StartDriver("137"); + StartDriver("142"); } [TestMethod] @@ -109,9 +109,9 @@ public async Task PerformanceMetrics() driver.Url = "https://www.selenium.dev/selenium/web/frameset.html"; var session = ((IDevTools)driver).GetDevToolsSession(); - var domains = session.GetVersionSpecificDomains(); + var domains = session.GetVersionSpecificDomains(); - await domains.Performance.Enable(new OpenQA.Selenium.DevTools.V137.Performance.EnableCommandSettings()); + await domains.Performance.Enable(new OpenQA.Selenium.DevTools.V142.Performance.EnableCommandSettings()); var metricsResponse = await session.SendCommand( new GetMetricsCommandSettings() @@ -130,8 +130,8 @@ await session.SendCommand( public async Task SetCookie() { var session = ((IDevTools)driver).GetDevToolsSession(); - var domains = session.GetVersionSpecificDomains(); - await domains.Network.Enable(new OpenQA.Selenium.DevTools.V137.Network.EnableCommandSettings()); + var domains = session.GetVersionSpecificDomains(); + await domains.Network.Enable(new OpenQA.Selenium.DevTools.V142.Network.EnableCommandSettings()); var cookieCommandSettings = new SetCookieCommandSettings { 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 index 72f9a7032f3a..ae96c6a6c478 100644 --- a/examples/java/src/test/java/dev/selenium/bidi/cdp/CdpApiTest.java +++ b/examples/java/src/test/java/dev/selenium/bidi/cdp/CdpApiTest.java @@ -16,9 +16,9 @@ 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.devtools.v142.browser.Browser; +import org.openqa.selenium.devtools.v142.network.Network; +import org.openqa.selenium.devtools.v142.network.model.Headers; import org.openqa.selenium.support.ui.WebDriverWait; public class CdpApiTest extends BaseTest { @@ -27,7 +27,7 @@ public class CdpApiTest extends BaseTest { @BeforeEach public void createSession() { ChromeOptions options = getDefaultChromeOptions(); - options.setBrowserVersion("139"); + options.setBrowserVersion("142"); driver = new ChromeDriver(options); wait = new WebDriverWait(driver, Duration.ofSeconds(10)); } diff --git a/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java b/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java index 68e0cdcc15b6..4805c3063eea 100644 --- a/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java +++ b/examples/java/src/test/java/dev/selenium/bidi/cdp/NetworkTest.java @@ -21,10 +21,10 @@ import org.openqa.selenium.devtools.DevTools; import org.openqa.selenium.devtools.HasDevTools; import org.openqa.selenium.devtools.NetworkInterceptor; -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.devtools.v142.browser.Browser; +import org.openqa.selenium.devtools.v142.network.Network; +import org.openqa.selenium.devtools.v142.performance.Performance; +import org.openqa.selenium.devtools.v142.performance.model.Metric; import org.openqa.selenium.remote.http.*; import org.openqa.selenium.support.ui.WebDriverWait; diff --git a/examples/python/tests/bidi/cdp/test_network.py b/examples/python/tests/bidi/cdp/test_network.py index 7cddde13be21..026e6a07b865 100644 --- a/examples/python/tests/bidi/cdp/test_network.py +++ b/examples/python/tests/bidi/cdp/test_network.py @@ -2,7 +2,7 @@ import pytest from selenium.webdriver.common.by import By -from selenium.webdriver.common.devtools.v137.network import Headers +from selenium.webdriver.common.devtools.v142.network import Headers @pytest.mark.trio From a3718c43053d58228fdb6cb527141a6bd08be048 Mon Sep 17 00:00:00 2001 From: Corey Goldberg <1113081+cgoldberg@users.noreply.github.com> Date: Mon, 27 Oct 2025 08:45:12 -0400 Subject: [PATCH 03/11] Fix tests for updated Edge starting message --- examples/python/tests/browsers/test_chrome.py | 3 +++ examples/python/tests/browsers/test_edge.py | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/examples/python/tests/browsers/test_chrome.py b/examples/python/tests/browsers/test_chrome.py index 05ed61e44d3d..ef781aade424 100644 --- a/examples/python/tests/browsers/test_chrome.py +++ b/examples/python/tests/browsers/test_chrome.py @@ -1,10 +1,12 @@ import os import re import subprocess + import pytest from selenium import webdriver from selenium.webdriver.common.by import By + def test_basic_options(): options = get_default_chrome_options() driver = webdriver.Chrome(options=options) @@ -189,6 +191,7 @@ def test_get_browser_logs(): 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") diff --git a/examples/python/tests/browsers/test_edge.py b/examples/python/tests/browsers/test_edge.py index 457742ca4163..9b34504e0286 100644 --- a/examples/python/tests/browsers/test_edge.py +++ b/examples/python/tests/browsers/test_edge.py @@ -1,12 +1,15 @@ import os import re import subprocess + import pytest from selenium import webdriver from selenium.webdriver.common.by import By + def test_basic_options(): options = get_default_edge_options() + driver = webdriver.Edge(options=options) driver.quit() @@ -73,7 +76,7 @@ def test_log_to_file(log_path): driver = webdriver.Edge(service=service) with open(log_path, 'r') as fp: - assert "Starting Microsoft Edge WebDriver" in fp.readline() + assert "Starting" in fp.readline() driver.quit() @@ -84,7 +87,7 @@ def test_log_to_stdout(capfd): driver = webdriver.Edge(service=service) out, err = capfd.readouterr() - assert "Starting Microsoft Edge WebDriver" in out + assert "Starting" in out driver.quit() @@ -189,6 +192,7 @@ def test_get_browser_logs(): 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") From 601e65c3aace01591b5922be958b9d3a16ad29c9 Mon Sep 17 00:00:00 2001 From: Corey Goldberg <1113081+cgoldberg@users.noreply.github.com> Date: Mon, 27 Oct 2025 09:22:24 -0400 Subject: [PATCH 04/11] Fix Ruby test to accomodate updated Edge start message --- examples/ruby/spec/browsers/edge_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/ruby/spec/browsers/edge_spec.rb b/examples/ruby/spec/browsers/edge_spec.rb index 5820fab3e799..7508856f22b2 100644 --- a/examples/ruby/spec/browsers/edge_spec.rb +++ b/examples/ruby/spec/browsers/edge_spec.rb @@ -67,7 +67,7 @@ service.log = file_name @driver = Selenium::WebDriver.for :edge, service: service - expect(File.readlines(file_name).first).to include('Starting Microsoft Edge WebDriver') + expect(File.readlines(file_name).first).to include('Starting') end it 'logs to console' do @@ -77,7 +77,7 @@ expect { @driver = Selenium::WebDriver.for :edge, service: service - }.to output(/Starting Microsoft Edge WebDriver/).to_stdout_from_any_process + }.to output(/Starting/).to_stdout_from_any_process end it 'sets log level' do From 68152fbd14d31bbd2f959ccc20467bcb2330bbe1 Mon Sep 17 00:00:00 2001 From: Corey Goldberg <1113081+cgoldberg@users.noreply.github.com> Date: Mon, 27 Oct 2025 09:42:32 -0400 Subject: [PATCH 05/11] Update tox.ini --- examples/python/tox.ini | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/examples/python/tox.ini b/examples/python/tox.ini index 9438f9eb3999..49f01f030d6f 100644 --- a/examples/python/tox.ini +++ b/examples/python/tox.ini @@ -25,6 +25,4 @@ 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:.} + pytest -vv -n auto {posargs:.} From e4fed89369470aeba673820ad7f19e974e153b86 Mon Sep 17 00:00:00 2001 From: Sri Harsha <12621691+harsha509@users.noreply.github.com> Date: Mon, 27 Oct 2025 11:41:15 -0400 Subject: [PATCH 06/11] Update Network.enable to include additional parametersFix test for v142 --- .../java/src/test/java/dev/selenium/bidi/cdp/CdpApiTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index ae96c6a6c478..9a9ff7d927cd 100644 --- a/examples/java/src/test/java/dev/selenium/bidi/cdp/CdpApiTest.java +++ b/examples/java/src/test/java/dev/selenium/bidi/cdp/CdpApiTest.java @@ -36,7 +36,7 @@ public void createSession() { public void basicAuth() { devTools = ((HasDevTools) driver).getDevTools(); devTools.createSession(); - devTools.send(Network.enable(Optional.of(100000), Optional.of(100000), Optional.of(100000))); + devTools.send(Network.enable(Optional.of(100000), Optional.of(100000), Optional.of(100000), Optional.of(false), Optional.empty())); String encodedAuth = Base64.getEncoder().encodeToString("admin:admin".getBytes()); Map headers = ImmutableMap.of("Authorization", "Basic " + encodedAuth); From 36f81bb1dabbf7afe5b7d7d504946518f467d031 Mon Sep 17 00:00:00 2001 From: Corey Goldberg <1113081+cgoldberg@users.noreply.github.com> Date: Mon, 27 Oct 2025 15:05:07 -0400 Subject: [PATCH 07/11] Update package.json --- examples/javascript/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/javascript/package.json b/examples/javascript/package.json index c35252cec788..7607dc3f945c 100644 --- a/examples/javascript/package.json +++ b/examples/javascript/package.json @@ -8,7 +8,7 @@ "license": "Apache-2.0", "dependencies": { "assert": "2.1.0", - "selenium-webdriver": "4.36.0" + "selenium-webdriver": "4.38.0" }, "devDependencies": { "mocha": "11.7.4" From c1a3c95a8d939086b8272ca2042be70e514543e6 Mon Sep 17 00:00:00 2001 From: Corey Goldberg <1113081+cgoldberg@users.noreply.github.com> Date: Mon, 27 Oct 2025 15:54:08 -0400 Subject: [PATCH 08/11] Force Firefox tests to use XWayland on Linux to workaround Firefox issue --- examples/python/tests/conftest.py | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/python/tests/conftest.py b/examples/python/tests/conftest.py index b394cfc6be81..402b271ccc08 100644 --- a/examples/python/tests/conftest.py +++ b/examples/python/tests/conftest.py @@ -30,6 +30,7 @@ def driver(request): options.enable_bidi = True driver = webdriver.Chrome(options=options) elif driver_type == "firefox": + os.environ["MOZ_ENABLE_WAYLAND"] = "0" driver = webdriver.Firefox() else: driver = webdriver.Chrome() From 10e6148c9c09180bcc2377507ad8b44fdc5626bd Mon Sep 17 00:00:00 2001 From: Corey Goldberg <1113081+cgoldberg@users.noreply.github.com> Date: Mon, 27 Oct 2025 15:57:26 -0400 Subject: [PATCH 09/11] Revert newline changes so line numbers in examples aren't screwed up --- examples/python/tests/browsers/test_chrome.py | 2 -- examples/python/tests/browsers/test_edge.py | 2 -- 2 files changed, 4 deletions(-) diff --git a/examples/python/tests/browsers/test_chrome.py b/examples/python/tests/browsers/test_chrome.py index ef781aade424..d813e8aca815 100644 --- a/examples/python/tests/browsers/test_chrome.py +++ b/examples/python/tests/browsers/test_chrome.py @@ -1,12 +1,10 @@ import os import re import subprocess - import pytest from selenium import webdriver from selenium.webdriver.common.by import By - def test_basic_options(): options = get_default_chrome_options() driver = webdriver.Chrome(options=options) diff --git a/examples/python/tests/browsers/test_edge.py b/examples/python/tests/browsers/test_edge.py index 9b34504e0286..f4114b84087a 100644 --- a/examples/python/tests/browsers/test_edge.py +++ b/examples/python/tests/browsers/test_edge.py @@ -1,12 +1,10 @@ import os import re import subprocess - import pytest from selenium import webdriver from selenium.webdriver.common.by import By - def test_basic_options(): options = get_default_edge_options() From 53177dc14d61f7589b2f621438f0d86980e4c2ae Mon Sep 17 00:00:00 2001 From: Corey Goldberg <1113081+cgoldberg@users.noreply.github.com> Date: Mon, 27 Oct 2025 16:32:12 -0400 Subject: [PATCH 10/11] Trigger CI From b6f5cce26e56e85ff560097f99b31d863a6dd44d Mon Sep 17 00:00:00 2001 From: Corey Goldberg <1113081+cgoldberg@users.noreply.github.com> Date: Wed, 29 Oct 2025 11:36:05 -0400 Subject: [PATCH 11/11] Trigger CI