Skip to content

[dotnet] [bidi] Statically declare commands#17330

Merged
nvborisenko merged 12 commits into
SeleniumHQ:trunkfrom
nvborisenko:bidi-command-descriptor
Apr 10, 2026
Merged

[dotnet] [bidi] Statically declare commands#17330
nvborisenko merged 12 commits into
SeleniumHQ:trunkfrom
nvborisenko:bidi-command-descriptor

Conversation

@nvborisenko
Copy link
Copy Markdown
Member

@nvborisenko nvborisenko commented Apr 9, 2026

Commands declaration without allocation.

🔗 Related Issues

Contributes to #16095

💥 What does this PR do?

This pull request refactors the BiDi (Bi-Directional) WebDriver command execution pipeline to simplify command handling, improve type safety, and streamline serialization logic. The main changes include replacing the generic ExecuteCommandAsync method with a more type-safe ExecuteAsync method, centralizing command definitions, and cleaning up command class structure. Additionally, the handling of pending commands and serialization is improved for reliability and maintainability.

Refactoring of command execution and handling:

  • Replaced the generic ExecuteCommandAsync method with a more type-safe ExecuteAsync method in Broker.cs, which now uses a Command<TParameters, TResult> descriptor and parameters, improving clarity and reducing boilerplate. (dotnet/src/webdriver/BiDi/Broker.cs, [1] [2] [3] [4]
  • Updated the handling of pending commands to use TryRemove instead of TryGetValue, ensuring commands are removed as soon as they are processed, preventing potential memory leaks or double-removal. (dotnet/src/webdriver/BiDi/Broker.cs, [1] [2] [3]

Centralization and simplification of command definitions:

  • Removed individual command classes (e.g., CloseCommand, CreateUserContextCommand) and replaced them with static command descriptors in BrowserModule.cs, reducing duplication and centralizing command logic. (dotnet/src/webdriver/BiDi/Browser/BrowserModule.cs, [1]; dotnet/src/webdriver/BiDi/Browser/Close.cs, [2]; dotnet/src/webdriver/BiDi/Browser/CreateUserContext.cs, [3]; dotnet/src/webdriver/BiDi/Browser/GetUserContexts.cs, [4]; dotnet/src/webdriver/BiDi/Browser/GetClientWindows.cs, [5]; dotnet/src/webdriver/BiDi/Browser/RemoveUserContext.cs, [6]; dotnet/src/webdriver/BiDi/Browser/SetDownloadBehavior.cs, [7]; dotnet/src/webdriver/BiDi/BrowsingContext/Activate.cs, [8]

Module and visibility adjustments:

  • Changed several module classes from public sealed to internal sealed to restrict their visibility and clarify their intended usage within the assembly. (dotnet/src/webdriver/BiDi/Browser/BrowserModule.cs, [1]; dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextInputModule.cs, [2]; dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextLogModule.cs, [3]

These changes collectively improve maintainability, type safety, and the overall structure of the BiDi WebDriver implementation.

🔄 Types of changes

  • Cleanup (formatting, renaming)
  • New feature (non-breaking change which adds functionality and tests!)

Copilot AI review requested due to automatic review settings April 9, 2026 22:08
@selenium-ci selenium-ci added the C-dotnet .NET Bindings label Apr 9, 2026
@qodo-code-review
Copy link
Copy Markdown
Contributor

Review Summary by Qodo

[dotnet] [bidi] Refactor to statically declare commands using CommandDescriptor

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Replace concrete command classes with static CommandDescriptor instances for cleaner command
  definition
• Refactor ExecuteCommandAsync to ExecuteAsync method accepting CommandDescriptor and
  parameters
• Update JSON serialization to use parameter types instead of command wrapper classes
• Change module visibility from public to internal for better encapsulation
• Simplify command execution by removing intermediate command object allocation

Grey Divider

File Changes

1. dotnet/src/webdriver/BiDi/Command.cs ✨ Enhancement +8/-18

Replace Command classes with CommandDescriptor generic type

dotnet/src/webdriver/BiDi/Command.cs


2. dotnet/src/webdriver/BiDi/Broker.cs ✨ Enhancement +13/-8

Update ExecuteAsync to compose commands from descriptor and parameters

dotnet/src/webdriver/BiDi/Broker.cs


3. dotnet/src/webdriver/BiDi/Module.cs ✨ Enhancement +3/-3

Update ExecuteAsync method signature to use CommandDescriptor

dotnet/src/webdriver/BiDi/Module.cs


View more (79)
4. dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextModule.cs ✨ Enhancement +89/-54

Replace command classes with static CommandDescriptor instances

dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextModule.cs


5. dotnet/src/webdriver/BiDi/Network/NetworkModule.cs ✨ Enhancement +74/-38

Replace command classes with static CommandDescriptor instances

dotnet/src/webdriver/BiDi/Network/NetworkModule.cs


6. dotnet/src/webdriver/BiDi/Emulation/EmulationModule.cs ✨ Enhancement +58/-40

Replace command classes with static CommandDescriptor instances

dotnet/src/webdriver/BiDi/Emulation/EmulationModule.cs


7. dotnet/src/webdriver/BiDi/Script/ScriptModule.cs ✨ Enhancement +37/-20

Replace command classes with static CommandDescriptor instances

dotnet/src/webdriver/BiDi/Script/ScriptModule.cs


8. dotnet/src/webdriver/BiDi/Browser/BrowserModule.cs ✨ Enhancement +31/-16

Replace command classes with static CommandDescriptor instances

dotnet/src/webdriver/BiDi/Browser/BrowserModule.cs


9. dotnet/src/webdriver/BiDi/Input/InputModule.cs ✨ Enhancement +18/-10

Replace command classes with static CommandDescriptor instances

dotnet/src/webdriver/BiDi/Input/InputModule.cs


10. dotnet/src/webdriver/BiDi/Session/SessionModule.cs ✨ Enhancement +24/-11

Replace command classes with static CommandDescriptor instances

dotnet/src/webdriver/BiDi/Session/SessionModule.cs


11. dotnet/src/webdriver/BiDi/Storage/StorageModule.cs ✨ Enhancement +16/-8

Replace command classes with static CommandDescriptor instances

dotnet/src/webdriver/BiDi/Storage/StorageModule.cs


12. dotnet/src/webdriver/BiDi/Log/LogModule.cs ✨ Enhancement +4/-5

Change visibility to internal and use static context alias

dotnet/src/webdriver/BiDi/Log/LogModule.cs


13. dotnet/src/webdriver/BiDi/WebExtension/WebExtensionModule.cs ✨ Enhancement +11/-6

Replace command classes with static CommandDescriptor instances

dotnet/src/webdriver/BiDi/WebExtension/WebExtensionModule.cs


14. dotnet/src/webdriver/BiDi/Speculation/SpeculationModule.cs ✨ Enhancement +4/-5

Change visibility to internal and use static context alias

dotnet/src/webdriver/BiDi/Speculation/SpeculationModule.cs


15. dotnet/src/webdriver/BiDi/Permissions/PermissionsModule.cs ✨ Enhancement +6/-4

Replace command classes with static CommandDescriptor instances

dotnet/src/webdriver/BiDi/Permissions/PermissionsModule.cs


16. dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextScriptModule.cs ✨ Enhancement +1/-1

Change visibility from public to internal

dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextScriptModule.cs


17. dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextNetworkModule.cs ✨ Enhancement +1/-1

Change visibility from public to internal

dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextNetworkModule.cs


18. dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextLogModule.cs ✨ Enhancement +1/-1

Change visibility from public to internal

dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextLogModule.cs


19. dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextInputModule.cs ✨ Enhancement +1/-1

Change visibility from public to internal

dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextInputModule.cs


20. dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextStorageModule.cs ✨ Enhancement +1/-1

Change visibility from public to internal

dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextStorageModule.cs


21. dotnet/test/webdriver/BiDi/Session/SessionTests.cs 🧪 Tests +5/-5

Update test to use CommandDescriptor pattern

dotnet/test/webdriver/BiDi/Session/SessionTests.cs


22. dotnet/src/webdriver/BiDi/Browser/Close.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Browser/Close.cs


23. dotnet/src/webdriver/BiDi/Browser/CreateUserContext.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Browser/CreateUserContext.cs


24. dotnet/src/webdriver/BiDi/Browser/GetClientWindows.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Browser/GetClientWindows.cs


25. dotnet/src/webdriver/BiDi/Browser/GetUserContexts.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Browser/GetUserContexts.cs


26. dotnet/src/webdriver/BiDi/Browser/RemoveUserContext.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Browser/RemoveUserContext.cs


27. dotnet/src/webdriver/BiDi/Browser/SetDownloadBehavior.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Browser/SetDownloadBehavior.cs


28. dotnet/src/webdriver/BiDi/BrowsingContext/Activate.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/BrowsingContext/Activate.cs


29. dotnet/src/webdriver/BiDi/BrowsingContext/CaptureScreenshot.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/BrowsingContext/CaptureScreenshot.cs


30. dotnet/src/webdriver/BiDi/BrowsingContext/Close.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/BrowsingContext/Close.cs


31. dotnet/src/webdriver/BiDi/BrowsingContext/Create.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/BrowsingContext/Create.cs


32. dotnet/src/webdriver/BiDi/BrowsingContext/GetTree.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/BrowsingContext/GetTree.cs


33. dotnet/src/webdriver/BiDi/BrowsingContext/HandleUserPrompt.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/BrowsingContext/HandleUserPrompt.cs


34. dotnet/src/webdriver/BiDi/BrowsingContext/LocateNodes.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/BrowsingContext/LocateNodes.cs


35. dotnet/src/webdriver/BiDi/BrowsingContext/Navigate.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/BrowsingContext/Navigate.cs


36. dotnet/src/webdriver/BiDi/BrowsingContext/Print.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/BrowsingContext/Print.cs


37. dotnet/src/webdriver/BiDi/BrowsingContext/Reload.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/BrowsingContext/Reload.cs


38. dotnet/src/webdriver/BiDi/BrowsingContext/SetViewport.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/BrowsingContext/SetViewport.cs


39. dotnet/src/webdriver/BiDi/BrowsingContext/TraverseHistory.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/BrowsingContext/TraverseHistory.cs


40. dotnet/src/webdriver/BiDi/Emulation/SetForcedColorsModeThemeOverride.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Emulation/SetForcedColorsModeThemeOverride.cs


41. dotnet/src/webdriver/BiDi/Emulation/SetGeolocationOverride.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Emulation/SetGeolocationOverride.cs


42. dotnet/src/webdriver/BiDi/Emulation/SetLocaleOverride.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Emulation/SetLocaleOverride.cs


43. dotnet/src/webdriver/BiDi/Emulation/SetNetworkConditions.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Emulation/SetNetworkConditions.cs


44. dotnet/src/webdriver/BiDi/Emulation/SetScreenOrientationOverride.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Emulation/SetScreenOrientationOverride.cs


45. dotnet/src/webdriver/BiDi/Emulation/SetScreenSettingsOverride.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Emulation/SetScreenSettingsOverride.cs


46. dotnet/src/webdriver/BiDi/Emulation/SetScriptingEnabled.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Emulation/SetScriptingEnabled.cs


47. dotnet/src/webdriver/BiDi/Emulation/SetScrollbarTypeOverride.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Emulation/SetScrollbarTypeOverride.cs


48. dotnet/src/webdriver/BiDi/Emulation/SetTimezoneOverride.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Emulation/SetTimezoneOverride.cs


49. dotnet/src/webdriver/BiDi/Emulation/SetTouchOverride.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Emulation/SetTouchOverride.cs


50. dotnet/src/webdriver/BiDi/Emulation/SetUserAgentOverride.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Emulation/SetUserAgentOverride.cs


51. dotnet/src/webdriver/BiDi/Input/PerformActions.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Input/PerformActions.cs


52. dotnet/src/webdriver/BiDi/Input/ReleaseActions.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Input/ReleaseActions.cs


53. dotnet/src/webdriver/BiDi/Input/SetFiles.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Input/SetFiles.cs


54. dotnet/src/webdriver/BiDi/Network/AddDataCollector.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Network/AddDataCollector.cs


55. dotnet/src/webdriver/BiDi/Network/AddIntercept.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Network/AddIntercept.cs


56. dotnet/src/webdriver/BiDi/Network/ContinueRequest.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Network/ContinueRequest.cs


57. dotnet/src/webdriver/BiDi/Network/ContinueResponse.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Network/ContinueResponse.cs


58. dotnet/src/webdriver/BiDi/Network/ContinueWithAuth.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Network/ContinueWithAuth.cs


59. dotnet/src/webdriver/BiDi/Network/FailRequest.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Network/FailRequest.cs


60. dotnet/src/webdriver/BiDi/Network/GetData.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Network/GetData.cs


61. dotnet/src/webdriver/BiDi/Network/ProvideResponse.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Network/ProvideResponse.cs


62. dotnet/src/webdriver/BiDi/Network/RemoveDataCollector.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Network/RemoveDataCollector.cs


63. dotnet/src/webdriver/BiDi/Network/RemoveIntercept.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Network/RemoveIntercept.cs


64. dotnet/src/webdriver/BiDi/Network/SetCacheBehavior.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Network/SetCacheBehavior.cs


65. dotnet/src/webdriver/BiDi/Network/SetExtraHeaders.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Network/SetExtraHeaders.cs


66. dotnet/src/webdriver/BiDi/Permissions/SetPermission.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Permissions/SetPermission.cs


67. dotnet/src/webdriver/BiDi/Script/AddPreloadScript.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Script/AddPreloadScript.cs


68. dotnet/src/webdriver/BiDi/Script/CallFunction.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Script/CallFunction.cs


69. dotnet/src/webdriver/BiDi/Script/Disown.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Script/Disown.cs


70. dotnet/src/webdriver/BiDi/Script/Evaluate.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Script/Evaluate.cs


71. dotnet/src/webdriver/BiDi/Script/GetRealms.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Script/GetRealms.cs


72. dotnet/src/webdriver/BiDi/Script/RemovePreloadScript.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Script/RemovePreloadScript.cs


73. dotnet/src/webdriver/BiDi/Session/End.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Session/End.cs


74. dotnet/src/webdriver/BiDi/Session/New.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Session/New.cs


75. dotnet/src/webdriver/BiDi/Session/Status.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Session/Status.cs


76. dotnet/src/webdriver/BiDi/Session/Subscribe.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Session/Subscribe.cs


77. dotnet/src/webdriver/BiDi/Session/Unsubscribe.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Session/Unsubscribe.cs


78. dotnet/src/webdriver/BiDi/Storage/DeleteCookies.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Storage/DeleteCookies.cs


79. dotnet/src/webdriver/BiDi/Storage/GetCookies.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Storage/GetCookies.cs


80. dotnet/src/webdriver/BiDi/Storage/SetCookie.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/Storage/SetCookie.cs


81. dotnet/src/webdriver/BiDi/WebExtension/Install.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/WebExtension/Install.cs


82. dotnet/src/webdriver/BiDi/WebExtension/Uninstall.cs Additional files +0/-3

...

dotnet/src/webdriver/BiDi/WebExtension/Uninstall.cs


Grey Divider

Qodo Logo

@qodo-code-review
Copy link
Copy Markdown
Contributor

qodo-code-review Bot commented Apr 9, 2026

Code Review by Qodo

🐞 Bugs (1)   📘 Rule violations (1)   📎 Requirement gaps (0)   🎨 UX Issues (0)
🐞\ ☼ Reliability (1)
📘\ ⚙ Maintainability (1)

Grey Divider


Action required

1. No deprecation for modules 📘
Description
Public module types were effectively removed from the public API (made internal) without being
deprecated first or providing a guided migration path. This can cause abrupt compile breaks for
users upgrading.
Code

dotnet/src/webdriver/BiDi/Network/NetworkModule.cs[25]

+internal sealed partial class NetworkModule : Module, INetworkModule
Evidence
PR Compliance ID 20 requires deprecating public functionality before removal and pointing to
alternatives. The diff shows NetworkModule (and other modules) moved from public to internal
with no deprecation step in the changed code.

AGENTS.md
dotnet/src/webdriver/BiDi/Network/NetworkModule.cs[25-25]
dotnet/src/webdriver/BiDi/Input/InputModule.cs[25-25]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Public module types were removed from the public surface by changing them to `internal` without a deprecation period or guidance.

## Issue Context
If these types must be hidden, they should remain public for at least one release with `[Obsolete(...)]` messages and a documented alternative (e.g., use `IBiDi.<Module>` interface properties, or another supported entry point).

## Fix Focus Areas
- dotnet/src/webdriver/BiDi/Network/NetworkModule.cs[25-25]
- dotnet/src/webdriver/BiDi/Input/InputModule.cs[25-25]
- dotnet/src/webdriver/BiDi/Browser/BrowserModule.cs[25-25]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. Descriptor nulls crash broker 🐞
Description
CommandDescriptor is public and is the key building block for custom modules via BiDi.AsModule<T>(),
but it does not validate constructor arguments. A null/invalid Method or JsonTypeInfo will cause
late NullReferenceExceptions inside Broker.ExecuteAsync during serialization, making failures harder
to diagnose.
Code

dotnet/src/webdriver/BiDi/Command.cs[R24-34]

+public sealed class CommandDescriptor<TParameters, TResult>(
+    string method,
+    JsonTypeInfo<TParameters> paramsTypeInfo,
+    JsonTypeInfo<TResult> resultTypeInfo)
    where TParameters : Parameters
    where TResult : EmptyResult
{
-    [JsonPropertyOrder(2)]
-    public TParameters Params { get; } = @params;
+    public string Method { get; } = method;
+    public JsonTypeInfo<TParameters> ParamsTypeInfo { get; } = paramsTypeInfo;
+    public JsonTypeInfo<TResult> ResultTypeInfo { get; } = resultTypeInfo;
}
Evidence
CommandDescriptor stores method/typeinfo values without validation, while Broker.ExecuteAsync
immediately dereferences descriptor.Method and descriptor.ParamsTypeInfo when composing the JSON
request. Since BiDi.AsModule<T>() is public, external consumers can implement custom modules and
construct their own descriptors, so this is a real public-API footgun.

dotnet/src/webdriver/BiDi/Command.cs[24-34]
dotnet/src/webdriver/BiDi/Broker.cs[117-150]
dotnet/src/webdriver/BiDi/BiDi.cs[96-99]
dotnet/src/webdriver/BiDi/Module.cs[28-33]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`CommandDescriptor<TParameters, TResult>` does not validate its constructor inputs. If `method`, `paramsTypeInfo`, or `resultTypeInfo` are null/invalid, the failure occurs later in `Broker.ExecuteAsync` as a NullReferenceException during JSON write/serialization.

### Issue Context
`BiDi.AsModule<T>()` is public and enables custom module implementations outside this assembly, which will need to create `CommandDescriptor` instances.

### Fix Focus Areas
- dotnet/src/webdriver/BiDi/Command.cs[24-34]
- dotnet/src/webdriver/BiDi/Broker.cs[117-150]

### Suggested fix
- In `CommandDescriptor` constructor, throw `ArgumentNullException` for null `paramsTypeInfo`/`resultTypeInfo`, and validate `method` (non-null, non-empty).
- Optionally add `ArgumentNullException.ThrowIfNull(descriptor);` at the top of `Broker.ExecuteAsync` for extra safety and clearer error messages.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors the .NET BiDi implementation to define commands statically (via CommandDescriptor) and execute them through a single Broker.ExecuteAsync pathway, reducing per-call allocations and simplifying JSON source-generation requirements.

Changes:

  • Introduces CommandDescriptor<TParameters, TResult> and updates command execution to serialize { id, method, params } directly in Broker.
  • Replaces numerous concrete *Command classes with static CommandDescriptor fields + parameter records across modules.
  • Updates JSON source-generation attributes to reference parameter/result types and narrows visibility of several module implementations.

Reviewed changes

Copilot reviewed 82 out of 82 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
dotnet/test/webdriver/BiDi/Session/SessionTests.cs Updates custom module test to use CommandDescriptor + ExecuteAsync.
dotnet/src/webdriver/BiDi/Broker.cs Implements ExecuteAsync and manual request JSON serialization using descriptors.
dotnet/src/webdriver/BiDi/Command.cs Replaces Command hierarchy with CommandDescriptor; keeps Parameters/EmptyResult.
dotnet/src/webdriver/BiDi/Module.cs Switches base module execution helper to ExecuteAsync(descriptor, params, ...).
dotnet/src/webdriver/BiDi/Browser/BrowserModule.cs Converts browser commands to static descriptors; changes module implementation visibility.
dotnet/src/webdriver/BiDi/Browser/Close.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Browser/CreateUserContext.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Browser/GetClientWindows.cs Removes concrete command class, leaving options/result types.
dotnet/src/webdriver/BiDi/Browser/GetUserContexts.cs Removes concrete command class, leaving options/result types.
dotnet/src/webdriver/BiDi/Browser/RemoveUserContext.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Browser/SetDownloadBehavior.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextModule.cs Converts browsingContext commands to static descriptors; updates subscribe contexts.
dotnet/src/webdriver/BiDi/BrowsingContext/Activate.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/BrowsingContext/CaptureScreenshot.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/BrowsingContext/Close.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/BrowsingContext/Create.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/BrowsingContext/GetTree.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/BrowsingContext/HandleUserPrompt.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/BrowsingContext/LocateNodes.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/BrowsingContext/Navigate.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/BrowsingContext/Print.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/BrowsingContext/Reload.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/BrowsingContext/SetViewport.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/BrowsingContext/TraverseHistory.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextInputModule.cs Narrows wrapper module visibility while keeping interface-based surface.
dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextLogModule.cs Narrows wrapper module visibility while keeping interface-based surface.
dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextNetworkModule.cs Narrows wrapper module visibility while keeping interface-based surface.
dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextScriptModule.cs Narrows wrapper module visibility while keeping interface-based surface.
dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextStorageModule.cs Narrows wrapper module visibility while keeping interface-based surface.
dotnet/src/webdriver/BiDi/Emulation/EmulationModule.cs Converts emulation commands to static descriptors; updates source-gen types.
dotnet/src/webdriver/BiDi/Emulation/SetForcedColorsModeThemeOverride.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Emulation/SetGeolocationOverride.cs Removes concrete command class, leaving polymorphic params/result types.
dotnet/src/webdriver/BiDi/Emulation/SetLocaleOverride.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Emulation/SetNetworkConditions.cs Removes concrete command class, leaving polymorphic params/result types.
dotnet/src/webdriver/BiDi/Emulation/SetScreenOrientationOverride.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Emulation/SetScreenSettingsOverride.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Emulation/SetScriptingEnabled.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Emulation/SetScrollbarTypeOverride.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Emulation/SetTimezoneOverride.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Emulation/SetTouchOverride.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Emulation/SetUserAgentOverride.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Input/InputModule.cs Converts input commands to static descriptors; updates subscribe contexts.
dotnet/src/webdriver/BiDi/Input/PerformActions.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Input/ReleaseActions.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Input/SetFiles.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Log/LogModule.cs Updates subscription serialization references and narrows module visibility.
dotnet/src/webdriver/BiDi/Network/NetworkModule.cs Converts network commands to static descriptors; updates subscribe contexts.
dotnet/src/webdriver/BiDi/Network/AddDataCollector.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Network/AddIntercept.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Network/ContinueRequest.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Network/ContinueResponse.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Network/ContinueWithAuth.cs Removes concrete command class, leaving polymorphic params/result types.
dotnet/src/webdriver/BiDi/Network/FailRequest.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Network/GetData.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Network/ProvideResponse.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Network/RemoveDataCollector.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Network/RemoveIntercept.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Network/SetCacheBehavior.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Network/SetExtraHeaders.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Permissions/PermissionsModule.cs Converts permissions command to a static descriptor; updates source-gen types.
dotnet/src/webdriver/BiDi/Permissions/SetPermission.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Script/ScriptModule.cs Converts script commands to static descriptors; updates subscribe contexts and source-gen.
dotnet/src/webdriver/BiDi/Script/AddPreloadScript.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Script/CallFunction.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Script/Disown.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Script/Evaluate.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Script/GetRealms.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Script/RemovePreloadScript.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Session/SessionModule.cs Converts session commands to static descriptors; updates source-gen types.
dotnet/src/webdriver/BiDi/Session/End.cs Removes concrete command class, leaving options/result types.
dotnet/src/webdriver/BiDi/Session/New.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Session/Status.cs Removes concrete command class, leaving options/result types.
dotnet/src/webdriver/BiDi/Session/Subscribe.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Session/Unsubscribe.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Speculation/SpeculationModule.cs Updates subscription serialization references and narrows module visibility.
dotnet/src/webdriver/BiDi/Storage/StorageModule.cs Converts storage commands to static descriptors; updates source-gen types.
dotnet/src/webdriver/BiDi/Storage/DeleteCookies.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Storage/GetCookies.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/Storage/SetCookie.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/WebExtension/WebExtensionModule.cs Converts webExtension commands to static descriptors; updates source-gen types.
dotnet/src/webdriver/BiDi/WebExtension/Install.cs Removes concrete command class, leaving params/result types.
dotnet/src/webdriver/BiDi/WebExtension/Uninstall.cs Removes concrete command class, leaving params/result types.

Comment thread dotnet/src/webdriver/BiDi/Command.cs Outdated
Comment thread dotnet/src/webdriver/BiDi/Module.cs Outdated
Comment thread dotnet/src/webdriver/BiDi/Browser/BrowserModule.cs
Comment thread dotnet/src/webdriver/BiDi/Script/ScriptModule.cs
Comment thread dotnet/src/webdriver/BiDi/Network/NetworkModule.cs
Copilot AI review requested due to automatic review settings April 9, 2026 22:52
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 82 out of 82 changed files in this pull request and generated 1 comment.

Comment thread dotnet/src/webdriver/BiDi/Command.cs
Comment thread dotnet/src/webdriver/BiDi/Browser/Close.cs
Copilot AI review requested due to automatic review settings April 10, 2026 17:54
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 83 out of 83 changed files in this pull request and generated 1 comment.

Comment thread dotnet/src/webdriver/BiDi/Command.cs
@nvborisenko nvborisenko merged commit f710cf2 into SeleniumHQ:trunk Apr 10, 2026
19 checks passed
@nvborisenko nvborisenko deleted the bidi-command-descriptor branch April 10, 2026 18:15
This was referenced May 13, 2026
PhilipWoulfe pushed a commit to PhilipWoulfe/F1Competition that referenced this pull request May 19, 2026
Updated
[Microsoft.AspNetCore.Components.Authorization](https://github.com/dotnet/aspnetcore)
from 8.0.26 to 8.0.27.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.AspNetCore.Components.Authorization's
releases](https://github.com/dotnet/aspnetcore/releases)._

## 8.0.27

[Release](https://github.com/dotnet/core/releases/tag/v8.0.27)

## What's Changed
* [release/8.0] Update branding to 8.0.27 by @​vseanreesermsft in
dotnet/aspnetcore#66205
* [release/8.0] Update NPM dependencies by @​wtgodbe in
dotnet/aspnetcore#66052
* [release/8.0] Move off of dead-lettered Windows preview helix queue by
@​wtgodbe in dotnet/aspnetcore#66220
* [release/8.0] (deps): Bump src/submodules/googletest from `73a63ea` to
`d72f9c8` by @​dependabot[bot] in
dotnet/aspnetcore#66087
* [release/8.0] Replace dn-bot-dnceng-build-rw-code-rw PAT with WIF
service connection in mirror-within-azdo by @​missymessa in
dotnet/aspnetcore#66115
* [release/8.0] Update dependencies from dotnet/source-build-externals
by @​dotnet-maestro[bot] in
dotnet/aspnetcore#66216
* [release/8.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/aspnetcore#66081
* [release/8.0] Update dependencies from
dotnet/source-build-reference-packages by @​dotnet-maestro[bot] in
dotnet/aspnetcore#66131
* [release/8.0] Update @​azure/msal-browser from 2.x to 4.x by @​wtgodbe
in dotnet/aspnetcore#66236
* [release/8.0] Use source-build-assets repo by @​NikolaMilosavljevic in
dotnet/aspnetcore#66276
* Merging internal commits for release/8.0 by @​vseanreesermsft in
dotnet/aspnetcore#66317


**Full Changelog**:
dotnet/aspnetcore@v8.0.26...v8.0.27

Commits viewable in [compare
view](dotnet/aspnetcore@v8.0.26...v8.0.27).
</details>

Updated
[Microsoft.AspNetCore.Components.WebAssembly](https://github.com/dotnet/aspnetcore)
from 8.0.26 to 8.0.27.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.AspNetCore.Components.WebAssembly's
releases](https://github.com/dotnet/aspnetcore/releases)._

## 8.0.27

[Release](https://github.com/dotnet/core/releases/tag/v8.0.27)

## What's Changed
* [release/8.0] Update branding to 8.0.27 by @​vseanreesermsft in
dotnet/aspnetcore#66205
* [release/8.0] Update NPM dependencies by @​wtgodbe in
dotnet/aspnetcore#66052
* [release/8.0] Move off of dead-lettered Windows preview helix queue by
@​wtgodbe in dotnet/aspnetcore#66220
* [release/8.0] (deps): Bump src/submodules/googletest from `73a63ea` to
`d72f9c8` by @​dependabot[bot] in
dotnet/aspnetcore#66087
* [release/8.0] Replace dn-bot-dnceng-build-rw-code-rw PAT with WIF
service connection in mirror-within-azdo by @​missymessa in
dotnet/aspnetcore#66115
* [release/8.0] Update dependencies from dotnet/source-build-externals
by @​dotnet-maestro[bot] in
dotnet/aspnetcore#66216
* [release/8.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/aspnetcore#66081
* [release/8.0] Update dependencies from
dotnet/source-build-reference-packages by @​dotnet-maestro[bot] in
dotnet/aspnetcore#66131
* [release/8.0] Update @​azure/msal-browser from 2.x to 4.x by @​wtgodbe
in dotnet/aspnetcore#66236
* [release/8.0] Use source-build-assets repo by @​NikolaMilosavljevic in
dotnet/aspnetcore#66276
* Merging internal commits for release/8.0 by @​vseanreesermsft in
dotnet/aspnetcore#66317


**Full Changelog**:
dotnet/aspnetcore@v8.0.26...v8.0.27

Commits viewable in [compare
view](dotnet/aspnetcore@v8.0.26...v8.0.27).
</details>

Updated
[Microsoft.AspNetCore.Components.WebAssembly.DevServer](https://github.com/dotnet/dotnet)
from 10.0.7 to 10.0.8.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.AspNetCore.Components.WebAssembly.DevServer's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated
[Microsoft.AspNetCore.Http.Abstractions](https://github.com/dotnet/aspnetcore)
from 2.3.9 to 2.3.10.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.AspNetCore.Http.Abstractions's
releases](https://github.com/dotnet/aspnetcore/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/aspnetcore/commits).
</details>

Updated
[Microsoft.AspNetCore.Mvc.Testing](https://github.com/dotnet/aspnetcore)
from 8.0.26 to 8.0.27.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.AspNetCore.Mvc.Testing's
releases](https://github.com/dotnet/aspnetcore/releases)._

## 8.0.27

[Release](https://github.com/dotnet/core/releases/tag/v8.0.27)

## What's Changed
* [release/8.0] Update branding to 8.0.27 by @​vseanreesermsft in
dotnet/aspnetcore#66205
* [release/8.0] Update NPM dependencies by @​wtgodbe in
dotnet/aspnetcore#66052
* [release/8.0] Move off of dead-lettered Windows preview helix queue by
@​wtgodbe in dotnet/aspnetcore#66220
* [release/8.0] (deps): Bump src/submodules/googletest from `73a63ea` to
`d72f9c8` by @​dependabot[bot] in
dotnet/aspnetcore#66087
* [release/8.0] Replace dn-bot-dnceng-build-rw-code-rw PAT with WIF
service connection in mirror-within-azdo by @​missymessa in
dotnet/aspnetcore#66115
* [release/8.0] Update dependencies from dotnet/source-build-externals
by @​dotnet-maestro[bot] in
dotnet/aspnetcore#66216
* [release/8.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/aspnetcore#66081
* [release/8.0] Update dependencies from
dotnet/source-build-reference-packages by @​dotnet-maestro[bot] in
dotnet/aspnetcore#66131
* [release/8.0] Update @​azure/msal-browser from 2.x to 4.x by @​wtgodbe
in dotnet/aspnetcore#66236
* [release/8.0] Use source-build-assets repo by @​NikolaMilosavljevic in
dotnet/aspnetcore#66276
* Merging internal commits for release/8.0 by @​vseanreesermsft in
dotnet/aspnetcore#66317


**Full Changelog**:
dotnet/aspnetcore@v8.0.26...v8.0.27

Commits viewable in [compare
view](dotnet/aspnetcore@v8.0.26...v8.0.27).
</details>

Updated
[Microsoft.AspNetCore.OpenApi](https://github.com/dotnet/aspnetcore)
from 8.0.26 to 8.0.27.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.AspNetCore.OpenApi's
releases](https://github.com/dotnet/aspnetcore/releases)._

## 8.0.27

[Release](https://github.com/dotnet/core/releases/tag/v8.0.27)

## What's Changed
* [release/8.0] Update branding to 8.0.27 by @​vseanreesermsft in
dotnet/aspnetcore#66205
* [release/8.0] Update NPM dependencies by @​wtgodbe in
dotnet/aspnetcore#66052
* [release/8.0] Move off of dead-lettered Windows preview helix queue by
@​wtgodbe in dotnet/aspnetcore#66220
* [release/8.0] (deps): Bump src/submodules/googletest from `73a63ea` to
`d72f9c8` by @​dependabot[bot] in
dotnet/aspnetcore#66087
* [release/8.0] Replace dn-bot-dnceng-build-rw-code-rw PAT with WIF
service connection in mirror-within-azdo by @​missymessa in
dotnet/aspnetcore#66115
* [release/8.0] Update dependencies from dotnet/source-build-externals
by @​dotnet-maestro[bot] in
dotnet/aspnetcore#66216
* [release/8.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/aspnetcore#66081
* [release/8.0] Update dependencies from
dotnet/source-build-reference-packages by @​dotnet-maestro[bot] in
dotnet/aspnetcore#66131
* [release/8.0] Update @​azure/msal-browser from 2.x to 4.x by @​wtgodbe
in dotnet/aspnetcore#66236
* [release/8.0] Use source-build-assets repo by @​NikolaMilosavljevic in
dotnet/aspnetcore#66276
* Merging internal commits for release/8.0 by @​vseanreesermsft in
dotnet/aspnetcore#66317


**Full Changelog**:
dotnet/aspnetcore@v8.0.26...v8.0.27

Commits viewable in [compare
view](dotnet/aspnetcore@v8.0.26...v8.0.27).
</details>

Updated
[Microsoft.EntityFrameworkCore](https://github.com/dotnet/efcore) from
9.0.15 to 9.0.16.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.EntityFrameworkCore's
releases](https://github.com/dotnet/efcore/releases)._

## 9.0.16

[Release](https://github.com/dotnet/core/releases/tag/v9.0.16)

## What's Changed
* Merging internal commits for release/8.0 by @​vseanreesermsft in
dotnet/efcore#37900
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#37969
* [release/8.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#38034
* [release/8.0] Update branding to 8.0.27 by @​vseanreesermsft in
dotnet/efcore#38062
* [release/9.0] Update branding to 9.0.16 by @​vseanreesermsft in
dotnet/efcore#38063
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#38053
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#37908
* Merging internal commits for release/8.0 by @​vseanreesermsft in
dotnet/efcore#38099
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#38101
* Merging internal commits for release/9.0 by @​vseanreesermsft in
dotnet/efcore#38098
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#38170


**Full Changelog**:
dotnet/efcore@v9.0.15...v9.0.16

Commits viewable in [compare
view](dotnet/efcore@v9.0.15...v9.0.16).
</details>

Updated
[Microsoft.EntityFrameworkCore.Design](https://github.com/dotnet/efcore)
from 9.0.15 to 9.0.16.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.EntityFrameworkCore.Design's
releases](https://github.com/dotnet/efcore/releases)._

## 9.0.16

[Release](https://github.com/dotnet/core/releases/tag/v9.0.16)

## What's Changed
* Merging internal commits for release/8.0 by @​vseanreesermsft in
dotnet/efcore#37900
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#37969
* [release/8.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#38034
* [release/8.0] Update branding to 8.0.27 by @​vseanreesermsft in
dotnet/efcore#38062
* [release/9.0] Update branding to 9.0.16 by @​vseanreesermsft in
dotnet/efcore#38063
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#38053
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#37908
* Merging internal commits for release/8.0 by @​vseanreesermsft in
dotnet/efcore#38099
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#38101
* Merging internal commits for release/9.0 by @​vseanreesermsft in
dotnet/efcore#38098
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#38170


**Full Changelog**:
dotnet/efcore@v9.0.15...v9.0.16

Commits viewable in [compare
view](dotnet/efcore@v9.0.15...v9.0.16).
</details>

Updated
[Microsoft.EntityFrameworkCore.InMemory](https://github.com/dotnet/efcore)
from 9.0.15 to 9.0.16.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.EntityFrameworkCore.InMemory's
releases](https://github.com/dotnet/efcore/releases)._

## 9.0.16

[Release](https://github.com/dotnet/core/releases/tag/v9.0.16)

## What's Changed
* Merging internal commits for release/8.0 by @​vseanreesermsft in
dotnet/efcore#37900
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#37969
* [release/8.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#38034
* [release/8.0] Update branding to 8.0.27 by @​vseanreesermsft in
dotnet/efcore#38062
* [release/9.0] Update branding to 9.0.16 by @​vseanreesermsft in
dotnet/efcore#38063
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#38053
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#37908
* Merging internal commits for release/8.0 by @​vseanreesermsft in
dotnet/efcore#38099
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#38101
* Merging internal commits for release/9.0 by @​vseanreesermsft in
dotnet/efcore#38098
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#38170


**Full Changelog**:
dotnet/efcore@v9.0.15...v9.0.16

Commits viewable in [compare
view](dotnet/efcore@v9.0.15...v9.0.16).
</details>

Updated
[Microsoft.EntityFrameworkCore.Relational](https://github.com/dotnet/efcore)
from 9.0.15 to 9.0.16.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.EntityFrameworkCore.Relational's
releases](https://github.com/dotnet/efcore/releases)._

## 9.0.16

[Release](https://github.com/dotnet/core/releases/tag/v9.0.16)

## What's Changed
* Merging internal commits for release/8.0 by @​vseanreesermsft in
dotnet/efcore#37900
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#37969
* [release/8.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#38034
* [release/8.0] Update branding to 8.0.27 by @​vseanreesermsft in
dotnet/efcore#38062
* [release/9.0] Update branding to 9.0.16 by @​vseanreesermsft in
dotnet/efcore#38063
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#38053
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#37908
* Merging internal commits for release/8.0 by @​vseanreesermsft in
dotnet/efcore#38099
* [automated] Merge branch 'release/8.0' => 'release/9.0' by
@​github-actions[bot] in dotnet/efcore#38101
* Merging internal commits for release/9.0 by @​vseanreesermsft in
dotnet/efcore#38098
* [release/9.0] Update dependencies from dotnet/arcade by
@​dotnet-maestro[bot] in dotnet/efcore#38170


**Full Changelog**:
dotnet/efcore@v9.0.15...v9.0.16

Commits viewable in [compare
view](dotnet/efcore@v9.0.15...v9.0.16).
</details>

Updated
[Microsoft.Extensions.Caching.Abstractions](https://github.com/dotnet/dotnet)
from 10.0.7 to 10.0.8.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.Caching.Abstractions's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated
[Microsoft.Extensions.Configuration](https://github.com/dotnet/dotnet)
from 10.0.7 to 10.0.8.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.Configuration's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated
[Microsoft.Extensions.Configuration.Binder](https://github.com/dotnet/dotnet)
from 10.0.7 to 10.0.8.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.Configuration.Binder's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated [Microsoft.Extensions.Hosting](https://github.com/dotnet/dotnet)
from 10.0.7 to 10.0.8.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.Hosting's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated [Microsoft.Extensions.Http](https://github.com/dotnet/dotnet)
from 10.0.7 to 10.0.8.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.Http's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated
[Microsoft.Extensions.Options.DataAnnotations](https://github.com/dotnet/dotnet)
from 10.0.7 to 10.0.8.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.Options.DataAnnotations's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Updated [Selenium.Support](https://github.com/SeleniumHQ/selenium) from
4.43.0 to 4.44.0.

<details>
<summary>Release notes</summary>

_Sourced from [Selenium.Support's
releases](https://github.com/SeleniumHQ/selenium/releases)._

## 4.44.0

## Detailed Changelogs by Component

<img src="https://www.selenium.dev/images/programming/java.svg"
width="20" height="20">
**[Java](https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG)**
&nbsp;&nbsp;&nbsp; | &nbsp;&nbsp;&nbsp;<img
src="https://www.selenium.dev/images/programming/python.svg" width="20"
height="20">
**[Python](https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES)**
&nbsp;&nbsp;&nbsp; | &nbsp;&nbsp;&nbsp;<img
src="https://www.selenium.dev/images/programming/dotnet.svg" width="20"
height="20">
**[DotNet](https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG)**
&nbsp;&nbsp;&nbsp; | &nbsp;&nbsp;&nbsp;<img
src="https://www.selenium.dev/images/programming/ruby.svg" width="20"
height="20">
**[Ruby](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)**
&nbsp;&nbsp;&nbsp; | &nbsp;&nbsp;&nbsp;<img
src="https://www.selenium.dev/images/programming/javascript.svg"
width="20" height="20">
**[JavaScript](https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/selenium-webdriver/CHANGES.md)**
<br>


<!-- Release notes generated using configuration in .github/release.yml
at da2039bd1456a161d0c284de16f9f4f179f1e8ca -->

## What's Changed
<details>
<summary>Click to see all the changes included in this release</summary>

* fix(documentation): update artifact naming for generated docs by
@​diemol in SeleniumHQ/selenium#17332
* fix(ruby): retrieve devtools version dynamically for package
verification by @​diemol in
SeleniumHQ/selenium#17335
* [dotnet] Don't truncate internal log messages at error/warn levels by
@​nvborisenko in SeleniumHQ/selenium#17333
* [dotnet] Safe modifications of internal log handlers by @​nvborisenko
in SeleniumHQ/selenium#17334
* [dotnet] Remove planned obsoleted members for 4.44 by @​nvborisenko in
SeleniumHQ/selenium#17328
* [dotnet] [bidi] Statically declare commands by @​nvborisenko in
SeleniumHQ/selenium#17330
* [dotnet] [bidi] Statically declared events by @​nvborisenko in
SeleniumHQ/selenium#17331
* [dotnet] Add C# 14 extension to polyfill
`ArgumentNullException.ThrowIfNull` by @​RenderMichael in
SeleniumHQ/selenium#16697
* [dotnet] [bidi] Align SetDownloadBehavior command by @​nvborisenko in
SeleniumHQ/selenium#17336
* [dotnet] [bidi] Align ContinueWithAuth command by @​nvborisenko in
SeleniumHQ/selenium#17337
* [dotnet] [bidi] Align SetGeolocation polymorphic command by
@​nvborisenko in SeleniumHQ/selenium#17338
* [dotnet] [test] In-process test webserver by @​nvborisenko in
SeleniumHQ/selenium#17339
* [java] deprecate the 'native' methods inside the HttpClient interface
by @​joerg1985 in SeleniumHQ/selenium#17340
* CDDL 2 Python generator by @​AutomatedTester in
SeleniumHQ/selenium#16914
* Fix py:local_dev rake task by @​cgoldberg in
SeleniumHQ/selenium#17342
* [grid] Accept legacy session-closed event payloads by @​VietND96 in
SeleniumHQ/selenium#17343
* [java] specify nullability in package `org.openqa.selenium.remote` by
@​asolntsev in SeleniumHQ/selenium#17325
* fix NPE when response status is null by @​asolntsev in
SeleniumHQ/selenium#17348
* [java] fix NoSuchElementException for custom By locators by
@​Chandan25sharma in SeleniumHQ/selenium#17287
* [py] Update docs with pytest example and minor formatting fixes by
@​cgoldberg in SeleniumHQ/selenium#17351
* [dotnet] Fix stopping of network monitoring via DevTools by
@​nvborisenko in SeleniumHQ/selenium#17352
* [dotnet] [test] Update tests to target .NET 10 by @​nvborisenko in
SeleniumHQ/selenium#17353
* [build] Clean extra tools from GHA runner to free disk space by
@​cgoldberg in SeleniumHQ/selenium#17360
* Initial Creation of the Selenium CLI Tool by @​AutomatedTester in
SeleniumHQ/selenium#17327
* [java] fix some nullability warnings by @​asolntsev in
SeleniumHQ/selenium#17362
* [py] Use generated Bidi files instead of hand curated ones by
@​AutomatedTester in SeleniumHQ/selenium#17266
* [docs] Add AI-assisted contribution policy by @​titusfortner in
SeleniumHQ/selenium#17043
* [Agents] Update agents to make sure do linting. by @​AutomatedTester
in SeleniumHQ/selenium#17366
* [py] Bump dependencies by @​cgoldberg in
SeleniumHQ/selenium#17368
* [git] update gitignore to exclude mempalace by @​AutomatedTester in
SeleniumHQ/selenium#17369
* [java] remove field `ChromiumDriver.capabilities` by @​asolntsev in
SeleniumHQ/selenium#17363
* [spec] Use http_file for the cddl files by @​AutomatedTester in
SeleniumHQ/selenium#17372
* [dotnet] [bidi] Obsolete Type(string) method in Input module by
@​nvborisenko in SeleniumHQ/selenium#17377
* Fix Network failures by @​AutomatedTester in
SeleniumHQ/selenium#17381
* [java] [test] Unignore bidi network conditions tests for Firefox by
@​nvborisenko in SeleniumHQ/selenium#17385
* [dotnet] [test] Unignore network conditions tests for Firefox by
@​nvborisenko in SeleniumHQ/selenium#17386
* [dotnet] [test] Migrate to MTP by @​nvborisenko in
SeleniumHQ/selenium#17384
* [dotnet] Support `UnhandledPromptBehavior` option as string and map
(breaking change) by @​nvborisenko in
SeleniumHQ/selenium#16557
 ... (truncated)

Commits viewable in [compare
view](SeleniumHQ/selenium@selenium-4.43.0...selenium-4.44.0).
</details>

Updated [Selenium.WebDriver](https://github.com/SeleniumHQ/selenium)
from 4.43.0 to 4.44.0.

<details>
<summary>Release notes</summary>

_Sourced from [Selenium.WebDriver's
releases](https://github.com/SeleniumHQ/selenium/releases)._

## 4.44.0

## Detailed Changelogs by Component

<img src="https://www.selenium.dev/images/programming/java.svg"
width="20" height="20">
**[Java](https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG)**
&nbsp;&nbsp;&nbsp; | &nbsp;&nbsp;&nbsp;<img
src="https://www.selenium.dev/images/programming/python.svg" width="20"
height="20">
**[Python](https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES)**
&nbsp;&nbsp;&nbsp; | &nbsp;&nbsp;&nbsp;<img
src="https://www.selenium.dev/images/programming/dotnet.svg" width="20"
height="20">
**[DotNet](https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG)**
&nbsp;&nbsp;&nbsp; | &nbsp;&nbsp;&nbsp;<img
src="https://www.selenium.dev/images/programming/ruby.svg" width="20"
height="20">
**[Ruby](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)**
&nbsp;&nbsp;&nbsp; | &nbsp;&nbsp;&nbsp;<img
src="https://www.selenium.dev/images/programming/javascript.svg"
width="20" height="20">
**[JavaScript](https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/selenium-webdriver/CHANGES.md)**
<br>


<!-- Release notes generated using configuration in .github/release.yml
at da2039bd1456a161d0c284de16f9f4f179f1e8ca -->

## What's Changed
<details>
<summary>Click to see all the changes included in this release</summary>

* fix(documentation): update artifact naming for generated docs by
@​diemol in SeleniumHQ/selenium#17332
* fix(ruby): retrieve devtools version dynamically for package
verification by @​diemol in
SeleniumHQ/selenium#17335
* [dotnet] Don't truncate internal log messages at error/warn levels by
@​nvborisenko in SeleniumHQ/selenium#17333
* [dotnet] Safe modifications of internal log handlers by @​nvborisenko
in SeleniumHQ/selenium#17334
* [dotnet] Remove planned obsoleted members for 4.44 by @​nvborisenko in
SeleniumHQ/selenium#17328
* [dotnet] [bidi] Statically declare commands by @​nvborisenko in
SeleniumHQ/selenium#17330
* [dotnet] [bidi] Statically declared events by @​nvborisenko in
SeleniumHQ/selenium#17331
* [dotnet] Add C# 14 extension to polyfill
`ArgumentNullException.ThrowIfNull` by @​RenderMichael in
SeleniumHQ/selenium#16697
* [dotnet] [bidi] Align SetDownloadBehavior command by @​nvborisenko in
SeleniumHQ/selenium#17336
* [dotnet] [bidi] Align ContinueWithAuth command by @​nvborisenko in
SeleniumHQ/selenium#17337
* [dotnet] [bidi] Align SetGeolocation polymorphic command by
@​nvborisenko in SeleniumHQ/selenium#17338
* [dotnet] [test] In-process test webserver by @​nvborisenko in
SeleniumHQ/selenium#17339
* [java] deprecate the 'native' methods inside the HttpClient interface
by @​joerg1985 in SeleniumHQ/selenium#17340
* CDDL 2 Python generator by @​AutomatedTester in
SeleniumHQ/selenium#16914
* Fix py:local_dev rake task by @​cgoldberg in
SeleniumHQ/selenium#17342
* [grid] Accept legacy session-closed event payloads by @​VietND96 in
SeleniumHQ/selenium#17343
* [java] specify nullability in package `org.openqa.selenium.remote` by
@​asolntsev in SeleniumHQ/selenium#17325
* fix NPE when response status is null by @​asolntsev in
SeleniumHQ/selenium#17348
* [java] fix NoSuchElementException for custom By locators by
@​Chandan25sharma in SeleniumHQ/selenium#17287
* [py] Update docs with pytest example and minor formatting fixes by
@​cgoldberg in SeleniumHQ/selenium#17351
* [dotnet] Fix stopping of network monitoring via DevTools by
@​nvborisenko in SeleniumHQ/selenium#17352
* [dotnet] [test] Update tests to target .NET 10 by @​nvborisenko in
SeleniumHQ/selenium#17353
* [build] Clean extra tools from GHA runner to free disk space by
@​cgoldberg in SeleniumHQ/selenium#17360
* Initial Creation of the Selenium CLI Tool by @​AutomatedTester in
SeleniumHQ/selenium#17327
* [java] fix some nullability warnings by @​asolntsev in
SeleniumHQ/selenium#17362
* [py] Use generated Bidi files instead of hand curated ones by
@​AutomatedTester in SeleniumHQ/selenium#17266
* [docs] Add AI-assisted contribution policy by @​titusfortner in
SeleniumHQ/selenium#17043
* [Agents] Update agents to make sure do linting. by @​AutomatedTester
in SeleniumHQ/selenium#17366
* [py] Bump dependencies by @​cgoldberg in
SeleniumHQ/selenium#17368
* [git] update gitignore to exclude mempalace by @​AutomatedTester in
SeleniumHQ/selenium#17369
* [java] remove field `ChromiumDriver.capabilities` by @​asolntsev in
SeleniumHQ/selenium#17363
* [spec] Use http_file for the cddl files by @​AutomatedTester in
SeleniumHQ/selenium#17372
* [dotnet] [bidi] Obsolete Type(string) method in Input module by
@​nvborisenko in SeleniumHQ/selenium#17377
* Fix Network failures by @​AutomatedTester in
SeleniumHQ/selenium#17381
* [java] [test] Unignore bidi network conditions tests for Firefox by
@​nvborisenko in SeleniumHQ/selenium#17385
* [dotnet] [test] Unignore network conditions tests for Firefox by
@​nvborisenko in SeleniumHQ/selenium#17386
* [dotnet] [test] Migrate to MTP by @​nvborisenko in
SeleniumHQ/selenium#17384
* [dotnet] Support `UnhandledPromptBehavior` option as string and map
(breaking change) by @​nvborisenko in
SeleniumHQ/selenium#16557
 ... (truncated)

Commits viewable in [compare
view](SeleniumHQ/selenium@selenium-4.43.0...selenium-4.44.0).
</details>

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

C-dotnet .NET Bindings

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants