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

  1. 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.
  2. Pin the driver version explicitly so Selenium Manager skips online discovery (e.g. --driver-version 0.32.0 or the browserVersion/driver capability).
  3. 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.
  4. 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

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


AI-assisted analysis of SeleniumHQ/selenium@aa36b38e69 (2026-08-14). Data as JSON: /api/errors/4686a4469146edc8. Report an issue: GitHub.