SeleniumHQ / SeleniumHQ/selenium
[🚀 Feature]: Add support for chrome-headless-shell to Selenium Manager
- Dominant language
- Java
- Stars
- 34.5k
- Forks
- 8.7k
- Avg merge
- 2d 1h
- Merged PRs (30d)
- 92
Description
### Background
Previously it was decided in #13600 (2024-03) that `chrome-headless-shell` shall not be supported by Selenium Manager, due to it being part of the main `chrome` binary.
> There's nothing separate to download, it's part of the Chrome installation, and there's not a good reason to support this independently.
This is no longer true, as `--headless=old` is [no longer supported](https://developer.chrome.com/blog/removing-headless-old-from-chrome) as of Chrome 132 (2025-01-14):
> We're happy to announce that the old Headless mode will be removed in Chrome 132.
And:
> If you are using old Headless functionality you should now migrate to chrome-headless-shell (to retain old Headless functionality) or to the new Headless mode, which continues to be provided by the Chrome binary.
While new headless mode is suitable for full CI testing, the old headless mode is significantly faster, making it a much better fit for iterative TDD testing when browser interactions are under test.
### Feature Request
Selenium Manager should either:
- fetch both binaries when chrome is specified
or
- provide support for chrome-headless-shell as a standalone browser option
In either case, it seems likely that Selenium implementations will also need to adjust to handle the separate binaries (perhaps by noticing `--headless=old` and switching binaries?), but that seems like a secondary task dependent on SM supporting autodownloads of both binaries.
### Have you considered any alternatives or workarounds?
The current workaround I've come up with is to install the `chrome-headless-shell` binary myself, and specify that as the binary to use when running Selenium. eg.
```ruby
browser_options = Selenium::WebDriver::Chrome::Options.new
browser_options.binary = '/some/path/to/binary/chrome-headless-shell'
# Using Capybara + Selenium, but the point applies regardless of testing engine
Capybara::Selenium::Driver.new(app, browser: :chrome_headless_shell, options: browser_options)
```
I've put together a [rickety emulation](https://gist.github.com/robinetmiller/9714683c223f0a9ea68edc69aa85816d) of SM's autodownload behaviour that attempts to match the installed Chrome version, but makes no attempt to be cross-platform nor support most browsers.
This is obviously not as robust as Selenium Manager handling it properly, but it does work for now and avoids a hardcoded local path and (some) manual updates.
Contributor guide
Assessment
This issue has not been assessed yet.