Как указать какой тег возвращать в 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);
Обратите внимание, что вам нужно обрабатывать, если в ответе есть какие-либо пространства имен, в текущем ответе нет никаких пространств имен.