Как исправить приложение, открывающее отчет после теста, а затем снимать скриншот - PullRequest
0 голосов
/ 25 марта 2019

Попытка сделать скриншот, когда тест не пройден.На самом деле, когда intellij добирается до моего @AfterMethod, он снова запускает приложение и делает скриншот главного экрана.

Я попытался поместить экстент.flush ();в @AfterMethod и замену текущего @AfterMethod на @ AfterTest

    @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("Test Case : " + result.getName() + " has been skipped");
            test.get().skip(result.getThrowable());


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

        extent.flush();
    }

}

Я ожидаю, что он будет делать снимки экрана по мере прохождения и проверки не пройдены.В настоящее время он просто открывает приложение в конце теста и делает снимок экрана домашнего экрана.

1 Ответ

1 голос
/ 25 марта 2019

В @AfterMethod вы снова инициализируете driver и вызываете метод setupTests, а ваш метод setupTests выполняет инициализацию приложения, из-за чего приложение снова открывается.

Итак, вам нужно внести следующие изменения в ваш код, и тогда он будет работать нормально:

  1. Объявите AppiumDriver<MobileElement> driver глобально вместо объявления его в setupTests метод, так что его можно использовать по всему классу.

  2. Удалите строку кода AppiumDriver<MobileElement> driver = MetricellTest.setupTests(); из вашего @AfterMethod, потому что он инициализирует driver и приложениеснова.

Обновлен ответ и добавлено дополнительное объяснение:
Вы можете объявить driver глобально как:
Итак, допустим, ваше имя классаtestClass, вы должны объявить driver сразу после запуска кода для класса, как:

public class testClass{
    AppiumDriver<MobileElement> driver;

    // Add Rest of the code here
}
...