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
- Przejdź do https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Kliknij na razie najnowszą wersję. To jest 1.5.4
- Kliknij słoik, pobierz go i zapisz na swoim komputerze
- Dodaj plik jar do ścieżki kompilacji:
- W Eclipse kliknij prawym przyciskiem myszy projekt -> przejdź do właściwości -> Build Path -> Libraries -> Add External Jars
- Wybierz plik jar
- 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