Скриншот в Selenium Webdriver
Скриншот в Selenium WebDriver используется для анализа ошибок. Selenium webdriver может автоматически делать снимки экрана во время выполнения. Но если пользователям необходимо сделать снимок экрана самостоятельно, им необходимо использовать метод TakeScreenshot, который уведомляет WebDrive о необходимости сделать снимок экрана и сохранить его в Selenium.
В этом руководстве вы узнаете,
- Сделать снимок экрана с помощью Selenium WebDriver
- Что такое Ashot API?
- Как скачать и настроить Ashot API?
- Сделайте снимок экрана всего страницы с помощью AShot API
- Создание снимка экрана определенного элемента страницы
- Сравнение изображений с помощью AShot
Сделать снимок экрана с помощью Selenium WebDriver
Создание снимка экрана в Selenium - это трехэтапный процесс
Шаг 1) Преобразуйте объект веб-драйвера в TakeScreenshot
TakesScreenshot scrShot = ((TakesScreenshot) webdriver);
Шаг 2) Вызов метода getScreenshotAs для создания файла изображения
Файл SrcFile = scrShot.getScreenshotAs (OutputType.FILE);
Шаг 3) Скопируйте файл в желаемое место
Пример: в этом примере мы сделаем снимок экрана http://demo.guru99.com/V4/ и сохраним его как C: /Test.png.webp.
package Guru99TakeScreenshot;import java.io.File;import org.apache.commons.io.FileUtils;import org.openqa.selenium.OutputType;import org.openqa.selenium.TakesScreenshot;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class Guru99TakeScreenshot {@Тестpublic void testGuru99TakeScreenShot () выдает исключение {Драйвер WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");драйвер = новый FirefoxDriver ();// перейти по URLdriver.get ("http://demo.guru99.com/V4/");// Вызов функции снятия скриншотаthis.takeSnapShot (драйвер, "c: //test.png.webp");}/ *** Эта функция сделает снимок экрана* @param webdriver* @param fileWithPath* @throws Exception* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) выдает исключение {// Преобразование объекта веб-драйвера в TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) webdriver);// Вызов метода getScreenshotAs для создания файла изображенияФайл SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Перемещаем файл изображения в новое место назначенияФайл DestFile = новый файл (fileWithPath);// Копируем файл в место назначенияFileUtils.copyFile (SrcFile, DestFile);}}
ПРИМЕЧАНИЕ. Selenium версии 3.9.0 и выше не предоставляет JAR-файл Apache Commons IO. Вы можете просто скачать их здесь и называть в своем проекте
Что такое Ashot API?
Ashot - это сторонняя утилита Яндекса, поддерживаемая Selenium WebDriver для создания снимков экрана. Он делает снимок экрана отдельного WebElement, а также снимок экрана всей страницы, что более важно, чем размер экрана.
Как скачать и настроить Ashot API?
Есть два метода настройки Ashot API
- 1. С помощью Maven
- 2. вручную без использования каких-либо инструментов
Для настройки через Maven:
- Перейдите на https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- На данный момент щелкните последнюю версию. Это 1.5.4
- Скопируйте код зависимости и добавьте в свой файл pom.xml
- Сохраните файл, и Maven добавит банку в ваш путь сборки.
- И теперь вы готовы !!!
Для настройки вручную без какого-либо инструмента зависимости
- Перейдите на https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- На данный момент щелкните последнюю версию. Это 1.5.4
- Нажмите на банку, загрузите и сохраните на своей машине
- Добавьте файл jar в свой путь сборки:
- В Eclipse щелкните правой кнопкой мыши проект -> перейдите к свойствам -> Путь сборки -> Библиотеки -> Добавить внешние банки.
- Выберите файл jar
- Применить и закрыть
Сделайте снимок экрана всего страницы с помощью AShot API
Шаг 1) Создайте объект Ashot и вызовите метод takeScreenshot (), если вам просто нужен снимок экрана для страницы с размером экрана.
Скриншот снимка экрана = новый Ашот (). TakeScreenshot (драйвер);
Но если вы хотите, чтобы снимок экрана страницы был больше, чем размер экрана, вызовите метод ShootStrategy () перед вызовом метода takeScreenshot () для настройки политики. Затем вызовите метод takeScreenshot (), передавая веб-драйвер, например,
Снимок экрана скриншот = новый AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (драйвер);
Здесь 1000 - время прокрутки в миллисекундах, поэтому для создания снимка экрана программа будет прокручивать каждые 1000 мсек.
Шаг 2): Теперь возьмите изображение со скриншота и запишите его в файл. Вы можете указать тип файла как jpg.webp, png и т. Д.
ImageIO.write (screenshot.getImage (), «jpg.webp», новый файл («. \\ screenshot \\ fullimage.jpg.webp»));
Создание полного снимка экрана страницы, размер которой превышает размер экрана.
Пример. Вот пример создания снимка экрана полной страницы http://demo.guru99.com/test/guru99home/ и его сохранения в файл «screenshot.jpg.webp».
Благодаря использованию класса ShootingStrategy API Ashot, мы сможем захватить полное изображение страницы, размер которой превышает размер экрана. Вот программа:
пакет Guru99;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import org.openqa.selenium.By;import org.openqa.selenium.WebElement;import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;импортировать ru.yandex.qatools.ashot.AShot;импортировать ru.yandex.qatools.ashot.Screenshot;импортировать ru.yandex.qatools.ashot.shooting.ShootingStrategies;открытый класс TestScreenshotUsingAshot {public static void main (String [] args) выбрасывает IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Драйвер WebDriver = новый ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();Снимок экрана = новый AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (драйвер);ImageIO.write (screenshot.getImage (), «jpg.webp», новый файл («c: \\ ElementScreenshot.jpg.webp»));}}
Создание снимка экрана определенного элемента страницы
Пример: Вот пример захвата снимка экрана элемента с логотипом Guru 99 на странице http://demo.guru99.com/test/guru99home/ и сохранения в файл «ElementScreenshot.jpg.webp». Вот код:
пакет Guru99;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import org.openqa.selenium.By;import org.openqa.selenium.WebElement;import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;импортировать ru.yandex.qatools.ashot.AShot;импортировать ru.yandex.qatools.ashot.Screenshot;импортировать ru.yandex.qatools.ashot.shooting.ShootingStrategies;открытый класс TestElementScreenshotUsingAshot {public static void main (String [] args) выбрасывает IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Драйвер WebDriver = новый ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();// Находим элемент, чтобы сделать снимок экранаWebElement element = driver.findElement (By.xpath ("// * [@ id = \" имя-сайта \ "] / a [1] / img"));// Наряду с элементом пропуска драйвера также в методе takeScreenshot ().Снимок экрана = новый AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (драйвер, элемент);ImageIO.write (screenshot.getImage (), «jpg.webp», новый файл («c: \\ ElementScreenshot.jpg.webp»));}}
Сравнение изображений с помощью AShot
пакет Guru99;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;импортировать ru.yandex.qatools.ashot.AShot;импортировать ru.yandex.qatools.ashot.Screenshot;import ru.yandex.qatools.ashot.comparison.ImageDiff;import ru.yandex.qatools.ashot.comparison.ImageDiffer;public class TestImageComaprison {public static void main (String [] args) выбрасывает IOException {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");Драйвер WebDriver = новый ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");// Находим элемент и делаем снимок экранаWebElement logoElement = driver.findElement (By.xpath ("// * [@ id = \" имя-сайта \ "] / a [1] / img"));Снимок экрана logoElementScreenshot = new AShot (). TakeScreenshot (driver, logoElemnent);// читаем изображение для сравненияBufferedImage expectedImage = ImageIO.read (новый файл ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementScreenshot.getImage ();// Создаем объект ImageDiffer и вызываем метод makeDiff ()ImageDiffer imgDiff = новый ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (фактическое изображение, ожидаемое изображение);if (diff.hasDiff () == true) {System.out.println («Изображения такие же»);} еще {System.out.println («Изображения разные»);}driver.quit ();}}
Резюме
- Ashot API - бесплатная программа от Яндекс.
- Это утилита для создания скриншотов в Selenium.
- Это поможет вам сделать снимок экрана отдельного WebElement на разных платформах, таких как настольные браузеры, iOS Simulator Mobile Safari, Android Emulator Browser.
- Он может сделать снимок экрана страницы, размер которой превышает размер экрана.
- Эта функция была удалена в selenium версии 3, поэтому Ashot API - хороший вариант.
- Он может украсить скриншоты.
- Он обеспечивает сравнение снимков экрана.
Это стало возможным благодаря вкладу Шраддхи Дэйва