Citrus framework: нужен пример правильного использования селектора сообщений для дизайнера Java Test

В моем тесте я должен выбрать одно из нескольких сообщений из очереди канала. Итак, у меня есть такой шаг:

http()
  .server(server_name)
  .receive()
  .post(eventService)
.selector("xpath://Envelope/Body/CreateMessageDrivenEventRequest/MessageHeader/CustomsData/TraderIdentifier=123456NA")

но селектор не выбирает нужный запрос из очереди каналов. Может ли кто-нибудь поделиться примером правильного xpath или другого типа селектора?

Спасибо, Ольга

Оцененный запрос:

<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header>
        <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="1">
            <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-24012100">
                <wsse:Username>Username</wsse:Username>
                <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</wsse:Password>
            </wsse:UsernameToken>
        </wsse:Security>
        <addr:To xmlns:addr="http://www.w3.org/2005/08/addressing">address</addr:To>
        <addr:Action xmlns:addr="http://www.w3.org/2005/08/addressing">action</addr:Action>
        <addr:ReplyTo xmlns:addr="http://www.w3.org/2005/08/addressing">
            <addr:Address>http://www.w3.org/2005/08/addressing/anonymous</addr:Address>
        </addr:ReplyTo>
        <addr:MessageID xmlns:addr="http://www.w3.org/2005/08/addressing">uuid:b23a690e-15fc-4ffa-8a7f-dd981ebb92ba-1a</addr:MessageID>
    </soapenv:Header>
    <soapenv:Body>
        <CreateMessageDrivenEventRequest xmlns="xxx">
            <cct:MessageHeader xmlns:cct="yyy">
                <cct:TransactionId>792974800</cct:TransactionId>
                <cct:MessageId>18c9d974-3a1c-48ca-811f-a0787d9d2ee5</cct:MessageId>
                <cd:CustomsData xmlns:cd="zzz">
                    <cd:TraderIdentifier>123456NA</cd:TraderIdentifier>
                    <cd:MailboxCollectId>NA123456NA</cd:MailboxCollectId>
                    <cd:MessageVersion>1</cd:MessageVersion>
                    <cd:DocumentFormat>xml</cd:DocumentFormat>
                    <cd:InputIndicator>DTI</cd:InputIndicator>
                    <cd:DateReceived>20161125141127</cd:DateReceived>
                </cd:CustomsData>
            </cct:MessageHeader>
            <n:MRN xmlns:n="xxx">123456789</n:MRN>
            <n:Event xmlns:n="xxxx">
                <cct:Date xmlns:cct="xxxx">20170126160630</cct:Date>
                <cct:User xmlns:cct="xxxx">System</cct:User>
                <cct:Comments xmlns:cct="xxxx">Message sent to Trader (Carrier)</cct:Comments>
                <cct:StateCode xmlns:cct="xxxx">I012</cct:StateCode>
                <cct:EventCode xmlns:cct="xxxx">1234</cct:EventCode>
            </n:Event>
</CreateMessageDrivenEventRequest>
</soapenv:Body>
</soapenv:Envelope>

`


person Olha Bastieieva    schedule 26.01.2017    source источник
comment
На данный момент нашел это решение: .selector("xpath:*[local-name()='TraderIdentifier']='123456NA'") Значение должно быть в одинарных кавычках, так как при разборе на ключ и значение он теряет первый и последний символы.   -  person Olha Bastieieva    schedule 27.01.2017


Ответы (1)


Ваше выражение XPath не использует никаких пространств имен XML, но это делает сообщение. Выражение должно относиться к пространствам имен элементов как SOAP, так и вашего домена.

Что-то вроде этого: xpath://soap:Envelope/soap:Body/ns:CreateMessageDrivenEventRequest/ns:MessageHeader/ns:CustomsData/ns:TraderIdentifier=123456NA

В дополнение к этому вам необходимо объявить префикс и значение пространства имен в глобальном контексте пространства имен, например:

<citrus:namespace-context>
  <citrus:namespace prefix="soap" uri="http://schemas.xmlsoap.org/soap/envelope"/>
  <citrus:namespace prefix="ns" uri="xxx"/>
</citrus:namespace-context>
person Christoph Deppisch    schedule 08.02.2017