如何等待页面重新打开

时间:2018-09-05 21:33:56

标签: selenium-webdriver serenity-bdd

我有一个页面,如果您登录,其他功能将可用。通过弹出面板登录。成功登录后,将重新加载页面(以便将与用户权限相对应的选项动态添加到界面中。)

    @Override
 @Step("Logs in as: {0}")
    public <T extends Actor> void performAs(T actor) {
        actor.attemptsTo(         
            Open.browserOn(homePage),
            Click.on(homePage.loginMenuItem),
            Enter.theValue(authenticated(actor).username())
                 .into(homePage.userField),
            Enter.theValue(authenticated(actor).password())
                 .into(homePage.pwdField),
            Click.on(homePage.loginBtn),            
        );
  }

测试使用问题来查询页面状态。但是,我看到的是测试似乎在重新加载页面之前就已在页面上运行。 (超时等待目标,根据我如何处理问题返回页面上的旧值元素)。我可以看到正在显示修订的页面。显然,我需要等到页面重新打开以响应单击之后,再问我以为硒应该做的问题。但是我该如何等待?如果我添加:

            Open.browserOn(homePage)

点击后,即可正常运行-大部分情况下。有时,它似乎仍然可以响应旧页面。但是,如果我重新运行,通常就可以了。即上述方法是片状的。我可以等待2秒钟,但是从理论上讲,如果身份验证服务器运行缓慢,它仍然可能失败。请提出想法。

1 个答案:

答案 0 :(得分:1)

在前一行

Click.on(homePage.loginBtn)

抓取一个元素(如登录按钮)并将其存储在变量中。然后单击登录按钮...,然后等待登录按钮过时。旧元素表示页面已刷新。此后,您就可以再次访问该页面了。

我不知道您可以使用哪些辅助功能,但是应该看起来像这样

WebElement loginButton = driver.findElement(homePage.loginBtn);
Click.on(homePage.loginBtn)
new WebDriverWait(driver, 10).until(ExpectedConditions.stalenessOf(loginButton));
// do stuff