You are viewing a plain text version of this content. The canonical link for it is here.
Posted to geb-notifications@groovy.apache.org by jo...@apache.org on 2026/10/08 21:34:17 UTC

(groovy-geb) branch master updated (8c00a88b -> b51f4e7c)

This is an automated email from the ASF dual-hosted git repository.

jonnybot0 pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/groovy-geb.git


    from 8c00a88b Bump the github-actions group with 2 updates
     new dede2f48 Add Gradle Geb example
     new 05798ff9 Add Maven Geb example
     new b51f4e7c Add JUnit 5 Geb example

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 ...e-wrapper-validation.yml => gradle-example.yml} | 26 +++----
 ...e-wrapper-validation.yml => junit5-example.yml} | 26 +++----
 ...le-wrapper-validation.yml => maven-example.yml} | 27 +++----
 RELEASING.md                                       |  4 +-
 .../geb-gradle/README.md                           | 23 +++---
 .../geb-gradle/geb-gradle.gradle                   | 19 ++++-
 .../src/test/groovy/GebExampleSpec.groovy          | 16 +---
 .../geb-gradle/src/test/groovy/GebHomePage.groovy  |  8 +-
 .../src/test/groovy/ManualsMenuModule.groovy       | 14 ++--
 .../src/test/groovy}/TheBookOfGebPage.groovy       |  7 +-
 .../geb-gradle/src/test/resources/GebConfig.groovy | 18 +++--
 .../geb-junit5/README.md                           | 23 +++---
 .../geb-junit5/geb-junit5.gradle                   | 21 ++++-
 .../src/test/groovy/GebishOrgHomePage.groovy       |  8 +-
 .../src/test/groovy/GebishOrgTest.groovy           | 25 +++---
 .../src/test/groovy/ManualsMenuModule.groovy       | 14 ++--
 .../src/test/groovy}/TheBookOfGebPage.groovy       |  7 +-
 .../geb-junit5/src/test/resources/GebConfig.groovy | 18 +++--
 .../geb-maven/README.md                            | 23 +++---
 geb-examples/geb-maven/pom.xml                     | 91 ++++++++++++++++++++++
 .../src/test/groovy/GebExampleSpec.groovy          | 16 +---
 .../geb-maven/src/test/groovy/GebHomePage.groovy   |  8 +-
 .../src/test/groovy/ManualsMenuModule.groovy       | 13 ++--
 .../src/test/groovy}/TheBookOfGebPage.groovy       |  7 +-
 .../geb-maven/src/test/resources/GebConfig.groovy  | 18 +++--
 geb.gradle                                         |  2 +-
 settings.gradle                                    |  2 +
 27 files changed, 281 insertions(+), 203 deletions(-)
 copy .github/workflows/{gradle-wrapper-validation.yml => gradle-example.yml} (72%)
 copy .github/workflows/{gradle-wrapper-validation.yml => junit5-example.yml} (72%)
 copy .github/workflows/{gradle-wrapper-validation.yml => maven-example.yml} (72%)
 copy doc/site/src/test/resources/logback.xml => geb-examples/geb-gradle/README.md (55%)
 copy buildSrc/src/main/groovy/geb.spock-2-module.gradle => geb-examples/geb-gradle/geb-gradle.gradle (69%)
 copy doc/manual-snippets/real-browser/src/test/groovy/intro/GebHomepageSpec.groovy => geb-examples/geb-gradle/src/test/groovy/GebExampleSpec.groovy (79%)
 copy doc/site/src/test/groovy/geb/pages/MainPage.groovy => geb-examples/geb-gradle/src/test/groovy/GebHomePage.groovy (84%)
 copy doc/site/src/test/groovy/geb/modules/ExpandableMenuItemModule.groovy => geb-examples/geb-gradle/src/test/groovy/ManualsMenuModule.groovy (75%)
 copy {doc/manual-snippets/real-browser/src/test/groovy/intro/page => geb-examples/geb-gradle/src/test/groovy}/TheBookOfGebPage.groovy (89%)
 copy module/geb-core/src/test/resources/geb/conf/good-conf.groovy => geb-examples/geb-gradle/src/test/resources/GebConfig.groovy (72%)
 copy doc/site/src/test/resources/logback.xml => geb-examples/geb-junit5/README.md (55%)
 copy buildSrc/src/main/groovy/geb.spock-2-module.gradle => geb-examples/geb-junit5/geb-junit5.gradle (63%)
 copy doc/site/src/test/groovy/geb/pages/MainPage.groovy => geb-examples/geb-junit5/src/test/groovy/GebishOrgHomePage.groovy (84%)
 copy doc/manual-snippets/real-browser/src/test/groovy/intro/GebHomepageSpec.groovy => geb-examples/geb-junit5/src/test/groovy/GebishOrgTest.groovy (73%)
 copy doc/site/src/test/groovy/geb/modules/ExpandableMenuItemModule.groovy => geb-examples/geb-junit5/src/test/groovy/ManualsMenuModule.groovy (75%)
 copy {doc/manual-snippets/real-browser/src/test/groovy/intro/page => geb-examples/geb-junit5/src/test/groovy}/TheBookOfGebPage.groovy (89%)
 copy module/geb-core/src/test/resources/geb/conf/good-conf.groovy => geb-examples/geb-junit5/src/test/resources/GebConfig.groovy (72%)
 copy doc/site/src/test/resources/logback.xml => geb-examples/geb-maven/README.md (55%)
 create mode 100644 geb-examples/geb-maven/pom.xml
 copy doc/manual-snippets/real-browser/src/test/groovy/intro/GebHomepageSpec.groovy => geb-examples/geb-maven/src/test/groovy/GebExampleSpec.groovy (79%)
 copy doc/site/src/test/groovy/geb/pages/MainPage.groovy => geb-examples/geb-maven/src/test/groovy/GebHomePage.groovy (84%)
 copy doc/site/src/test/groovy/geb/modules/ExpandableMenuItemModule.groovy => geb-examples/geb-maven/src/test/groovy/ManualsMenuModule.groovy (75%)
 copy {doc/manual-snippets/real-browser/src/test/groovy/intro/page => geb-examples/geb-maven/src/test/groovy}/TheBookOfGebPage.groovy (89%)
 copy module/geb-core/src/test/resources/geb/conf/good-conf.groovy => geb-examples/geb-maven/src/test/resources/GebConfig.groovy (72%)


(groovy-geb) 01/03: Add Gradle Geb example

Posted by jo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jonnybot0 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy-geb.git

commit dede2f486467723a9cad24f156b04bf3482ab694
Author: copilot-swe-agent[bot] <19...@users.noreply.github.com>
AuthorDate: Fri Oct 2 15:39:44 2026 +0000

    Add Gradle Geb example
    
    Co-authored-by: jonnybot0 <37...@users.noreply.github.com>
---
 .github/workflows/gradle-example.yml               | 35 ++++++++++++++++++++
 RELEASING.md                                       |  4 +--
 geb-examples/geb-gradle/README.md                  | 26 +++++++++++++++
 geb-examples/geb-gradle/geb-gradle.gradle          | 38 ++++++++++++++++++++++
 .../src/test/groovy/GebExampleSpec.groovy          | 33 +++++++++++++++++++
 .../geb-gradle/src/test/groovy/GebHomePage.groovy  | 28 ++++++++++++++++
 .../src/test/groovy/ManualsMenuModule.groovy       | 33 +++++++++++++++++++
 .../src/test/groovy/TheBookOfGebPage.groovy        | 24 ++++++++++++++
 .../geb-gradle/src/test/resources/GebConfig.groovy | 32 ++++++++++++++++++
 settings.gradle                                    |  1 +
 10 files changed, 251 insertions(+), 3 deletions(-)

diff --git a/.github/workflows/gradle-example.yml b/.github/workflows/gradle-example.yml
new file mode 100644
index 00000000..f987d6e8
--- /dev/null
+++ b/.github/workflows/gradle-example.yml
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+name: Test Gradle example
+
+on: [push, pull_request]
+
+permissions:
+  contents: read
+
+jobs:
+  test:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
+        with:
+          persist-credentials: false
+      - uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6
+        with:
+          distribution: 'zulu'
+          java-version: 17
+      - uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb
+      - run: ./gradlew --no-daemon :geb-examples:geb-gradle:check
diff --git a/RELEASING.md b/RELEASING.md
index 717e0022..ce15d96a 100644
--- a/RELEASING.md
+++ b/RELEASING.md
@@ -64,9 +64,7 @@ limitations under the License.
 4. Commit with message 'Begin version «version»'
 5. Push (make sure you push the tag as well).
 6. Merge the release branch back into the master branch.
-6. Bump Geb versions in example projects:
-    * [geb-example-gradle](https://github.com/geb/geb-example-gradle)
-    * [geb-example-maven](https://github.com/geb/geb-example-maven)
+6. Bump the Geb version in `geb-examples/geb-gradle/geb-gradle.gradle`, then verify the example with its CI workflow.
 7. Update issues and milestones in GitHub tracker:
     * Find all unresolved issues in the tracker that have the fix version set to the recently released version and bulk edit them to have the fix version set to the next version.
     * Find the recently released milestone, change the version number if it's different from the one that was released and close it.
diff --git a/geb-examples/geb-gradle/README.md b/geb-examples/geb-gradle/README.md
new file mode 100644
index 00000000..0685b99d
--- /dev/null
+++ b/geb-examples/geb-gradle/README.md
@@ -0,0 +1,26 @@
+<!--
+SPDX-License-Identifier: Apache-2.0
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    https://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+# Geb Gradle example
+
+This example uses Spock, Selenium Chrome, and Geb in the main Gradle build.
+
+Run it from the repository root:
+
+```shell
+./gradlew :geb-examples:geb-gradle:check
+```
+
+It uses a headless Chrome browser and the [Geb home page](https://groovy.apache.org/geb/).
diff --git a/geb-examples/geb-gradle/geb-gradle.gradle b/geb-examples/geb-gradle/geb-gradle.gradle
new file mode 100644
index 00000000..2355f28b
--- /dev/null
+++ b/geb-examples/geb-gradle/geb-gradle.gradle
@@ -0,0 +1,38 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+plugins {
+    id 'groovy'
+}
+
+def gebVersion = '8.0.1'
+
+repositories {
+    mavenCentral()
+}
+
+dependencies {
+    testImplementation "org.apache.groovy.geb:geb-spock:$gebVersion"
+    testImplementation 'org.seleniumhq.selenium:selenium-chrome-driver:4.49.0'
+    testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.12.0'
+}
+
+tasks.withType(Test).configureEach {
+    useJUnitPlatform()
+    systemProperty 'geb.env', 'chromeHeadless'
+}
diff --git a/geb-examples/geb-gradle/src/test/groovy/GebExampleSpec.groovy b/geb-examples/geb-gradle/src/test/groovy/GebExampleSpec.groovy
new file mode 100644
index 00000000..a6a03d5a
--- /dev/null
+++ b/geb-examples/geb-gradle/src/test/groovy/GebExampleSpec.groovy
@@ -0,0 +1,33 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+import geb.spock.GebSpec
+
+class GebExampleSpec extends GebSpec {
+
+    def 'can automate a browser'() {
+        when:
+        to GebHomePage
+
+        manualsMenu.open()
+        manualsMenu.links[0].click()
+
+        then:
+        at TheBookOfGebPage
+    }
+}
diff --git a/geb-examples/geb-gradle/src/test/groovy/GebHomePage.groovy b/geb-examples/geb-gradle/src/test/groovy/GebHomePage.groovy
new file mode 100644
index 00000000..cbebed94
--- /dev/null
+++ b/geb-examples/geb-gradle/src/test/groovy/GebHomePage.groovy
@@ -0,0 +1,28 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+import geb.Page
+
+class GebHomePage extends Page {
+
+    static at = { title == 'Geb - Very Groovy Browser Automation' }
+
+    static content = {
+        manualsMenu { module(ManualsMenuModule) }
+    }
+}
diff --git a/geb-examples/geb-gradle/src/test/groovy/ManualsMenuModule.groovy b/geb-examples/geb-gradle/src/test/groovy/ManualsMenuModule.groovy
new file mode 100644
index 00000000..3721c4da
--- /dev/null
+++ b/geb-examples/geb-gradle/src/test/groovy/ManualsMenuModule.groovy
@@ -0,0 +1,33 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+import geb.Module
+
+class ManualsMenuModule extends Module {
+
+    static content = {
+        toggle { $('div.menu a.manuals') }
+        linksContainer { $('#manuals-menu') }
+        links { linksContainer.find('a') }
+    }
+
+    void open() {
+        toggle.click()
+        waitFor { !linksContainer.hasClass('animating') }
+    }
+}
diff --git a/geb-examples/geb-gradle/src/test/groovy/TheBookOfGebPage.groovy b/geb-examples/geb-gradle/src/test/groovy/TheBookOfGebPage.groovy
new file mode 100644
index 00000000..285354f6
--- /dev/null
+++ b/geb-examples/geb-gradle/src/test/groovy/TheBookOfGebPage.groovy
@@ -0,0 +1,24 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+import geb.Page
+
+class TheBookOfGebPage extends Page {
+
+    static at = { title.startsWith('The Book Of Geb') }
+}
diff --git a/geb-examples/geb-gradle/src/test/resources/GebConfig.groovy b/geb-examples/geb-gradle/src/test/resources/GebConfig.groovy
new file mode 100644
index 00000000..2374db1f
--- /dev/null
+++ b/geb-examples/geb-gradle/src/test/resources/GebConfig.groovy
@@ -0,0 +1,32 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+import org.openqa.selenium.chrome.ChromeDriver
+import org.openqa.selenium.chrome.ChromeOptions
+
+environments {
+    chromeHeadless {
+        driver = {
+            def options = new ChromeOptions()
+            options.addArguments('--headless=new')
+            new ChromeDriver(options)
+        }
+    }
+}
+
+baseUrl = 'https://groovy.apache.org/geb/'
diff --git a/settings.gradle b/settings.gradle
index 2c053a46..2d6e9eab 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -51,6 +51,7 @@ include "module",
     "integration",
     "integration:geb-gradle",
     "integration:geb-testcontainers",
+    "geb-examples:geb-gradle",
     "doc:asciidoctor-extension",
     "doc:manual",
     "doc:manual-snippets",


(groovy-geb) 02/03: Add Maven Geb example

Posted by jo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jonnybot0 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy-geb.git

commit 05798ff9cbc3585f55d4419ce619700d19e13a60
Author: copilot-swe-agent[bot] <19...@users.noreply.github.com>
AuthorDate: Fri Oct 2 15:42:36 2026 +0000

    Add Maven Geb example
    
    Co-authored-by: jonnybot0 <37...@users.noreply.github.com>
---
 .github/workflows/maven-example.yml                | 36 +++++++++
 RELEASING.md                                       |  2 +-
 geb-examples/geb-maven/README.md                   | 26 +++++++
 geb-examples/geb-maven/pom.xml                     | 91 ++++++++++++++++++++++
 .../src/test/groovy/GebExampleSpec.groovy          | 33 ++++++++
 .../geb-maven/src/test/groovy/GebHomePage.groovy   | 28 +++++++
 .../src/test/groovy/ManualsMenuModule.groovy       | 34 ++++++++
 .../src/test/groovy/TheBookOfGebPage.groovy        | 24 ++++++
 .../geb-maven/src/test/resources/GebConfig.groovy  | 32 ++++++++
 geb.gradle                                         |  2 +-
 10 files changed, 306 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/maven-example.yml b/.github/workflows/maven-example.yml
new file mode 100644
index 00000000..fada7505
--- /dev/null
+++ b/.github/workflows/maven-example.yml
@@ -0,0 +1,36 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+name: Test Maven example
+
+on: [push, pull_request]
+
+permissions:
+  contents: read
+
+jobs:
+  test:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
+        with:
+          persist-credentials: false
+      - uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6
+        with:
+          distribution: 'zulu'
+          java-version: 17
+          cache: maven
+          cache-dependency-path: geb-examples/geb-maven/pom.xml
+      - run: mvn --batch-mode --file geb-examples/geb-maven/pom.xml verify
diff --git a/RELEASING.md b/RELEASING.md
index ce15d96a..21d5b674 100644
--- a/RELEASING.md
+++ b/RELEASING.md
@@ -64,7 +64,7 @@ limitations under the License.
 4. Commit with message 'Begin version «version»'
 5. Push (make sure you push the tag as well).
 6. Merge the release branch back into the master branch.
-6. Bump the Geb version in `geb-examples/geb-gradle/geb-gradle.gradle`, then verify the example with its CI workflow.
+6. Bump the Geb version in the `geb-examples/geb-gradle/geb-gradle.gradle` and `geb-examples/geb-maven/pom.xml` examples, then verify both examples with their CI workflows.
 7. Update issues and milestones in GitHub tracker:
     * Find all unresolved issues in the tracker that have the fix version set to the recently released version and bulk edit them to have the fix version set to the next version.
     * Find the recently released milestone, change the version number if it's different from the one that was released and close it.
diff --git a/geb-examples/geb-maven/README.md b/geb-examples/geb-maven/README.md
new file mode 100644
index 00000000..69382426
--- /dev/null
+++ b/geb-examples/geb-maven/README.md
@@ -0,0 +1,26 @@
+<!--
+SPDX-License-Identifier: Apache-2.0
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    https://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+# Geb Maven example
+
+This standalone Maven project uses Spock, Selenium Chrome, and Geb.
+
+Run it from this directory:
+
+```shell
+mvn verify
+```
+
+It uses a headless Chrome browser and the [Geb home page](https://groovy.apache.org/geb/). 
diff --git a/geb-examples/geb-maven/pom.xml b/geb-examples/geb-maven/pom.xml
new file mode 100644
index 00000000..4586d0ce
--- /dev/null
+++ b/geb-examples/geb-maven/pom.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements. See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0.
+  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.groovy.geb.example</groupId>
+  <artifactId>geb-maven</artifactId>
+  <version>1.0-SNAPSHOT</version>
+
+  <properties>
+    <geb.version>8.0.1</geb.version>
+    <groovy.version>4.0.33</groovy.version>
+    <selenium.version>4.49.0</selenium.version>
+    <spock.version>2.4-groovy-4.0</spock.version>
+    <maven.compiler.release>17</maven.compiler.release>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.groovy.geb</groupId>
+      <artifactId>geb-spock</artifactId>
+      <version>${geb.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.groovy</groupId>
+      <artifactId>groovy</artifactId>
+      <version>${groovy.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.spockframework</groupId>
+      <artifactId>spock-core</artifactId>
+      <version>${spock.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.seleniumhq.selenium</groupId>
+      <artifactId>selenium-chrome-driver</artifactId>
+      <version>${selenium.version}</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.gmavenplus</groupId>
+        <artifactId>gmavenplus-plugin</artifactId>
+        <version>4.2.1</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>compileTests</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <version>3.5.3</version>
+        <configuration>
+          <includes>
+            <include>**/*Spec.*</include>
+          </includes>
+          <systemPropertyVariables>
+            <geb.env>chromeHeadless</geb.env>
+          </systemPropertyVariables>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/geb-examples/geb-maven/src/test/groovy/GebExampleSpec.groovy b/geb-examples/geb-maven/src/test/groovy/GebExampleSpec.groovy
new file mode 100644
index 00000000..a6a03d5a
--- /dev/null
+++ b/geb-examples/geb-maven/src/test/groovy/GebExampleSpec.groovy
@@ -0,0 +1,33 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+import geb.spock.GebSpec
+
+class GebExampleSpec extends GebSpec {
+
+    def 'can automate a browser'() {
+        when:
+        to GebHomePage
+
+        manualsMenu.open()
+        manualsMenu.links[0].click()
+
+        then:
+        at TheBookOfGebPage
+    }
+}
diff --git a/geb-examples/geb-maven/src/test/groovy/GebHomePage.groovy b/geb-examples/geb-maven/src/test/groovy/GebHomePage.groovy
new file mode 100644
index 00000000..cbebed94
--- /dev/null
+++ b/geb-examples/geb-maven/src/test/groovy/GebHomePage.groovy
@@ -0,0 +1,28 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+import geb.Page
+
+class GebHomePage extends Page {
+
+    static at = { title == 'Geb - Very Groovy Browser Automation' }
+
+    static content = {
+        manualsMenu { module(ManualsMenuModule) }
+    }
+}
diff --git a/geb-examples/geb-maven/src/test/groovy/ManualsMenuModule.groovy b/geb-examples/geb-maven/src/test/groovy/ManualsMenuModule.groovy
new file mode 100644
index 00000000..2cca25b8
--- /dev/null
+++ b/geb-examples/geb-maven/src/test/groovy/ManualsMenuModule.groovy
@@ -0,0 +1,34 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+import geb.Module
+
+class ManualsMenuModule extends Module {
+
+    static content = {
+        toggle { $('div.menu a.manuals') }
+        linksContainer { $('#manuals-menu') }
+        links { linksContainer.find('a') }
+    }
+
+    void open() {
+        toggle.click()
+        waitFor { !linksContainer.hasClass('animating') }
+    }
+}
diff --git a/geb-examples/geb-maven/src/test/groovy/TheBookOfGebPage.groovy b/geb-examples/geb-maven/src/test/groovy/TheBookOfGebPage.groovy
new file mode 100644
index 00000000..285354f6
--- /dev/null
+++ b/geb-examples/geb-maven/src/test/groovy/TheBookOfGebPage.groovy
@@ -0,0 +1,24 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+import geb.Page
+
+class TheBookOfGebPage extends Page {
+
+    static at = { title.startsWith('The Book Of Geb') }
+}
diff --git a/geb-examples/geb-maven/src/test/resources/GebConfig.groovy b/geb-examples/geb-maven/src/test/resources/GebConfig.groovy
new file mode 100644
index 00000000..2374db1f
--- /dev/null
+++ b/geb-examples/geb-maven/src/test/resources/GebConfig.groovy
@@ -0,0 +1,32 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+import org.openqa.selenium.chrome.ChromeDriver
+import org.openqa.selenium.chrome.ChromeOptions
+
+environments {
+    chromeHeadless {
+        driver = {
+            def options = new ChromeOptions()
+            options.addArguments('--headless=new')
+            new ChromeDriver(options)
+        }
+    }
+}
+
+baseUrl = 'https://groovy.apache.org/geb/'
diff --git a/geb.gradle b/geb.gradle
index 07eaf7fb..335f265f 100644
--- a/geb.gradle
+++ b/geb.gradle
@@ -88,7 +88,7 @@ idea {
 tasks.named('rat') {
     excludes = [
         '.asf.yaml', // ASF metadata for github integration excluded from src zip
-        '**/build/**',
+        '**/build/**', '**/target/**',
         '**/.gradle/**', '**/wrapper/**', 'gradlew*',  // gradle wrapper files excluded from src zip
         'licenses/**',
         'notices/**',


(groovy-geb) 03/03: Add JUnit 5 Geb example

Posted by jo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jonnybot0 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy-geb.git

commit b51f4e7cea85fb0fd322d5444cfe4413506a5f8b
Author: copilot-swe-agent[bot] <19...@users.noreply.github.com>
AuthorDate: Fri Oct 2 18:55:30 2026 +0000

    Add JUnit 5 Geb example
    
    Co-authored-by: jonnybot0 <37...@users.noreply.github.com>
---
 .github/workflows/junit5-example.yml               | 35 +++++++++++++++++++
 RELEASING.md                                       |  2 +-
 geb-examples/geb-junit5/README.md                  | 26 ++++++++++++++
 geb-examples/geb-junit5/geb-junit5.gradle          | 40 ++++++++++++++++++++++
 .../src/test/groovy/GebishOrgHomePage.groovy       | 28 +++++++++++++++
 .../src/test/groovy/GebishOrgTest.groovy           | 36 +++++++++++++++++++
 .../src/test/groovy/ManualsMenuModule.groovy       | 33 ++++++++++++++++++
 .../src/test/groovy/TheBookOfGebPage.groovy        | 24 +++++++++++++
 .../geb-junit5/src/test/resources/GebConfig.groovy | 32 +++++++++++++++++
 settings.gradle                                    |  1 +
 10 files changed, 256 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/junit5-example.yml b/.github/workflows/junit5-example.yml
new file mode 100644
index 00000000..6aaee559
--- /dev/null
+++ b/.github/workflows/junit5-example.yml
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+name: Test JUnit 5 example
+
+on: [push, pull_request]
+
+permissions:
+  contents: read
+
+jobs:
+  test:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
+        with:
+          persist-credentials: false
+      - uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6
+        with:
+          distribution: 'zulu'
+          java-version: 17
+      - uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb
+      - run: ./gradlew --no-daemon :geb-examples:geb-junit5:check
diff --git a/RELEASING.md b/RELEASING.md
index 21d5b674..a75510b3 100644
--- a/RELEASING.md
+++ b/RELEASING.md
@@ -64,7 +64,7 @@ limitations under the License.
 4. Commit with message 'Begin version «version»'
 5. Push (make sure you push the tag as well).
 6. Merge the release branch back into the master branch.
-6. Bump the Geb version in the `geb-examples/geb-gradle/geb-gradle.gradle` and `geb-examples/geb-maven/pom.xml` examples, then verify both examples with their CI workflows.
+6. Bump the Geb version in `geb-examples/geb-gradle/geb-gradle.gradle`, `geb-examples/geb-junit5/geb-junit5.gradle`, and `geb-examples/geb-maven/pom.xml`, then verify the examples with their CI workflows.
 7. Update issues and milestones in GitHub tracker:
     * Find all unresolved issues in the tracker that have the fix version set to the recently released version and bulk edit them to have the fix version set to the next version.
     * Find the recently released milestone, change the version number if it's different from the one that was released and close it.
diff --git a/geb-examples/geb-junit5/README.md b/geb-examples/geb-junit5/README.md
new file mode 100644
index 00000000..7b57d21a
--- /dev/null
+++ b/geb-examples/geb-junit5/README.md
@@ -0,0 +1,26 @@
+<!--
+SPDX-License-Identifier: Apache-2.0
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    https://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+# Geb JUnit 5 example
+
+This example uses JUnit 5, Selenium Chrome, and Geb in the main Gradle build.
+
+Run it from the repository root:
+
+```shell
+./gradlew :geb-examples:geb-junit5:check
+```
+
+It uses a headless Chrome browser and the [Geb home page](https://groovy.apache.org/geb/).
diff --git a/geb-examples/geb-junit5/geb-junit5.gradle b/geb-examples/geb-junit5/geb-junit5.gradle
new file mode 100644
index 00000000..b9d57bc5
--- /dev/null
+++ b/geb-examples/geb-junit5/geb-junit5.gradle
@@ -0,0 +1,40 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+plugins {
+    id 'groovy'
+}
+
+def gebVersion = '8.0.1'
+
+repositories {
+    mavenCentral()
+}
+
+dependencies {
+    testImplementation "org.apache.groovy.geb:geb-junit5:$gebVersion"
+    testImplementation 'org.seleniumhq.selenium:selenium-chrome-driver:4.49.0'
+    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.12.0'
+    testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.12.0'
+}
+
+tasks.withType(Test).configureEach {
+    useJUnitPlatform()
+    systemProperty 'geb.build.reportsDir', reporting.file('geb')
+    systemProperty 'geb.env', 'chromeHeadless'
+}
diff --git a/geb-examples/geb-junit5/src/test/groovy/GebishOrgHomePage.groovy b/geb-examples/geb-junit5/src/test/groovy/GebishOrgHomePage.groovy
new file mode 100644
index 00000000..e4048600
--- /dev/null
+++ b/geb-examples/geb-junit5/src/test/groovy/GebishOrgHomePage.groovy
@@ -0,0 +1,28 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+import geb.Page
+
+class GebishOrgHomePage extends Page {
+
+    static at = { title == 'Geb - Very Groovy Browser Automation' }
+
+    static content = {
+        manualsMenu { module(ManualsMenuModule) }
+    }
+}
diff --git a/geb-examples/geb-junit5/src/test/groovy/GebishOrgTest.groovy b/geb-examples/geb-junit5/src/test/groovy/GebishOrgTest.groovy
new file mode 100644
index 00000000..e9af4d9e
--- /dev/null
+++ b/geb-examples/geb-junit5/src/test/groovy/GebishOrgTest.groovy
@@ -0,0 +1,36 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+import geb.junit5.GebReportingTest
+import org.junit.jupiter.api.Test
+
+class GebishOrgTest extends GebReportingTest {
+
+    @Test
+    void canGetToTheCurrentBookOfGeb() {
+        to GebishOrgHomePage
+
+        manualsMenu.open()
+
+        assert manualsMenu.links[0].text().startsWith('current')
+
+        manualsMenu.links[0].click()
+
+        at TheBookOfGebPage
+    }
+}
diff --git a/geb-examples/geb-junit5/src/test/groovy/ManualsMenuModule.groovy b/geb-examples/geb-junit5/src/test/groovy/ManualsMenuModule.groovy
new file mode 100644
index 00000000..3721c4da
--- /dev/null
+++ b/geb-examples/geb-junit5/src/test/groovy/ManualsMenuModule.groovy
@@ -0,0 +1,33 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+import geb.Module
+
+class ManualsMenuModule extends Module {
+
+    static content = {
+        toggle { $('div.menu a.manuals') }
+        linksContainer { $('#manuals-menu') }
+        links { linksContainer.find('a') }
+    }
+
+    void open() {
+        toggle.click()
+        waitFor { !linksContainer.hasClass('animating') }
+    }
+}
diff --git a/geb-examples/geb-junit5/src/test/groovy/TheBookOfGebPage.groovy b/geb-examples/geb-junit5/src/test/groovy/TheBookOfGebPage.groovy
new file mode 100644
index 00000000..285354f6
--- /dev/null
+++ b/geb-examples/geb-junit5/src/test/groovy/TheBookOfGebPage.groovy
@@ -0,0 +1,24 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+import geb.Page
+
+class TheBookOfGebPage extends Page {
+
+    static at = { title.startsWith('The Book Of Geb') }
+}
diff --git a/geb-examples/geb-junit5/src/test/resources/GebConfig.groovy b/geb-examples/geb-junit5/src/test/resources/GebConfig.groovy
new file mode 100644
index 00000000..2374db1f
--- /dev/null
+++ b/geb-examples/geb-junit5/src/test/resources/GebConfig.groovy
@@ -0,0 +1,32 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+import org.openqa.selenium.chrome.ChromeDriver
+import org.openqa.selenium.chrome.ChromeOptions
+
+environments {
+    chromeHeadless {
+        driver = {
+            def options = new ChromeOptions()
+            options.addArguments('--headless=new')
+            new ChromeDriver(options)
+        }
+    }
+}
+
+baseUrl = 'https://groovy.apache.org/geb/'
diff --git a/settings.gradle b/settings.gradle
index 2d6e9eab..19fbf495 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -52,6 +52,7 @@ include "module",
     "integration:geb-gradle",
     "integration:geb-testcontainers",
     "geb-examples:geb-gradle",
+    "geb-examples:geb-junit5",
     "doc:asciidoctor-extension",
     "doc:manual",
     "doc:manual-snippets",