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>2.4.0</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.

📄

YAML Configuration

One selenium-boot.yml controls browser, parallel threads, timeouts, retry, CI thresholds, tracing, AI analysis, and more. Switch environments with a profile flag.

🔁

Smart Retry + Flakiness Radar

Auto-retry flaky tests with @Retryable or globally. After each run, Flakiness Prediction ranks HIGH / WATCH / STABLE tests in the report dashboard.

📋

Page Object Toolkit

BasePage covers click, type, getText, dropdowns, alerts, hover, scroll, iFrame helpers, Shadow DOM, and file upload — all wait-backed. SmartLocator tries multiple strategies.

🔗

Fluent Locator API

$(".row").filter(".active").nth(0).click() — Playwright-style chainable locators. assertThat(By.id("title")).hasText("Welcome") auto-retries until the condition is met.

🌐

Network & Storage Mocking

Stub API responses via CDP: networkMock().stub("**/api/users").returnJson(...). Read/write localStorage, sessionStorage, cookies, geolocation, and clipboard in tests.

📸

Visual Regression + Mobile

assertScreenshot("homepage") compares pixel-by-pixel against a baseline. emulateDevice("iPhone 14") applies full CDP viewport + UA emulation. 6 built-in device profiles.

🪜

Step Logging + Trace Viewer

StepLogger.step() captures named steps with screenshots. On failure a self-contained dark-themed trace HTML is generated — step timeline, final screenshot, and stack trace.

📊

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, dark mode.

🩺

Self-Healing Locators

When a locator times out, the framework automatically tries fallback strategies — id, name, text, class, data-testid — and continues. Healed locators are flagged in the report.

🧠

AI Failure Analysis

Set ai.failureAnalysis: true and point to your Claude API key. On every failure, Claude Haiku analyses the error, steps, URL, and title — and embeds a plain-English root-cause + fix.

🔐

@PreCondition

Eliminate @BeforeMethod login boilerplate. Declare @PreCondition("loginAsAdmin") — the framework runs setup once, caches cookies + localStorage, and restores the session for every test.

📧

Email Verification

mailbox().waitForEmail(to("user@test.com")) polls until a matching email arrives. Supports Mailhog, Mailtrap, Outlook (Graph API), and IMAP. extractLink() finds anchors by text.

🕐

Clock Mocking

clock().set("2030-01-01T00:00:00Z") freezes the browser Date object. Test subscription expiry banners, trial periods, and countdown timers without touching the database.

☁️

Cloud Execution

Switch to BrowserStack or Sauce Labs by changing one line. execution.mode: browserstack — no test-code changes. Session video and logs linked in the HTML report.

🔌

Extensible via SPI

Java ServiceLoader plugin system. Register custom driver providers, report adapters (Allure, Slack, Teams), and lifecycle hooks — zero framework code changes needed.

🤖

AI Test Authoring (MCP)

seleniumboot-mcp lets Claude or GitHub Copilot control a real browser, record the session, and generate Selenium Boot test code in one prompt. pip install seleniumboot-mcp

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