我正在自动与网站交互以上传文件并下载结果。不经常,但偶尔站点永远不会加载。我收到以下错误。
[302.321][SEVERE]: Timed out receiving message from renderer: 299.536
[302.323][SEVERE]: Timed out receiving message from renderer: -0.003
Exception in thread "main" org.openqa.selenium.TimeoutException: timeout
(Session info: chrome=61.0.3163.100)
(Driver info: chromedriver=2.33.506120
(e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 6.2.9200 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 300.01 seconds
脚本通过if语句使用了负路径和正路径。但是,如果页面上根本没有显示任何内容,则只会失败而不是刷新。
WebDriver driver = new ChromeDriver();
WebDriverWait wait = new WebDriverWait(driver, 5);
driver.get("http://apps.gdgps.net/apps_file_upload.php");
System.out.println("test a");
List<WebElement> upload = driver.findElements(By.cssSelector("input[class*='upfile_ultimo']"));
if (upload.isEmpty())
{
System.out.println("failed");
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("input[id='upload_button']")));
driver.navigate().refresh();
System.out.println("next");
driver.findElement(By.cssSelector("input[class*='upfile_ultimo']")).click();
}
else
{
upload.get(0).click();
}
我可以手动刷新页面,然后立即加载并继续。
答案 0 :(得分:0)
如果页面上没有任何内容,则由于您没有处理异常,脚本将被绑定失败。
以下行会抛出 TimeoutException
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("input[id='upload_button']")));
因此,如果您希望在发生异常时继续执行脚本事件,则可以简单地捕获该异常。
try{
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("input[id='upload_button']")));
}catch (TimeoutException te){
System.out.print("Timeout for waiting for element");
}
但是在您的情况下,最好的解决方案是。
将显式等待时间增加到30 seconds
更多
设置页面超时。
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);