Screenshot com Selenium – Parte 2, TestNG

Há um tempo atrás escrevi um post demonstrando como dar print screen com Junit, Maven e Selenium se houvesse algum erro no teste.
Recentemente, um dos leitores do blog me perguntou se era possível fazer o mesmo só que usando o TestNG.
Como eu não uso muito o TestNG, eu não sabia se isso era possível, e fui atrás da documentação do TestNG e a do plugin Surefire do maven.

Para fazer isso, você terá que extender a classe TestListenerAdapter e implementar o método onTestFailure que será invocado após qualquer exceção disparada.

Deve ficar mais ou menos assim:

import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
import com.thoughtworks.selenium.DefaultSelenium;
 
public class ScreenshotListener extends TestListenerAdapter
{
 
    public void onTestFailure(ITestResult result)
    {        
        try {
 
            AbstractTestCase testCase = (AbstractTestCase) result.getTestClass().getInstances(false)[0];
 
            DefaultSelenium selenium = testCase.getSelenium();
            if (selenium != null) {
                String fileName = System.getProperty(
                        "screenshots.dir", "/tmp")
                        + "/" + result.getTestClass().getName() + "-" + result.getName() + ".png";
                System.out.println("Capturando erro em: " + fileName);
                selenium.captureEntirePageScreenshot(fileName, "background=#FFFFFF");
            }
 
        } catch (Exception e2) {
            System.err
                    .println("Não foi possível capturar o screenshot");
        }
    }
}

Outro passo necessário é configurar o plugin surefire e informar o listener a ser usado:

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-surefire-plugin</artifactId>
	<configuration>
		<properties>
			<property>
				<name>listener</name>
				<value>br.com.seuenium.ScreenshotListener</value>
			</property>
		</properties>
	</configuration>
</plugin>

Pronto.

Que tal integrar esse código com o exemplo de paralelização em testes do Selenium com TestNG descritos nesse post?

Como eu sou bonzinho, já deixei isso pronto. Pode baixar o exemplo AQUI e depois rode o comando mvn clean install.

Até a próxima.

Tags: , ,

  • Renato

    Seu Enium,
    Primeiramente muito obrigado pela resposta! Ótimo Post.

    Porém, estou tentando executar aqui o projeto pronto que disponibilizou e esta dando um timeout no segundo passo, após abrir a página não esta preenchendo o campo de busca.
    Depois retorna o seguinte erro:

    ——————————————————-
    T E S T S
    ——————————————————-
    Running TestSuite
    Capturando erro em: /tmp/br.com.seuenium.TesteBuscaComErro-testErro.png
    NÒo foi possÝvel capturar o screenshot
    Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 35.157 sec <<< F
    AILURE!

    Results :

    Failed tests:
    testErro(br.com.seuenium.TesteBuscaComErro)
    ———————————————————–

    Sabe oque pode estar ocorrendo?
    Desde já agradeço.

  • Renato

    Seu Enium,
    Primeiramente muito obrigado pela resposta! Ótimo Post.

    Porém, estou tentando executar aqui o projeto pronto que disponibilizou e esta dando um timeout no segundo passo, após abrir a página não esta preenchendo o campo de busca.
    Depois retorna o seguinte erro:

    ——————————————————-
    T E S T S
    ——————————————————-
    Running TestSuite
    Capturando erro em: /tmp/br.com.seuenium.TesteBuscaComErro-testErro.png
    NÒo foi possÝvel capturar o screenshot
    Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 35.157 sec <<< F
    AILURE!

    Results :

    Failed tests:
    testErro(br.com.seuenium.TesteBuscaComErro)
    ———————————————————–

    Sabe oque pode estar ocorrendo?
    Desde já agradeço.

  • http://www.seuenium.com.br Enium

    Estranho. Mesmo se o problema fosse o timeout, o printscreen deveria ter sido gerado. Você está rodando no windows? O problema pode ser o path. No log mostra que a imagem vai ser salva em /tmp/br.com.seuenium.TesteBuscaComErro-testErro.png mas no windows esse path não existe. Tenta alterar esse diretório na classe ScreenshotListener.

  • http://www.seuenium.com.br Enium

    Estranho. Mesmo se o problema fosse o timeout, o printscreen deveria ter sido gerado. Você está rodando no windows? O problema pode ser o path. No log mostra que a imagem vai ser salva em /tmp/br.com.seuenium.TesteBuscaComErro-testErro.png mas no windows esse path não existe. Tenta alterar esse diretório na classe ScreenshotListener.

  • http://twitter.com/Lucas_Farias_ Lucas Farias

    Funciona para o chrome tb???
    aqui apresentou um erro

blog comments powered by Disqus