SeleniumHQ/selenium · error · anyhow::Error
Invalid browser name: {browser_name}
Error message
Invalid browser name: {browser_name} What it means
Returned by get_manager_by_browser() when the lowercased browser name matches none of chrome, firefox, edge, ie, safari, safaritp, or electron. The browser name is interpolated verbatim (original case) in the message.
Source
Thrown at rust/src/lib.rs:1734
pub fn get_manager_by_browser(browser_name: String) -> Result<Box<dyn SeleniumManager>, Error> {
let browser_name_lower_case = browser_name.to_ascii_lowercase();
if browser_name_lower_case.eq(CHROME_NAME) {
Ok(ChromeManager::new()?)
} else if browser_name_lower_case.eq(FIREFOX_NAME) {
Ok(FirefoxManager::new()?)
} else if EDGE_NAMES.contains(&browser_name_lower_case.as_str()) {
Ok(EdgeManager::new_with_name(browser_name)?)
} else if IE_NAMES.contains(&browser_name_lower_case.as_str()) {
Ok(IExplorerManager::new()?)
} else if browser_name_lower_case.eq(SAFARI_NAME) {
Ok(SafariManager::new()?)
} else if SAFARITP_NAMES.contains(&browser_name_lower_case.as_str()) {
Ok(SafariTPManager::new()?)
} else if browser_name_lower_case.eq(ELECTRON_NAME) {
Ok(ElectronManager::new()?)
} else {
Err(anyhow!(format!("Invalid browser name: {browser_name}")))
}
}
pub fn get_manager_by_driver(driver_name: String) -> Result<Box<dyn SeleniumManager>, Error> {
if driver_name.eq_ignore_ascii_case(CHROMEDRIVER_NAME) {
Ok(ChromeManager::new()?)
} else if driver_name.eq_ignore_ascii_case(GECKODRIVER_NAME) {
Ok(FirefoxManager::new()?)
} else if driver_name.eq_ignore_ascii_case(EDGEDRIVER_NAME) {
Ok(EdgeManager::new()?)
} else if driver_name.eq_ignore_ascii_case(IEDRIVER_NAME) {
Ok(IExplorerManager::new()?)
} else if driver_name.eq_ignore_ascii_case(SAFARIDRIVER_NAME) {
Ok(SafariManager::new()?)
} else {
Err(anyhow!(format!("Invalid driver name: {driver_name}")))
}
}View on GitHub (pinned to aa36b38e69)
Solutions
- Use one of the supported names: chrome, firefox, edge, ie, safari, safaritp, electron.
- For Chromium-based browsers not in the list, configure them via the Chrome manager path or use a manual driver.
- Trim whitespace and check for typos.
Example fix
# before selenium-manager --browser opera # after selenium-manager --browser chrome # route Opera via chromium engine
Defensive patterns
Strategy: type-guard
Type guard
const SUPPORTED_BROWSERS: &[&str] = &["chrome","firefox","edge","ie","safari","safaritp","electron"];
fn is_supported_browser(name: &str) -> bool {
SUPPORTED_BROWSERS.contains(&name.to_ascii_lowercase().trim())
}
if !is_supported_browser(&browser) {
return Err(anyhow!("invalid browser name: {browser}"));
} Prevention
- Whitelist browser names at the configuration layer before passing them to Selenium Manager.
- Trim and lowercase user-supplied browser names.
- Route non-listed Chromium browsers through the Chrome manager.
When it happens
Trigger: get_manager_by_browser(browser_name) is called with a string that, after to_ascii_lowercase(), equals none of the recognized names (lib.rs:1717-1735).
Common situations: Typo (e.g. "crome"); passing a vendor name Selenium Manager does not route directly (Opera, Brave) instead of the chromium engine; trailing whitespace; unsupported browser.
Related errors
- Invalid operating system: {os}
- Invalid driver name: {driver_name}
- Wrong version: {}
- Unexpected compiled output format. Expected it to start with
- Unexpected compiled output format. Expected it to start with
AI-assisted analysis of SeleniumHQ/selenium@aa36b38e69 (2026-08-14).
Data as JSON: /api/errors/91923cf0ca3b50b6.
Report an issue: GitHub.