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
- Inspect the Selenium Manager debug log to see the exact driver_version string that lacked a dot.
- Pin a well-formed driver version explicitly (e.g. --driver-version 4.20.0) so the normalization branch is not taken.
- 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
- Pin a fully-qualified driver version (major.minor.patch).
- Log the resolved driver version in debug builds to catch malformed sources early.
- Update Selenium Manager when version-source formats change.
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
- {} {} not available for download on {} (minimum version: {})
- Linux arm64 is not supported yet by Google Chrome. Please tr
- Linux arm64 is not supported yet by {}. Please try another b
- Invalid operating system: {os}
- Unsuccessful response ({}) for URL {}
AI-assisted analysis of SeleniumHQ/selenium@aa36b38e69 (2026-08-14).
Data as JSON: /api/errors/a7dc8d8e0fcbf885.
Report an issue: GitHub.