Selenium Manager provides specialized browser manager implementations for each supported browser. Each manager implements the SeleniumManager trait with browser-specific functionality.
Manages Chrome browser and ChromeDriver with Chrome for Testing (CFT) support.
impl ChromeManager {
pub fn new() -> Result<Box<Self>, Error>;
}Features:
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(())
}Manages Firefox browser and GeckoDriver with ESR support.
impl FirefoxManager {
pub fn new() -> Result<Box<Self>, Error>;
}Features:
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(())
}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:
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(())
}Manages Safari browser and SafariDriver on macOS.
impl SafariManager {
pub fn new() -> Result<Box<Self>, Error>;
}Features:
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(())
}Manages Safari Technology Preview and its driver.
impl SafariTPManager {
pub fn new() -> Result<Box<Self>, Error>;
}Features:
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(())
}Manages Internet Explorer and IEDriverServer on Windows.
impl IExplorerManager {
pub fn new() -> Result<Box<Self>, Error>;
}Features:
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(())
}Manages Selenium Grid server JAR files.
impl GridManager {
pub fn new(grid_version: String) -> Result<Box<Self>, Error>;
}Features:
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(())
}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" → IExplorerManagerUsage 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(())
}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" → IExplorerManagerUsage 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(())
}ChromeManager:
FirefoxManager:
EdgeManager:
SafariManager:
SafariTPManager:
IExplorerManager:
GridManager:
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(())
}| Manager | Windows | macOS | Linux | ARM64 Support |
|---|---|---|---|---|
| ChromeManager | ✅ | ✅ | ✅ | ✅ |
| FirefoxManager | ✅ | ✅ | ✅ | ✅ |
| EdgeManager | ✅ | ✅ | ✅ | ✅ |
| SafariManager | ❌ | ✅ | ❌ | ✅ (Apple Silicon) |
| SafariTPManager | ❌ | ✅ | ❌ | ✅ (Apple Silicon) |
| IExplorerManager | ✅ | ❌ | ❌ | ❌ |
| GridManager | ✅ | ✅ | ✅ | ✅ |
All manager constructors return Result<Box<Self>, Error>. Common error scenarios: