Geb. Как начать писать UI-тесты веб-приложений
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 можно найти тут