«Вывод репортера» пуст в отчете testng

Я пытаюсь добавить скриншоты в отчет о сбое тестирования. Я запускаю его в соответствии с этим руководством: 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».

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

Это Java-проект с maven


person Pawel    schedule 21.11.2017    source источник
comment
где вызывается этот метод: после аннотированного метода @Test или в любом аннотированном методе @afterTest?   -  person Manmohan_singh    schedule 22.11.2017
comment
Это в аннотированном методе @AfterMethod, у меня есть if(result.FAILURE == result.getStatus()), а затем вызывает скриншот и ссылку на регистрацию   -  person Pawel    schedule 22.11.2017
comment
Журналы Reporter.log работают только внутри аннотированных методов @_Test. Чтобы добавить пользовательские журналы в отчет, вам необходимо реализовать прослушиватели. Ознакомьтесь с фрагментами кода ниже.   -  person Manmohan_singh    schedule 22.11.2017


Ответы (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;
            }
    }
person Manmohan_singh    schedule 22.11.2017