Focus on testing, not framework engineering
The Spring Boot of Selenium
Zero setup. Smarter defaults. Playwright-inspired APIs. Enterprise-ready automation —without hiding Selenium.
public class LoginTest extends BaseTest {
@Test
public void login() {
open("/login");
getByLabel("Username").fill("admin");
getByRole(Role.BUTTON)
.withName("Sign in").click();
assertThat(getByText("Welcome"))
.isVisible();
}
}Every Java team rebuilds the same BaseTest,DriverFactory, and wait utilities.Stop maintaining plumbing.
What you get
Outcomes first — the API is right there
Playwright's best ideas, brought into the Selenium ecosystem. Sensible defaults do the rest.
Never write Thread.sleep() again
WaitEngine
Every action auto-waits on a centralised engine with 10+ built-in conditions. Flaky timing bugs disappear.
Tests survive CSS & DOM refactors
Accessibility-first locators
getByRole, getByLabel, getByText, getByTestId — target the accessibility tree, not brittle selectors.
Assertions that don't flake on timing
Web-first assertThat()
assertThat(locator).isVisible() auto-retries until true or the timeout — no manual polling.
Flaky tests stop failing your build
@Retryable + RetryListener
Global, per-method, or per-scenario retries. Quarantine known-flaky tests without deleting them.
Hand stakeholders a report they'll read
HTML report + JUnit XML
Tabbed dashboard — overview, cases, failures, flakiness radar. JUnit XML parsed natively by any CI.
Safe parallel execution by default
ThreadLocal DriverManager
One driver per thread, isolated and thread-safe. Scale across methods or classes with a config flag.
CI that configures itself
CiEnvironmentDetector
Auto-detects GitHub Actions / Jenkins / GitLab. Headless forced, threads tuned, pass-rate gates enforced.
Extend it without forking it
SPI plugin toolkit
Registry-based plugins for custom drivers, hooks, and report adapters. The escape hatch most never need.
Before / after
Delete the boilerplate, keep the intent
No driver setup. No Thread.sleep(). No brittle CSS selectors. Just the test.
public class LoginTest extends BaseTest {
@Test
public void login() {
open("/login"); // baseUrl from config
getByLabel("Username").fill("admin");
getByLabel("Password").fill("secret");
getByRole(Role.BUTTON)
.withName("Sign in").click(); // auto-waits
assertThat(getByText("Welcome"))
.isVisible(); // web-first, retries
}
}// Raw Selenium — you own all of this
WebDriver driver = new ChromeDriver();
driver.manage().timeouts()
.implicitlyWait(Duration.ofSeconds(10));
driver.get("https://example.com/login");
Thread.sleep(2000); // hope the page is ready
driver.findElement(
By.cssSelector("#login-form .btn-primary")).click();
// screenshots, retries, reporting, teardown…
// all your problem
driver.quit();One ecosystem
Framework, MCP server, and IDE tooling
From a single dependency to AI-assisted, accessibility-first codegen right inside your editor.
Framework
io.github.seleniumbootThe core Java library
One dependency. Extend BaseTest / BasePage and the lifecycle, waits, retries, and reporting are handled.
Maven CentralMCP Server
pip installAI-powered test authoring
Let Claude or Copilot drive a real browser, record a session, and generate framework-native, accessibility-first tests.
PyPI · seleniumboot-mcpIntelliJ Plugin
IDEA 2024.2+JetBrains Marketplace
Spring-Initializr-style New Project wizard, selenium-boot.yml schema completion, and a one-click run config.
JetBrains MarketplaceVS Code Extension
MCP-readyVisual Studio Marketplace
Project scaffolding and MCP integration so codegen stays framework-aware right inside your editor.
VS Code MarketplaceTwo credible reasons
Why Selenium Boot?
Whether you're maintaining a home-grown framework or already invested in Selenium.
Why not just build your own?
| Roll your own | Selenium Boot |
|---|---|
| Write & maintain driver lifecycle, waits, retries | Provided, thread-safe, zero config |
| Build a reporting layer from scratch | HTML report + JUnit XML included |
| Bespoke CI wiring per project | Auto-detects GitHub Actions / Jenkins / GitLab |
| Onboarding = "read our internal wiki" | Onboarding = public docs + one dependency |
| You fix the bugs | The framework ships the fixes |
Already invested in Selenium?
| Playwright idea | In Selenium Boot |
|---|---|
| Accessibility-first locators | getByRole / getByLabel / getByText — survive CSS refactors |
| Auto-waiting | WaitEngine-backed actions — Thread.sleep() disappears |
| Web-first assertions | assertThat(...) that auto-retries until true |
| Convention over configuration | Zero-boilerplate defaults, optional selenium-boot.yml |
Keep your test code. Delete the plumbing.
Add one dependency and focus on testing — not framework engineering.
<dependency>
<groupId>io.github.seleniumboot</groupId>
<artifactId>selenium-boot</artifactId>
<version>3.2.0</version>
</dependency>