Cómo tomar una captura de pantalla Selenium Controlador web

Captura de pantalla en Selenium

A Captura de pantalla en Selenium controlador web se utiliza para el análisis de errores. Selenium webdriver puede tomar capturas de pantalla automáticamente durante la ejecución. Pero si los usuarios necesitan tomar una captura de pantalla por su cuenta, deben usar el método TakeScreenshot, que notifica a WebDrive que tome la captura de pantalla y la almacene en Selenium.

Captura de pantalla en Selenium

Cómo tomar una captura de pantalla Selenium

Aquí se muestra un proceso paso a paso sobre cómo capturar una captura de pantalla en Selenium WebDriver

Paso 1) Convertir el objeto del controlador web a TakeScreenshot

TakesScreenshot scrShot =((TakesScreenshot)webdriver);

Paso 2) Llame al método getScreenshotAs para crear un archivo de imagen

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

Paso 3) Copie el archivo a la ubicación deseada

Ejemplo: En este ejemplo tomaremos una captura de pantalla de https://demo.guru99.com/V4/ y guárdelo como C:/Test.png

Aquí está el código de captura de pantalla en selenio:

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

    }

}

NOTA: Selenium La versión 3.9.0 y superiores no proporciona Apache Commons IO JAR. Simplemente puedes descargarlos. aquí y llámalos en tu proyecto

¿Qué es la API de Ashot?

Ashot es una utilidad de terceros de Yandex CON EL APOYO DE Selenium WebDriver para capturar las capturas de pantalla. Toma una captura de pantalla de un WebElement individual, así como una captura de pantalla de página completa de una página, que es más importante que el tamaño de la pantalla.

¿Cómo descargar y configurar Ashot API?

Hay dos métodos para configurar la API de Ashot

  1. Usando Maven
  2. Manualmente sin utilizar ninguna herramienta

Para configurar a través de Maven:

Configurar a través de Maven

  • Guarde el archivo y Maven agregará el jar a su ruta de compilación.
  • ¡¡¡Y ahora estás listo!!!

Para configurar manualmente sin ninguna herramienta de dependencia

  1. Vaya al https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  2. Haga clic en la última versión, por ahora. es 1.5.4
  3. Haga clic en el frasco, descárguelo y guárdelo en su máquina.

Configurar manualmente sin ninguna herramienta de dependencia

  1. Agregue el archivo jar en su ruta de compilación:
  2. In Eclipse, haga clic derecho en el proyecto -> vaya a propiedades -> Ruta de compilación -> Bibliotecas -> Agregar archivos jar externos
  3. Seleccione el archivo jar
  4. Aplicar y cerrar

Capture una captura de pantalla de página completa con Ashot API

Paso 1) Cree un objeto Ashot y llame al método takeScreenshot() si solo desea la captura de pantalla de la página de tamaño de pantalla.

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

Pero si desea una captura de pantalla de la página más grande que el tamaño de la pantalla, llame al método shootingStrategy() antes de llamar al método takeScreenshot() para configurar la política. Luego llame a un método takeScreenshot() pasando el controlador web, por ejemplo,

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

Aquí 1000 es el tiempo de desplazamiento en milisegundos, por lo que para tomar una captura de pantalla, el programa se desplazará cada 1000 ms.

Paso 2): Ahora, obtenga la imagen de la captura de pantalla y escríbala en el archivo. Puede proporcionar el tipo de archivo como jpg, png, etc.

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

Tomar una captura de pantalla de página completa de una página que es más grande que el tamaño de la pantalla.

Ejemplo: Este es el ejemplo de cómo capturar una captura de pantalla de página completa de https://demo.guru99.com/test/guru99home/ y guárdelo en el archivo "captura de pantalla.jpg".

Debido al uso de la clase ShootingStrategy de Ashot API, podremos capturar una imagen completa de una página más grande que el tamaño de la pantalla.

Aquí está el código de captura de pantalla en el programa Selenium:

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

}

Tomar una captura de pantalla de un elemento particular de la página.

Ejemplo: Aquí está el ejemplo de captura de pantalla del elemento del logotipo de Guru 99 en https://demo.guru99.com/test/guru99home/ página y guárdela en el archivo “ElementScreenshot.jpg”.

Aquí está el código de captura de pantalla en selenio:

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

Comparación de imágenes usando 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();
    }
}

Resumen

  • Ashot API es un software gratuito de Yandex.
  • Es una utilidad para tomar una captura de pantalla en Selenium.
  • Le ayuda a tomar una captura de pantalla de un WebElement individual en diferentes plataformas, como navegadores de escritorio, iOS Simulator Mobile Safari, Android Navegador emulador.
  • Puede tomar una captura de pantalla de una página más grande que el tamaño de la pantalla.
  • Esta función se ha eliminado en la versión 3 de Selenium, por lo que Ashot API es una buena opción.
  • Puede decorar las capturas de pantalla.
  • Proporciona una comparación de capturas de pantalla.