#spock #geb
#спок #geb
Вопрос:
Я пробую 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
}
}