Robot Framework如何正确使用循环遍历嵌套列表点击页面元素
Robot Framework嵌套变量遍历报错修复方案
报错原因
触发该报错的核心问题有两个:
- 语法书写不规范:RF的原生
FOR循环是内置语法结构,FOR、IN这两个语法关键字必须全大写,各语法段之间需要用至少2个空格(或制表符)分隔,你代码里写的小写in会直接导致解析器无法识别循环结构,把整行内容当做普通关键字名称匹配,最终抛出找不到关键字的错误。 - 多层嵌套变量解析时机冲突:
FOR循环头的解析发生在用例加载的语法检查阶段,这个阶段对多层嵌套变量的展开支持远弱于普通关键字的参数解析(普通关键字参数是执行到对应行时才解析变量,多层嵌套基本都能正常识别)。你在IN后直接写三层嵌套的@{${${user}.COUNTRY}},解析器在语法阶段无法完成变量求值,就会触发识别失败。
修复方法
写法1:全版本兼容(RF4.0及以上版本通用,稳定性最高)
不要在循环头里直接写多层嵌套变量,先把嵌套列表赋值给普通单层变量,再遍历这个单层变量,完全避开解析阶段的嵌套限制:
# 先完成嵌套变量求值,存入普通单层列表变量 ${country_list} Set Variable ${${user}.COUNTRY} # 遍历单层列表,注意IN大写、各段之间留够分隔空格 FOR ${item} IN @{country_list} Click Element //span[myattribute="${item}"] END
写法2:无中间变量写法(RF4.1及以上版本支持,更简洁)
不需要给嵌套变量额外套@{}做列表展开,IN后直接传入存储了列表值的嵌套变量即可,RF会自动识别可迭代对象完成遍历,只要保证语法格式正确:
FOR ${item} IN ${${user}.COUNTRY} Click Element //span[myattribute="${item}"] END
补充说明
你之前写的Click Element //span[myattribute="${${user}.COUNTRY}[0]"]能正常执行,是因为这行的变量属于Click Element关键字的参数,执行到对应行时才会做变量解析,多层嵌套也能正常识别;但FOR属于底层语法结构,加载用例时就需要完成结构识别,对变量写法的要求更严格,非必要不要在循环头里写复杂度太高的多层嵌套变量。
内容的提问来源于stack exchange,提问作者user17049514
相关产品推荐
相关产品推荐

