【问题标题】:need example for Robot framework xpath to find an XMLelement value when the response contains recurring elements当响应包含重复元素时,机器人框架 xpath 需要示例以查找 XMLelement 值
【发布时间】:2017-11-18 00:09:48
【问题描述】:

我是第一次使用 RF,因为它得到了其他人的推荐,而且我被告知不需要 Python 经验。到目前为止,它进展得“顺利”,但目前仍停留在以下问题上。我正在使用 IBM 的 MDM 事务进行测试。

我有一种情况,我需要检索特定值以进行进一步测试,但在响应中您有一个重复元素。

例如:

<TCRMAdminContEquivBObj>
    <AdminContEquivIdPK>443149752876966203</AdminContEquivIdPK>
    <PartyId>445849752876959403</PartyId>
    <AdminPartyId>13022017010</AdminPartyId>
    <AdminSystemType>1</AdminSystemType>
</TCRMAdminContEquivBObj>
<TCRMAdminContEquivBObj>
    <AdminContEquivIdPK>441549752876967603</AdminContEquivIdPK>
    <PartyId>445849752876959403</PartyId>
    <AdminPartyId>f205c1d7-ed84-4852-8d1d-8fcd092af282</AdminPartyId>
    <AdminSystemType>36</AdminSystemType>
    </TCRMAdminContEquivBObj>

我需要从响应中检索以下值:&lt;AdminPartyId&gt;13022017010&lt;/AdminPartyId&gt;

但是 Robot Frameworks XML 库在使用 XPath 时会报错,因为它使用 Get Element Text 命令找到了 2 个同名元素。

是否可以通过添加第二个值来识别上述值来检索它?例如,使用&lt;AdminSystemType&gt; 作为第二个标识符。如果是这样,我需要怎么做?

变量:

${XmlFilePath} Resources/TransactionXML/addPerson.xml 
${XmlResponsePath} Resources/TransactionXML/addpersonResponse.xml 

获取元素文本:

source=${XmlResponsePath} xpath=.//TCRMPersonBObj/AdminPartyId. 

我一直在寻找,但我发现的示例都涉及在这种情况下不适用的属性。

【问题讨论】:

  • 您使用的完整机器人命令是什么?你在用什么不工作(发布你正在使用的 Xpath)
  • 并获取元素文本 source=${XmlResponsePath} xpath=.//TCRMPersonBObj/AdminPartyId。这些是我使用的变量*** 变量 *** ${XmlFilePath} Resources/TransactionXML/addPerson.xml ${XmlResponsePath} Resources/TransactionXML/addpersonResponse.xml
  • 请不要在评论区放代码。您可以edit您的问题以包含更多信息。

标签: python xml xpath robotframework


【解决方案1】:

在这个特定的示例中,第一项的 xpath 将是://TCRMAdminContEquivBObj[1]/AdminPartyId。但是,除非您的测试策略总是选择第一个,否则这将起作用。

【讨论】:

    【解决方案2】:

    我找到了线索并制定了一个可行的设置:

     *** Test Cases ***
    Read XML Response values from TCRMAdminContEquivBObj
        [Tags]    GetElementsFromTransaction
        ${xml}  Parse Xml   ${XmlResponsePath}
        @{getxml}  Get Elements    ${xml}   .//TCRMAdminContEquivBObj
        Log To Console  ------results----- @{getxml}
        ${state}    Set Variable    NOT FOUND
        ${element3}  Set Variable    NOT FOUND
        : FOR    ${mainelement}    IN    @{getxml}
        \    Log To Console  ------results----- ${mainelement}
        \    ${element1}    Get Element Text    ${mainelement}    AdminPartyId
        \    ${element2}    Get Element Text    ${mainelement}    AdminSystemType
        \    ${element3}    Set Variable If    '${element2}'=='36'    ${element1}    ${state}
        \    Exit For Loop If    '${element3}'!= '${state}'
        #Should Not Be Equal    ${element3}    NOT FOUND    Did not find state    
        Log To Console  ${element3}
    

    它可能不整洁,但似乎工作:)

    【讨论】:

      猜你喜欢
      • 2021-03-01
      • 2015-05-26
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      • 2014-09-29
      • 2017-11-29
      相关资源
      最近更新 更多