Skip to content

Conversation

selenium-ci
Copy link
Member

@selenium-ci selenium-ci commented Aug 12, 2025

User description

Warning: Manually update the changelogs before merging

This PR:

  • Updates Pinned browser version to coincide with new CDP release
  • Adds support for new CDP version and removes old CDP version
  • Selenium Manager references the new Selenium Manager release
  • Updates Maven Dependencies
  • Adds new authors to authors file
  • Updates all versions for all bindings
  • Generates rough change logs for each bindings (please tidy them up before merging this)
    • Not all commits need to be in the change log — users do not need to see anything about building or testing Selenium
    • Remove references to updating versions including nightly
    • The code now outputs the complete body of the commit message; make sure the changelog message is complete and correct

PR Type

Enhancement


Description

• Updates Chrome DevTools Protocol (CDP) support from version 136 to 139 across all language bindings (Java, .NET, Ruby)
• Updates Selenium Manager to new release version (acecd4f) with updated SHA256 hashes for all platform artifacts
• Bumps all package versions from nightly builds to stable release 4.35.0 across Python, JavaScript, and Rust bindings
• Updates Chrome browser version references from 138 to 139 in test configurations
• Updates all DevTools test files to use the new CDP version 139
• Adds changelog entry for Selenium Manager 0.4.35 with architecture string normalization improvements


Diagram Walkthrough

flowchart LR
  A["CDP v136"] --> B["CDP v139"]
  C["Nightly versions"] --> D["Stable 4.35.0"]
  E["Selenium Manager old"] --> F["Selenium Manager acecd4f"]
  G["Chrome v138"] --> H["Chrome v139"]
Loading

File Walkthrough

Relevant files
Dependencies
14 files
v139Target.java
Update DevTools Target implementation to version 139         

java/src/org/openqa/selenium/devtools/v139/v139Target.java

• Updates package declaration from v136 to v139
• Changes all class
references and imports from v136 to v139
• Updates class name from
v136Target to v139Target

+12/-12 
v139Network.java
Update DevTools Network implementation to version 139       

java/src/org/openqa/selenium/devtools/v139/v139Network.java

• Updates package declaration from v136 to v139
• Changes all imports
and class references from v136 to v139
• Updates class name from
v136Network to v139Network

+10/-10 
v139Events.java
Update DevTools Events implementation to version 139         

java/src/org/openqa/selenium/devtools/v139/v139Events.java

• Updates package declaration from v136 to v139
• Changes all imports
and class references from v136 to v139
• Updates class name from
v136Events to v139Events

+9/-9     
v139Domains.java
Update DevTools Domains implementation to version 139       

java/src/org/openqa/selenium/devtools/v139/v139Domains.java

• Updates package declaration from v136 to v139
• Changes class name
from v136Domains to v139Domains
• Updates all field types and
instantiations from v136 to v139

+13/-13 
v139Javascript.java
Update DevTools Javascript implementation to version 139 

java/src/org/openqa/selenium/devtools/v139/v139Javascript.java

• Updates package declaration from v136 to v139
• Changes all imports
and class references from v136 to v139
• Updates class name from
v136Javascript to v139Javascript

+7/-7     
v139Log.java
Update DevTools Log implementation to version 139               

java/src/org/openqa/selenium/devtools/v139/v139Log.java

• Updates package declaration from v136 to v139
• Changes all imports
and class references from v136 to v139
• Updates class name from
v136Log to v139Log

+5/-5     
v139CdpInfo.java
Update DevTools CDP Info to version 139                                   

java/src/org/openqa/selenium/devtools/v139/v139CdpInfo.java

• Updates package declaration from v136 to v139
• Changes class name
from v136CdpInfo to v139CdpInfo
• Updates CDP version number from 136
to 139

+4/-4     
V139Domains.cs
Update .NET DevTools Domains to version 139                           

dotnet/src/webdriver/DevTools/v139/V139Domains.cs

• Updates namespace from V136 to V139
• Changes class name from
V136Domains to V139Domains
• Updates DevTools version property from
136 to 139
• Updates all field types and instantiations from V136 to
V139

+11/-11 
V139Network.cs
Update .NET DevTools Network to version 139                           

dotnet/src/webdriver/DevTools/v139/V139Network.cs

• Updates namespace from V136 to V139
• Changes class name from
V136Network to V139Network
• Updates all using statements and type
references from V136 to V139

+12/-12 
V139JavaScript.cs
Update .NET DevTools JavaScript to version 139                     

dotnet/src/webdriver/DevTools/v139/V139JavaScript.cs

• Updates namespace from V136 to V139
• Changes class name from
V136JavaScript to V139JavaScript
• Updates all using statements from
V136 to V139

+8/-8     
V139Target.cs
Update .NET DevTools Target to version 139                             

dotnet/src/webdriver/DevTools/v139/V139Target.cs

• Updates namespace from V136 to V139
• Changes class name from
V136Target to V139Target
• Updates using statement from V136 to V139

+7/-7     
V139Log.cs
Update .NET DevTools Log to version 139                                   

dotnet/src/webdriver/DevTools/v139/V139Log.cs

• Updates namespace from V136 to V139
• Changes class name from
V136Log to V139Log
• Updates using statement from V136 to V139

+7/-7     
DevToolsDomains.cs
Update DevTools supported versions to include 139               

dotnet/src/webdriver/DevTools/DevToolsDomains.cs

• Replaces version 136 with 139 in supported versions array
• Updates
factory method to create V139Domains instead of V136Domains

+2/-2     
selenium_manager.bzl
Update Selenium Manager artifacts to new release                 

common/selenium_manager.bzl

• Updates all SHA256 hashes for Selenium Manager artifacts
• Changes
release tag from selenium-manager-9d09338 to selenium-manager-acecd4f

+6/-6     
Tests
9 files
DevToolsTargetTest.cs
Update DevTools test to use version 139                                   

dotnet/test/common/DevTools/DevToolsTargetTest.cs

• Updates using alias from V138 to V139
• Changes test ID from 138 to
139

+2/-2     
DevToolsTabsTest.cs
Update DevTools tabs test to use version 139                         

dotnet/test/common/DevTools/DevToolsTabsTest.cs

• Updates using alias from V138 to V139

+1/-1     
DevToolsPerformanceTest.cs
Update DevTools performance test to use version 139           

dotnet/test/common/DevTools/DevToolsPerformanceTest.cs

• Updates using alias from V138 to V139

+1/-1     
DevToolsProfilerTest.cs
Update DevTools profiler test to use version 139                 

dotnet/test/common/DevTools/DevToolsProfilerTest.cs

• Updates using alias from V138 to V139

+1/-1     
DevToolsConsoleTest.cs
Update DevTools console test to use version 139                   

dotnet/test/common/DevTools/DevToolsConsoleTest.cs

• Updates using alias from V138 to V139

+1/-1     
DevToolsLogTest.cs
Update DevTools log test to use version 139                           

dotnet/test/common/DevTools/DevToolsLogTest.cs

• Updates using alias from V138 to V139

+1/-1     
DevToolsNetworkTest.cs
Update DevTools network test to use version 139                   

dotnet/test/common/DevTools/DevToolsNetworkTest.cs

• Updates using alias from V138 to V139

+1/-1     
DevToolsSecurityTest.cs
Update DevTools security test to use version 139                 

dotnet/test/common/DevTools/DevToolsSecurityTest.cs

• Updates using alias from V138 to V139

+1/-1     
StableChannelChromeDriver.cs
Update Chrome driver test configuration to version 139     

dotnet/test/common/CustomDriverConfigs/StableChannelChromeDriver.cs

• Updates Chrome browser version from "138" to "139"

+1/-1     
Configuration changes
5 files
__init__.py
Update Python WebDriver version to 4.35.0                               

py/selenium/webdriver/init.py

• Updates version from "4.35.0.202507081456" to "4.35.0"

+1/-1     
pyproject.toml
Update Python package version to stable release                   

py/pyproject.toml

• Updated Python package version from nightly build
4.35.0.202507081456 to stable release 4.35.0

+1/-1     
package.json
Update JavaScript package version to stable release           

javascript/selenium-webdriver/package.json

• Updated JavaScript package version from nightly build
4.35.0-nightly202506301117 to stable release 4.35.0

+1/-1     
BUILD.bazel
Update Selenium Manager version to stable release               

rust/BUILD.bazel

• Updated Selenium Manager version from nightly build 0.4.35-nightly
to stable release 0.4.35

+1/-1     
BUILD.bazel
Update Chrome DevTools Protocol version support                   

rb/lib/selenium/devtools/BUILD.bazel

• Replaced CDP version v136 with v139 in the supported versions list

+1/-1     
Documentation
1 files
CHANGELOG.md
Add changelog entry for Selenium Manager 0.4.35                   

rust/CHANGELOG.md

• Added changelog entry for version 0.4.35 with architecture string
normalization and Edge web driver URL updates

+5/-0     
Additional files
24 files
bug-report.yml +1/-1     
AUTHORS +6/-1     
MODULE.bazel +6/-6     
Rakefile +1/-1     
BUILD.bazel [link]   
browser_protocol.pdl +474/-79
js_protocol.pdl +2/-2     
CHANGELOG +26/-0   
selenium-dotnet-version.bzl +2/-2     
CHANGELOG +36/-0   
maven_install.json +97/-228
BUILD.bazel +1/-1     
versions.bzl +1/-1     
version.bzl +1/-1     
BUILD.bazel +2/-2     
CHANGES.md +7/-0     
BUILD.bazel +2/-2     
CHANGES +15/-0   
conf.py +1/-1     
__init__.py +1/-1     
CHANGES +6/-0     
version.rb +1/-1     
version.rb +1/-1     
Cargo.toml +1/-1     

@selenium-ci selenium-ci added C-build C-py Python Bindings C-rb Ruby Bindings C-dotnet .NET Bindings C-java Java Bindings C-nodejs JavaScript Bindings B-build Includes scripting, bazel and CI integrations B-devtools Includes everything BiDi or Chrome DevTools related C-rust Rust code is mostly Selenium Manager B-manager Selenium Manager labels Aug 12, 2025
@diemol diemol marked this pull request as ready for review August 12, 2025 14:27
@diemol diemol merged commit 1c58e50 into trunk Aug 12, 2025
81 of 83 checks passed
@diemol diemol deleted the release-preparation-4.35.0 branch August 12, 2025 14:28
Copy link
Contributor

PR Reviewer Guide 🔍

Here are some key observations to aid the review process:

⏱️ Estimated effort to review: 3 🔵🔵🔵⚪⚪
🧪 PR contains tests
🔒 No security concerns identified
⚡ Recommended focus areas for review

Possible Issue

The methods enabling/disabling network caching and setting UA now reference v139 namespaces, but LOG still references v139Network class name; ensure logging category and any behavior differences vs v136 are intentional and no missing imports/usages (e.g., HTTP_OK) were overlooked when switching packages.

public class v139Network extends Network<AuthRequired, RequestPaused> {

  private static final Logger LOG = Logger.getLogger(v139Network.class.getName());

  public v139Network(DevTools devTools) {
    super(devTools);
  }

  @Override
  protected Command<Void> setUserAgentOverride(UserAgent userAgent) {
    return org.openqa.selenium.devtools.v139.network.Network.setUserAgentOverride(
        userAgent.userAgent(), userAgent.acceptLanguage(), userAgent.platform(), Optional.empty());
  }

  @Override
  protected Command<Void> enableNetworkCaching() {
    return org.openqa.selenium.devtools.v139.network.Network.setCacheDisabled(false);
  }

  @Override
  protected Command<Void> disableNetworkCaching() {
    return org.openqa.selenium.devtools.v139.network.Network.setCacheDisabled(true);
  }
API Consistency

Auth challenge handling switched to V139 types; verify other Fetch/Network command settings and enums remain compatible in v139 and that nullable annotations and ConfigureAwait usage remain consistent across methods.

    await fetch.ContinueWithAuth(new ContinueWithAuthCommandSettings()
    {
        RequestId = requestId,
        AuthChallengeResponse = new V139.Fetch.AuthChallengeResponse()
        {
            Response = V139.Fetch.AuthChallengeResponseResponseValues.ProvideCredentials,
            Username = userName,
            Password = password
        }
    }).ConfigureAwait(false);
}

/// <summary>
/// Asynchronously cancels authorization of an intercepted network request.
/// </summary>
/// <param name="requestId">The ID of the network request for which to cancel authentication.</param>
/// <returns>A task that represents the asynchronous operation.</returns>
public override async Task CancelAuth(string requestId)
{
    await fetch.ContinueWithAuth(new ContinueWithAuthCommandSettings()
    {
        RequestId = requestId,
        AuthChallengeResponse = new OpenQA.Selenium.DevTools.V139.Fetch.AuthChallengeResponse()
        {
            Response = V139.Fetch.AuthChallengeResponseResponseValues.CancelAuth
        }
Docs/Schema Change

Added note that JavaScript uses a debugId magic comment for buildId; confirm all codegen and parsers consuming this field handle the broadened semantics without breaking older assumptions.

    Runtime.ExecutionContextId executionContextId
    # Content hash of the script, SHA-256.
    string hash
    # For Wasm modules, the content of the `build_id` custom section. For JavaScript the `debugId` magic comment.
    string buildId
    # Embedder-specific auxiliary data likely matching {isDefault: boolean, type: 'default'|'isolated'|'worker', frameId: string}
    optional object executionContextAuxData
    # URL of source map associated with script (if any).
    optional string sourceMapURL
    # True, if this script has sourceURL.
    optional boolean hasSourceURL
    # True, if this script is ES6 module.
    optional boolean isModule
    # This script length.
    optional integer length
    # JavaScript top stack frame of where the script parsed event was triggered if available.
    experimental optional Runtime.StackTrace stackTrace
    # If the scriptLanguage is WebAssembly, the code section offset in the module.
    experimental optional integer codeOffset
    # The language of the script.
    experimental optional Debugger.ScriptLanguage scriptLanguage
    # The name the embedder supplied for this script.
    experimental optional string embedderName

# Fired when virtual machine parses script. This event is also fired for all known and uncollected
# scripts upon enabling debugger.
event scriptParsed
  parameters
    # Identifier of the script parsed.
    Runtime.ScriptId scriptId
    # URL or name of the script parsed (if any).
    string url
    # Line offset of the script within the resource with given URL (for script tags).
    integer startLine
    # Column offset of the script within the resource with given URL.
    integer startColumn
    # Last line of the script.
    integer endLine
    # Length of the last line of the script.
    integer endColumn
    # Specifies script creation context.
    Runtime.ExecutionContextId executionContextId
    # Content hash of the script, SHA-256.
    string hash
    # For Wasm modules, the content of the `build_id` custom section. For JavaScript the `debugId` magic comment.
    string buildId
    # Embedder-specific auxiliary data likely matching {isDefault: boolean, type: 'default'|'isolated'|'worker', frameId: string}
    optional object executionContextAuxData

Copy link
Contributor

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
Possible issue
Pass UA form factors to CDP

The CDP v139 Emulation domain adds a formFactors field to user agent override.
Passing Optional.empty() may lead to missing UA-CH values and inconsistent
behavior. Forward any available form factor data when present to avoid protocol
mismatches.

java/src/org/openqa/selenium/devtools/v139/v139Network.java [49-52]

 protected Command<Void> setUserAgentOverride(UserAgent userAgent) {
   return org.openqa.selenium.devtools.v139.network.Network.setUserAgentOverride(
-      userAgent.userAgent(), userAgent.acceptLanguage(), userAgent.platform(), Optional.empty());
+      userAgent.userAgent(),
+      userAgent.acceptLanguage(),
+      userAgent.platform(),
+      userAgent.formFactors()); // ensure this maps to Optional<List<String>> if available
 }
  • Apply / Chat
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that the setUserAgentOverride command in CDP v139 supports a new formFactors parameter which is not being used. While the UserAgent class does not currently have a formFactors() method, adding it and using it here would be a valuable enhancement.

Medium
Align CDP version with folder

Confirm the package path and file structure under v139 match the new
cdp_version. A mismatch between directory name and cdp_version will cause
publish/build failures.

java/src/org/openqa/selenium/devtools/v139/BUILD.bazel [5-8]

+cdp_version = "v139"
 
+java_export(
+    name = cdp_version,
  • Apply / Chat
Suggestion importance[1-10]: 6

__

Why: The suggestion correctly points out the need for consistency between the cdp_version variable and the file path, which is crucial for the build to succeed, but it only asks for verification.

Low
General
Keep version strings consistent

Ensure the top-level version matches the package submodule
webdriver.init to avoid inconsistent version reporting across imports. Both
should be kept in sync at "4.35.0".

py/selenium/init.py [19]

+__version__ = "4.35.0"
 
-
  • Apply / Chat
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly points out that the version in py/selenium/__init__.py is now consistent with py/selenium/webdriver/__init__.py, which is a good practice. The PR already implements this, so the suggestion serves as a confirmation of the change.

Medium
Validate CDP target consistency

Ensure all referenced CDP versions exist and outdated ones are fully removed.
Verify that v139 targets build correctly and that any residual references to
v136 are updated elsewhere to avoid broken Bazel targets.

Rakefile [99-101]

+//java/src/org/openqa/selenium/devtools/v137:v137.publish
+//java/src/org/openqa/selenium/devtools/v138:v138.publish
+//java/src/org/openqa/selenium/devtools/v139:v139.publish
 
-
  • Apply / Chat
Suggestion importance[1-10]: 5

__

Why: The suggestion correctly identifies a potential integration issue but only asks the user to verify the changes, which is a standard part of the development process for such a PR.

Low
Clarify exact latest version

Include the patch/minor suffix when applicable to avoid ambiguity. This reduces
user confusion and misreporting of versions when a patch (e.g., 4.35.0) is the
current release.

.github/ISSUE_TEMPLATE/bug-report.yml [53]

-description: Important! The latest released version of Selenium is 4.35 and we can't fix old versions.
+description: Important! The latest released version of Selenium is 4.35.0 and we can't fix old versions.
  • Apply / Chat
Suggestion importance[1-10]: 4

__

Why: The suggestion improves clarity by specifying the full version 4.35.0, which is consistent with other version updates in the PR and helps avoid ambiguity for users filing bug reports.

Low
Learned
best practice
Validate required string parameters

Validate string parameters like requestId to ensure they are not null or empty
before use. Add guards for required credential presence when providing auth to
avoid runtime errors and unexpected server responses.

dotnet/src/webdriver/DevTools/v139/V139Network.cs [246-256]

-public V139Network(NetworkAdapter network, FetchAdapter fetch)
-{
-    this.network = network ?? throw new ArgumentNullException(nameof(network));
-    this.fetch = fetch ?? throw new ArgumentNullException(nameof(fetch));
-}
-...
 public override async Task ContinueWithAuth(string requestId, string? userName, string? password)
 {
+    if (string.IsNullOrWhiteSpace(requestId))
+    {
+        throw new ArgumentException("requestId must be a non-empty string.", nameof(requestId));
+    }
+    if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(password))
+    {
+        throw new ArgumentException("Both userName and password must be provided for ProvideCredentials.");
+    }
+
     await fetch.ContinueWithAuth(new ContinueWithAuthCommandSettings()
     {
         RequestId = requestId,
         AuthChallengeResponse = new V139.Fetch.AuthChallengeResponse()
         {
             Response = V139.Fetch.AuthChallengeResponseResponseValues.ProvideCredentials,
             Username = userName,
             Password = password
         }
     }).ConfigureAwait(false);
 }

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 6

__

Why:
Relevant best practice - Add null checks and validation for parameters before use to prevent NullReferenceException.

Low
  • More

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
B-build Includes scripting, bazel and CI integrations B-devtools Includes everything BiDi or Chrome DevTools related B-manager Selenium Manager C-build C-dotnet .NET Bindings C-java Java Bindings C-nodejs JavaScript Bindings C-py Python Bindings C-rb Ruby Bindings C-rust Rust code is mostly Selenium Manager Review effort 3/5
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants