如何在Robot Framework中正确访问嵌套列表的指定元素?
解决Robot Framework嵌套列表元素访问问题
看起来你是想创建一个嵌套列表并访问其中的深层元素,但代码里的两个小细节导致了不符合预期的输出。让我帮你梳理一下问题并给出解决方案:
问题根源
- 列表被意外扁平化:在
*** Variables ***里定义@{ICMPDU}时,直接使用@{ICMPDU_Val}会把这个子列表的元素展开到父列表中,导致@{ICMPDU}变成了['ICMPDU', 'Yes', 1, 2],而不是你想要的嵌套结构['ICMPDU', ['Yes', 1, 2]]。 - 列表引用方式错误:用
@{ICMPDU}[1][2]时,@{}语法是用来展开列表元素的,而非引用整个列表对象,这会让Robot Framework的解析逻辑混乱,最终出现'Yes'[2]这类异常输出。
解决方法
方法一:修改变量定义,保留嵌套结构
在引用子列表时,用$@{ICMPDU_Val}代替@{ICMPDU_Val},这样它会作为一个整体元素被放入父列表,而不是被展开:
*** Settings *** Library SeleniumLibrary Library Collections *** Variables *** @{ICMPDU_Val} 'Yes' 1 2 @{ICMPDU} ICMPDU $@{ICMPDU_Val} # 用$@{...}保持子列表的嵌套结构 *** Test Cases *** Network_web_page Log To Console ${ICMPDU}[1][2] # 用${}引用整个列表对象
方法二:用Create List关键字构建嵌套列表(更直观)
如果你觉得变量定义里的嵌套写法不够清晰,可以在测试用例中用Collections库的Create List关键字来明确构建嵌套结构:
*** Settings *** Library SeleniumLibrary Library Collections *** Test Cases *** Network_web_page # 先创建子列表 ${ICMPDU_Val}= Create List 'Yes' 1 2 # 将子列表作为单个元素放入父列表 ${ICMPDU}= Create List ICMPDU ${ICMPDU_Val} # 访问嵌套列表中的目标元素 Log To Console ${ICMPDU}[1][2]
运行上面任意一种写法,都能正确输出你想要的2啦~
内容的提问来源于stack exchange,提问作者Sayali Waghmare
相关产品推荐
相关产品推荐

