Slik tar du skjermbilde Selenium webdriver

Skjermbilde i Selenium

A Skjermbilde i Selenium Webdriver brukes til feilanalyse. Selenium webdriver kan automatisk ta skjermbilder under utførelsen. Men hvis brukere trenger å ta et skjermbilde på egenhånd, må de bruke TakeScreenshot-metoden som varsler WebDrive om å ta skjermbildet og lagre det i Selenium.

Skjermbilde inn Selenium

Slik tar du skjermbilde Selenium

Her er en trinn-for-trinn-prosess for hvordan du tar skjermbilde i selen WebDriver

Trinn 1) Konverter webdriverobjekt til TakeScreenshot

TakesScreenshot scrShot =((TakesScreenshot)webdriver);

Trinn 2) Kall getScreenshotAs-metoden for å lage bildefil

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

Trinn 3) Kopier filen til ønsket plassering

Eksempel: I dette eksemplet skal vi ta skjermfangst av https://demo.guru99.com/V4/ & lagre den som C:/Test.png

Her er skjermbildekoden i selen:

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

    }

}

NOTAT: Selenium versjon 3.9.0 og nyere gir ikke Apache Commons IO JAR. Du kan ganske enkelt laste dem ned her. og ring dem i prosjektet ditt

Hva er Ashot API?

Ashot er et tredjepartsverktøy av Yandex støttet av Selenium WebDriver for å ta skjermbildene. Det tar et skjermbilde av et individuelt WebElement så vel som et helsides skjermbilde av en side, som er mer betydningsfull enn skjermstørrelsen.

Hvordan laste ned og konfigurere Ashot API?

Det er to metoder for å konfigurere Ashot API

  1. Bruke Maven
  2. Manuelt uten bruk av noe verktøy

For å konfigurere gjennom Maven:

Konfigurer gjennom Maven

  • Lagre filen, og Maven vil legge krukken til byggebanen din
  • Og nå er du klar!!!

For å konfigurere manuelt uten noe avhengighetsverktøy

  1. Gå til https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  2. Klikk på den nyeste versjonen, for nå. Det er 1.5.4
  3. Klikk på krukken, last ned og lagre den på maskinen din

Konfigurer manuelt uten noe avhengighetsverktøy

  1. Legg til jar-filen i byggebanen din:
  2. In Eclipse, høyreklikk på prosjektet -> gå til egenskaper -> Bygg bane -> Biblioteker -> Legg til eksterne krukker
  3. Velg jar-filen
  4. Påfør og lukk

Ta skjermbilde på hele siden med AShot API

Trinn 1) Lag et Ashot-objekt og kall takeScreenshot()-metoden hvis du bare vil ha skjermbildet for skjermstørrelsessiden.

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

Men hvis du vil ha et skjermbilde av siden som er større enn skjermstørrelsen, kaller du shootingStrategy()-metoden før du kaller takeScreenshot()-metoden for å sette opp policyen. Deretter kaller du en metode takeScreenshot() som passerer webdriveren, for eksempel,

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

Her rulles 1000 ut tid i millisekunder, så for å ta et skjermbilde vil programmet rulle for hver 1000 msek.

Trinn 2): Nå, få bildet fra skjermbildet og skriv det til filen. Du kan angi filtypen som jpg, png, etc.

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

Ta et helsides skjermbilde av en side som er større enn skjermstørrelsen.

Eksempel: Her er eksempelet på å ta et helsides skjermbilde av https://demo.guru99.com/test/guru99home/ og lagre til filen "screenshot.jpg."

På grunn av bruk av ShootingStrategy-klassen til Ashot API, vil vi kunne ta et fullstendig bilde av en side som er større enn skjermstørrelsen.

Her er skjermbildekoden i selenprogrammet:

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

}

Ta et skjermbilde av et bestemt element på siden

Eksempel: Her er eksempelet på skjermbilde av et element av Guru 99-logoen https://demo.guru99.com/test/guru99home/ side og lagre til filen "ElementScreenshot.jpg".

Her er skjermbildekoden i selen:

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

Bildesammenligning med 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();
    }
}

Sammendrag

  • Ashot API er et gratisprogram fra Yandex.
  • Det er et verktøy for å ta et skjermbilde Selenium.
  • Det hjelper deg å ta et skjermbilde av et individuelt WebElement på forskjellige plattformer som skrivebordsnettlesere, iOS Simulator Mobile Safari, Android Emulatornettleser.
  • Det kan ta et sideskjermbilde av en side som er større enn skjermstørrelsen.
  • Denne funksjonen er fjernet i selen versjon 3, så Ashot API er et godt alternativ.
  • Det kan dekorere skjermbildene.
  • Det gir en sammenligning av skjermbilder.