参见英文答案 > Wait for page load in Selenium 46个
我正在尝试使用Java和Selenium WebDriver自动化一些测试用例.我有以下场景:
>有一个名为’Products’的页面.当我点击“查看详细信息”链接时
在“产品”页面中,会出现一个包含该项目详细信息的弹出窗口(模态对话框).
>当我点击弹出窗口中的“关闭”按钮时,弹出窗口关闭
页面自动刷新(页面只是重新加载,内容保持不变).
>关闭弹出窗口后,我需要点击“添加项目”按钮
同一页.但是当WebDriver试图找到“添加项目”按钮时,
如果互联网速度太快,WebDriver可以找到并点击
元件.
>但是如果互联网很慢,WebDriver会在之前找到按钮
页面刷新,但只要WebDriver单击该按钮,页面就会刷新并发生StaleElementReferenceException.
>即使使用了不同的等待,所有等待条件也都成立
(因为重新加载前后页面中的内容相同)
甚至在重新加载页面和StaleElementReferenceException之前
发生.
如果Thread.sleep(3000);测试用例可以正常工作在单击“添加项目”按钮之前使用.这个问题还有其他解决方法吗?
解决方法:
3个答案,你可以结合:
1.)在创建Web驱动程序实例后立即设置隐式等待:driver.manage().timeouts().implicitlyWait().这将尝试等到页面在每个页面导航或页面重新加载时完全加载.
2.)页面导航后,调用JavaScript返回document.readyState直到返回“complete”. Web驱动程序实例可以充当JavaScript执行程序.示例代码:
C#
new WebDriverWait(driver, MyDefaultTimeout).Until(
d => ((IJavaScriptExecutor) d).ExecuteScript("return document.readyState").Equals("complete"));
Java的
new WebDriverWait(firefoxDriver, pageLoadTimeout).until(
webDriver -> ((JavascriptExecutor) webDriver).executeScript("return document.readyState").equals("complete"));
3.)在2.)之后,检查URL是否与您期望的模式匹配.
标签:java,selenium-webdriver
来源: https://codeday.me/bug/20190925/1817534.html