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

Я пытаюсь сделать снимки экрана в безголовом экземпляре 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();

    }

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

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

KunduK 23.03.2019 22:48

Я на MacOS...

Kristoff 23.03.2019 22:49

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

KunduK 23.03.2019 22:51

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

Kristoff 23.03.2019 22:54
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
1 889
1

Ответы 1

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

new WebDriverWait(driver, 10)

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

Ardesco 08.04.2019 11:26

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

Kristoff 09.04.2019 13:39

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

Ardesco 09.04.2019 17:28

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

Kristoff 10.04.2019 19:29

Другие вопросы по теме