【问题标题】:For Geb Page Object, when is the static content block initialized?对于 Geb Page Object,静态内容块什么时候初始化?
【发布时间】:2017-05-05 20:34:25
【问题描述】:

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

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 检查器,则意味着静态内容被初始化。

此外,如果网页的内容在最初到达该网页时未显示,那么您也无法将该内容放入静态内容块中,因为应尽快调用 at 检查器你到达了上述网页。

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

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

【问题讨论】:

    标签: groovy geb


    【解决方案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
    

    【讨论】:

    • 所以要准确回答我的问题,如果定义 somePage.element1 的 xpath 是由另一个字符串变量定义的: someString 例如element1 {$(By.xpath("//*[contains(text(), ${someString}"))} 并且该变量在您拥有“//许多代码行的位置发生变化。 ..” 然后 element1 在最后一行用 someString 变量的新值重新定义?根据您的回答,我不确定您是否完全理解了这个问题
    • 我确实完全理解了这个问题,是的,在这种情况下 element1“被重新定义”(即使说它被重新定义也是一种简化,因为它的定义永远不会“固定”,如我在回复中提到过)。
    猜你喜欢
    • 2012-03-11
    • 2012-03-10
    • 2012-02-01
    • 2011-03-30
    • 1970-01-01
    相关资源
    最近更新 更多