Как отладить статический блок кода в модели страницы GEB

#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
    }
}