在Robot框架中使用SUDS库创建具有objecttype的Soap消息

在Robot框架中使用SUDS库创建具有objecttype的Soap消息,soap,robotframework,suds,Soap,Robotframework,Suds,我正在努力使用robot框架和SUDS库创建soap消息的这一部分 <ns1:Request> <ns0:ID objectType="SomeType">Value</ns0:ID> </ns1:Request> 输出 <ns1:Request> <ns0:ID>1234</ns0:ID> </ns1:Request> “RequestTypeSingle”定义 <

我正在努力使用robot框架和SUDS库创建soap消息的这一部分

<ns1:Request>
    <ns0:ID objectType="SomeType">Value</ns0:ID>
</ns1:Request>
输出

  <ns1:Request>
    <ns0:ID>1234</ns0:ID>
  </ns1:Request>
“RequestTypeSingle”定义

<xs:complexType name="RequestTypeSingle">
 <xs:sequence>
  <xs:element minOccurs="1" maxOccurs="1" name="ID" nillable="true">
   <xs:complexType>
    <xs:simpleContent>
     <xs:extension base="xs:string">
      <xs:attribute name="objectType" type="xs:string"/>
     </xs:extension>
    </xs:simpleContent>
   </xs:complexType>
  </xs:element>
 </xs:sequence>
</xs:complexType>
(续问)。 无论如何,这不会像我在请求示例中提到的那样设置值。看起来这种语法会起作用,但事实并非如此。这方面有什么好主意吗

这将给出一个错误:“ValueError:对象必须是WSDL对象(suds.sudsobject.Object)。”

这将覆盖第一个对象类型定义

${req}=    Create WSDL Object    ns19:RequestTypeSingle    # may need namespace prefix here
Set Wsdl Object Attribute    ${req.ID}    _objectType    SomeType
Set Wsdl Object Attribute    ${req}    ID    1234
我所说的覆盖是指:

${object} = (RequestTypeSingle){
   ID = 
      (ID){
         _objectType = ""
      }
 }
  <ns1:Request>
    <ns0:ID>1234</ns0:ID>
  </ns1:Request>

1234

为表示为XML属性而不是元素的属性指定值时,请在名称前加下划线(为什么用objectType而不是objectType)


将值赋给表示为XML属性而不是元素的属性时,请在名称前加下划线(为什么_objectType而不是objectType)


不起作用。“设置Wsdl对象属性${Object}ID${ID}”将创建一个内部元素,这是不允许的。我需要将它作为RequestTypeSingle定义放在一行中。添加的“RequestTypeSingle”定义ID并不像我想象的那样复杂。我已相应地更新了我的答案。我能够通过获取您的模式摘录并将其包含在现有WSDL中来测试该解决方案。我能够生成一个看起来像你需要的请求。谢谢你。但仍然没有设置该值。我更新了我的问题(继续问题),定义了将objectType和值一起设置的问题。我以为这不是“问题”,不知道你为什么接受这个。根据我的研究,解决这个问题的唯一方法似乎是使用消息插件或补丁肥皂水。据我所知,使用Suds 0.4在同一元素上设置属性和元素文本是不可能的。不起作用。“设置Wsdl对象属性${Object}ID${ID}”将创建一个内部元素,这是不允许的。我需要将它作为RequestTypeSingle定义放在一行中。添加的“RequestTypeSingle”定义ID并不像我想象的那样复杂。我已相应地更新了我的答案。我能够通过获取您的模式摘录并将其包含在现有WSDL中来测试该解决方案。我能够生成一个看起来像你需要的请求。谢谢你。但仍然没有设置该值。我更新了我的问题(继续问题),定义了将objectType和值一起设置的问题。我以为这不是“问题”,不知道你为什么接受这个。根据我的研究,解决这个问题的唯一方法似乎是使用消息插件或补丁肥皂水。据我所知,使用Suds 0.4在同一个元素上设置属性和元素文本是不可能的。
${req}=    Create WSDL Object    ns19:RequestTypeSingle    # may need namespace prefix here
Set Wsdl Object Attribute    ${req}    ID    1234
Set Wsdl Object Attribute    ${req.ID}    _objectType    SomeType
${req}=    Create WSDL Object    ns19:RequestTypeSingle    # may need namespace prefix here
Set Wsdl Object Attribute    ${req.ID}    _objectType    SomeType
Set Wsdl Object Attribute    ${req}    ID    1234
  <ns1:Request>
    <ns0:ID>1234</ns0:ID>
  </ns1:Request>
${req}=    Create WSDL Object    RequestTypeSingle    # may need namespace prefix here
Set Wsdl Object Attribute    ${req.ID}    _objectType    SomeType