Всем привет. Может кто подскажет.
Имею функции типа:
public void checkAllDocScroll() throws IOException {
try {
checkboxSelectAllScroll.click();
help.makeScreenshot();
} catch (Exception e){
help.makeScreenshot();
throw e;
}
}
Повторяется везде блок try catch
, хотел бы вынести это отдельно, не знаю можно ли с помощью аннотаций это сделать:
@ Check
public void checkAllDocScroll() throws IOException {
checkboxSelectAllScroll.click();
help.makeScreenshot();
}
А почему не повесить скриншотер просто в листенер OnError и не париться по поводу AOP?
2 Likes
создал свой листенер
package ru.otr.JPort.util;
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
import java.io.IOException;
import static ru.otr.JPort.util.ScreenShoter.makeScreenshot;
public class OnFailListener implements ITestListener {
@Override
public void onTestStart(ITestResult result) {}
@Override
public void onTestSuccess(ITestResult result) {}
@Override
public void onTestFailure(ITestResult result) {
try {
makeScreenshot("Failure screenshot");
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onTestSkipped(ITestResult result) {}
@Override
public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
try {
makeScreenshot("Failure screenshot");
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onStart(ITestContext context) {}
@Override
public void onFinish(ITestContext context) {}
}
и класс сриншотер
public class ScreenShoter {
private ScreenShoter(){};
@Attachment(value = "{0}", type = "image/png")
public static byte[] makeScreenshot(String name) throws IOException {
return ((TakesScreenshot)WebDriverFactory.getDriver(PropertyLoader.loadCapabilities())).getScreenshotAs(OutputType.BYTES);
}
}
добавляю тестовому классу аннотацию
@Listeners(OnFailListener.class)
Взял отсюда