Keb is a Kotlin browser automation DSL inspired by Geb and powered by Playwright.
It combines typed page objects, reusable modules, Kotlin property delegates, and Playwright's native locators and auto-waiting.
keb-core— browser lifecycle and the page/module DSL.keb-junit5— JUnit 5 session injection and failure screenshots.keb-allure— business-readable journeys, evidence, traces, and Allure reporting.
dependencies {
testImplementation("org.openprojectx.test.keb:keb-junit5:<version>")
}class LoginPage(keb: KebSession) : KebPage(keb, "/login") {
val username by content { label("Username") }
val password by content { label("Password") }
val signIn by content { role(AriaRole.BUTTON, "Sign in") }
override fun at() = verify {
heading("Sign in").isVisible()
}
}
@KebTest(baseUrl = "https://example.test")
class LoginTest {
@Test
fun `user can sign in`(keb: KebSession) = keb {
val page = to<LoginPage>()
page.username setTo "alice"
page.password setTo "secret"
page.signIn.click()
Unit
}
}See the Keb documentation for setup, DSL usage, configuration, the independent example, and releasing.
Corporate users can follow the restricted network setup guide. See Allure reporting for numbered BDD journeys and business-facing evidence. For a shared remote browser, see the Playwright Kubernetes Helm chart. Released versions also include a self-contained offline example image.
./gradlew :core:playwright --args="install chromium"
./gradlew checkRun the independent React/Material UI example:
./gradlew publishExampleArtifacts
./gradlew -p example checkSee CONTRIBUTING.md.
Keb is licensed under the Apache License 2.0.