Selenium webdriver 如何等待页面重新打开

Selenium webdriver 如何等待页面重新打开,selenium-webdriver,serenity-bdd,Selenium Webdriver,Serenity Bdd,我有一个页面,如果您登录,可以使用其他功能。通过弹出面板登录。成功登录后,将重新加载页面(以便将适合用户权限的选项动态添加到界面) 点击之后,它就可以工作了——大部分是这样。有时,它似乎仍然对旧页面作出响应。但如果我重新运行,它通常是有效的。上述方法是不可靠的。我可以只等2秒钟,但理论上,如果身份验证服务器运行缓慢,它仍然可能失败。请给我一些想法。请先上网 Click.on(homePage.loginBtn) 抓取一个元素,比如login按钮,并将其存储在变量中。然后点击登录按钮。。。然后等

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

点击之后,它就可以工作了——大部分是这样。有时,它似乎仍然对旧页面作出响应。但如果我重新运行,它通常是有效的。上述方法是不可靠的。我可以只等2秒钟,但理论上,如果身份验证服务器运行缓慢,它仍然可能失败。请给我一些想法。

请先上网

Click.on(homePage.loginBtn)
抓取一个元素,比如login按钮,并将其存储在变量中。然后点击登录按钮。。。然后等待登录按钮失效。过时元素表示页面已刷新。之后,您就可以再次访问该页面了

我不知道您有哪些可用的助手函数,但它应该是这样的

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

奇怪的是,它出错了,说元素不可见。尝试使用不同的元素(因为登录按钮会在加载页面之前消失。但是,我对此进行了进一步的研究,并使用WaitUntil.wait搜索只有在用户登录后才在表单上出现的元素。这很有效。
Click.on(homePage.loginBtn)
WebElement loginButton = driver.findElement(homePage.loginBtn);
Click.on(homePage.loginBtn)
new WebDriverWait(driver, 10).until(ExpectedConditions.stalenessOf(loginButton));
// do stuff