package com.softwaremill.common.test.web.selenium.screenshots;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
import com.softwaremill.common.test.web.selenium.AbstractSeleniumTest;
import java.util.HashSet;
import java.util.Set;
/**
* User: szimano
*/
public class FailureTestListener extends TestListenerAdapter {
private static final Logger log = LoggerFactory.getLogger(FailureTestListener.class);
public static final Set<ITestResult> failedResults = new HashSet<ITestResult>();
@Override
public void onTestFailure(ITestResult tr) {
super.onTestFailure(tr);
// capture screenshot
try {
if (shouldMakeScreenShot(tr)) {
AbstractSeleniumTest.captureScreenshot(tr.getName());
AbstractSeleniumTest.captureHtmlSource(tr.getName());
}
} catch (Exception e) {
log.error("Couldn't capture screenshot", e);
}
}
/**
* make screenshot only for Selenium test and if the result wasn't handled yet (to avoid duplicates)
*/
private boolean shouldMakeScreenShot(ITestResult tr) {
return AbstractSeleniumTest.class.isAssignableFrom(tr.getTestClass().getRealClass()) && failedResults.add(tr);
}
}