Screenshot in Selenium Webdriver
Ein Screenshot in Selenium Webdriver wird zur Fehleranalyse verwendet. Selenium Webdriver kann während der Ausführung automatisch Screenshots machen. Wenn Benutzer jedoch einen Screenshot selbst aufnehmen müssen, müssen sie die TakeScreenshot-Methode verwenden, mit der das WebDrive benachrichtigt wird, den Screenshot aufzunehmen und in Selenium zu speichern.
In diesem Tutorial lernen Sie:
- Screenshot mit Selenium WebDriver aufnehmen
- Was ist die Ashot-API?
- Wie kann ich die Ashot-API herunterladen und konfigurieren?
- Ganzseitigen Screenshot mit der AShot-API aufnehmen
- Machen Sie einen Screenshot eines bestimmten Elements der Seite
- Bildvergleich mit AShot
Screenshot mit Selenium WebDriver aufnehmen
Das Aufnehmen eines Screenshots in Selen erfolgt in drei Schritten
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
Datei SrcFile = scrShot.getScreenshotAs (OutputType.FILE);
Schritt 3) Kopieren Sie die Datei an den gewünschten Speicherort
Beispiel: In diesem Beispiel wird eine Bildschirmaufnahme von http://demo.guru99.com/V4/ erstellt und als C: /Test.png.webp gespeichert
Paket 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;öffentliche Klasse Guru99TakeScreenshot {@Prüfungpublic void testGuru99TakeScreenShot () löst eine Ausnahme aus {WebDriver-Treiber;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Treiber = neuer FirefoxDriver ();// gehe zu URLdriver.get ("http://demo.guru99.com/V4/");// Screenshot-Funktion aufrufenthis.takeSnapShot (Treiber "c: //test.png.webp");}}/ *** Diese Funktion macht einen Screenshot* @param Webdriver* @param fileWithPath* @throws Ausnahme* /public static void takeSnapShot (WebDriver-Webdriver, String fileWithPath) löst eine Ausnahme aus {// Webtreiberobjekt in TakeScreenshot konvertierenTakesScreenshot scrShot = ((TakesScreenshot) Webdriver);// Rufe die Methode getScreenshotAs auf, um eine Bilddatei zu erstellenDatei SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Bilddatei an neues Ziel verschiebenFile DestFile = neue Datei (fileWithPath);// Datei am Zielort kopierenFileUtils.copyFile (SrcFile, DestFile);}}}}
HINWEIS: Selenium Version 3.9.0 und höher bietet keine Apache Commons IO JAR. Sie können sie einfach hier herunterladen und in Ihrem Projekt aufrufen
Was ist die Ashot-API?
Ashot ist ein Drittanbieter-Dienstprogramm von Yandex, das von Selenium WebDriver zur Erfassung der Screenshots unterstützt wird. Es wird ein Screenshot eines einzelnen WebElements sowie ein ganzseitiger Screenshot einer Seite erstellt, der wichtiger als die Bildschirmgröße ist.
Wie kann ich die Ashot-API herunterladen und konfigurieren?
Es gibt zwei Methoden zum Konfigurieren der Ashot-API
- 1.Maven verwenden
- 2. 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 Ihrem Erstellungspfad hinzu
- Und jetzt bist du bereit !!!
Manuelle 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 Ihren Erstellungspfad ein:
- Klicken Sie in Eclipse mit der rechten Maustaste auf das Projekt -> gehen Sie zu Eigenschaften -> Pfad erstellen -> Bibliotheken -> Externe Gläser hinzufügen
- Wählen Sie die JAR-Datei aus
- Übernehmen und schließen
Ganzseitigen Screenshot mit der AShot-API aufnehmen
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 möchten.
Screenshot Screenshot = neuer Ashot (). TakeScreenshot (Treiber);
Wenn Sie jedoch einen Screenshot der Seite wünschen, der größer als der Bildschirm ist, rufen Sie die Methode shiftStrategy () auf, bevor Sie die Methode takeScreenshot () aufrufen, um die Richtlinie einzurichten. Rufen Sie dann eine Methode takeScreenshot () auf, die den Web-Treiber übergibt, z.
Screenshot Screenshot = neuer AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (Treiber);
Hier wird die Zeit in Millisekunden um 1000 gescrollt. Um einen Screenshot zu erstellen, wird das Programm alle 1000 ms gescrollt.
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.webp, png usw. angeben.
ImageIO.write (Screenshot.getImage (), "jpg.webp", neue Datei (". \\ Screenshot \\ fullimage.jpg.webp"));
Erstellen eines ganzseitigen Screenshots einer Seite, die größer als der Bildschirm ist.
Beispiel: Hier ist das Beispiel für die Aufnahme eines ganzseitigen Screenshots von http://demo.guru99.com/test/guru99home/ und das Speichern in der Datei "screenhot.jpg.webp".
Aufgrund der Verwendung der ShootingStrategy-Klasse der Ashot-API können wir ein vollständiges Bild einer Seite erfassen, die größer als der Bildschirm ist. Hier ist das Programm:
Paket 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;öffentliche Klasse TestScreenshotUsingAshot {public static void main (String [] args) löst IOException aus {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");WebDriver-Treiber = neuer ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maxim ();Screenshot = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (Treiber);ImageIO.write (screenhot.getImage (), "jpg.webp", neue Datei ("c: \\ ElementScreenshot.jpg.webp"));}}}}
Machen Sie einen Screenshot eines bestimmten Elements der Seite
Beispiel: Hier ist das Beispiel für die Aufnahme eines Element-Screenshots des Guru 99-Logos auf der Seite http://demo.guru99.com/test/guru99home/ und das Speichern in der Datei "ElementScreenshot.jpg.webp". Hier ist der Code:
Paket 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;öffentliche Klasse TestElementScreenshotUsingAshot {public static void main (String [] args) löst IOException aus {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");WebDriver-Treiber = neuer ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maxim ();// Finde das Element, um einen Screenshot zu machenWebElement element = driver.findElement (By.xpath ("// * [@ id =" Site-Name "] / a [1] / img"));// Zusammen mit dem Treiberpasselement auch in der Methode takeScreenshot ().Screenshot = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (Treiber, Element);ImageIO.write (screenhot.getImage (), "jpg.webp", neue Datei ("c: \\ ElementScreenshot.jpg.webp"));}}}}
Bildvergleich mit AShot
Paket 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;öffentliche Klasse TestImageComaprison {public static void main (String [] args) löst IOException aus {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");WebDriver-Treiber = neuer ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");// Finde das Element und mache einen ScreenshotWebElement logoElement = driver.findElement (By.xpath ("// * [@ id =" Site-Name "] / a [1] / img"));Screenshot logoElementScreenshot = new AShot (). TakeScreenshot (Treiber, logoElemnent);// Lies das zu vergleichende BildBufferedImage expectedImage = ImageIO.read (neue Datei ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementScreenshot.getImage ();// ImageDiffer-Objekt erstellen und Methode makeDiff () aufrufenImageDiffer imgDiff = new ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (actualImage, expectedImage);if (diff.hasDiff () == true) {System.out.println ("Bilder sind gleich");} else {System.out.println ("Bilder sind unterschiedlich");}}driver.quit ();}}}}
Zusammenfassung
- Ashot API ist eine Freeware von Yandex.
- Es ist ein Dienstprogramm zum Erstellen eines Screenshots in Selen.
- Es hilft Ihnen, einen Screenshot eines einzelnen WebElements auf verschiedenen Plattformen wie Desktop-Browsern, iOS Simulator Mobile Safari und Android Emulator Browser zu erstellen.
- Es kann ein Seiten-Screenshot einer Seite erstellt werden, die größer als der Bildschirm ist.
- Diese Funktion wurde in Selen Version 3 entfernt, daher ist die Ashot-API eine gute Option.
- Es kann die Screenshots dekorieren.
- Es bietet einen Screenshot-Vergleich.
Möglich gemacht durch Beiträge von Shradhdha Dave