Как исправить отчет, открывающий приложение после теста, а затем делающий снимок экрана

#java #testng #appium-android #extentreports

#java #testng #appium-Android #extentreports

Вопрос:

Попытка сделать снимок экрана при сбое теста. На самом деле происходит то, что, как только 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. Пожалуйста, добавьте также код для вашего метода setupTests , чтобы мы могли получить больше ясности в проблеме.

2. @SameerArora Я добавил код метода setupTests

Ответ №1:

В @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
}
  

Комментарии:

1. Спасибо за ваш ответ. Как мне объявить drvier глобально?

2. @ TomCockram обновил мой ответ, пожалуйста, проверьте его сейчас

3. Спасибо, я внес эти изменения, но я получаю исключение нулевого указателя. Я устанавливаю драйвер следующим образом public static AppiumDriver<MobileElement> AppiumDriver = null; , что я не считаю правильным. Как я должен это делать?

4. В какой строке вы получаете NPE?

5. Можете ли вы опубликовать весь код вашего класса в вопросе после внесения изменений, которые я предложил? Смог бы тогда помочь вам лучше