java - Geb 测试 withWindow 未找到

标签 java selenium geb jbehave

在我们的应用程序中有一个简单的输入字段,按下回车键时将打开一个新窗口。通过简单的 geb 测试,我可以这样写:

withNewWindow({ inputField << Keys.ENTER }, wait:true){ at(TargetPage) }

但是现在我们引入了 jbehave,因此我们得到了测试步骤(在我看来,如果我们使用 spock 或任何其他框架,情况是一样的)。

现在我们的测试将变成:

class StartPageSteps extends GebTest {

    @When("enter is pressed")
    void pressEnter() {
        at StartPage
        inputField << Keys.ENTER
    }

    @Then("target page was opened")
    void targetPageWasOpened() {
        withWindow({$('title').text() == 'title'}){at(TargetPage)}
    }
}

并且仍然使用单独的类来描述页面(简化版本):

class StartPage extends Page {
    static  at =  { title == "StartPage" }
    static url = "..."
    static content = {
        inputField { $("input")}
    }
}

class TargetPage extends Page {
    static at = { title == "title"}
}

但这会失败,并出现org.openqa.selenium.NoSuchWindowException:找不到与规范匹配的窗口 我可以看到新窗口如何打开并且标题是正确的。我还尝试了其他属性来定位窗口并使用等待语句。 有什么想法吗?

最佳答案

您需要使用Page.getTitle()要检索当前页面标题,$('title') 不起作用。您的代码应该是:

@Then("target page was opened")
void targetPageWasOpened() {
    withWindow({title == 'title'}) {at(TargetPage)}
}

编辑

如果窗口是异步打开的,那么您可以使用 waitFor() 调用包装代码。

@Then("target page was opened")
void targetPageWasOpened() {
    waitFor {
        withWindow({ isAt TargetPage }) { true }
    }
}

isAt() 将抑制任何断言错误,如果您不在 TargetPage 上,则返回 false。如果未找到包含该页面的窗口,则 withWindow() 将抛出 NoSuchWindowException,在 waitFor() 闭包内强加另一个循环。如果找到窗口,则将返回 true 并且 waitFor() 将完成。

关于java - Geb 测试 withWindow 未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23474800/

相关文章:

java - 当我在服务器上执行代码时,方法 sendKeys(Keys.ARROW_DOWN) 不起作用

python - 2captcha Selenium 超出范围

groovy - Geb 自动化中未调用 env.groovy 的 Before() 方法

java - JPA native 查询获取单个对象

java - 我在部署适配器时收到内容缺失错误 "JAXRSApplicationClass"?

java - 禁用表结构

java - Java 中正确的 xml 转义

android - 如何使用 appium 将屏幕截图与引用图像进行比较

Grails Geb : Chrome failed to start

grails - 如何让 Spock 重试失败的 Geb 测试?