睡眠中断异常:java.lang.InterruptedException:睡眠中断 - 如何让浏览器超时 40 分钟
Posted
技术标签:
【中文标题】睡眠中断异常:java.lang.InterruptedException:睡眠中断 - 如何让浏览器超时 40 分钟【英文标题】:Sleep Interupt Exception: java.lang.InterruptedException: sleep interrupted - How to give timeout for browser for 40mins 【发布时间】:2020-04-01 01:24:03 【问题描述】:我正在尝试从基于 Web 的应用程序下载 Excel 报告,单击“下载”按钮后需要 30 分钟才能开始下载(生成并开始下载需要 30 分钟)。文件大小约为 54 MB。以下是我的代码:
driver().findElement(By.xpath(locator_for_download)).click(); //to click on download button
TimeUnit.SECONDS.sleep(2400); //making it to sleep for 40 mins so that my report gets downloaded.
但是,一旦单击“下载”按钮,5 分钟后我会收到以下错误并关闭浏览器:
Exception: java.lang.InterruptedException: sleep interrupted
我试图隐式等待 2400 秒:
driver.manage().timeouts().implicitlyWait(TimeOut, TimeUnit.SECONDS);
而且页面加载超时都没有用。
P.S - 我们对其执行的任何操作都不会更改 URL。 Web 应用程序具有 iframe,我正在 Google chrome 浏览器中进行自动化操作。
由于睡眠对我不起作用,任何人都可以帮助我如何下载我的报告吗?是不是因为浏览器超时时间变少而被强制关闭?任何帮助都非常感谢。
【问题讨论】:
您是否在代码中的某处抛出了一个中断的异常来表示线程应该停止?线程在睡眠时无法处理中断。所以你需要在线程退出睡眠时捕获异常,然后处理中断。可能需要查看更多代码才能更好地了解发生了什么 也许这有帮助 - ***.com/questions/22714112/… 我没有抛出中断异常。在我点击下载按钮以确保我的文件下载完成后,我所给出的只是睡眠 2400 秒。这是代码: driver().findElement(By.xpath(Control1)).click(); TimeUnit.SECONDS.sleep(2400); 我也厌倦了用 timeout() 处理它,但我得到了 MissingMethodException: timeout() 适用于争论类型(整数)值,下面是代码 driver().findElement(By.xpath(element_locator) )。点击();尝试 TimeUnit.SECONDS.sleep(2400); catch(Exception e) log.error("异常 "+e.toString());超时(2400*1000); 去掉 'Thread.sleep()' 并使用这个***.com/questions/58717512 等待下载完成。 【参考方案1】:如果答案是肯定的,我认为您正在节点(网格/节点模型)上运行脚本。然后它解释了为什么你会得到这个异常。
在您的情况下,睡眠时间 >
节点超时,这导致了异常。节点的默认超时时间是 300 秒(5 分钟),这意味着如果节点在 5 分钟内没有收到命令,那么集线器将自动释放节点。如果您想等待超过 5 分钟,则必须更改 set -timeout = 0 (以完全消除超时)或根据您的情况增加它。
请参阅SeleniumHQ Grid documentation here 了解更多信息。
【讨论】:
谢谢,但我正在尝试仅在本地主机上执行 @Tests。【参考方案2】:Timeout 的解决方法是在等待时定期在页面上执行一些操作。
例如,下面的代码每 2 分钟按下 html
标签(或任何其他元素)上的 Tab 按钮 20 分钟,以防止任何超时。
driver.findElement(By.xpath(locator_for_download)).click();
for (int i = 0; i < 20; i++)
// Break if file downloaded before a timeout, fileDownloaded(myFileName) is example method name to check if file is downloaded.
if (fileDownloaded(myFileName))
break;
TimeUnit.MINUTES.sleep(2);
driver.findElement(By.tagName("html")).sendKeys(Keys.TAB);
if (fileDownloaded(myFileName))
System.out.println("File downloaded successfully");
else
System.out.println("File download failed");
【讨论】:
这是一个小众想法,但sendKeys(Keys.TAB)
不会变成ElementClickInterceptedException
?
@DebanjanB TAB
不会
@Sers :好主意,我们可以通过循环使用 driver.getURL() 函数来保持浏览器忙碌,该函数尝试获取 URL 直到特定时间。感谢您的及时回复!以上是关于睡眠中断异常:java.lang.InterruptedException:睡眠中断 - 如何让浏览器超时 40 分钟的主要内容,如果未能解决你的问题,请参考以下文章