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

  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. Gehen Sie zu 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 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.

Mehr lesen Weiterlesen