当我点击一个按钮时,我必须等待呈现一些动态内容。当我在测试中放置waitFor闭包时它可以正常工作。但是,我想将waitFor放在Page对象中的一个方法中,所以我不必总是在每次单击后调用waitFor,但是当我这样做时,它无法声明它找不到该属性。
这不起作用:
class LandingPage extends Page {
static content = {
resultsBtn(to: ResultsPage) { $("button", id: "showresults") }
}
void getResults() {
resultsBtn.click()
waitFor { ResultsPage.results.displayed }
}
}
class ResultsPage extends Page {
static content = {
results { $("div", id: "listresults") }
}
}
class ShowResults extends GebReportingTest {
@Test
public void displayResults() {
to LandingPage
getResults()
}
}
错误表示“没有这样的属性:类ResultsPage的结果”。
是否可以在其他Page Object方法中引用其他Page Objects中的内容?
编辑:我觉得这更像是一个Groovy而不是Geb.我不确定是否可以访问内容闭包中的绑定。但似乎在Page Object中创建一个getVariable()函数也没什么用。答案 0 :(得分:0)
首先,您不应该在内容块中分配闭包(=
中有不必要的ResultPage
)但是将它们传递给隐式方法,您应该:
static content = {
results { $("div", id: "listresults") }
}
另一个问题是为什么要将其建模为两页?据我所知,点击按钮不会导致页面重新加载,但是有一个ajax调用来检索结果。我只想将results
和resultsBtn
作为一页的内容,您的问题就会消失。
修改强>
事实证明,您的案例中涉及到页面更改。假设您总是希望等待这些结果出现,您可以:
waitFor
条件放在static at = {}
ResultsPage
区块内waitFor
- at checks are executed implicitly whenever you use to()
,这意味着它会等到您转到该页面的任何位置LandingPage
放入page change listener waitFor { browser.page.results.displayed }
:{{1}}但这对我来说似乎是一个肮脏的解决方案 - 从一个页面到另一个页面......