-
-
Notifications
You must be signed in to change notification settings - Fork 8.7k
[adr] Selenium Manager released API #17741
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: trunk
Are you sure you want to change the base?
Changes from all commits
150e5e8
b59bb22
fc5a3b1
3824f55
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,79 @@ | ||
| # 17741. Selenium Manager ships as an official, independently released tool | ||
|
|
||
| - Status: Proposed | ||
| - Discussion: https://github.com/SeleniumHQ/selenium/pull/17741 | ||
|
|
||
| ## Context | ||
|
|
||
| Releasing Selenium Manager (SM) independently of the bindings means a binding and the SM it | ||
| invokes can differ in version. This record settles what that commits us to. A decision belongs | ||
| here only if it either cannot change after 1.0 without a breaking change β the forward-compatibility | ||
| behavior and every committed default β or is an obligation the independent release itself creates. | ||
| Bugs and additive enhancements (new browsers, warning wording) are out of scope. | ||
|
|
||
| ## Decision | ||
|
|
||
| **Versioning and distribution.** SM takes its own semantic version from `1.0.0` and is released | ||
| standalone as well as bundled. Bindings ship and default to a known-good SM, but already let a user | ||
| point at a different binary, so a binding and the SM it runs may differ in version. | ||
|
|
||
| **Output.** The default follows standard CLI convention β result on stdout, logs on stderr β so | ||
| `$(selenium-manager β¦)` captures only the result. Bindings request output explicitly and are | ||
| unaffected, so only the standalone audience is impacted. | ||
|
Comment on lines
+21
to
+22
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 1. Output default contradicts cli The ADR claims Selenium Managerβs default output puts the result on stdout and logs/diagnostics on stderr, but the current CLI default is --output LOGGER, which logs to stdout; only `--output mixed` targets stderr. This makes the proposed stable contract for standalone usage inaccurate unless the ADR also commits to changing the CLI default (or explicitly names mixed as the default output mode). Agent Prompt
|
||
|
|
||
| **Forward compatibility.** Neither the bindings nor the binary may fail solely because of version | ||
| skew. How an older SM treats an input it does not recognize depends on the input: | ||
|
|
||
| - *Unknown switch* β warn (tell the user to update SM) and ignore; the binding still gets valid | ||
| paths. A switch only adjusts resolution, so dropping it is safe. | ||
|
qodo-code-review[bot] marked this conversation as resolved.
|
||
| - *Unknown value of a switch that has a default* (output format, log level) β use the default and warn. | ||
| - *Unknown value of a switch with no default* β error, naming the value and telling the user to | ||
| update SM (e.g. `Selenium Manager 1.2 does not support browser 'chrome-for-testing'`). There is | ||
| nothing to fall back to; for `--browser` these are distinct browsers where substituting one would | ||
| be the wrong result. Erroring is safe because such values are only ever requested explicitly. | ||
| - New switches must be optional β an older binding will omit them. | ||
| - Nothing in the contract β switches, values, output fields β is removed or renamed without a | ||
| deprecation cycle. | ||
| - Current defaults must not change once released, and must all be documented | ||
| ([configuration reference](https://www.selenium.dev/documentation/selenium_manager/#configuration)). | ||
|
Comment on lines
+37
to
+38
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 1. Defaults not enumerated The ADR says βcurrent defaultsβ are locked as part of the stable contract, but it doesnβt actually list which defaults are being locked and instead points to an external reference. This conflicts with the repoβs rule that decision records must be understandable without following links and leaves the contract ambiguous when defaults change. Agent Prompt
|
||
|
|
||
| **Resolution.** | ||
|
|
||
| - When provided a driver location, SM validates the correct browser and downloads it if necessary, | ||
| instead of being bypassed. This is not backward compatible, so a toggle is necessary to control | ||
| desired behavior. | ||
| - A `PATH` driver whose version does not match the browser is not used; SM fetches a matching one. | ||
|
|
||
| **Telemetry.** | ||
|
|
||
| - The binding must pass in the Selenium version and language (name and version). | ||
| - SM must pass in the SM version. | ||
| - Each time SM sends data, it logs what was sent and how to disable it. | ||
|
Comment on lines
+16
to
+51
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 1. No cross-binding comparison evidence This ADR defines user-visible contract details impacting bindings (e.g., output behavior and telemetry requirements) but does not identify any other binding used for comparison or provide evidence of a cross-binding search. Without an explicit comparison reference, the PR does not meet the checklist requirement to validate consistency across bindings when specifying user-visible behavior. Agent Prompt
|
||
|
|
||
| ## Considered options | ||
|
|
||
| - **Leaving Beta.** | ||
| - Stay in Beta β contract stays mutable. | ||
| - Drop the label but keep versioning coupled to the bindings β empty releases, no standalone use. | ||
| - Independently versioned, standalone-released β **selected**. | ||
| - **Default output.** | ||
| - Keep logs on stdout β pollutes `$(selenium-manager β¦)`. | ||
| - Follow standard CLI convention: result on stdout, diagnostics on stderr β **selected**. | ||
| - **Unknown switch, or unknown value of a switch with a default.** | ||
| - Error β turns expected skew into a broken session. | ||
| - Warn and ignore the switch, or use the default value β **selected**. | ||
| - **Unknown value of a switch with no default** (e.g. `--browser`). | ||
| - Warn and substitute a fallback β silently does something other than what was asked. | ||
| - Error, directing the user to update SM β **selected**. | ||
| - **A provided driver.** | ||
| - Keep bypassing SM β the browser is left unmanaged. | ||
| - Always run SM β breaks backward compatibility. | ||
| - Run it behind a toggle, default unchanged β **selected**. | ||
| - **A mismatched `PATH` driver.** | ||
| - Use it with a warning β usually still fails at session start. | ||
| - Do not use it, fetch a matching one β **selected**. | ||
|
|
||
| ## Consequences | ||
|
|
||
| - Once released, the contract constrains every `rust/` change: no switch, value, or output field | ||
| changes without a deprecation cycle, and the current defaults are locked. | ||
|
Comment on lines
+76
to
+79
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 2. Missing binding status table The record lacks a ## Binding status section/table, which the documented process uses to track per-binding implementation and which is the only section intended to be editable after acceptance. Agent Prompt
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
1. Missing decision date
π Bugβ MaintainabilityAgent Prompt
β Copy this prompt and use it to remediate the issue with your preferred AI generation tools