Знімок екрана в Selenium Webdriver
Скріншот в Selenium WebDriver використовується для аналізу помилок. Під час виконання веб-драйвер Selenium може автоматично робити знімки екрана. Але якщо користувачам потрібно зробити знімок екрана самостійно, їм потрібно використовувати метод TakeScreenshot, який повідомляє WebDrive зробити знімок екрана та зберегти його в Selenium.
У цьому підручнику ви дізнаєтесь,
- Зробіть знімок екрана за допомогою Selenium WebDriver
- Що таке API Ashot?
- Як завантажити та налаштувати Ashot API?
- Зробіть знімок екрана на всю сторінку за допомогою API AShot
- Зробіть знімок екрана певного елемента сторінки
- Порівняння зображень за допомогою AShot
Зробіть знімок екрана за допомогою Selenium WebDriver
Знімок екрана в Selenium - це 3-етапний процес
Крок 1) Перетворити об'єкт веб-драйвера на TakeScreenshot
TakesScreenshot scrShot = ((TakesScreenshot) веб-драйвер);
Крок 2) Виклик методу getScreenshotAs для створення файлу зображення
Файл SrcFile = scrShot.getScreenshotAs (OutputType.FILE);
Крок 3) Скопіюйте файл у бажане місце
Приклад: У цьому прикладі ми візьмемо знімок екрана http://demo.guru99.com/V4/ та збережемо його як C: /Test.png.webp
пакет Guru99TakeScreenshot;імпорт java.io.File;імпорт org.apache.commons.io.FileUtils;імпорт org.openqa.selenium.OutputType;імпорт org.openqa.selenium.TakesScreenshot;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.firefox.FirefoxDriver;імпорт org.testng.annotations.Test;публічний клас 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 веб-драйвер* @param fileWithPath* @throws Виняток* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) видає виняток {// Перетворимо об'єкт веб-драйвера на TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) веб-драйвер);// Виклик методу getScreenshotAs для створення файлу зображенняФайл SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Перемістіть файл зображення до нового місця призначенняФайл DestFile = новий файл (fileWithPath);// Скопіювати файл у пункті призначенняFileUtils.copyFile (SrcFile, DestFile);}}
ПРИМІТКА. Селен версії 3.9.0 і новіших версій не надає Apache Commons IO JAR. Ви можете просто завантажити їх тут і зателефонувати у свій проект
Що таке API Ashot?
Ashot - стороння утиліта Яндекса, що підтримується Selenium WebDriver, щоб робити знімки екрана. Він робить знімок екрана окремого WebElement, а також знімок екрана сторінки на всю сторінку, що є більш значним, ніж розмір екрана.
Як завантажити та налаштувати Ashot API?
Існує два методи налаштування API Ashot
- 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
- Застосувати та закрити
Зробіть знімок екрана на всю сторінку за допомогою API AShot
Крок 1) Створіть об'єкт Ashot і викличте метод takeScreenshot (), якщо вам потрібен лише знімок екрана для сторінки розміру екрана.
Знімок екрана = новий Ashot (). TakeScreenshot (драйвер);
Але якщо ви хочете, щоб знімок екрана сторінки був більшим, ніж розмір екрана, зателефонуйте методу shootingStrategy () перед викликом методу takeScreenshot (), щоб налаштувати політику. Потім викличте метод takeScreenshot (), що передає веб-драйвер, наприклад,
Знімок екрана = новий AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (драйвер);
Тут час 1000 прокручується в мілісекундах, тому для створення знімка екрана програма буде прокручувати кожні 1000 мс.
Крок 2): Тепер дістаньте зображення зі скріншоту та напишіть його у файл. Ви можете вказати тип файлу як jpg.webp, png тощо.
ImageIO.write (screenshot.getImage (), "jpg.webp", новий файл (". \\ скріншот \\ fullimage.jpg.webp"));
Зробіть знімок екрана на всю сторінку, розмір якого перевищує розмір екрана.
Приклад: Ось приклад того, як зробити знімок екрана на всю сторінку http://demo.guru99.com/test/guru99home/ та зберегти у файл "screenshot.jpg.webp".
Завдяки використанню класу ShootingStrategy в Ashot API, ми зможемо зробити повне зображення сторінки, що перевищує розмір екрану. Ось програма:
пакет Guru99;імпорт java.io.File;імпортувати java.io.IOException;імпортувати javax.imageio.ImageIO;імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.WebElement;імпорт org.openqa.selenium.WebDriver;імпорт 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;імпорт java.io.File;імпортувати java.io.IOException;імпортувати javax.imageio.ImageIO;імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.WebElement;імпорт org.openqa.selenium.WebDriver;імпорт 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 = 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;імпортувати java.awt.image.BufferedImage;імпорт java.io.File;імпортувати java.io.IOException;імпортувати javax.imageio.ImageIO;імпорт org.openqa.selenium.By;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.WebElement;імпорт org.openqa.selenium.chrome.ChromeDriver;імпортувати ru.yandex.qatools.ashot.AShot;імпортувати ru.yandex.qatools.ashot.Screenshot;імпортувати ru.yandex.qatools.ashot.comparison.ImageDiff;імпортувати ru.yandex.qatools.ashot.comparison.ImageDiffer;публічний клас 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 = \" site-name \ "] / a [1] / img"));Знімок екрана logoElementScreenshot = новий AShot (). TakeScreenshot (драйвер, logoElemnent);// читаємо зображення для порівнянняBufferedImage очікуванийImage = ImageIO.read (новий файл ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementScreenshot.getImage ();// Створення об'єкта ImageDiffer і виклик методу makeDiff ()ImageDiffer imgDiff = новий ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (actualImage, очікуванийImage);if (diff.hasDiff () == true) {System.out.println ("Зображення однакові");} ще {System.out.println ("Зображення різні");}driver.quit ();}}
Резюме
- API Ashot - це безкоштовна програма Яндекса.
- Це утиліта для створення знімка екрана в Selenium.
- Це допоможе вам зробити знімок екрана окремого WebElement на різних платформах, таких як браузери для настільних комп'ютерів, iOS Simulator Mobile Safari, браузер Android Emulator.
- Це може зробити знімок екрана сторінки, розмір якої перевищує розмір екрана.
- Ця функція була вилучена у версії селену 3, тому API Ashot є хорошим варіантом.
- Він може прикрасити скріншоти.
- Він забезпечує порівняння скріншотів.
Це стало можливим завдяки внескам Шраддхи Дейва