我有一些自动化 Cucumber selenium 测试,这些测试是在不同的浏览器中使用 JUnit 运行的。
为了使结果更具可读性,我想更改 JUnit XML 输出,以便可以将使用的浏览器附加到 XML 的 name 属性。 我正在尝试使用 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 调试器,我可以看到文档对象中的所有节点。然而,节点列表仅包含 XML 的 CDATA 部分内的文本。
我做错了什么?任何帮助将不胜感激。
最佳答案
您当前的 XPath //testcase[@name]
正在选择所有具有 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());
}
关于java - 使用 xpath 和 Java DOM 解析器返回 junit 结果 xml 中的所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53510005/