Robotframwork SudsLibrary在调用" Call Soap Method"时会产生额外的元素。

时间:2017-07-25 03:18:33

标签: soap automation robotframework suds

当尝试执行以下robotscript时,它向登录元素添加了额外的元素..

Library           Selenium2Library
Library           Collections
Library           String
Library           uuid
Library           Dialogs
Library           SudsLibrary


    Create Soap Client      http://xxxxxxxxx:18080/xxxxx_b/xxx?wsdl
    ${dbl array}=   Create Wsdl Object      logIn
    Set Wsdl Object Attribute   ${dbl array}    username    xxx
    Set Wsdl Object Attribute   ${dbl array}    password    xxxx
    ${result}=  Call Soap Method    logIn       ${dbl array}
    log to consol       ${result}

原始请求格式

 <soapenv:Envelope xmlns:soapenv="http://xxxxxxxxxxxxx/x/x/" xmlns:ws="http://xxxxxxxxxxxxxxx/">
   <soapenv:Header/>
   <soapenv:Body>
      <ws:logIn>
         <!--Optional:-->
         <username>xxx</username>
         <!--Optional:-->
         <password>xxx</password>
      </ws:logIn>
   </soapenv:Body>
</soapenv:Envelope>

生成的代码:

<SOAP-ENV:Envelope xmlns:ns0="http://xxxxxxxxxxxxxx/" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="h
ttp://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header/>
   <ns1:Body>
      <ns0:logIn>
         <username>
            <username>xxx</username>
            <password>xxx</password>
         </username>
      </ns0:logIn>
   </ns1:Body>
</SOAP-ENV:Envelope>

如何删除其他用户名标签?

<username>
                <username>xxx</username>
                <password>xxx</password>
             </username>

1 个答案:

答案 0 :(得分:1)

很可能问题是login方法不会将其参数包含在对象中,而是直接包含在对象中。 Suds为所有方法创建类型,但调用方法不需要这些类型。 如果查看Create Soap Client的输出,您可能会看到类似 logIn(用户名,密码)的内容。这意味着您直接传递参数而不是某些对象。

Library           Selenium2Library
Library           Collections
Library           String
Library           uuid
Library           Dialogs
Library           SudsLibrary


    Create Soap Client      http://xxxxxxxxx:18080/xxxxx_b/xxx?wsdl
    ${result}=  Call Soap Method    logIn       some_username    some_password
    log to console       ${result}