Sådan tager du et skærmbillede Selenium webdriver

Skærmbillede ind Selenium

A Skærmbillede ind Selenium Webdriver bruges til fejlanalyse. Selenium webdriver kan automatisk tage skærmbilleder under udførelsen. Men hvis brugere skal tage et skærmbillede på egen hånd, skal de bruge metoden TakeScreenshot, som giver WebDrive besked om at tage skærmbilledet og gemme det i Selenium.

Skærmbillede ind Selenium

Sådan tager du et skærmbillede Selenium

Her er en trin-for-trin-proces til, hvordan du tager et skærmbillede selenium webdriver

Trin 1) Konverter webdriverobjekt til TakeScreenshot

TakesScreenshot scrShot =((TakesScreenshot)webdriver);

Trin 2) Kald getScreenshotAs-metoden for at oprette billedfil

File SrcFile=scrShot.getScreenshotAs(OutputType.FILE);

Trin 3) Kopier filen til den ønskede placering

Eksempel: I dette eksempel vil vi tage skærmbillede af https://demo.guru99.com/V4/ & gem det som C:/Test.png

Her er skærmbilledets kode 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);

    }

}

BEMÆRK VENLIGST: Selenium version 3.9.0 og nyere giver ikke Apache Commons IO JAR. Du kan blot downloade dem link. og ring til dem i dit projekt

Hvad er Ashot API?

Ashot er et tredjepartsværktøj af Yandex støttet af Selenium WebDriver til at tage skærmbillederne. Det tager et skærmbillede af et individuelt WebElement samt et helsides skærmbillede af en side, hvilket er mere signifikant end skærmstørrelsen.

Hvordan downloades og konfigureres Ashot API?

Der er to metoder til at konfigurere Ashot API

  1. Brug af Maven
  2. Manuelt uden brug af noget værktøj

Sådan konfigureres gennem Maven:

Konfigurer gennem Maven

  • Gem filen, og Maven tilføjer krukken til din byggesti
  • Og nu er du klar!!!

At konfigurere manuelt uden noget afhængighedsværktøj

  1. Gå til https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  2. Klik på den seneste version, indtil videre. Det er 1.5.4
  3. Klik på krukken, download og gem den på din maskine

Konfigurer manuelt uden noget afhængighedsværktøj

  1. Tilføj jar-filen i din byggesti:
  2. In Eclipse, højreklik på projektet -> gå til egenskaber -> Byg sti -> Biblioteker -> Tilføj eksterne krukker
  3. Vælg jar-filen
  4. Anvend og luk

Tag fuldsideskærmbillede med AShot API

Trin 1) Opret et Ashot-objekt, og kald takeScreenshot()-metoden, hvis du bare vil have skærmbilledet til skærmstørrelsessiden.

Screenshot screenshot = new Ashot().takeScreenshot(driver);

Men hvis du vil have et skærmbillede af siden større end skærmstørrelsen, skal du kalde metoden shootingStrategy() før du kalder metoden takeScreenshot() for at konfigurere politikken. Kald derefter en metode takeScreenshot() ved at sende webdriveren, f.eks.

Screenshot screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver);

Her rulles 1000 ud i millisekunder, så for at tage et skærmbillede vil programmet rulle for hver 1000 msek.

Trin 2): Hent nu billedet fra skærmbilledet og skriv det til filen. Du kan angive filtypen som jpg, png osv.

ImageIO.write(screenshot.getImage(), "jpg", new File(".\\screenshot\\fullimage.jpg"));

Tage et helsides skærmbillede af en side, der er større end skærmstørrelsen.

Eksempel: Her er eksemplet på at tage et helsides skærmbillede af https://demo.guru99.com/test/guru99home/ og gem til filen "screenshot.jpg."

På grund af brugen af ​​ShootingStrategy-klassen i Ashot API, vil vi være i stand til at tage et fuldt billede af en side, der er større end skærmstørrelsen.

Her er skærmbilledets kode selenium program:

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"));
	
	}

}

Tag et skærmbillede af et bestemt element på siden

Eksempel: Her er eksemplet på at fange element screenshot af Guru 99 logo på https://demo.guru99.com/test/guru99home/ side og gem i filen "ElementScreenshot.jpg".

Her er skærmbilledets kode 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"));
	}
}

Billedsammenligning ved hjælp af 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();
    }
}

Resumé

  • Ashot API er et freeware fra Yandex.
  • Det er et værktøj til at tage et skærmbillede ind Selenium.
  • Det hjælper dig med at tage et skærmbillede af et individuelt WebElement på forskellige platforme som desktopbrowsere, iOS Simulator Mobile Safari, Android Efterlignetor Browser.
  • Det kan tage et sideskærmbillede af en side, der er større end skærmstørrelsen.
  • Denne funktion er blevet fjernet i selenium version 3, så Ashot API er en god mulighed.
  • Det kan dekorere skærmbillederne.
  • Det giver en sammenligning af skærmbilleder.