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>2.4.0</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.
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 →browser: name: chrome headless: false execution: baseUrl: https://your-app.com retry: enabled: true maxAttempts: 2 email: provider: mailhog clock: injectHeader: false