Reference: Webdriver

Installation (Gradle)

dependencies {
    
    implementation(platform("org.http4k:http4k-bom:5.32.4.0"))

    implementation("org.http4k:http4k-testing-webdriver")
}

About

A basic Selenium WebDriver API implementation for http4k HttpHandlers, which runs completely out of container (no network) for ultra fast tests, backed by JSoup.

FeatureSupportedNotes
Navigationyessimple back/forward/refresh history
CSS selectorsyes
Link navigationyes
Form field entry and submissionyes
Cookie storageyesmanual expiry management
JavaScriptno
Alertsno
Screenshotsno
Framesno
Multiple windowsno

Use the API like any other WebDriver implementation, by simply passing your app HttpHandler to construct it.

Code

package content.ecosystem.http4k.reference.webdriver

import org.http4k.core.Method.GET
import org.http4k.core.Response
import org.http4k.core.Status.Companion.OK
import org.http4k.routing.bind
import org.http4k.routing.routes
import org.http4k.webdriver.Http4kWebDriver
import org.openqa.selenium.By

fun main() {
    val app = routes(
        "/hello" bind GET to {
            Response(OK).body("<html><title>hello</title></html>")
        }
    )

    val driver = Http4kWebDriver(app)

    driver.navigate().to("http://localhost:10000/hello")

    println(driver.title)

    println(driver.findElement(By.tagName("title")))

// prints:
//
// hello
// <title>hello</title>
}