#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 мс