【问题标题】:How to read the XML response element in robot framework?如何读取机器人框架中的 XML 响应元素?
【发布时间】:2018-12-10 00:19:38
【问题描述】:

我已运行 SOAP API 请求并使用机器人框架获得如下响应。

(reply){
   return = "PGP-98-Sq0awmdslfjsdssdlsifTvZUORTLe1fgVeUwaolR14QS"
}

我想从响应 XML 中检索值 PGP-98-Sq0awmdslfjsdssdlsifTvZUORTLe1fgVeUwaolR14QS。我尝试使用命令获取值

${token}=    Set Variable    ${API_response_Data.return} 

但是会报错

SyntaxError: unexpected EOF while parsing (<string>, line 1)

SOAP UI 工具的实际响应如下所示(仅供参考)。

<soapenv:Envelope xmlns:soapenv="something" xmlns:xsd="something">
   <soapenv:Body>
      <ns1:response xmlns:ns1="http://something.com">
         <return>PGP-98-Sq0awmdslfjsdssdlsifTvZUORTLe1fgVeUwaolR14QS</return>
      </ns1:response>
   </soapenv:Body>
</soapenv:Envelope>

我使用了 Parse XML 关键字,但出现以下错误。

当我使用

 ${Token}=    Get Element    ${API_response_Data}    .//*return
    Log    ${Token.text}

我收到以下错误。

请告诉我如何从返回标签中提取值?

【问题讨论】:

  • 您是否使用现有的 Robot Framework 库来发送和接收像 SudsLibrary 这样的 SOAP 消息?
  • 是的,我使用 SudsLibrary @A.Kootstra

标签: xml robotframework parsexml


【解决方案1】:

SudsLibrary 依赖于 Suds 模块。遗憾的是,这个模块不再被维护,随着时间的推移,这个模块的局限性变得越来越清晰。

在您的情况下,返回的对象很难使用。这就是为什么我更喜欢返回 XML 响应并使用标准 XML 库自己处理它的原因。

在发送请求之前,您可以使用Set Return XML 关键字来启用此功能。然后按照XML库中的例子为关键字Parse XML获取实际值

【讨论】:

  • 它对我有用。谢谢您的帮助。我现在可以拿到令牌了。
【解决方案2】:

您可以使用机器人框架的XML library 来解析响应 XML,然后获取特定元素的文本。例如:

Demo
    ${root}=    Parse XML   soap_res.xml
    ${return}=  Get Element     ${root}     .//*return
    Log     ${return.text}

Get Element 关键字返回一个 XML 元素对象,您需要它的 text 属性。输出如下:

【讨论】:

  • 使用您建议的关键字时出现错误。我已修改问题以添加使用这些关键字时遇到的错误。请帮助解决问题。
  • @JCDani ${API_response_Data} 变量不是 XML,所以我的建议不起作用。如果您可以将来自 SOAP UI 的实际响应作为带有所有标签的 XML 传递,它应该可以工作。 A. Kootstra 对此提出了建议。
猜你喜欢
  • 2023-04-01
  • 2021-01-11
  • 2016-10-24
  • 2018-07-17
  • 2021-12-25
  • 2020-05-23
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多