Сделайте скриншоты при неудачном тестировании - PullRequest
3 голосов
/ 20 марта 2019

Я пытаюсь сделать скриншоты при сбое теста, а затем добавить их в свой отчет. В настоящее время он делает снимок экрана, когда снова открывает приложение, чтобы сделать extent.flush(); в моем afterMethod().

Мой класс скриншотов здесь:

public class CaptureScreenShot {
    private static final DateFormat dateFormat = new SimpleDateFormat("yyy_MM_dd SSS");

        public static String captureScreen(WebDriver driver, String screenName) throws IOException {

        TakesScreenshot screen = (TakesScreenshot) driver;
        File src = screen.getScreenshotAs(OutputType.FILE);

        String dest = System.getProperty("user.dir") + "Test-ScreenShots" + screenName + ".png";

        File target = new File(dest);
        FileUtils.copyFile(src, target);

        return dest;
    }

    public static String generateFileName(ITestResult results) {
        Date date = new Date();
        return results.getName() + "_" + dateFormat.format(date);
    }
}

Класс построения отчета находится здесь:

public class ExtentTestNGReportBuilder {

public static ExtentReports extent;
public static ThreadLocal<ExtentTest> parentTest = new ThreadLocal<>();
public static ThreadLocal<ExtentTest> test = new ThreadLocal<>();

private String fileName = new SimpleDateFormat("yyyy-MM-dd-HH-mm").format(new Date());

@BeforeSuite
public void beforeSuite() {
    extent = ExtentManager.createInstance("MobileCustomerCare " + fileName + ".html");
    ExtentHtmlReporter htmlReporter = new ExtentHtmlReporter("C:\\Users\\tom.cockram\\Documents");
    extent.attachReporter(htmlReporter);
}

@BeforeClass
public synchronized void beforeClass() {
    ExtentTest parent = extent.createTest(getClass().getName());
    parentTest.set(parent);
}

@BeforeMethod
public synchronized void beforeMethod(Method method) {
    ExtentTest child = parentTest.get().createNode(method.getName());
    test.set(child);
}

@AfterMethod
public synchronized void afterMethod(ITestResult result) throws IOException {
    AppiumDriver<MobileElement> driver = MetricellTest.setupTests();
    String screenShot = CaptureScreenShot.captureScreen(driver, CaptureScreenShot.generateFileName(result));

    if (result.getStatus() == ITestResult.FAILURE) {
        test.get().log(Status.FAIL, result.getName());
        test.get().log(Status.FAIL, result.getThrowable());
        test.get().fail("Screen Shot : " + test.get().addScreenCaptureFromPath(screenShot));
        test.get().fail(result.getThrowable());
    } else if (result.getStatus() == ITestResult.SKIP) {
        test.get().skip(result.getThrowable());


    } else
        test.get().pass("Test passed");

    extent.flush();
}
...