【问题标题】:How to use the return value of a java method in an XML如何在 XML 中使用 java 方法的返回值
【发布时间】:2021-09-04 09:31:52
【问题描述】:

我有一个这样的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 文件中使用该值?请帮忙

【问题讨论】:

  • 生成字符串,然后生成XML文件。似乎没有理由在生成字符串之前需要存在 XML 文件。或者如果文件很复杂,使用一些易于识别的语法(“%%%ADDRESS GOES HERE%%%”)编写一个占位符值,然后编写一个方法来替换占位符。
  • 您的 Java 代码如何读取和处理 XML?
  • 如果您只有一个变量,您可以免于解析而只执行转换。虽然在其他情况下没有那么强大,但它可能会提高代码可读性和运行时性能。在这种情况下,您需要创建一个合适的样式表 (XSL-T) 并使用设置为随机字符串的变量运行转换器。

标签: java xml junit automation


【解决方案1】:

这段代码可能看起来很臃肿,但实际上非常强大,以防您必须执行更多编辑。它显示了从解析、修改和序列化 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);

【讨论】:

    猜你喜欢
    • 2015-05-13
    • 2023-01-07
    • 2013-10-15
    • 1970-01-01
    • 2015-01-20
    • 2011-11-28
    • 2016-01-25
    • 1970-01-01
    • 2014-02-28
    相关资源
    最近更新 更多