Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

[Solved] Проблема с выводом информации в отчет при использовании TestNG + ReportNG (всегда активна функция escapeHtml)


(qaleader) #1

Всем привет, подскажите пожалуйста в чем может быть проблема: при использовании ReportNG и его метода Reporter.log() в отчет выводится искаженная строчка, которая принудительно обрабатывается (по всей видимости) функцией escapeHtml().  Суть проблемы - хочу в лог вывести теги html и спец-символы, но в лог выводится совсем другое. Метод setEscapeHtml(false) - не помог.

Метод, который выводит информацию:

 @AfterMethod(alwaysRun = true)
    public static void takeScreenshot(ITestResult result) {

        if (! result.isSuccess())
        {
            File screenshot1 = new File("src/test/java/Screenshots/" +result.getMethod().getMethodName() + ".png");
            screenshot1.delete();
            File screenshotTempFile = ((TakesScreenshot) SetupAndTeardown.driver).getScreenshotAs(OutputType.FILE);
            try { Files.copy(screenshotTempFile, screenshot1); }
            catch(Exception e) {System.out.println(e);}
            // Reporter.log("<a href=\"" + screenshot1.getName() + "\">" + result.getMethod().getMethodName() + "Screenshot</a>");
            Reporter.setEscapeHtml(false);
            Reporter.log("<a>");
        }
    }

 

В результате получаю:

<body>
  <h1>Log Output</h1>
  <p>
    Combined output from all calls to the log methods of the <a href="http://testng.org/javadocs/org/testng/Reporter.html">TestNG Reporter</a>.    
  </p>
  <div id="log">
                  &lt;a&gt;<br />
                        &lt;a&gt;<br />
            </div>
</body>

 

А ожидаю получить:

<body>
  <h1>Log Output</h1>
  <p>
    Combined output from all calls to the log methods of the <a href="http://testng.org/javadocs/org/testng/Reporter.html">TestNG Reporter</a>.    
  </p>
  <div id="log">
                  <a>
            </div>
</body>

 

Уточнение: Хочу запустить тесты в TestNG, без Maven, и если для JVM, через командную строку передать параметр -Dorg.uncommons.reportng.escape-output=false - то все хорошо и правильно вставляется, но как это сделать настройками TestNG ?  Другими словами можно ли эту команду впихнуть в конфиг testng.xml если да, то как?

 


(Kostya Hospodarysko) #2

Привет.

1. Reporter.log() относиться к TestNG и не являеться частью ReportNG.

2. Reporter.setEscapeHtml(false) не помог, по всей видимости, потому что он тоже часть TestNG и скорее всего 
влияет только та html-ный репорт TestNG, не ReportNG (он имеет свой репортер).
В результате исполнения тестов создаеться XML-ный репорт, то есть просто результаты. TestNG репорт и ReportNG репорт
обрабатывают и делают репорт (вид, стиль и т.д.) по разному.

3. Одним из решений может быть строка в AfterMethod или в другом месте, главное до того как репортер начнет работать
(а он начнет работать после того, как все тесты завершаться):

System.setProperty("org.uncommons.reportng.escape-output", "false");

(qaleader) #3

Большое вам спасибо, действитльно

System.setProperty("org.uncommons.reportng.escape-output", "false");

является отличным решением проблемы.


(Pnevmoslon) #4

Можно ещё в поме. В конфигурации maven-surefire-plugin, например. Или в failsafe'e

 

                    <configuration>                    
                       <systemPropertyVariables>
                         <org.uncommons.reportng.escape-output>false</org.uncommons.reportng.escape-output>
                       </systemPropertyVariables>
                    </configuration>

 


(Funker) #5

Мне также через maven (POM.XML) больше нраивится выставлять системные переменные