Как я могу получить скриншот в безголовом ChromeDriver?

#java #selenium #webdriver #screenshot #headless

#java #selenium #webdriver #скриншот #безголовый

Вопрос:

Я пытаюсь сделать скриншоты в экземпляре безголового ChromeDriver. Я могу получить правильный скриншот, не запуская headless.

Я пытался просто следовать примеру для этого, однако пример не работает должным образом.

     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();

    }
  

Скриншот, созданный приведенным выше кодом, будет пустым белым, с полосой прокрутки сбоку. Что я могу сделать, чтобы сделать снимок экрана в безголовом режиме? Возможно ли это?

Комментарии:

1. в Windows я вижу скриншот. Вы используете Windows или macOS?

2. Я на macOS…

3. можете ли вы добавить эти параметры и проверить, работает ли это. chromeOptions.addArguments("window-size=1920,1080");

4. Я нашел решение, и я отвечу на вопрос

Ответ №1:

Это поведение отличалось в Windows, Ubuntu и Mac. В настоящее время я работаю на Mac. По какой-то причине страница не отображалась. Это было все, что мне было нужно, прежде чем я сделал свой скриншот

new WebDriverWait(driver, 10)

Комментарии:

1. Простое создание экземпляра объекта WebDriverWait ничего не даст (кроме незначительного увеличения времени выполнения). Я бы предположил, что корреляция!= причинно-следственная связь в данном случае.

2. Что ж, это заставило его работать. Важной частью здесь является то, что поведение отличается от ожидаемого на Mac

3. Я предполагаю, что небольшое увеличение времени выполнения, вероятно, привело к рендерингу страницы, а не к тому факту, что вы создали экземпляр объекта. В идеале вы должны использовать явное ожидание, чтобы дождаться появления ожидаемого элемента, а не просто создавать его экземпляр.

4. Это заставило его ждать 10 мс