SeleniumHQ / SeleniumHQ/selenium

[🚀 Feature]: Add support for chrome-headless-shell to Selenium Manager

Open
#16,276 5 comments 0 reactions 0 assignees View on GitHub
B-manager I-enhancement
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.