在geb中扩展类时,是否可以覆盖“静态内容”块中的内容?

时间:2017-08-23 19:05:20

标签: geb pageobjects

我有两个类,一个扩展另一个,它们列在下面:

class TabledPage extends Page {

    static content ={
        table {$(By.xpath("//tbody"))}
        headers {$(By.xpath("//thead"))}
    }

    Navigator gatAllRows(){
        return table.children()
    }

    Navigator getRow(int index){
        return table.children()[index]
    }

    Navigator getRow(String name){
        return table.children().find{it.text()==name}
    }

    Navigator getColumn(Navigator row, int column){
        return row.children()[column]
    }


}

以及扩展上述类的这个类:

class somePage extends TabledPage{
    static content ={
        table(required: false){$(By.xpath("//table[contains(@class,'w-100 table-striped wi-table-hover')]//tbody"))} // I want this to overwrite the table def in TabledPage
    }
}

所以在app中我测试的大多数页面只有1个表,但在某些情况下有2个表(一个是隐藏的,具体取决于屏幕大小)所以我希望能够覆盖这个表中的表定义指向一个特定的表,我可以在不重写getRow方法的情况下执行此操作,还是需要重写那些?

举一个例子说明我如何称呼这个alswell:

at SomePage
getRow(0)

这可行,但它使用表Navigator的TabledPage定义而不是somePage定义,我想知道是否有办法让我使用其他定义

1 个答案:

答案 0 :(得分:0)

如果您更改了Spec而不是页面中的内容,它会起作用吗?这就是我在页面中使用动态选择器的方式:

static content=
{
    quantityField{$("$quantitySelector")
}

void setSelectors(tableIndex, row)
{
    quantitySelector="#offerDtos$tableIndex\\.segments$row\\.quantity"
}

在我的规范中,我只是使用适当的值调用setSelectors。