package com.codeborne.selenide.testng;
import com.codeborne.selenide.Screenshots;
import com.codeborne.selenide.ex.UIAssertionError;
import org.testng.ITestResult;
import org.testng.reporters.ExitCodeListener;
import java.util.logging.Logger;
import static com.codeborne.selenide.ex.ErrorMessages.screenshot;
/**
* Annotate your test class with <code>@Listeners({ ScreenShooter.class})</code>
*/
public class ScreenShooter extends ExitCodeListener {
private final Logger log = Logger.getLogger(getClass().getName());
public static boolean captureSuccessfulTests;
@Override
public void onTestStart(ITestResult result) {
super.onTestStart(result);
String className = result.getMethod().getTestClass().getName();
String methodName = result.getMethod().getMethodName();
Screenshots.startContext(className, methodName);
}
@Override
public void onTestFailure(ITestResult result) {
super.onTestFailure(result);
if (!(result.getThrowable() instanceof UIAssertionError)) {
log.info(screenshot());
}
Screenshots.finishContext();
}
@Override
public void onTestSuccess(ITestResult result) {
super.onTestSuccess(result);
if (captureSuccessfulTests) {
log.info(screenshot());
}
Screenshots.finishContext();
}
}