2015-10-08 4 views
1

Я запускаю серию автоматических графических тестов с использованием Selenium в Java. Эти тесты регулярно проверяться принимает скриншоты с помощью:Как сделать драйвер Selenium firefox делать скриншоты только просматриваемой страницы

public static void takeScreenshot(String screenshotPathAndName, WebDriver driver) { 
     File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
     try { 
      FileUtils.copyFile(scrFile, new File(screenshotPathAndName)); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 

Это прекрасно работает в Chrome и IE, однако в Firefox я получаю большие куски пробельных под скриншотами. Я подозреваю, что пробелы на самом деле являются частью самой страницы, но обычно скрыты от просмотра в браузере (полоса прокрутки останавливается перед пробелом). Я сделал быстрый тест с

driver.get("http://stackoverflow.com/"); 
    takeScreenshot("D:\\TestRuns\\stackoverflow.png", driver); 

и обнаружил, что при использовании драйвера Firefox всей страницы в захваченных на скриншоте, в то время как с драйвером Chrome только то, что показано в браузере захватывается.

Есть ли способ заставить Firefox-драйвер сделать снимок экрана, содержащий ТОЛЬКО то, что действительно можно увидеть в браузере (что может видеть фактический пользователь)?

ответ

1

на основе ответов от this question я был в состоянии добавить 4 строк кода, чтобы просто обрезать изображение до размера окна браузера. Это решает мою проблему, хотя было бы лучше, если бы ее можно было решить с помощью драйвера вместо обрезки после того, как был сделан снимок экрана.

public static void takeScreenshot(String screenshotPathAndName, WebDriver driver) { 
    File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
    try { 

     int height = driver.manage().window().getSize().getHeight(); 
     BufferedImage img = ImageIO.read(scrFile); 
     BufferedImage dest = img.getSubimage(0, 0, img.getWidth(), height); 
     ImageIO.write(dest, "png", scrFile); 

     FileUtils.copyFile(scrFile, new File(screenshotPathAndName)); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 
} 
0

Попробуйте это:

private static void snapshotBrowser(TakesScreenshot driver, String screenSnapshotName, File browserFile) { 
     try { 

      File scrFile = driver.getScreenshotAs(OutputType.FILE); 
      log.info("PNG browser snapshot file name: \"{}\"", browserFile.toURI().toString()); 

      FileUtils.deleteQuietly(browserFile); 
      FileUtils.moveFile(scrFile, browserFile); 
     } catch (Exception e) { 
      log.error("Could not create browser snapshot: " + screenSnapshotName, e); 
     } 
    } 
+0

Не работает. Все еще получается скриншоты, которые показывают всю страницу, а не только то, что видно в браузере. – EJS

Смежные вопросы