Kuidas teha ekraanipilti Selenium Veebidraiver

⚡ Nutikas kokkuvõte

Jäädvusta ekraanipilt Selenium WebDriver selgitab visuaalsete tõendite jäädvustamist silumiseks ja visuaalseks regressiooniks, käsitledes TakesScreenshot'i, täislehe jäädvustamist, elementide jäädvustamist ja AShoti.

  • ???? Miks jäädvustada: Tõesta tõrkeid ja dokumenteeri käivitusi.
  • 🛠️ Ekraanipilt: Loo WebDriver, käivita getScreenshotAs ja salvesta fail.
  • 🖼️ Elemendi püüdmine: Selenium 4 toetab WebElemis funktsiooni getScreenshotAs.
  • 📦 AShot: Ühendab terved lehed ja võrdleb piksleid.
  • 🤖 Tehisintellekti visuaalsed testid: Applitools tuvastab erinevusi, ignoreerides müra.
  • 📊 Aruanded: Manusta ekraanipilte Allure'i või ExtentReportsi.

Kuidas teha ekraanipilti Selenium Veebidraiver

Ekraanipilt sisse Selenium

A Ekraanipilt sisse Selenium Veebidraiver kasutatakse vigade analüüsiks. Selenium veebidraiver saab täitmise ajal automaatselt ekraanipilte teha. Kui aga kasutajad peavad ise ekraanipildi jäädvustama, peavad nad kasutama TakeScreenshot meetodit, mis teavitab WebDrive’i, et see teeks ekraanipildi ja salvestaks selle Selenium.

Ekraanipilt sisse Selenium

Kuidas teha ekraanipilti Selenium

Siin on samm-sammuline protsess seleeni WebDriveris ekraanipildi jäädvustamiseks

Step 1) Teisendage veebidraiveri objekt rakenduseks TakeScreenshot

TakesScreenshot scrShot =((TakesScreenshot)webdriver);

Step 2) Pildifaili loomiseks helistage meetodile getScreenshotAs

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

Step 3) Kopeerige fail soovitud asukohta

Näide: selles näites võtame ekraanipildi https://demo.guru99.com/V4/ & salvestage see kui C:/Test.png

Siin on ekraanipildi kood seleenis:

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

    }

}

MÄRKUS: Selenium versioon 3.9.0 ja uuemad ei paku Apache Commons IO JAR-i. Saate need lihtsalt alla laadida siin ja helistage neile oma projektis

Mis on Ashot API?

Ashot on kolmanda osapoole utiliit Yandex toetab Selenium WebDriver ekraanipiltide jäädvustamiseks. See teeb ekraanipildi nii üksikust WebElementist kui ka lehe täisleheküljelisest ekraanipildist, mis on olulisem kui ekraani suurus.

Kuidas Ashot API-t alla laadida ja konfigureerida?

Ashot API konfigureerimiseks on kaks meetodit

  1. Maveni kasutamine
  2. Käsitsi ilma tööriista kasutamata

Maveni kaudu konfigureerimiseks:

Seadistage Maveni kaudu

  • Salvestage fail ja Maven lisab purgi teie ehitusteele
  • Ja nüüd olete valmis!!!

Käsitsi konfigureerimiseks ilma sõltuvustööriistadeta

  1. Minna https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  2. Klõpsake praegu uusimal versioonil. See on 1.5.4
  3. Klõpsake purgil, laadige see alla ja salvestage see oma masinasse

Konfigureerige käsitsi ilma sõltuvustööriistadeta

  1. Lisage oma ehitusteele jar-fail:
  2. In Eclipse, paremklõpsake projektil -> minge atribuutide juurde -> Ehitamise tee -> Teegid -> Lisa väliseid purke
  3. Valige jar-fail
  4. Rakenda ja sulge

Jäädvustage kogu lehe ekraanipilt AShot API-ga

Step 1) Looge Ashoti objekt ja helistage meetodile takeScreenshot(), kui soovite lihtsalt ekraanisuuruse lehe ekraanipilti.

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

Kui aga soovite lehe ekraanipilti ekraani suurusest suuremaks, helistage enne reegli seadistamiseks meetodit takeScreenshot() meetod shootingStrategy(). Seejärel kutsuge näiteks meetodit takeScreenshot(), mis edastab veebidraiveri,

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

Siin keritakse aega 1000 millisekundites, nii et ekraanipildi tegemiseks kerib programm iga 1000 msek järel.

Samm 2): Nüüd hankige pilt ekraanipildist ja kirjutage see faili. Saate määrata failitüübi jpg, png jne.

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

Täisleheküljelise ekraanipildi tegemine lehelt, mis on ekraani suurusest suurem.

Näide: Siin on näide täisleheküljelise ekraanipildi jäädvustamiseks https://demo.guru99.com/test/guru99home/ ja salvestage faili "screenshot.jpg".

Tänu Ashot API klassi ShootingStrategy kasutamisele saame jäädvustada ekraani suurusest suurema lehe täispildi.

Siin on seleeniprogrammi ekraanipildi kood:

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

}

Ekraanipildi tegemine lehe konkreetsest elemendist

Näide: Siin on näide elemendi ekraanipildi jäädvustamisest Guru 99 logo peal https://demo.guru99.com/test/guru99home/ lehele ja salvestage faili "ElementScreenshot.jpg".

Siin on ekraanipildi kood seleenis:

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

Kujutise võrdlus AShoti abil

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

KKK

Nad dokumenteerivad tõrkeid ja tõestavad vahelduvaid vigu kiiresti.

Tööriistad nagu Applitools võrdlevad ekraanipilte intelligentselt, ignoreerides dünaamilist sisu.

Jah. Tehisintellekti tööriistad toodavad TakesScreenshot'i, AShot'i ja Selenium 4 katkendit.

Kasutage AShot'i või Selenium 4 Chrome DevToolsi abil Page.captureScreenshot.

TakesScreenshot haarab vaatevälja. AShot ühendab terved lehed.

See jäädvustab renderdatava. Eemalda tundlikud andmed enne jagamist.

Salvesta getScreenshotAs funktsiooni tagastatud fail ise.

Jah. Kasutage otse element.getScreenshotAs(OutputType.FILE).

Võta see postitus kokku järgmiselt: