Каждый класс имеет 3 или более методов тестирования.
Каждый метод тестирования может пройти или потерпеть неудачу.
Ноль, один или несколько методов могут завершиться неудачей.
Требованиечтобы просмотреть результаты тестового метода, и когда найден сбойный метод (первое совпадение), получите значение атрибута 'message' и распечатайте его.
Если ни один из методов не удался, то выведите пустое значение.
Как мне этого добиться?
Input.xml
<testng-results>
<suite>
<test>
<class name="activities.ActivitiesListTest">
<test-method status="PASS" started-at="2019-02-07T18:24:47Z" name="initTest">
<reporter-output>
</reporter-output>
</test-method>
<test-method status="FAIL" started-at="2019-02-07T18:24:47Z" name="ActListsForContactShowsContactRelatedTasksTest">
<exception class="org.openqa.selenium.NoSuchElementException">
<message>
<![CDATA[Element with locator 123 not present']]>
</message>
</exception>
<reporter-output>
</reporter-output>
</test-method>
<test-method status="FAIL" started-at="2019-02-07T18:24:47Z" name="afterClass">
<exception class="org.openqa.selenium.NoSuchElementException">
<message>
<![CDATA[Message 3]]>
</message>
</exception>
<reporter-output>
</reporter-output>
</test-method>
</class>
</test>
</suite>
</testng-results>
Ожидаемый результат:
<Suite>
<test failed_reason=" <![CDATA[Element with locator 123 not
present']]>"/>
</Suite>
Пробный (XSL):
<Suite>
<xsl:for-each select="/class">
<test>
<xsl:attribute name="failed_reason">
<xsl:choose>
<xsl:when test="*[@status='FAIL']">test-method[position() = current()]/exception/@message</xsl:when>
</xsl:choose>
</xsl:attribute>
</test>
</xsl:for-each>
</Suite>
Образец абсолютныйсообщение об исключительной ситуации:
suite/test/class[@name='ActivitiesListForContactShowsContactRelatedTasksTest']/test-method[@name='ActListsTest']/exception/message
Но не сработало.
Как достичь ожидаемого результата?
РЕДАКТИРОВАТЬ: пробовать решение Майкла.
Вот так выглядит мой XSL:
<xsl:template match="/">
<Suite>
<xsl:for-each select="testng-results/suite/test/class">
<test>
<xsl:attribute name="start-time">
<xsl:value-of select="test-method[1]/@started-at"/>
</xsl:attribute>
<xsl:attribute name="failed_reason">
{normalize-space(test-method[@status='FAIL'][1]/exception/message)}
</xsl:attribute>
</test>
</xsl:for-each>
</Suite>
</xsl:template>