Robotframework-XMLlibrary如何处理相同XPath的多个XML元素
解决Robot Framework XML库多匹配XPath元素修改问题
你之前的索引写法失效核心原因是:直接在XPath变量后加[1]没有将原路径作为整体匹配节点集,索引仅作用于最后一级节点筛选,而非匹配到的全部节点的顺序索引,正确的XPath节点集索引需要将原有路径用括号包裹后再加索引。
这里提供两种可直接落地的解决方案:
方案1:使用带索引的XPath表达式
修改Set操作的XPath参数,将原有路径包裹后加索引即可,注意XML库的XPath索引从1开始计数,同时注意Set Element Text关键字的参数顺序为【根节点、XPath、新文本】,你之前的参数顺序也存在错误:
# 修改第一个匹配元素 Set Element Text ${root} (${Xpath})[1] ${修改后的CMmessage1} # 修改第二个匹配元素 Set Element Text ${root} (${Xpath})[2] ${修改后的CMmessage2}
方案2:先获取所有匹配元素再逐个修改(更稳妥)
先通过Get Elements关键字拿到所有匹配的元素对象列表,直接对单个元素对象操作,不需要额外拼接XPath,出错概率更低:
*** Settings *** Library XML Library String *** Variables *** ${XMLpath} AbsolutePath.xml ${Xpath} GM/BODY/CMss/message # 匹配两个message元素 *** Test Cases *** TestCase ${root} Parse Xml ${XMLpath} # 先拿到所有匹配的元素对象列表,返回的是Python列表,索引从0开始 @{message_elements} Get Elements ${root} ${Xpath} # 修改第一个元素 ${CMmessage1} Get Element Text ${message_elements}[0] # ... 对CMmessage1做自定义修改操作 ... Set Element Text ${message_elements}[0] ${修改后的CMmessage1} # 修改第二个元素 ${CMmessage2} Get Element Text ${message_elements}[1] # ... 对CMmessage2做自定义修改操作 ... Set Element Text ${message_elements}[1] ${修改后的CMmessage2} Save Xml ${root} ${XMLpath}
注意:
Get Elements返回的列表是Python原生列表,索引从0开始计数,和XPath的1开始索引要区分开。
内容的提问来源于stack exchange,提问作者a1995rz
相关产品推荐
相关产品推荐

