Jak zrobić zrzut ekranu w Selenium WebDriver

Spisie treści:

Anonim

Zrzut ekranu w Selenium Webdriver

Ekranu w selen Webdriver służy do analizy błędów. Webdriver Selenium może automatycznie robić zrzuty ekranu podczas wykonywania. Ale jeśli użytkownicy muszą samodzielnie wykonać zrzut ekranu, muszą użyć metody TakeScreenshot, która powiadamia WebDrive o zrobieniu zrzutu ekranu i zapisaniu go w Selenium.

W tym samouczku dowiesz się,

  • Przechwyć zrzut ekranu za pomocą Selenium WebDriver
  • Co to jest Ashot API?
  • Jak pobrać i skonfigurować Ashot API?
  • Przechwytuj pełny zrzut ekranu za pomocą AShot API
  • Wykonanie zrzutu ekranu określonego elementu strony
  • Porównanie obrazów przy użyciu AShot

Przechwyć zrzut ekranu za pomocą Selenium WebDriver

Robienie zrzutu ekranu w Selenium to proces 3-etapowy

Krok 1) Przekonwertuj obiekt sterownika sieciowego na TakeScreenshot

TakesScreenshot scrShot = ((TakesScreenshot) webdriver);

Krok 2) Wywołaj metodę getScreenshotAs, aby utworzyć plik obrazu

File SrcFile = scrShot.getScreenshotAs (OutputType.FILE);

Krok 3) Skopiuj plik do żądanej lokalizacji

Przykład: W tym przykładzie zrobimy zrzut ekranu http://demo.guru99.com/V4/ i zapiszemy go jako C: /Test.png.webp

pakiet 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 {@Testpublic void testGuru99TakeScreenShot () zgłasza wyjątek {Sterownik WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");driver = nowy FirefoxDriver ();// goto urldriver.get („http://demo.guru99.com/V4/”);// Wywołaj funkcję robienia zrzutów ekranuthis.takeSnapShot (sterownik, "c: //test.png.webp");}/ *** Ta funkcja umożliwia wykonanie zrzutu ekranu* @param webdriver* @param fileWithPath* Wyjątek @throws* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) rzuca wyjątek {// Konwertuj obiekt sterownika sieciowego na TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) webdriver);// Wywołaj metodę getScreenshotAs, aby utworzyć plik obrazuFile SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Przenieś plik obrazu do nowego miejsca docelowegoFile DestFile = nowy plik (fileWithPath);// Kopiuj plik w miejscu docelowymFileUtils.copyFile (SrcFile, DestFile);}}

UWAGA: Selenium w wersji 3.9.0 i nowszych nie zapewnia Apache Commons IO JAR. Możesz po prostu pobrać je tutaj i zadzwonić do nich w swoim projekcie

Co to jest Ashot API?

Ashot to narzędzie innej firmy Yandex obsługiwane przez Selenium WebDriver do przechwytywania zrzutów ekranu. Wykonuje zrzut ekranu pojedynczego elementu WebElement, a także zrzut całej strony strony, który jest ważniejszy niż rozmiar ekranu.

Jak pobrać i skonfigurować Ashot API?

Istnieją dwie metody konfiguracji interfejsu Ashot API

  • 1. za pomocą Mavena
  • 2.Ręcznie bez użycia narzędzi

Aby skonfigurować przez Maven:

  • Przejdź do https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  • Kliknij na razie najnowszą wersję. To jest 1.5.4
  • Skopiuj kod zależności i dodaj do pliku pom.xml

  • Zapisz plik, a Maven doda jar do ścieżki kompilacji
  • A teraz jesteś gotowy !!!

Aby skonfigurować ręcznie bez żadnego narzędzia do zarządzania zależnościami

  1. Przejdź do https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  2. Kliknij na razie najnowszą wersję. To jest 1.5.4
  3. Kliknij słoik, pobierz go i zapisz na swoim komputerze

  1. Dodaj plik jar do ścieżki kompilacji:
  2. W Eclipse kliknij prawym przyciskiem myszy projekt -> przejdź do właściwości -> Build Path -> Libraries -> Add External Jars
  3. Wybierz plik jar
  4. Zastosuj i zamknij

Przechwytuj pełny zrzut ekranu za pomocą AShot API

Krok 1) Utwórz obiekt Ashot i wywołaj metodę takeScreenshot (), jeśli chcesz wykonać zrzut ekranu strony o rozmiarze ekranu.

Zrzut ekranu ekranu = nowy Ashot (). TakeScreenshot (sterownik);

Ale jeśli chcesz, aby zrzut ekranu strony był większy niż rozmiar ekranu, wywołaj metodę shootingStrategy () przed wywołaniem metody takeScreenshot () w celu skonfigurowania polityki. Następnie wywołaj metodę takeScreenshot () przekazującą webdriver, na przykład

Zrzut ekranu ekranu = nowy AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (sterownik);

Tutaj 1000 jest przewijane w milisekundach, więc w celu zrobienia zrzutu ekranu program będzie przewijał się co 1000 ms.

Krok 2): Teraz pobierz obraz ze zrzutu ekranu i zapisz go do pliku. Możesz podać typ pliku jako jpg.webp, png itp.

ImageIO.write (screenshot.getImage (), "jpg.webp", nowy plik (". \\ screenshot \\ fullimage.jpg.webp"));

Wykonanie pełnego zrzutu ekranu strony, która jest większa niż rozmiar ekranu.

Przykład: Oto przykład przechwytywania całostronicowego zrzutu ekranu http://demo.guru99.com/test/guru99home/ i zapisywania go w pliku „screenshot.jpg.webp”.

Dzięki zastosowaniu klasy ShootingStrategy interfejsu Ashot API będziemy mogli uchwycić pełny obraz strony większej niż rozmiar ekranu. Oto program:

pakiet 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;import ru.yandex.qatools.ashot.AShot;import ru.yandex.qatools.ashot.Screenshot;import ru.yandex.qatools.ashot.shooting.ShootingStrategies;public class TestScreenshotUsingAshot {public static void main (String [] args) rzuca IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Sterownik WebDriver = nowy ChromeDriver ();driver.get („http://demo.guru99.com/test/guru99home/”);driver.manage (). window (). maximize ();Screenshot = nowy AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (sterownik);ImageIO.write (screenshot.getImage (), "jpg.webp", nowy plik ("c: \\ ElementScreenshot.jpg.webp"));}}

Wykonanie zrzutu ekranu określonego elementu strony

Przykład: Oto przykład przechwytywania zrzutu ekranu elementu logo Guru 99 na http://demo.guru99.com/test/guru99home/ stronie i zapisywania do pliku „ElementScreenshot.jpg.webp”. Oto kod:

pakiet 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;import ru.yandex.qatools.ashot.AShot;import ru.yandex.qatools.ashot.Screenshot;import ru.yandex.qatools.ashot.shooting.ShootingStrategies;public class TestElementScreenshotUsingAshot {public static void main (String [] args) rzuca IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Sterownik WebDriver = nowy ChromeDriver ();driver.get („http://demo.guru99.com/test/guru99home/”);driver.manage (). window (). maximize ();// Znajdź element, aby zrobić zrzut ekranuElement WebElement = driver.findElement (By.xpath ("// * [@ id = \" nazwa-witryny \ "] / a [1] / img"));// Wraz z elementem pass sterownika również w metodzie takeScreenshot ().Screenshot = nowy AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (sterownik, element);ImageIO.write (screenshot.getImage (), "jpg.webp", nowy plik ("c: \\ ElementScreenshot.jpg.webp"));}}

Porównanie obrazów przy użyciu AShot

pakiet 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;import ru.yandex.qatools.ashot.AShot;import 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) rzuca IOException {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");Sterownik WebDriver = nowy ChromeDriver ();driver.get („http://demo.guru99.com/test/guru99home/”);// Znajdź element i zrób zrzut ekranuWebElement logoElement = driver.findElement (By.xpath ("// * [@ id = \" nazwa-witryny \ "] / a [1] / img"));Zrzut ekranu logoElementScreenshot = nowy AShot (). TakeScreenshot (sterownik, logoElemnent);// przeczytaj obraz do porównaniaBufferedImage spodziewanyImage = ImageIO.read (nowy plik („C: \\ Guru99logo.png.webp”));BufferedImagetualImage = logoElementScreenshot.getImage ();// Utwórz obiekt ImageDiffer i wywołaj metodę makeDiff ()ImageDiffer imgDiff = new ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (rzeczywiste zdjęcie, oczekiwane zdjęcie);if (diff.hasDiff () == true) {System.out.println ("Obrazy są takie same");} else {System.out.println ("Obrazy są różne");}driver.quit ();}}

Podsumowanie

  • Ashot API to darmowe oprogramowanie od Yandex.
  • Jest to narzędzie do robienia zrzutów ekranu w Selenium.
  • Pomaga zrobić zrzut ekranu pojedynczego elementu WebElement na różnych platformach, takich jak przeglądarki komputerowe, iOS Simulator Mobile Safari, Android Emulator Browser.
  • Może wykonać zrzut ekranu strony większej niż rozmiar ekranu.
  • Ta funkcja została usunięta w wersji selenium 3, więc Ashot API jest dobrą opcją.
  • Może ozdobić zrzuty ekranu.
  • Zapewnia porównanie zrzutów ekranu.

Stało się to możliwe dzięki wkładowi Shradhdha Dave