Как отлаживать статический блок кода в модели GEB Page
Я пробовал GEB и хотел отладить статический блок кода в примерах. Я пытался установить точки останова, но я не могу проверить данные, которые используются в блоке статического содержимого.
class GoogleResultsPage extends Page {
static at = { results }
static content = {
results(wait: true) { $("li.g") }
result { i -> results[i] }
resultLink { i -> result(i).find("a.l")[0] }
firstResultLink { resultLink(0) }
}
}
Любая подсказка о том, как это обычно можно отлаживать с помощью, например, IntelliJ?
1 ответ
Поскольку блок контента использует DSL и претерпевает трансформацию при компиляции, я думаю, что отладка без специальной поддержки со стороны IDE невозможна, однако я надеюсь, что кто-то может доказать, что я неправ.
Подход, который я использовал, заключается в определении методов для чего-либо, кроме основного контента. Это обеспечивает несколько преимуществ, включая поддержку отладки, автозаполнение IDE при написании тестов и хорошую поддержку рефакторинга. Недостатком, конечно, является немного более подробный код, хотя компромисс стоил этого для моих целей.
Вот как я могу сделать страницу GoogleResultsPage:
class GoogleResultsPage extends Page {
static at = { results }
static content = {
results(wait: true) { $("li.g") }
}
Navigator result(int i) { results[i] }
Navigator resultLink(int i) { result(i).find("a.l")[0] }
Navigator firstResultLink { resultLink(0) }
}
Затем при написании теста я использую более типизированный подход:
class MySpec extends GebReportingSpec {
def "google search with keyword should have a first result"() {
given:
GoogleHomePage homePage = to(GoogleHomePage)
when:
homePage.search("keyword")
then:
GoogleResultsPage resultsPage = at(GoogleResultsPage)
resultsPage.result(0).displayed
}
}