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: