Robot Framework中如何遍历嵌套字典并访问内层字典值
Robot Framework 嵌套字典遍历报错修正方案
报错根因
- 内层
Get From Dictionary参数传值错误:你要从外层循环拿到的内层字典${value}中取值,但是代码里误写为还未定义的${value2}作为查询父对象,变量依赖解析异常触发了${key2}未找到的报错。 - 若使用Robot Framework 3.x及更早版本,本身不支持在
Run Keyword If的分支内直接嵌套FOR循环,也会触发语法类报错。
修正后的代码(适用于Robot Framework 4.0+版本)
FOR ${key} IN @{dict.keys()} ${value}= Get From Dictionary ${dict} ${key} ${type} = Evaluate type($value).__name__ # 优化路径判断逻辑,避免非字符串类型报错 ${is_path}= Run Keyword If ${type} == str Evaluate "/" in $value ELSE Set Variable ${False} Log To Console ${type} Run Keyword If ${is_path} ... Log To Console ${key}, ${value} Run Keyword If ${type} == dict ... FOR ${key2} IN @{value.keys()} ... ${value2}= Get From Dictionary ${value} ${key2} ... Log To Console ${key2}, ${value2} ... # 如需支持更深层嵌套,可在此处添加递归判断逻辑 ... END END
兼容旧版本(Robot Framework 3.x)的写法
把内层字典遍历逻辑封装为独立关键字即可:
*** Keywords *** 遍历内层字典 [Arguments] ${inner_dict} FOR ${key2} IN @{inner_dict.keys()} ${value2}= Get From Dictionary ${inner_dict} ${key2} Log To Console ${key2}, ${value2} END *** Test Cases *** 你的测试用例 # 其他前置逻辑省略 FOR ${key} IN @{dict.keys()} ${value}= Get From Dictionary ${dict} ${key} ${type} = Evaluate type($value).__name__ ${is_path}= Run Keyword If ${type} == str Evaluate "/" in $value ELSE Set Variable ${False} Log To Console ${type} Run Keyword If ${is_path} ... Log To Console ${key}, ${value} Run Keyword If ${type} == dict ... 遍历内层字典 ${value} END
额外优化建议
如果存在3层及以上的嵌套字典,可以把整个遍历逻辑做成递归关键字,无需重复编写多层循环。
内容的提问来源于stack exchange,提问作者Norman Kuo
相关产品推荐
相关产品推荐

