Captura de pantalla en Selenium Webdriver
Se utiliza una captura de pantalla en Selenium Webdriver para el análisis de errores. Selenium webdriver puede tomar capturas de pantalla automáticamente durante la ejecución. Pero si los usuarios necesitan capturar una captura de pantalla por su cuenta, deben usar el método TakeScreenshot que notifica al WebDrive que tome la captura de pantalla y la almacene en Selenium.
En este tutorial, aprenderá,
- Captura de pantalla usando Selenium WebDriver
- ¿Qué es Ashot API?
- ¿Cómo descargar y configurar la API de Ashot?
- Capture una captura de pantalla de página completa con AShot API
- Tomar una captura de pantalla de un elemento particular de la página
- Comparación de imágenes usando AShot
Captura de pantalla usando Selenium WebDriver
Tomar una captura de pantalla en Selenium es un proceso de 3 pasos
Paso 1) Convierta el objeto del controlador web en TakeScreenshot
TakesScreenshot scrShot = ((TakesScreenshot) controlador web);
Paso 2) Llame al método getScreenshotAs para crear un archivo de imagen
Archivo SrcFile = scrShot.getScreenshotAs (OutputType.FILE);
Paso 3) Copie el archivo en la ubicación deseada
Ejemplo: En este ejemplo, tomaremos una captura de pantalla de http://demo.guru99.com/V4/ y la guardaremos como C: /Test.png.webp
package Guru99TakeScreenshot;import java.io.File;import org.apache.commons.io.FileUtils;import org.openqa.selenium.OutputType;import org.openqa.selenium.TakesScreenshot;importar org.openqa.selenium.WebDriver;importar org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class Guru99TakeScreenshot {@Pruebapublic void testGuru99TakeScreenShot () lanza Exception {Controlador WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");controlador = nuevo FirefoxDriver ();// ir a URLdriver.get ("http://demo.guru99.com/V4/");// Llamar a la función de captura de pantallathis.takeSnapShot (controlador, "c: //test.png.webp");}/ *** Esta función tomará una captura de pantalla* @param webdriver* @param fileWithPath* @throws Exception* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) lanza Exception {// Convertir el objeto del controlador web en TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) controlador web);// Llamar al método getScreenshotAs para crear un archivo de imagenArchivo SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Mover el archivo de imagen a un nuevo destinoArchivo DestFile = nuevo archivo (fileWithPath);// Copiar archivo en destinoFileUtils.copyFile (SrcFile, DestFile);}}
NOTA: Selenium versión 3.9.0 y superior no proporciona Apache Commons IO JAR. Simplemente puede descargarlos aquí y llamarlos en su proyecto
¿Qué es Ashot API?
Ashot es una utilidad de terceros de Yandex compatible con 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 significativa que el tamaño de la pantalla.
¿Cómo descargar y configurar la API de Ashot?
Hay dos métodos para configurar la API de Ashot
- 1 usando Maven
- 2.Manualmente sin usar ninguna herramienta
Para configurar a través de Maven:
- Vaya a https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Haga clic en la última versión, por ahora. Es 1.5.4
- Copie el código de dependencia y agréguelo a su archivo pom.xml
- 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
- Vaya a https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Haga clic en la última versión, por ahora. Es 1.5.4
- Haga clic en el frasco, descárguelo y guárdelo en su máquina
- Agregue el archivo jar en su ruta de construcción:
- En Eclipse, haga clic derecho en el proyecto -> vaya a propiedades -> Ruta de compilación -> Bibliotecas -> Agregar frascos externos
- Seleccione el archivo jar
- 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 para la página de tamaño de pantalla.
Captura de pantalla captura de pantalla = nueva Ashot (). TakeScreenshot (controlador);
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,
Captura de pantalla de captura de pantalla = nueva AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (controlador);
Aquí 1000 es el tiempo de desplazamiento en milisegundos, por lo que para tomar una captura de pantalla, el programa se desplazará por cada 1000 mseg.
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.webp, png, etc.
ImageIO.write (screenshot.getImage (), "jpg.webp", archivo nuevo (". \\ screenshot \\ fullimage.jpg.webp"));
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 captura de una captura de pantalla de página completa de http://demo.guru99.com/test/guru99home/ y guardarla en el archivo "screenshot.jpg.webp".
Debido al uso de la clase ShootingStrategy de la API Ashot, podremos capturar una imagen completa de una página más grande que el tamaño de la pantalla. Aquí está el programa:
paquete Guru99;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import org.openqa.selenium.By;import org.openqa.selenium.WebElement;importar org.openqa.selenium.WebDriver;importar org.openqa.selenium.chrome.ChromeDriver;importar ru.yandex.qatools.ashot.AShot;importar ru.yandex.qatools.ashot.Screenshot;import ru.yandex.qatools.ashot.shooting.ShootingStrategies;clase pública TestScreenshotUsingAshot {public static void main (String [] args) lanza IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Controlador WebDriver = nuevo ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximizar ();Captura de pantalla = nueva AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (controlador);ImageIO.write (screenshot.getImage (), "jpg.webp", archivo nuevo ("c: \\ ElementScreenshot.jpg.webp"));}}
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 la página http://demo.guru99.com/test/guru99home/ y guardarlo en el archivo "ElementScreenshot.jpg.webp". Aquí está el código:
paquete Guru99;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import org.openqa.selenium.By;import org.openqa.selenium.WebElement;importar org.openqa.selenium.WebDriver;importar org.openqa.selenium.chrome.ChromeDriver;importar ru.yandex.qatools.ashot.AShot;importar ru.yandex.qatools.ashot.Screenshot;import ru.yandex.qatools.ashot.shooting.ShootingStrategies;clase pública TestElementScreenshotUsingAshot {public static void main (String [] args) lanza IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Controlador WebDriver = nuevo ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximizar ();// Encuentra el elemento para tomar una captura de pantallaElemento WebElement = driver.findElement (By.xpath ("// * [@ id = \" nombre-sitio \ "] / a [1] / img"));// Junto con el elemento de paso del controlador también en el método takeScreenshot ().Captura de pantalla = nueva AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (controlador, elemento);ImageIO.write (screenshot.getImage (), "jpg.webp", archivo nuevo ("c: \\ ElementScreenshot.jpg.webp"));}}
Comparación de imágenes usando AShot
paquete Guru99;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import org.openqa.selenium.By;importar org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;importar org.openqa.selenium.chrome.ChromeDriver;importar ru.yandex.qatools.ashot.AShot;importar ru.yandex.qatools.ashot.Screenshot;import ru.yandex.qatools.ashot.comparison.ImageDiff;import ru.yandex.qatools.ashot.comparison.ImageDiffer;testImageComaprison de clase pública {public static void main (String [] args) lanza IOException {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");Controlador WebDriver = nuevo ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");// Encuentra el elemento y toma una captura de pantallaWebElement logoElement = driver.findElement (By.xpath ("// * [@ id = \" nombre-sitio \ "] / a [1] / img"));Captura de pantalla logoElementScreenshot = new AShot (). TakeScreenshot (controlador, logoElemnent);// lee la imagen para compararImagenBufferradaImagenErada = ImageIO.read (nuevo Archivo ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementScreenshot.getImage ();// Crea el objeto ImageDiffer y llama al método makeDiff ()ImageDiffer imgDiff = new ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (imagen actual, imagen esperada);if (diff.hasDiff () == true) {System.out.println ("Las imágenes son iguales");} demás {System.out.println ("Las imágenes son diferentes");}driver.quit ();}}
Resumen
- Ashot API es un programa gratuito de Yandex.
- Es una utilidad para realizar capturas 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 Emulator Browser.
- Puede tomar una captura de pantalla de una página más grande que el tamaño de la pantalla.
- Esta característica 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.
Hecho posible gracias a las contribuciones de Shradhdha Dave