SeleniumHQ/selenium · error · anyhow::Error
The {} version cannot be discovered
Error message
The {} version cannot be discovered What it means
Thrown by Selenium Manager's discover_driver_version() when request_driver_version() succeeds but returns an empty string. The placeholder is filled with the driver name (e.g. chromedriver, geckodriver). It means the online version endpoint was reachable but yielded no usable version, so Selenium Manager cannot decide which driver to install.
Source
Thrown at rust/src/lib.rs:685
self.get_browser_version(),
browser_path.unwrap().display()
));
} else if !self.is_iexplorer() && !self.is_grid() && !self.is_safari() {
return Err(anyhow!(format!(
"{}{} cannot be downloaded",
self.get_browser_name(),
self.get_browser_version_label()
)));
}
}
Ok(())
}
fn discover_driver_version(&mut self) -> Result<String, Error> {
// We request the driver version using online endpoints
let driver_version = self.request_driver_version()?;
if driver_version.is_empty() {
Err(anyhow!(format!(
"The {} version cannot be discovered",
self.get_driver_name()
)))
} else {
self.get_logger().debug(format!(
"Required driver: {} {}",
self.get_driver_name(),
driver_version
));
Ok(driver_version)
}
}
fn find_browser_in_path(&self) -> Option<PathBuf> {
for browser_name in self.get_browser_names_in_path().iter() {
self.get_logger()
.trace(format!("Checking {} in PATH", browser_name));
let browser_path = self.execute_which_in_shell(browser_name);View on GitHub (pinned to aa36b38e69)
Solutions
- Check Selenium Manager logs (SE_LOG_LEVEL=debug or --debug) to see which endpoint returned the empty response and what browser version it used for the lookup.
- Pin the driver version explicitly so Selenium Manager skips online discovery (e.g. --driver-version 0.32.0 or the browserVersion/driver capability).
- If behind a proxy, set HTTPS_PROXY / HTTP_PROXY and confirm the endpoint (googlechromelabs.github.io, github.com/mozilla/geckodriver/releases) is reachable and not returning empty.
- Install or repair the target browser so its version can be detected locally.
Example fix
# before SE_MANAGER_PATH=/path/selenium-manager --browser chrome # after (pin driver version, skip discovery) SE_MANAGER_PATH=/path/selenium-manager --browser chrome --driver-version 131.0.6778.87
Defensive patterns
Strategy: retry
Try / catch
// Driver discovery is invoked by the binding via selenium-manager CLI.
// Retry the Selenium Manager call a few times for transient empty responses,
// then fall back to an explicitly pinned driver version.
for (int attempt = 0; attempt < 3; attempt++) {
try {
return runSeleniumManager("--browser", browser);
} catch (DriverDiscoveryException e) {
if (attempt == 2) return runSeleniumManager("--browser", browser, "--driver-version", pinned);
}
} Prevention
- Pin the driver version in capabilities so online discovery is never required.
- Keep the target browser installed and detectable so its version is non-empty.
- Whitelist the version-discovery endpoints in proxy/firewall rules.
When it happens
Trigger: request_driver_version() returns Ok("") because the browser/driver version could not be resolved upstream (e.g. browser version itself was empty, so the version-lookup endpoint returned no matching driver). discover_driver_version() then errors instead of propagating an empty version.
Common situations: A corporate proxy or filtering layer returns a 200 with an empty body; the browser is not installed so its version is unknown; an unstable/nightly browser version is not listed in the Chrome-for-Testing or geckodriver release JSON.
Related errors
- {} {} not available for download on {} (minimum version: {})
- Unsuccessful response ({}) for URL {}
- Error parsing JSON from URL {} {}
- Unable to discover proper {} version in offline mode
- Unable to obtain browser driver. For more informatio
AI-assisted analysis of SeleniumHQ/selenium@aa36b38e69 (2026-08-14).
Data as JSON: /api/errors/4686a4469146edc8.
Report an issue: GitHub.