我们正在使用Geb进行功能测试。在我们的应用程序中,单击链接将打开一个新窗口。在我们的“when:”子句中,我们可以使用withNewWindow()来单击链接并打开新窗口,并进行一些快速断言。问题是我们想在“then:”子句中做出更多的断言并做更多的事情,但是在我们到达那里之前我们的窗口关闭了。
when: "I navigate to the link"
JQInstaller jq = new JQInstaller()
jq.installJQ(browser)
homeTab.jquery.mouseover()
report "Mouse Over1"
waitFor {HealthPageLink.present}
withNewWindow({HealthPageLink.click() },{
assert (title.toString() == 'Patient Financing Portal')
at LoginPage
report "Login Page"
}
)
then: "I am at the Login Page"
at LoginPage
report "Login Page"
在then:子句中,“LoginPage”出现null,因为我们的新窗口在“when:”子句之后被关闭了。
我们如何保持此窗口上下文打开以对其进行更多测试?
答案 0 :(得分:2)
默认情况下,Geb会关闭使用withNewWindow()
打开的窗口。您可以使用close
option禁止此默认行为:
withNewWindow(close: false, { HealthPageLink.click() }) {
...
}
窗口不会关闭,但您将在then:
块中超出其上下文。您可以使用`withWindow()'返回其上下文。
withWindow({ title.toString() == 'Patient Financing Portal }) {
...
}
您可能实际上考虑不在withNewWindow()
块中首先使用when:
,而只需点击健康页面链接并使用withWindow()
块中的then:
会执行所有必要的断言。
编辑:这在任何地方均未记录,但在离开withNewWindow()
(以及withWindow()
)的上下文后,页面将切换回原始页面。您可以使用page
选项将其切换回LoginPage
:
withWindow({ title.toString() == 'Patient Financing Portal }, page: LoginPage) {
...
}