Test automation
without the noise
Zero-boilerplate Java test automation — inspired by Spring Boot
<dependency> <groupId>io.github.seleniumboot</groupId> <artifactId>selenium-boot</artifactId> <version>3.1.1</version> </dependency>
public class LoginTest extends BaseTest {
@Test(description = "Valid user can log in")
public void loginTest() {
StepLogger.step("Open login page");
open();
StepLogger.step("Enter credentials", true);
new LoginPage(getDriver())
.login("admin", "secret");
StepLogger.step("Assert dashboard");
Assert.assertTrue(
new DashboardPage(getDriver()).isLoaded()
);
}
}Everything you need,
nothing you don't
One dependency. Zero required config. Full-stack automation power, ready the moment you extend BaseTest.
Zero Boilerplate
Extend BaseTest. Write @Test methods. Driver lifecycle, waits, retry, reports, and screenshots are handled automatically — no setup code required.
Accessibility-First Locators
getByRole(Role.BUTTON).withName("Submit").click() — getByRole/getByText/getByLabel/getByPlaceholder/getByTestId target the accessibility tree, so tests survive CSS/DOM refactors. Playwright-style, auto-waiting.
Self-Healing Locators
When a locator times out, the framework automatically tries fallback strategies — id, name, text, class, data-testid — and continues. Every healed locator is flagged in the report.
AI Failure Analysis
On every failure, Claude analyses the error, steps, URL, and title — and embeds a plain-English root-cause and suggested fix right inside the HTML report.
Advanced HTML Report
Tabbed dashboard: pass-rate gauge, donut chart, retry badges, expandable error rows, AI analysis panel, Flakiness Radar, "View Trace" links, filter bar, search, and dark mode.
AI Test Authoring (MCP)
seleniumboot-mcp lets Claude or GitHub Copilot drive a real browser, record the session, and generate ready-to-run Selenium Boot test code in one prompt.
Up and running
in 3 minutes
Add the dependency, create a YAML config, extend BaseTest — your first test runs with full reporting, retry, and smart waits already configured.
Read the guide →browser: name: chrome headless: false execution: baseUrl: https://your-app.com retry: enabled: true maxAttempts: 2 email: provider: mailhog clock: injectHeader: false
Questions, answered
The things teams ask before adopting Selenium Boot.
No. Selenium Manager (built into Selenium 4) resolves and downloads the right driver automatically. You just need Chrome or Firefox installed.
All three. TestNG is the default, JUnit 5 has full parity via BaseJUnit5Test or @ExtendWith(SeleniumBootExtension.class), and Cucumber is supported through BaseCucumberSteps + CucumberHooks.
No — it is optional. SeleniumBootDefaults supplies sensible defaults for everything, so the framework runs with zero config. Add selenium-boot.yml only when you want to override a default.
Always. getDriver() gives you the live WebDriver, and every fluent locator exposes toBy() to hand back a standard Selenium By. Selenium Boot wraps Selenium — it never hides it.
Selenium Boot keeps you on the Selenium ecosystem (Grid, cloud vendors, the whole Java tooling world) while giving you the ergonomics people love about Playwright — fluent and accessibility-first locators, auto-waiting assertions, tracing, and codegen.
Yes. The driver is held in a ThreadLocal, so parallel TestNG/JUnit runs are isolated by default. Set parallel and threadCount in selenium-boot.yml and go.
It is free and open source under Apache 2.0, published to Maven Central. Add one dependency and you are done.
Ready to delete your boilerplate?
One dependency. One YAML file. Tests that read like intent.