我正在努力使用带有SUDS库的机器人框架创建SOAP 消息的这一部分。
<ns1:Request>
<ns0:ID objectType="SomeType">Value</ns0:ID>
</ns1:Request>
如果我这样做,那么我得到我需要的一切,但不是对象类型。
${object}= Create Wsdl Object ns19:RequestTypeSingle
Set Wsdl Object Attribute ${object} ID 1234
输出
<ns1:Request>
<ns0:ID>1234</ns0:ID>
</ns1:Request>
如果我检查我的 ns19:请求类型单想要什么,我会得到这个:
${object} = (RequestTypeSingle){
ID =
(ID){
_objectType = ""
}
}
"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>
那么我如何使用 SUDS 或其他方式声明这个"(ID){_objectType = "}?
感谢 ombre42,这可以像这样完成(回答第一个问题):
${req}= Create WSDL Object ns19:RequestTypeSingle # may need namespace prefix here
Set Wsdl Object Attribute ${req.ID} _objectType SomeType
(继续提问)。这怎么不会设置我在请求示例中提到的值。这种语法似乎可以工作,但事实并非如此。关于这个有什么好主意吗?
这将给出一个错误:"ValueError: Object 必须是 WSDL 对象 (suds.sudsobject.Object)。
${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
这将覆盖第一个_objectType定义。
${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>
将值分配给表示为 XML 属性而不是元素的属性时,请在名称前面加上下划线(为什么_objectType而不是 objectType)。
${req}= Create WSDL Object RequestTypeSingle # may need namespace prefix here
Set Wsdl Object Attribute ${req.ID} _objectType SomeType