Я провожу тестирование Selenium в одночасье (с использованием Java и WebDriver) и хотел бы сделать снимок экрана, когда один из тестовых случаев дает сбой.Если я использую метод createScreenCapture()
робота, он работает только при включенном мониторе, а если я использую метод getScreenshotAs()
Selenium, он не захватывает всплывающие окна или что-либо, что находится в верхней части окна (и часто содержит причину).проблемы).Метод getScreenshotAs()
работает, когда компьютер заблокирован, и это то, чем я сейчас пользуюсь.Мои машины работают под управлением Windows 7, если это имеет значение.
Я адаптировал этот код (найденный на этом сайте) и сейчас использую его:
WebDriver driver = new FirefoxDriver();
driver.get("http://www.google.com/");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
// Now you can do whatever you need to do with it, for example copy somewhere
FileUtils.copyFile(scrFile, new File("c:\\tmp\\screenshot.png"));
Это то, что я использовал ранее, но это толькоснимает серый экран с панелью задач внизу, если компьютер заблокирован, но если я вошел в систему, он отлично работает и захватывает все.Проблема в том, что мне нужно, чтобы мой компьютер был заблокирован на ночь, и именно тогда этот код должен запускаться:
Robot robot = new Robot();
// Get size of screen
Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
// Capture the screen
BufferedImage screenFullImage = robot.createScreenCapture(screenRect);
// Save the screen to to disk
ImageIO.write(screenFullImage, "jpg", new File(fileName));
Я нашел здесь несколько других постов, задающих подобные вопросы, но все они были довольно старыми и невполне соответствует моему вопросу, поэтому мне было интересно, возможно ли какое-либо решение с учетом этих обстоятельств?
РЕДАКТИРОВАТЬ: Когда я использую код робота, это результаты.Я пытался использовать Chrome в качестве браузера (ChromeDriver) и Firefox (FirefoxDriver).
Chrome:
Firefox:
Если я запускаю версию захвата экрана для робота в одном классе, просто цикл, который захватывает экран каждые 5 секунд (Запуск от имени>Java-приложение), оно прекрасно работает даже при заблокированном компьютере, но когда у меня Selenium запускает тот же код (его Run As> JUnit Test), когда тест не пройден, он дает скриншоты выше, если компьютер заблокирован.Я даже пытался заставить код Selenium создавать новый поток для создания снимка экрана, пока он делал Thread.sleep()
, но получал те же результаты, когда компьютер был заблокирован.