Как указать какой тег возвращать в Java через SOAPUI Testrunner getRunContext

В настоящее время я использую следующий универсальный метод для доступа к отдельным тегам xml в ответе SOAPUI:

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>

Как я могу указать, какой <email> тег для возврата, пока еще используется runner.getRunContext().expand?

Может быть, другие не согласятся, но мне кажется, что документации по SOAPUI API не хватает.

1 ответ

Решение

Все, что вам нужно, это иметь право xpath чтобы получить требуемое значение.

Поскольку список контактов доступен, для получения нужного электронного письма требуется ссылка на другой относительный элемент.

Например:
- Использование идентификатора телефона участника: для получения электронной почты контакта, где MEMBER_PHONE_ID 56789, 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 Тест1):

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

Затем вы звоните пройти, что value расширить метод.

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

Обратите внимание, что вам нужно обрабатывать, если в ответе есть какие-либо пространства имен, в текущем ответе нет никаких пространств имен.

Другие вопросы по тегам