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.