Как да направите снимка на екрана в Selenium WebDriver

Съдържание:

Anonim

Екранна снимка в Selenium Webdriver

А Screenshot в Селен Webdriver се използва за анализ на грешки. Selenium webdriver може автоматично да прави екранни снимки по време на изпълнението. Но ако потребителите трябва сами да заснемат екранна снимка, те трябва да използват метода TakeScreenshot, който уведомява WebDrive да направи екранната снимка и да я съхрани в Selenium.

В този урок ще научите,

  • Заснемете екранна снимка с помощта на Selenium WebDriver
  • Какво е API на Ashot?
  • Как да изтеглите и конфигурирате Ashot API?
  • Заснемете екран на цяла страница с AShot API
  • Правене на екранна снимка на определен елемент от страницата
  • Сравнение на изображения с помощта на AShot

Заснемете екранна снимка с помощта на Selenium WebDriver

Правенето на екранна снимка в Селен е процес от 3 стъпки

Стъпка 1) Конвертирайте обекта на уеб драйвер в TakeScreenshot

TakesScreenshot scrShot = ((TakesScreenshot) webdriver);

Стъпка 2) Извикайте метода getScreenshotAs, за да създадете файл с изображение

Файл SrcFile = scrShot.getScreenshotAs (OutputType.FILE);

Стъпка 3) Копирайте файла в желаното местоположение

Пример: В този пример ще направим заснемане на екрана на http://demo.guru99.com/V4/ и ще го запазим като C: /Test.png.webp

пакет Guru99TakeScreenshot;import java.io.File;импортирайте org.apache.commons.io.FileUtils;import 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 webdriver* @param fileWithPath* @throws Изключение* /публична статична празнота takeSnapShot (WebDriver webdriver, String fileWithPath) хвърля изключение {// Конвертиране на обект на уеб драйвер в TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) webdriver);// Извикайте метода getScreenshotAs, за да създадете файл с изображениеФайл SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Преместване на файл с изображение на ново местоназначениеФайл DestFile = нов файл (fileWithPath);// Копиране на файл в местоназначениетоFileUtils.copyFile (SrcFile, DestFile);}}

ЗАБЕЛЕЖКА: Селен версия 3.9.0 и по-нова не предоставя AO Apache Commons IO JAR. Можете просто да ги изтеглите от тук и да ги извикате във вашия проект

Какво е API на Ashot?

Ashot е помощна програма на трета страна от Yandex, поддържана от 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 ще добави буркана към пътя ви за изграждане
  • И сега сте готови !!!

За да конфигурирате ръчно без инструмент за зависимост

  1. Отидете на https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  2. Засега кликнете върху най-новата версия. Това е 1.5.4
  3. Кликнете върху буркана, изтеглете и запазете на вашата машина

  1. Добавете jar файла във вашия път на изграждане:
  2. В Eclipse щракнете с десния бутон върху проекта -> отидете на свойства -> Път на изграждане -> Библиотеки -> Добавяне на външни буркани
  3. Изберете файла на бурканчето
  4. Приложете и затворете

Заснемете екран на цяла страница с AShot API

Стъпка 1) Създайте обект Ashot и извикайте метода takeScreenshot (), ако просто искате екранната снимка за страницата с размера на екрана.

Екранна снимка на екрана = нов Ashot (). TakeScreenshot (драйвер);

Но ако искате екранна снимка на страницата по-голяма от размера на екрана, извикайте метода shootingStrategy (), преди да извикате метода takeScreenshot (), за да настроите политиката. След това извикайте метод takeScreenshot (), който предава webdriver, например,

Екранна снимка на екрана = нов AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (драйвер);

Тук 1000 се премества в милисекунди, така че за правене на екранна снимка програмата ще превърта за всеки 1000 msec.

Стъпка 2): Сега вземете изображението от екранната снимка и го запишете във файла. Можете да предоставите типа на файла като jpg.webp, png и т.н.

ImageIO.write (screenshot.getImage (), "jpg.webp", нов файл (". \\ screenshot \\ fullimage.jpg.webp"));

Правене на екранна снимка на цяла страница на страница, която е по-голяма от размера на екрана.

Пример: Ето примера за заснемане на екранна снимка на цяла страница на http://demo.guru99.com/test/guru99home/ и запазване във файл „screenshot.jpg.webp“.

Поради използването на класа ShootingStrategy на Ashot API, ще можем да заснемем пълно изображение на страница, по-голяма от размера на екрана. Ето програмата:

пакет Guru99;import 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;import 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 = \" site-name \ "] / 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;import 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 ();}}

Обобщение

  • Ashot API е безплатна програма от Yandex.
  • Това е помощна програма за правене на екранна снимка в Selenium.
  • Помага ви да направите екранна снимка на отделен WebElement на различни платформи като браузъри за настолни компютри, iOS Simulator Mobile Safari, Android Emulator Browser.
  • Може да направи екранна снимка на страница, по-голяма от размера на екрана.
  • Тази функция е премахната в селен версия 3, така че API на Ashot е добра опция.
  • Той може да украси екранните снимки.
  • Той осигурява сравнение на екранна снимка.

Стана възможно благодарение на приноса на Шрадда Дейв