Skip to main content
Java · Selenium · TestNG · JUnit 5

Test automation
without the noise

Zero-boilerplate Java test automation — inspired by Spring Boot

pom.xml
<dependency>
  <groupId>io.github.seleniumboot</groupId>
  <artifactId>selenium-boot</artifactId>
  <version>3.1.1</version>
</dependency>
LoginTest.java
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()
    );
  }
}
1Dependency to add
20+Built-in features
4CI platforms auto-detected
0Boilerplate required

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
selenium-boot.yml
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.