import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
import static <some_package>.Utils.makeScreenshot;
public class AllureOnFailListener implements ITestListener {
@Override
public void onTestStart(ITestResult result) {}
@Override
public void onTestSuccess(ITestResult result) {}
@Override
public void onTestFailure(ITestResult result) {
makeScreenshot("Failure screenshot");
}
@Override
public void onTestSkipped(ITestResult result) {}
@Override
public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
makeScreenshot("Failure screenshot");
}
@Override
public void onStart(ITestContext context) {}
@Override
public void onFinish(ITestContext context) {}
}
Где makeScreenshot(String) статик метод из Utils.
import org.openqa.selenium.OutputType;
import ru.yandex.qatools.allure.annotations.Attachment;
public final class Utils {
private Utils() {}
@Attachment(value = "{0}", type = "image/png")
public static byte[] makeScreenshot(String name) {
return (TakesScreenshot) <Thread local instance of the WebDriver>.getScreenshotAs(OutputType.BYTES);
}
}
Дальше вешаю этот листенер в pom - surefire plugin, либо аннотирую тестовый класс @Listeners(AllureOnFailListener.class)
Еще больше Вы удивитесь, когда познаете, что можно прикрепить html страничку в виде аттача, а на ней можно сделать вообще что угодно(мы тут очень много разных форм делаем, от линковки тестов с багами до редактирования тестовых сценариев)
И все таки, коллеги. Если снимать скриншоты расставляя вызов метода
@Attachment(value = "PNG Attachment", type = "image/png")
public byte[] createAttachment() {
return captureScreenShot();
}
Можно ли как то в allure присвоить ему уникальное имя - например Searh, Change и прочее - что бы в отчете - видеть к какой именно операции относится скриншот. При том, что тестовый метод всегда называется одинаково - используется DataProvider.
Указанный эксепшен совсем не связан со скриншотами. Заводите новою тему с описанием проблемы.
П.С. Текущую тему закрываю, т.к. ответы были даны на любой вкус и цвет.