Slik tar du skjermbilde Selenium webdriver

โšก Smart oppsummering

Ta skjermbilde i Selenium WebDriver forklarer hvordan man fanger opp visuelle bevis for feilsรธking og visuell regresjon, og dekker TakesScreenshot, helsides opptak, elementopptak og AShot.

  • ???? Hvorfor fange: Bevis feil og dokumenter kjรธringer.
  • ๐Ÿ› ๏ธ Tar skjermbilde: Cast WebDriver, kall getScreenshotAs, lagre filen.
  • ๐Ÿ–ผ๏ธ Elementfangst: Selenium 4 stรธtter getScreenshotAs pรฅ et WebElement.
  • ๐Ÿ“ฆ Et bilde: Setter sammen hele sider og sammenligner piksler.
  • ๐Ÿค– Visuelle tester av kunstig intelligens: Applitools oppdager differanser mens den ignorerer stรธy.
  • ๐Ÿ“Š Rapporter: Legg inn skjermbilder i Allure eller ExtentReports.

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 et eksempel pรฅ hvordan man tar et skjermbilde av et element Guru 99-logoen pรฅ 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();
    }
}

Spรธrsmรฅl og svar

De dokumenterer feil og avdekker raskt periodiske feil.

Verktรธy som Applitools sammenligner skjermbilder intelligent og ignorerer dynamisk innhold.

Ja. AI-verktรธy produserer TakesScreenshot, AShot og Selenium 4 utdrag.

Bruk AShot eller Selenium 4 med Chrome DevTools Page.captureSkjermbilde.

TakesScreenshot henter visningsfeltet. AShot setter sammen hele sider.

Den fanger opp det som gjengis. Fjern sensitive data fรธr deling.

Lagre filen som returneres av getScreenshotAs selv.

Ja. Bruk element.getScreenshotAs(OutputType.FILE) direkte.

Oppsummer dette innlegget med: