0
当遵循geb页面对象模式时,我们鼓励创建一个静态值的值块,它代表您试图连接的页面上的元素。创建一个检查器也是很好的。这里是一个例子:对于Geb页面对象,何时初始化静态内容块?
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页面对象的行为。考虑到上述情况,我会很乐意听到描述最佳实践的答案。
如果还有一种方法可以重新初始化内容,我也想知道,但我认为没有。
这么回答我的问题完全是,如果定义somePage.element1的XPath是由另一个字符串变量定义'element1 {$(By.xpath(“// * [contains(text(),$ {someString}”))}' 并且该变量会在您有“//多行代码...”时发生变化,那么element1在最后一行用someString变量的新值重新定义?根据你的回答,我不确定你是否完全理解了这个问题 – switch201
我完全理解了这个问题,是的,元素1“得到了重新定义”在那里面(即使说它重新定义是一种简化,因为它的定义从来没有“固定”,正如我在我的回应中提到的那样)。 – erdi
我测试过了,你是正确的谢谢 – switch201