对于Geb Page Object,何时初始化静态内容块?

时间:2017-05-05 20:34:25

标签: groovy geb

在遵循geb页面对象模式时,建议创建一个静态值块,表示您尝试与之交互的页面上的元素。创建一个at checker也很好。这是一个例子:

class SomePage extends Page{

    static at = {$(By.xpath("some header or something")).displayed}

    static content = {
        element1 {$(By.xpath("some xpath1"))}
        element2 {$(By.xpath("some xpath2"))}
        //so on and so forth
    }
}

现在我想我已经知道了这个问题的答案,但找不到支持它的文档。我很确定一旦从测试脚本调用“at checker”就会初始化静态内容块,但我不确定。如果我建议的是真的,那就意味着这样的事情:

class SomePage extends Page{

    static at = {$(By.xpath("some header or something")).displayed}

    def someString

    static content = {
        element1 {$(By.xpath("//*[contains(text(), ${someString}"))}
        element2 {$(By.xpath("some xpath2"))}
        //so on and so forth
    }

    def setSomeString(String x){
        this.someString = x
    }
}

是不切实际的,甚至是不可能的?这是因为为了调用“setSomeString”,您需要调用at检查器告诉脚本哪个类引用方法和变量调用,但是如果调用at检查器则意味着静态内容被初始化。

此外,如果网页的内容在初次到达网页时没有显示,那么您也无法将该内容放入静态内容块中,因为应尽快调用该检查器。你到达所说的网页。

我只是想确认或否认这是geb页面对象的行为。鉴于上述情况,我很乐意听到描述最佳实践的答案。

如果有办法重新初始化内容,我也想知道,但我认为没有。

1 个答案:

答案 0 :(得分:1)

每次请求定义的结果时,都会评估内容定义:

def somePage = to SomePage //at checker is executed but the defintion for element1 isn't
somePage.element1 // closure defined for element1 is executed
somePage.element1 // and here again

// many lines of code which trigger additional content to show up on the page

somePage.element1 // closure defined for element1 is executed again