我有一个页面,如果您登录,其他功能将可用。通过弹出面板登录。成功登录后,将重新加载页面(以便将与用户权限相对应的选项动态添加到界面中。)
@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秒钟,但是从理论上讲,如果身份验证服务器运行缓慢,它仍然可能失败。请提出想法。
答案 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