UI-тесты желательно держать в отдельном проекте, не зависимым от основного. Я использую директорию test-ui в корне тестируемого проекта.

Простейший тест выглядит следующим образом:

// src/test/groovy/YandexSearchSpec.groovy
import geb.spock.GebSpec

class YandexSearchSpec extends GebSpec {

    void 'search wikipedia'() {
        go 'https://ya.ru/'
        $('#text') << 'wikipedia'
        $('button', text: 'Найти').click()
        waitFor { title.contains('wikipedia') }

        expect:
        $('a', href: 'https://ru.wikipedia.org/').displayed
    }
}

Без комментариев понятно что происходит.

Для того, чтобы запустить такой тест нужно подключить gradle-плагин.

// build.gradle
buildscript {
    repositories {
        maven { url 'https://dl.bintray.com/d10xa/maven' }
        jcenter()
    }
    dependencies {
        classpath "ru.d10xa:gradle-geb-plugin:1.0.3"
    }
}
apply plugin: 'groovy'
apply plugin: 'ru.d10xa.geb'

repositories {
    jcenter()
}

Запустим тесты и убедимся что они работают.

gradle test

Определить браузер по умолчанию можно, добавив в build.gradle следующий параметр:

geb {
   defaultTestBrowser = 'firefox'
}

Чтобы в каждом тесте не указывать baseUrl можно вынести его в конфигурацию. В тесте заменим первую строку на go baseUrl

// src/test/resources/GebConfig.groovy
baseUrl = "https://ya.ru"

Вынесем логику поиска в page-object.

//src/test/groovy/YandexSearchSpec.groovy
import geb.spock.GebSpec

class YandexSearchSpec extends GebSpec {

    def 'search wikipedia'() {
        to YandexHomePage
        search 'wikipedia'

        expect:
        $('a', href: 'https://ru.wikipedia.org/').displayed
    }

}

//src/test/groovy/YandexHomePage.groovy
import geb.Page

class YandexHomePage extends Page {
    static url = "/"

    void search(value){
        $('#text') << value
        $('button', text: 'Найти').click()
        waitFor { title.contains(value) }
    }

}

Для начала достаточно. Подробную инструкцию по geb можно найти тут