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.

  • ???? Warum erfassen? Nachweis von Fehlern und Dokumentation der Testlรคufe.
  • ๏ธ Macht einen Screenshot: Cast WebDriver, call getScreenshotAs, save file.
  • ๐Ÿ–ผ๏ธ Elementerfassung: Selenium 4 unterstรผtzt getScreenshotAs fรผr ein WebElement.
  • ๐Ÿ“ฆ AShot: Verbindet ganze Seiten und vergleicht Pixel.
  • ๐Ÿค– KI-Visualtests: Applitools erkennt Unterschiede und ignoriert dabei Stรถrgerรคusche.
  • ๐Ÿ“Š Berichte: Screenshots in Allure oder ExtentReports einbetten.

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.

Screenshot In 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

  1. Mit Maven
  2. Manuell ohne Werkzeug

So konfigurieren Sie รผber Maven:

Konfigurieren Sie รผber Maven

  • 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

  1. Zurรผck Nach https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  2. Klicken Sie vorerst auf die neueste Version. Es ist 1.5.4
  3. Klicken Sie auf das Glas, laden Sie es herunter und speichern Sie es auf Ihrem Computer

Manuelle Konfiguration ohne Abhรคngigkeitstool

  1. Fรผgen Sie die JAR-Datei in Ihrem Build-Pfad hinzu:
  2. In EclipseKlicken Sie mit der rechten Maustaste auf das Projekt -> gehen Sie zu Eigenschaften -> Erstellungspfad -> Bibliotheken -> Externe JARs hinzufรผgen
  3. Wรคhlen Sie die JAR-Datei aus
  4. 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();
    }
}

Hรคufig gestellte Fragen

Sie dokumentieren Ausfรคlle und weisen sporadisch auftretende Fehler schnell nach.

Tools wie Applitools vergleichen Screenshots intelligent und ignorieren dabei dynamische Inhalte.

Ja. KI-Tools erzeugen TakeScreenshot, AShot und Selenium 4 Ausschnitte.

Verwenden Sie AShot oder Selenium 4 mit Chrome DevTools Page.captureScreenshot.

TakesScreenshot erfasst den Ansichtsbereich. AShot fรผgt ganze Seiten zusammen.

Es erfasst das, was gerendert wird. Sensible Daten mรผssen vor der Weitergabe geschwรคrzt werden.

Speichern Sie die von getScreenshotAs zurรผckgegebene Datei selbst.

Ja. Verwenden Sie element.getScreenshotAs(OutputType.FILE) direkt.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: