-
-
Notifications
You must be signed in to change notification settings - Fork 8.6k
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 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.
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 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.