对于 Geb Page Object,什么时候初始化静态内容块?
For Geb Page Object, when is the static content block initialized?
在遵循 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 检查器来告诉脚本要为方法和变量调用引用哪个 class,但是如果您调用 at 检查器,则意味着静态内容变为已初始化。
此外,如果网页的内容在最初到达该网页时未显示,那么您也无法将该内容放入静态内容块中,因为 at 检查器应称为一旦您到达所述网页。
我只是想确认或否认这是 geb 页面对象的行为。鉴于上述情况,我很乐意听到描述最佳实践的答案。
另外,如果有办法重新初始化内容,我也想知道,但我想没有。
每次请求定义结果时都会评估内容定义:
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
在遵循 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 检查器来告诉脚本要为方法和变量调用引用哪个 class,但是如果您调用 at 检查器,则意味着静态内容变为已初始化。
此外,如果网页的内容在最初到达该网页时未显示,那么您也无法将该内容放入静态内容块中,因为 at 检查器应称为一旦您到达所述网页。
我只是想确认或否认这是 geb 页面对象的行为。鉴于上述情况,我很乐意听到描述最佳实践的答案。
另外,如果有办法重新初始化内容,我也想知道,但我想没有。
每次请求定义结果时都会评估内容定义:
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