Custom Drivers
NamedDriverProvider lets you plug in any WebDriver implementation — Edge, Safari, BrowserStack, Appium — without modifying the framework. Custom providers take precedence over the built-in Chrome/Firefox providers.
Create a custom driver provider
import com.seleniumboot.driver.NamedDriverProvider;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.edge.EdgeOptions;
public class EdgeDriverProvider implements NamedDriverProvider {
@Override
public String browserName() {
return "edge"; // matched case-insensitively against browser.name in selenium-boot.yml
}
@Override
public WebDriver createDriver() {
EdgeOptions options = new EdgeOptions();
return new EdgeDriver(options);
}
}
Register via Java SPI (auto-discovery)
src/main/resources/META-INF/services/com.seleniumboot.driver.NamedDriverProvider
Contents:
com.example.drivers.EdgeDriverProvider
Then set browser.name in your config:
selenium-boot.yml
browser:
name: edge
Selenium Boot selects your provider automatically.
Register programmatically
import com.seleniumboot.driver.DriverProviderRegistry;
DriverProviderRegistry.register(new EdgeDriverProvider());
BrowserStack example
public class BrowserStackProvider implements NamedDriverProvider {
@Override
public String browserName() { return "browserstack"; }
@Override
public WebDriver createDriver() {
ChromeOptions options = new ChromeOptions();
HashMap<String, Object> bstackOptions = new HashMap<>();
bstackOptions.put("userName", System.getenv("BROWSERSTACK_USERNAME"));
bstackOptions.put("accessKey", System.getenv("BROWSERSTACK_ACCESS_KEY"));
bstackOptions.put("browserName", "Chrome");
bstackOptions.put("browserVersion", "latest");
options.setCapability("bstack:options", bstackOptions);
return new RemoteWebDriver(
new URL("https://hub-cloud.browserstack.com/wd/hub"), options
);
}
}
selenium-boot.yml
browser:
name: browserstack
Appium example
public class AndroidAppProvider implements NamedDriverProvider {
@Override
public String browserName() { return "android"; }
@Override
public WebDriver createDriver() {
UiAutomator2Options options = new UiAutomator2Options()
.setDeviceName("emulator-5554")
.setApp("/path/to/app.apk");
return new AndroidDriver(new URL("http://127.0.0.1:4723"), options);
}
}
Provider selection order
- Remote mode (
browser.mode: remote) → always usesRemoteDriverProvider - Custom provider registered via SPI or programmatically → used if
browser.namematchesbrowserName() - Built-in Chrome → used if
browser.name: chrome - Built-in Firefox → used if
browser.name: firefox