So erstellen Sie einen Screenshot Selenium WebTreiber
Bildschirmfoto ein Selenium
A Bildschirmfoto ein Selenium Webtreiber wird zur Fehleranalyse verwendet. Selenium Webdriver kann während der Ausführung automatisch Screenshots erstellen. Wenn Benutzer jedoch selbst einen Screenshot aufnehmen müssen, müssen sie die TakeScreenshot-Methode verwenden, die WebDrive anweist, den Screenshot aufzunehmen und darin zu speichern Selenium.
So erstellen Sie einen Screenshot Selenium
Hier ist eine Schritt-für-Schritt-Anleitung zum Aufnehmen von Screenshots in Selenium WebDriver
Schritt 1) Konvertieren Sie das Webtreiberobjekt in TakeScreenshot
TakesScreenshot scrShot =((TakesScreenshot)webdriver);
Schritt 2) Rufen Sie die Methode getScreenshotAs auf, um eine Bilddatei zu erstellen
File SrcFile=scrShot.getScreenshotAs(OutputType.FILE);
Schritt 3) Kopieren Sie die Datei an den gewünschten Speicherort
Beispiel: In diesem Beispiel machen wir eine Bildschirmaufnahme von https://demo.guru99.com/V4/ & speichern Sie es als C:/Test.png
Hier ist der Screenshot-Code in Selenium:
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 { @Test public void testGuru99TakeScreenShot() throws Exception{ WebDriver driver ; System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe"); driver = new FirefoxDriver(); //goto url driver.get("https://demo.guru99.com/V4/"); //Call take screenshot function this.takeSnapShot(driver, "c://test.png") ; } /** * This function will take screenshot * @param webdriver * @param fileWithPath * @throws Exception */ public static void takeSnapShot(WebDriver webdriver,String fileWithPath) throws Exception{ //Convert web driver object to TakeScreenshot TakesScreenshot scrShot =((TakesScreenshot)webdriver); //Call getScreenshotAs method to create image file File SrcFile=scrShot.getScreenshotAs(OutputType.FILE); //Move image file to new destination File DestFile=new File(fileWithPath); //Copy file at destination FileUtils.copyFile(SrcFile, DestFile); } }
Anmerkungen: Selenium Version 3.9.0 und höher stellt kein Apache Commons IO JAR bereit. Sie können sie einfach herunterladen HIER und rufen Sie sie in Ihrem Projekt auf
Was ist die Ashot-API?
Ashot ist ein Drittanbieter-Dienstprogramm von Yandex unterstützt durch Selenium WebDriver zum Erfassen der Screenshots. Es erstellt einen Screenshot eines einzelnen WebElements sowie einen ganzseitigen Screenshot einer Seite, der wichtiger ist als die Bildschirmgröße.
Wie lade ich die Ashot-API herunter und konfiguriere sie?
Es gibt zwei Methoden zum Konfigurieren der Ashot-API
- Mit Maven
- Manuell ohne Werkzeug
So konfigurieren Sie über Maven:
- Gehen Sie zu https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Klicken Sie vorerst auf die neueste Version. Es ist 1.5.4
- Kopieren Sie den Abhängigkeitscode und fügen Sie ihn Ihrer pom.xml-Datei hinzu
- Speichern Sie die Datei und Maven fügt das JAR zu Ihrem Build-Pfad hinzu
- Und jetzt sind Sie bereit!!!
Zur manuellen Konfiguration ohne Abhängigkeitstool
- Gehen Sie zu https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Klicken Sie vorerst auf die neueste Version. Es ist 1.5.4
- Klicken Sie auf das Glas, laden Sie es herunter und speichern Sie es auf Ihrem Computer
- Fügen Sie die JAR-Datei in Ihrem Build-Pfad hinzu:
- In EclipseKlicken Sie mit der rechten Maustaste auf das Projekt -> gehen Sie zu Eigenschaften -> Erstellungspfad -> Bibliotheken -> Externe JARs hinzufügen
- Wählen Sie die JAR-Datei aus
- Bewerben und schließen
Erfassen Sie einen ganzseitigen Screenshot mit der AShot-API
Schritt 1) Erstellen Sie ein Ashot-Objekt und rufen Sie die Methode takeScreenshot() auf, wenn Sie nur den Screenshot für die Seite mit der Bildschirmgröße wünschen.
Screenshot screenshot = new Ashot().takeScreenshot(driver);
Wenn Sie jedoch einen Screenshot der Seite wünschen, der größer als die Bildschirmgröße ist, rufen Sie die Methode „shootingStrategy()“ auf, bevor Sie die Methode „takeScreenshot()“ aufrufen, um die Richtlinie einzurichten. Rufen Sie dann eine Methode takeScreenshot() auf, die den Webdriver übergibt, zum Beispiel:
Screenshot screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver);
Hier wird 1000 in Millisekunden ausgegeben, d. h. zum Erstellen eines Screenshots scrollt das Programm alle 1000 ms.
Schritt 2): Holen Sie sich nun das Bild aus dem Screenshot und schreiben Sie es in die Datei. Sie können den Dateityp als JPG, PNG usw. angeben.
ImageIO.write(screenshot.getImage(), "jpg", new File(".\\screenshot\\fullimage.jpg"));
Erstellen eines ganzseitigen Screenshots einer Seite, die größer als der Bildschirm ist.
Ejemplo: Hier ist das Beispiel für die Aufnahme eines ganzseitigen Screenshots von https://demo.guru99.com/test/guru99home/ und in der Datei „screenshot.jpg“ speichern.
Durch die Verwendung der ShootingStrategy-Klasse der Ashot-API können wir ein vollständiges Bild einer Seite erfassen, die größer als die Bildschirmgröße ist.
Hier ist der Screenshot-Code im Selenium-Programm:
package 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) throws IOException { System.setProperty("webdriver.chrome.driver", "c:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/test/guru99home/"); driver.manage().window().maximize(); Screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver); ImageIO.write(screenshot.getImage(), "jpg", new File("c:\\ElementScreenshot.jpg")); } }
Erstellen eines Screenshots eines bestimmten Elements der Seite
Ejemplo: Hier ist das Beispiel für die Aufnahme eines Element-Screenshots des Guru 99-Logos https://demo.guru99.com/test/guru99home/ Seite und speichern Sie sie in der Datei „ElementScreenshot.jpg“.
Hier ist der Screenshot-Code in Selenium:
package 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) throws IOException { System.setProperty("webdriver.chrome.driver", "c:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/test/guru99home/"); driver.manage().window().maximize(); // Find the element to take a screenshot WebElement element = driver.findElement(By.xpath ("//*[@id=\"site-name\"]/a[1]/img")); // Along with driver pass element also in takeScreenshot() method. Screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver,element); ImageIO.write(screenshot.getImage(), "jpg", new File("c:\\ElementScreenshot.jpg")); } }
Bildvergleich mit AShot
package 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) throws IOException { System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/test/guru99home/"); // Find the element and take a screenshot WebElement logoElement = driver.findElement(By.xpath("//*[@id=\"site-name\"]/a[1]/img")); Screenshot logoElementScreenshot = new AShot().takeScreenshot(driver, logoElemnent); // read the image to compare BufferedImage expectedImage = ImageIO.read(new File("C:\\Guru99logo.png")); BufferedImage actualImage = logoElementScreenshot.getImage(); // Create ImageDiffer object and call method makeDiff() ImageDiffer imgDiff = new ImageDiffer(); ImageDiff diff = imgDiff.makeDiff(actualImage, expectedImage); if (diff.hasDiff() == true) { System.out.println("Images are same"); } else { System.out.println("Images are different"); } driver.quit(); } }
Zusammenfassung
- Ashot API ist eine Freeware von Yandex.
- Es ist ein Dienstprogramm zum Erstellen eines Screenshots Selenium.
- Es hilft Ihnen, einen Screenshot eines einzelnen WebElements auf verschiedenen Plattformen wie Desktop-Browsern, iOS Simulator Mobile Safari, zu erstellen. Android Emulator-Browser.
- Es kann einen Seiten-Screenshot einer Seite erstellen, die größer als der Bildschirm ist.
- Diese Funktion wurde in Selenium Version 3 entfernt, daher ist die Ashot-API eine gute Option.
- Es kann die Screenshots schmücken.
- Es bietet einen Screenshot-Vergleich.