在Robot框架中使用SUDS库创建具有objecttype的Soap消息
我正在努力使用robot框架和SUDS库创建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”定义 <
<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