如何通过 SOAPUI Testrunner getRunContext 在 Java 中指定哪个标签到 return

How to specify which tag to return in Java via SOAPUI Testrunner getRunContext

我目前正在使用以下通用方法访问 SOAPUI 响应中的单个 xml 标记:

public class SoapUIAPI {
private String soapUITestCase;
private String tagValue;
private TestRunner runner;

public String getWebServiceResponseTagValue (String tag){
    tagValue = runner.getRunContext().expand("${"+soapUITestCase+"#Response#//*:"+tag+"}");
    return tagValue;
}

runner.getRunContext().expand 几乎似乎采用了 xpath 表达式(但不完全是?)我的问题是我的 xml 响应看起来像这样:

<content>
  <memNum>123456</memNum>
  <displayName>Mr John Smith</displayName>
  <prefName>John</prefName>
  <dob>11/09/1948</dob>
  <occDesc>Truck Driver</occDesc>
  <IRDNumber>19-211-314</IRDNumber>
  <contactDetails>
     <contact>
        <MEMBER_PHONE_ID>123456</MEMBER_PHONE_ID>
        <contactType>Mobile 2</contactType>
        <countryCode>(+64)</countryCode>
        <std>021</std>
        <number>54545454</number>
     </contact>
     <contact>
        <MEMBER_PHONE_ID>34567</MEMBER_PHONE_ID>
        <contactType>Business Phone</contactType>
        <countryCode>(+36)</countryCode>
        <std>04</std>
        <number>8756845</number>
        <ext/>
     </contact>
     <contact>
        <MEMBER_PHONE_ID>45678</MEMBER_PHONE_ID>
        <contactType>Preferred Email 1</contactType>
        <email>Test@gmail.com</email>
     </contact>
     <contact>
        <MEMBER_PHONE_ID>56789</MEMBER_PHONE_ID>
        <contactType>Preferred Email 2</contactType>
        <email>test@test.com</email>
     </contact>
  </contactDetails>
  <branch>New York</branch>
  <adviser>Warren Duck</adviser>
</content>

如何在仍然使用 runner.getRunContext().expand 的同时将哪个 <email> 标记指定给 return?

也许其他人会不同意,但我发现缺少 SOAPUI API 文档。

您只需拥有 xpath 检索所需值的权利。

由于有可用的联系人列表,因此需要引用另一个相关元素才能获得正确的电子邮件。

例如:
- 使用 member phone id:检索联系人的电子邮件,其中 MEMBER_PHONE_ID56789,xpath 看起来像:
//MEMBER_PHONE_ID[contains(text(),'56789')]/following-sibling::email/text()

因此,您需要传递其他信息才能获得特定的电子邮件。

relativeTag(MEMBER_PHONE_ID), relativeTagValue(56789) 除了现有的tag

String value = "${"+soapUITestCase+"#Response#//" + relativeTag + "[contains(text(),'" + relativeTagValue+"')]/following-sibling::" + tag + "/text()}";

value 的输出将是(假设 soapUITestCase 的值为 Test1):

${Test1#Response#//MEMBER_PHONE_ID[contains(text(),'56789')]/following-sibling::tag/text()}

然后调用 pass 那个 value 来扩展方法。

tagValue = runner.getRunContext().expand(value);

请注意,如果响应中涉及任何名称空间,您需要处理,当前提供的响应中没有任何 namcespaces