Скриншоты элементов и работа с изображением
Интерфейс TakesScreenshot позволяет делать скриншоты целой страницы, текущего окна, видимой части страницы или всего дисплея, если это поддерживается браузером. Однако он не позволяет делать скриншоты отдельных элементов.
Мы можем расширить функциональность TakesScreenshot для возможности получения скриншотов элементов страницы с помощью Java Image API. Для этого можно использовать вспомогательный метод:
public static File captureElementBitmap(WebDriver, driver, WebElement element) throws Exception {
// Делаем скриншот страницы
File screen = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
// Создаем экземпляр BufferedImage для работы с изображением
BufferedImage img = ImageIO.read(screen);
// Получаем размеры элемента
int width = element.getSize().getWidth();
int height = element.getSize().getHeight();
// Создаем прямоугольник (Rectangle) с размерами элемента
Rectangle rect = new Rectangle(width, height);
// Получаем координаты элемента
Point p = element.getLocation();
// Вырезаем изображение элемента из общего изображения
BufferedImage dest = img.getSubimage(p.getX(), p.getY(), rect.width, rect.height);
// Перезаписываем File screen
ImageIO.write(dest, "png", screen);
// Возвращаем File c изображением элемента
return screen;
}Сам тест с использованием этого метода может выглядеть так (при условии, что статический метод создан в классе Utils):
Иногда в тестировании появляется необходимость сравнивать изображения. Например, для проверки загруженных иконок и изображений на сайте или для сравнения базового лэйаута на странице с текущим.
Webdriver обладает функционалом для снятия скриншотов, однако он не может сравнивать изображения. Для этого надо писать собственные расширения. В качестве примера рассмотрим следующий вспомогательный класс:
Пример теста с использованием этого класса:
Last updated