SeleniumHQ/selenium · error · anyhow::Error

Wrong {} version: '{}'

Error message

Wrong {} version: '{}'

What it means

Thrown inside get_selenium_release_version() while normalizing a Selenium/IEDriver release version (e.g. turning 4.8.1 into the release 4.8.0). When the version does not end in '0' and is not a nightly, the code calls rfind('.') to find the last dot; if there is no dot at all, ok_or turns None into this error. The placeholders are the driver name and the offending version string.

Source

Thrown at rust/src/lib.rs:1162

    fn get_major_version(&self, full_version: &str) -> Result<String, Error> {
        get_index_version(full_version, 0)
    }

    fn get_selenium_release_version(&self) -> Result<String, Error> {
        let driver_version = self.get_driver_version();
        if driver_version.contains(SNAPSHOT) {
            return Ok(NIGHTLY.to_string());
        }

        let mut release_version = driver_version.to_string();
        if !driver_version.ends_with('0') && !self.is_nightly(driver_version) {
            // E.g.: version 4.8.1 is shipped within release 4.8.0
            let error_message = format!(
                "Wrong {} version: '{}'",
                self.get_driver_name(),
                driver_version
            );
            let index = release_version.rfind('.').ok_or(anyhow!(error_message))? + 1;
            release_version = release_version[..index].to_string();
            release_version.push('0');
        }
        Ok(format!("selenium-{release_version}"))
    }

    fn assert_online_or_err(&self, message: &str) -> Result<(), Error> {
        if self.is_offline() {
            return Err(anyhow!(format_one_arg(message, self.get_driver_name())));
        }
        Ok(())
    }

    fn get_driver_name_with_extension(&self) -> String {
        format!(
            "{}{}",
            self.get_driver_name(),
            get_binary_extension(self.get_os())

View on GitHub (pinned to aa36b38e69)

Solutions

  1. Inspect the Selenium Manager debug log to see the exact driver_version string that lacked a dot.
  2. Pin a well-formed driver version explicitly (e.g. --driver-version 4.20.0) so the normalization branch is not taken.
  3. Update Selenium Manager to the latest build in case a version-source format change has already been handled.

Example fix

# before (malformed single-token version from source)
selenium-manager --driver iedriver   # version resolved as e.g. '4'
# after
selenium-manager --driver iedriver --driver-version 4.20.0
Defensive patterns

Strategy: validation

Validate before calling

fn is_well_formed_release_version(v: &str) -> bool {
    v.contains('.') && v.split('.').all(|p| !p.is_empty())
}
// before calling get_selenium_release_version / pinning:
let dv = manager.get_driver_version();
if !is_well_formed_release_version(&dv) {
    manager.set_driver_version("4.20.0");
}

Prevention

When it happens

Trigger: get_selenium_release_version() receives a driver_version that contains no '.' character and is neither a SNAPSHOT/nightly nor ending in '0'. rfind('.') returns None, so ok_or(error_message) fails.

Common situations: A malformed or single-token version string came back for the IEDriverServer or Selenium Grid jar (e.g. just "4" or a non-semver tag); the version endpoint changed its format.

Related errors


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