尝试获取屏幕截图时Selenium TimeoutException

时间:2018-02-21 11:10:10

标签: java selenium selenium-webdriver

我已将pageLoadTimeout设置为30秒。对我这样的司机:

driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);

在我的整个代码中,我有一个方法将屏幕截图带到浏览器:

try {
    String path = "logs/ss/";
    File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    FileUtils.copyFile(scrFile, new File(path + createnamess() + ".jpg"));
}catch(Exception e41) {
    writelog("SCREENSHOT FAIL : " + e41.toString); //print message in txt file
}

总是在没有截屏时,在txt文件中出现:

  

SCREENSHOT FAIL:org.openqa.selenium.TimeoutException:timeout ....

我无法理解为什么抛出TimeoutException以及如何修复它。

1 个答案:

答案 0 :(得分:0)

根据Java Docs pageLoadTimeout()设置在抛出错误之前等待页面加载完成的时间。如果超时为负,则页面加载可能是无限期的。

正如您设置pageLoadTimeout()如下:

driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);

因此,只要您的网页加载时间超过30秒,就会抛出 TimeoutException

现在根据您的代码块,在try-catch {}发挥作用之前,此 TimeoutException 会被抛出。

如何解决

要修复 TimeoutException 问题,您可以考虑以下任何一种方法:

  • 完全删除pageLoadTimeout()并让目标网页花费时间加载。
  • driver.get(...)放入try{}并加入 TimeoutException catch{}并退出,如下所示:

     try {
          driver.get("https://stackoverflow.com")
          //other code
     }catch(Exception e) {
          writelog("Page load Timeout Occured. Quiting !!!");
          driver.quit()
     }