Converts Geb (Groovy browser automation on Selenium) to any supported target, and emits Geb from any source.
Geb's design is distinctive in three ways:
Groovy DSL on Selenium. Every test is Groovy code that compiles against Selenium WebDriver underneath. The public surface looks like jQuery ($("#id"), $("div.item:first").click()) but the runtime is Selenium.
Content DSL. Pages declare named content via closures: login { $("#login") }. The return type determines usage — Navigator by default, but Module subclasses add behaviour, and primitives (string, number) come from { $(".count").text() as int }-style closures.
Spock integration is the default. Production Geb suites almost always run on Spock — each test is a def "scenario"() { given: ... when: ... then: ... } feature method. JUnit4/5 and TestNG integrations exist but are rare.
When to use
Trigger when:
GebConfig.groovy / GebConfig.properties present.
org.gebish:geb-* dependency in Gradle/Maven.
.groovy test files extending GebSpec, GebReportingSpec, GebTest, GebReportingTest.
import geb.Page or import geb.Module in Groovy files.
Groovy source with $() selector usage + waitFor blocks + to PageClass.
CI step ./gradlew geb or ./gradlew test with Geb-specific config.
How to use
Read the master orchestrator first.
Read this skill's reference files: source-profile.md, extraction.md, mappings.md.
Read target primer for your target.
Emit per target Emission Checklist.
Scope
Geb 5.x and 6.x. Semantic changes for Java 11+ baseline; syntax largely unchanged.