首页 > 解决方案 > 如何在 XML 中使用 java 方法的返回值

问题描述

我有一个这样的xml

<step>
                <navigationButtonSelector>.step-one-action-button</navigationButtonSelector>
                <formField>
                    <name>emailAddress</name>
                    <value>new2@gmail.com</value>
                </formField>
</step>

现在我不能在这里硬编码值(new2@gmail.com)。相反,我必须随机生成一个字符串,并在我运行自动化套件时使用它。我可以在运行时在 xml 本身内生成一个随机字符串吗?

另一种可能性是创建一个返回随机字符串的 Java 方法。现在如何在我的 XML 文件中使用该值?请帮忙

标签: javaxmljunitautomation

解决方案


这段代码可能看起来很臃肿,但实际上非常强大,以防您必须执行更多编辑。它显示了从解析、修改和序列化 XML 数据到 String 的整个往返过程。

String xml = "<step>\n" +
    "                <navigationButtonSelector>.step-one-action-button</navigationButtonSelector>\n" +
    "                <formField>\n" +
    "                    <name>emailAddress</name>\n" +
    "                    <value>new2@gmail.com</value>\n" +
    "                </formField>\n" +
    "</step>";

// parse document
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = db.parse(new InputSource(new StringReader(xml)));
    
// find editing locatioin
XPath xpath = XPathFactory.newInstance().newXPath();
Element value = (Element)xpath.evaluate("/step/formField/value", doc, XPathConstants.NODE);
    
// replace value
while (value.hasChildNodes()) {
    value.removeChild(value.getFirstChild());
}
value.appendChild(doc.createTextNode("a random string"));

// serialize document
StringWriter sw = new StringWriter();
Transformer t = TransformerFactory.newDefaultInstance().newTransformer();
t.transform(new DOMSource(doc), new StreamResult(sw));
xml = sw.toString();

System.out.println(xml);

推荐阅读