Как отлаживать статический блок кода в модели 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
    }
}
Другие вопросы по тегам