Saltar al contenido

¿Selenium puede tomar una captura de pantalla en caso de falla de prueba con JUnit?

Contamos con la solución a esta aprieto, o por lo menos eso pensamos. Si continuas con dudas puedes dejarlo en el apartado de comentarios, para nosotros será un gusto ayudarte

Solución:

Algunas búsquedas rápidas me llevaron a esto:

http://blogs.steeplesoft.com/posts/2012/grabbing-screenshots-of-failed-selenium-tests.html

Básicamente, recomienda crear un JUnit4 Rule que envuelve la prueba Statement en un bloque try/catch en el que llama:

imageFileOutputStream.write(
    ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES));

¿Funciona eso para tu problema?

Si desea agregar rápidamente este comportamiento a TODOS sus pruebas en la ejecución puede utilizar el RunListener interfaz para escuchar fallas en las pruebas.

public class ScreenshotListener extends RunListener 

    private TakesScreenshot screenshotTaker;

    @Override
    public void testFailure(Failure failure) throws Exception 
        File file = screenshotTaker.getScreenshotAs(OutputType.File);
        // do something with your file
    


Agregue el oyente a su corredor de prueba de esta manera …

JUnitCore junit = new JUnitCore();
junit.addListener(new ScreenshotListener((TakesScreenShots) webDriver));

// then run your test...

Result result = junit.run(Request.classes(FullTestSuite.class));

Si desea tomar una captura de pantalla en caso de falla de la prueba, agregue esta clase

import java.io.File;

import java.io.IOException;

import java.util.UUID;

import org.apache.commons.io.FileUtils;

import org.junit.rules.MethodRule;

import org.junit.runners.model.FrameworkMethod;

import org.junit.runners.model.Statement;

import org.openqa.selenium.OutputType;

import org.openqa.selenium.TakesScreenshot;

import org.openqa.selenium.WebDriver;

public class ScreenShotOnFailure implements MethodRule 

    private WebDriver driver;

    public ScreenShotOnFailure(WebDriver driver)
        this.driver = driver;
    

    public Statement apply(final Statement statement, final FrameworkMethod frameworkMethod, final Object o) 
        return new Statement() 
            @Override
            public void evaluate() throws Throwable 
                try 
                    statement.evaluate();
                 catch (Throwable t) 
                    captureScreenShot(frameworkMethod.getName());
                    throw t;
                
            

            public void captureScreenShot(String fileName) throws IOException 
                File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
                fileName += UUID.randomUUID().toString();
                File targetFile = new File("./Screenshots/" + fileName + ".png");
                FileUtils.copyFile(scrFile, targetFile);
            
        ;
    

Y antes de todas las pruebas, debe usar esta regla:

@Rule
public ScreenShotOnFailure failure = new ScreenShotOnFailure(driver));

@Before
public void before() 
   ...

Aquí puedes ver las comentarios y valoraciones de los lectores

Nos puedes avalar nuestra publicación añadiendo un comentario o dejando una puntuación te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *