Я пытаюсь сделать снимки экрана в безголовом экземпляре ChromeDriver. Я могу сделать правильный скриншот, не работая без головы.
Я попытался просто следовать примеру для этого, однако пример не работает должным образом.
public static void main(String[] args) throws Exception{
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setBinary("/Applications/Google Chrome.app/Contents/MacOS/Google Chrome");
chromeOptions.addArguments("--headless");
WebDriver driver = new ChromeDriver(chromeOptions);
driver.navigate().to("https://adobe.com");
File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
// Now you can do whatever you need to do with it, for example copy somewhere
FileUtils.copyFile(srcFile, new File("testscreenshot.png"));
driver.quit();
}
Скриншот, созданный кодом выше, будет пустым белым с полосой прокрутки сбоку. Что я могу сделать, чтобы сделать снимок экрана в безголовом режиме? Это возможно?
Я на MacOS...
Вы можете добавить эти параметры и проверить, работает ли он. chromeOptions.addArguments("window-size=1920,1080");
Я нашел решение, и я отвечу на вопрос




Это поведение отличалось в Windows, Ubuntu и Mac. В настоящее время я работаю на Mac. Страница почему-то не отображалась. Это все, что мне было нужно, прежде чем я сделал скриншот
new WebDriverWait(driver, 10)
Простое создание экземпляра объекта WebDriverWait ничего не даст (кроме незначительного увеличения времени выполнения). Я бы предположил, что в данном случае корреляция != причинно-следственная связь.
Что ж, заработало. Важной частью здесь является то, что поведение отличается от ожидаемого на Mac.
Я предполагаю, что крошечное увеличение времени выполнения, вероятно, привело к рендерингу страницы, а не к тому факту, что вы создали экземпляр объекта. В идеале вы должны использовать явное ожидание, чтобы дождаться появления ожидаемого элемента, а не просто создавать его экземпляр.
Это заставило его ждать 10 мс
Windows, я вижу скриншот. Вы используете Windows или macOS?