Возврат всех атрибутов в результате Junit XML с использованием xpath и Java DOM Parser - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть некоторые тесты селена автоматизации огурца, которые выполняются с использованием JUnit в разных браузерах.

Чтобы результаты были более читабельными, я хотел бы изменить вывод JUnit XML, чтобы я мог добавить браузериспользуется для атрибута имени XML.Я пытаюсь вернуть все атрибуты, помеченные как имя, используя XPath.Однако, похоже, возвращает неверную информацию.

Вот пример XML.

<?xml version="1.0" encoding="UTF-8"?>
<testsuite failures="1" name="cucumber.runtime.formatter.JUnitFormatter" skipped="0" tests="2" time="880.985693">
<testcase classname="ONLINE Regression Fibre Journey" name="ONLINE_Regression_Fibre_Naked_Journey_TC03" time="393.786644">
<system-out>
<![CDATA[
Given Im on the Spark Broadband Shop page...................................passed
 And select broadband plan...................................................passed
 And Add to cart accepting default selection.................................passed
 And Setup Tell us about where you live......................................passed
 And Delivery and Account setup..............................................passed
 And verify the confirmation page for Fiber new customer.....................passed
 And close the application...................................................passed
]]>
</system-out>
</testcase>
</testsuite>

Ниже приведен код Java

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
org.w3c.dom.Document document = builder.parse(file);
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression expression = xpath.compile("//testcase[@name]");
NodeList testsuite = (NodeList)expression.evaluate(document, XPathConstants.NODESET);

Использование отладчика inteliJЯ могу видеть все узлы в объекте документа.Однако список узлов содержит только текст в части CDATA XML.

Что я делаю не так?Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 28 ноября 2018

Ваш текущий XPath //testcase[@name] выбирает все элементы тестового набора, которые имеют атрибут имени.

Если вы хотите выбрать все атрибуты имени из элементов тестового набора, то ваш XPath должен быть

//testcase/@name

и затем вы можете перебирать атрибуты имени и использовать getTextContent() для чтения его значения и setTextContent() для изменения значения атрибута.

XPathExpression expression = xpath.compile("//testcase/@name");
NodeList testcaseNames = (NodeList)expression.evaluate(document, XPathConstants.NODESET);
for (int i = 0; i < testcaseNames.getLength(); i++) {
  Node name = testcaseNames.item(i);
  name.setTextContent("browser XYZ " + name.getTextContent());
}
...