or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

browser-management.mdbrowser-managers.mdcli-interface.mdconfiguration.mddriver-management.mdindex.md
tile.json

browser-managers.mddocs/

Browser Managers

Selenium Manager provides specialized browser manager implementations for each supported browser. Each manager implements the SeleniumManager trait with browser-specific functionality.

Manager Implementations

ChromeManager

Manages Chrome browser and ChromeDriver with Chrome for Testing (CFT) support.

impl ChromeManager {
    pub fn new() -> Result<Box<Self>, Error>;
}

Features:

  • Chrome for Testing API integration
  • Automatic Chrome version detection
  • ChromeDriver version compatibility resolution
  • Support for Chrome channels: stable, beta, dev, canary

Usage Example:

use selenium_manager::ChromeManager;
use anyhow::Result;

fn setup_chrome() -> Result<()> {
    let mut manager = ChromeManager::new()?;
    let driver_path = manager.setup()?;
    println!("ChromeDriver ready at: {}", driver_path.display());
    Ok(())
}

FirefoxManager

Manages Firefox browser and GeckoDriver with ESR support.

impl FirefoxManager {
    pub fn new() -> Result<Box<Self>, Error>;
}

Features:

  • Firefox stable and Extended Support Release (ESR) versions
  • GeckoDriver compatibility resolution via Mozilla API
  • Support for Firefox channels: stable, beta, dev, nightly, esr

Usage Example:

use selenium_manager::FirefoxManager;
use anyhow::Result;

fn setup_firefox() -> Result<()> {
    let mut manager = FirefoxManager::new()?;
    let driver_path = manager.setup()?;
    println!("GeckoDriver ready at: {}", driver_path.display());
    Ok(())
}

EdgeManager

Manages Microsoft Edge browser and EdgeDriver, including WebView2 support.

impl EdgeManager {
    pub fn new() -> Result<Box<Self>, Error>;
    pub fn new_with_name(browser_name: String) -> Result<Box<Self>, Error>;
}

Features:

  • Microsoft Edge and WebView2 support
  • EdgeDriver compatibility resolution
  • Support for Edge channels: stable, beta, dev
  • Custom browser name specification for WebView2

Usage Examples:

use selenium_manager::EdgeManager;
use anyhow::Result;

fn setup_edge() -> Result<()> {
    let mut manager = EdgeManager::new()?;
    let driver_path = manager.setup()?;
    println!("EdgeDriver ready at: {}", driver_path.display());
    Ok(())
}

fn setup_webview2() -> Result<()> {
    let mut manager = EdgeManager::new_with_name("webview2".to_string())?;
    let driver_path = manager.setup()?;
    println!("EdgeDriver for WebView2 ready at: {}", driver_path.display());
    Ok(())
}

SafariManager

Manages Safari browser and SafariDriver on macOS.

impl SafariManager {
    pub fn new() -> Result<Box<Self>, Error>;
}

Features:

  • macOS Safari integration
  • Uses system-provided SafariDriver
  • No driver download required (uses built-in driver)

Usage Example:

use selenium_manager::SafariManager;
use anyhow::Result;

fn setup_safari() -> Result<()> {
    let mut manager = SafariManager::new()?;
    let driver_path = manager.setup()?;
    println!("SafariDriver ready at: {}", driver_path.display());
    Ok(())
}

SafariTPManager

Manages Safari Technology Preview and its driver.

impl SafariTPManager {
    pub fn new() -> Result<Box<Self>, Error>;
}

Features:

  • Safari Technology Preview support
  • macOS only
  • Uses system-provided driver for Safari TP

Usage Example:

use selenium_manager::SafariTPManager;
use anyhow::Result;

fn setup_safari_tp() -> Result<()> {
    let mut manager = SafariTPManager::new()?;
    let driver_path = manager.setup()?;
    println!("Safari TP Driver ready at: {}", driver_path.display());
    Ok(())
}

IExplorerManager

Manages Internet Explorer and IEDriverServer on Windows.

impl IExplorerManager {
    pub fn new() -> Result<Box<Self>, Error>;
}

Features:

  • Windows Internet Explorer support
  • IEDriverServer management
  • Windows-only implementation
  • Support for both 32-bit and 64-bit versions

Usage Example:

use selenium_manager::IExplorerManager;
use anyhow::Result;

fn setup_internet_explorer() -> Result<()> {
    let mut manager = IExplorerManager::new()?;
    let driver_path = manager.setup()?;
    println!("IEDriverServer ready at: {}", driver_path.display());
    Ok(())
}

GridManager

Manages Selenium Grid server JAR files.

impl GridManager {
    pub fn new(grid_version: String) -> Result<Box<Self>, Error>;
}

Features:

  • Selenium Grid JAR downloading and management
  • Version-specific Grid setup
  • Cross-platform support

Usage Example:

use selenium_manager::GridManager;
use anyhow::Result;

fn setup_grid() -> Result<()> {
    let mut manager = GridManager::new("4.15.0".to_string())?;
    let grid_path = manager.setup()?;
    println!("Selenium Grid ready at: {}", grid_path.display());
    Ok(())
}

Factory Functions

Get Manager by Browser

Creates the appropriate manager based on browser name.

fn get_manager_by_browser(browser_name: String) -> Result<Box<dyn SeleniumManager>, Error>;

Supported browser names:

  • "chrome" → ChromeManager
  • "firefox" → FirefoxManager
  • "edge" → EdgeManager
  • "webview2" → EdgeManager with WebView2 configuration
  • "safari" → SafariManager
  • "safaritp" → SafariTPManager
  • "iexplorer" → IExplorerManager

Usage Example:

use selenium_manager::{get_manager_by_browser, SeleniumManager};
use anyhow::Result;

fn setup_any_browser(browser: &str) -> Result<()> {
    let mut manager = get_manager_by_browser(browser.to_string())?;
    let driver_path = manager.setup()?;
    println!("{} driver ready at: {}", browser, driver_path.display());
    Ok(())
}

Get Manager by Driver

Creates the appropriate manager based on driver name.

fn get_manager_by_driver(driver_name: String) -> Result<Box<dyn SeleniumManager>, Error>;

Supported driver names:

  • "chromedriver" → ChromeManager
  • "geckodriver" → FirefoxManager
  • "msedgedriver" → EdgeManager
  • "safaridriver" → SafariManager
  • "IEDriverServer" → IExplorerManager

Usage Example:

use selenium_manager::{get_manager_by_driver, SeleniumManager};
use anyhow::Result;

fn setup_by_driver_name(driver: &str) -> Result<()> {
    let mut manager = get_manager_by_driver(driver.to_string())?;
    let driver_path = manager.setup()?;
    println!("Driver {} ready at: {}", driver, driver_path.display());
    Ok(())
}

Manager Selection Guide

When to Use Each Manager

ChromeManager:

  • Chrome or Chromium browser testing
  • Need for latest Chrome features
  • Chrome for Testing integration required

FirefoxManager:

  • Firefox browser testing
  • ESR (Extended Support Release) environment
  • Cross-platform Firefox compatibility

EdgeManager:

  • Microsoft Edge browser testing
  • WebView2 applications
  • Windows-first environments with cross-platform needs

SafariManager:

  • macOS Safari browser testing
  • iOS web application testing preparation
  • Apple ecosystem development

SafariTPManager:

  • Testing with latest Safari features
  • Safari Technology Preview compatibility
  • Pre-release Safari feature testing

IExplorerManager:

  • Legacy Internet Explorer support
  • Windows enterprise environments
  • Legacy application compatibility testing

GridManager:

  • Selenium Grid infrastructure
  • Distributed testing setup
  • Multi-browser test orchestration

Multi-Browser Setup Example

use selenium_manager::{get_manager_by_browser, SeleniumManager};
use anyhow::Result;

fn setup_multiple_browsers() -> Result<()> {
    let browsers = vec!["chrome", "firefox", "edge"];
    let mut driver_paths = Vec::new();
    
    for browser in browsers {
        match get_manager_by_browser(browser.to_string()) {
            Ok(mut manager) => {
                match manager.setup() {
                    Ok(path) => {
                        println!("{} driver: {}", browser, path.display());
                        driver_paths.push((browser, path));
                    }
                    Err(e) => {
                        eprintln!("Failed to setup {}: {}", browser, e);
                    }
                }
            }
            Err(e) => {
                eprintln!("Failed to create {} manager: {}", browser, e);
            }
        }
    }
    
    println!("Setup complete for {} browsers", driver_paths.len());
    Ok(())
}

Platform Compatibility

ManagerWindowsmacOSLinuxARM64 Support
ChromeManager
FirefoxManager
EdgeManager
SafariManager✅ (Apple Silicon)
SafariTPManager✅ (Apple Silicon)
IExplorerManager
GridManager

Error Handling

All manager constructors return Result<Box<Self>, Error>. Common error scenarios:

  • UnsupportedPlatform: Manager not available on current OS
  • ConfigurationError: Invalid configuration for the manager
  • InitializationFailed: Unable to initialize manager components
  • DependencyMissing: Required system dependencies not found