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

  1. Use one of the supported names: chrome, firefox, edge, ie, safari, safaritp, electron.
  2. For Chromium-based browsers not in the list, configure them via the Chrome manager path or use a manual driver.
  3. 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

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


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