So erstellen Sie einen Screenshot Selenium WebTreiber
โก Intelligente Zusammenfassung
Machen Sie einen Screenshot in Selenium WebDriver erklรคrt das Erfassen visueller Beweise fรผr Debugging und visuelle Regression und behandelt dabei TakeScreenshot, Vollseiten-Screenshots, Element-Screenshots und AShot.

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 werden auf dieser Seite erlรคutert 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:
- Zurรผck Nach 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
- Zurรผck Nach 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 ein Beispiel fรผr die Aufnahme eines Element-Screenshots. Guru 99-Logo auf 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(); } }



