Jak pořídit snímek obrazovky Selenium webový ovladač

Snímek obrazovky v Selenium

A Snímek obrazovky v Selenium Webdriver se používá pro analýzu chyb. Selenium webdriver může během provádění automaticky pořizovat snímky obrazovky. Pokud však uživatelé potřebují pořídit snímek obrazovky sami, musí použít metodu TakeScreenshot, která upozorní WebDrive, aby snímek pořídil a uložil do Selenium.

Screenshot In Selenium

Jak pořídit snímek obrazovky Selenium

Zde je krok za krokem postup, jak zachytit snímek obrazovky v selenovém WebDriver

Krok 1) Převeďte objekt webového ovladače na TakeScreenshot

TakesScreenshot scrShot =((TakesScreenshot)webdriver);

Krok 2) Zavolejte metodu getScreenshotAs pro vytvoření souboru obrázku

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

Krok 3) Zkopírujte soubor do požadovaného umístění

Příklad: V tomto příkladu pořídíme snímek obrazovky https://demo.guru99.com/V4/ a uložte jej jako C:/Test.png

Zde je kód snímku obrazovky v selenu:

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

    }

}

POZNÁMKA: Selenium verze 3.9.0 a vyšší neposkytuje Apache Commons IO JAR. Můžete si je jednoduše stáhnout zde a zavolejte je ve svém projektu

Co je Ashot API?

Ashot je nástroj třetí strany od Yandex podporováno Selenium WebDriver k zachycení snímků obrazovky. Pořídí snímek obrazovky jednotlivého WebElementu i celostránkový snímek stránky, což je důležitější než velikost obrazovky.

Jak stáhnout a nakonfigurovat Ashot API?

Existují dva způsoby konfigurace Ashot API

  1. Pomocí Maven
  2. Ručně bez použití jakéhokoli nástroje

Konfigurace přes Maven:

Konfigurace přes Maven

  • Uložte soubor a Maven přidá jar do vaší cesty sestavení
  • A teď jste připraveni!!!

Chcete-li nakonfigurovat ručně bez jakéhokoli nástroje závislosti

  1. Přejít https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  2. Klikněte zatím na nejnovější verzi. Je 1.5.4
  3. Klikněte na nádobu, stáhněte si ji a uložte do svého počítače

Nakonfigurujte ručně bez jakéhokoli nástroje závislostí

  1. Přidejte soubor jar do cesty k sestavení:
  2. In Eclipse, klikněte pravým tlačítkem na projekt -> přejděte na vlastnosti -> Cesta k sestavení -> Knihovny -> Přidat externí nádoby
  3. Vyberte soubor jar
  4. Použít a zavřít

Zachyťte snímek celé stránky pomocí AShot API

Krok 1) Pokud chcete snímek obrazovky pro stránku velikosti obrazovky, vytvořte objekt Ashot a zavolejte metodu takeScreenshot().

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

Pokud však chcete snímek obrazovky stránky větší, než je velikost obrazovky, zavolejte metodu shootingStrategy() před voláním metody takeScreenshot() k nastavení zásady. Poté zavolejte metodu takeScreenshot() předáním webového ovladače, např.

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

Zde je 1000 rolovací čas v milisekundách, takže pro pořízení snímku obrazovky se program bude rolovat každých 1000 ms.

Krok 2): Nyní získejte obrázek ze snímku obrazovky a zapište jej do souboru. Můžete zadat typ souboru jako jpg, png atd.

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

Pořízení celostránkového snímku stránky, která je větší než velikost obrazovky.

Příklad: Zde je příklad pořízení celostránkového snímku obrazovky https://demo.guru99.com/test/guru99home/ a uložte do souboru „screenshot.jpg“.

Díky použití třídy ShootingStrategy Ashot API budeme schopni zachytit celý obrázek stránky větší než je velikost obrazovky.

Zde je kód snímku obrazovky v programu 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 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"));
	
	}

}

Pořízení snímku obrazovky konkrétního prvku stránky

Příklad: Zde je příklad zachycení snímku obrazovky loga Guru 99 https://demo.guru99.com/test/guru99home/ stránku a uložte do souboru „ElementScreenshot.jpg“.

Zde je kód snímku obrazovky v selenu:

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

Porovnání snímků pomocí 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();
    }
}

Shrnutí

  • Ashot API je freeware od Yandex.
  • Je to nástroj pro pořízení snímku obrazovky Selenium.
  • Pomůže vám pořídit snímek obrazovky jednotlivého WebElementu na různých platformách, jako jsou stolní prohlížeče, iOS Simulator Mobile Safari, Android Prohlížeč emulátoru.
  • Může pořídit snímek obrazovky stránky větší než velikost obrazovky.
  • Tato funkce byla odstraněna ve verzi selenu 3, takže Ashot API je dobrá volba.
  • Může zdobit snímky obrazovky.
  • Poskytuje srovnání snímků obrazovky.