我有一个页面,如果您登录,可以使用额外的功能。登录是通过弹出面板。成功登录后,将重新加载页面(以便将适合用户权限的选项动态添加到界面中)。
@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),
);
}
该测试使用一个问题来查询页面状态。但是,我所看到的是,在重新加载之前,测试似乎在页面上运行。 (超时等待目标,返回页面上的旧值元素,具体取决于我如何处理问题)。我可以看到修改后的页面正在显示。显然,我需要等到页面重新打开以响应点击,然后我才会问我认为selenium应该做的问题。但我该怎么办?如果我添加:
Open.browserOn(homePage)
点击后,它的工作原理 - 主要是。有时它似乎仍然响应旧页面。但如果我重新运行,它通常会起作用。即上述方法是片状的。我可以等待2秒钟,但理论上如果身份验证服务器速度很慢,它仍然可能会失败。想法请。
在线之前
Click.on(homePage.loginBtn)
抓取一个元素,比如登录按钮并将其存储在变量中。然后单击登录按钮...然后等待登录按钮变得陈旧。陈旧元素表示页面已刷新。在那之后,您就可以再次访问该页面了。
我不知道你有什么辅助函数可用,但看起来应该是这样的
WebElement loginButton = driver.findElement(homePage.loginBtn);
Click.on(homePage.loginBtn)
new WebDriverWait(driver, 10).until(ExpectedConditions.stalenessOf(loginButton));
// do stuff