如何在GEB Page模型中调试静态代码块

时间:2014-06-18 10:24:10

标签: spock 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 个答案:

答案 0 :(得分:3)

由于内容块使用DSL并在编译时经历转换,我认为如果没有IDE的特别支持就无法进行调试,但我希望有人可以证明我错了。< / p>

我一直在使用的方法是为核心内容之外的任何方法定义方法。这提供了一些好处,包括调试支持,编写测试时的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
    }
}