在使用withNewWindow()时,在我到达“then:”子句之前窗口关闭

时间:2014-01-07 17:01:56

标签: functional-testing geb

我们正在使用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:”子句之后被关闭了。

我们如何保持此窗口上下文打开以对其进行更多测试?

1 个答案:

答案 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) {
    ...
}