В приведенном ниже примере (взято из Книги Геба) мы нажав на кнопку, которая перенесет нас на другую страницу.
class GoogleHomePage extends Page {
static url = "http://google.com"
static at = {
title == "Google"
}
static content = {
searchField { $("input[name=q]") }
searchButton(to: GoogleResultsPage) { $("input[value='Google Search']") }
}
}
Browser.drive(GoogleHomePage) {
searchField.value("Chuck Norris")
searchButton.click()
assert at(GoogleResultsPage)
assert resultLink(0).text() ==~ /Chuck/
}
Как мы можем передать состояние при переходе на другую страницу? Например, пользователь выбрал этот язык, и я ожидаю, что на следующей странице страница будет на этом языке. Более общий пример:
import geb.*
import grails.plugin.geb.GebSpec
class GoogleHomePage extends Page {
static url = "http://google.com"
static at = { title == "Google" }
static content = {
searchField { $("input[name=q]") }
searchButton(to: GoogleResultsPage, searchTerm:searchField.value()) { $("input[value='Google Search']") }
}
}
class GoogleResultsPage extends Page {
def searchTerm
static at = {
title == "${searchTerm} - Google Search"
}
}
class MainFunctionalSpec extends GebSpec {
def "Google search"() {
when:
to GoogleHomePage
then:
searchField.value("Chuck Norris")
searchButton.click()
assert at(GoogleResultsPage)
}
}
У этого кода есть 2 проблемы: я получаю «Нет такого свойства: searchField для класса: GoogleHomePage» в searchButton.click() при попытке заполнить searchTerm. Даже если я жестко запрограммирую то, что будет передано, GoogleResultsPage.searchTerm будет нулевым, а утверждение at завершится ошибкой. Любые идеи?