"Репортер выход" пуст в отчете тестирования

Я пытаюсь добавить скриншоты при неудачном тестировании отчета. Я запускаю его в соответствии с этим руководством: http://toolsqa.com/selenium-webdriver/testng-reporters-asserts/

Моя функция

public static void onTestFailure(ITestContext tc, ITestResult result, WebDriver driver) {
    Calendar calendar = Calendar.getInstance();
    SimpleDateFormat formater = new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss");
    String methodName = result.getName();
    File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    try {
        String reportDirectory = new File(System.getProperty("user.dir")).getAbsolutePath() + "\\test-output\\" +tc.getSuite().getXmlSuite().getName();
        System.out.printf(reportDirectory);
        File destFile = new File((String) reportDirectory+"\\failure_screenshots\\"+methodName+"_"+formater.format(calendar.getTime())+".png");
        FileUtils.copyFile(scrFile, destFile);
        Reporter.log("<a href='"+ destFile.getAbsolutePath() + "'> <img src='"+ destFile.getAbsolutePath() + "' height='100' width='100'/> </a>");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Проблема в том, что скриншот появляется в нужном месте, но ссылка из Reporter.log никогда не попадает в представление "Reporter output".

Кто-нибудь знает, что мне нужно сделать, чтобы это работало?

Это Java проект с Maven

1 ответ

Вы должны использовать слушателей для этой цели. Создайте новый класс с заданным именем и расширьте TestListenerAdapter. Переопределите метод onTestFailure. Напишите здесь свой код захвата скриншота.

public class ListenersEvents extends TestListenerAdapter  {
    @Override
        public void onTestFailure(ITestResult result) {
            Object currentClass = result.getInstance();
            WebDriver webDriver = ((browserSetup) currentClass).getActiveObject();


            if (!result.isSuccess()) {
                      Reporter.log("Test Result: FAIL",true);
                    takeScreenshotOfFailureFromLocalMachine(result,webDriver);

                } else {
                    Reporter.log("Test Result: PASS",true);
                }
        }


}

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

    public class browserSetup{
       WebDriver driver;

        public WebDriver createFirefoxDriver(){
// set path for geckodriver
         return new FirefoxDriver();
         }
public WebDriver createChromeDriver(){
//set path for chrome driver
         return new ChromeDriver();
         }

        public WebDriver getActiveObject() {
                return this.driver;
            }
    }
Другие вопросы по тегам