Robot Framework执行报错:未找到名为'RowCnt'的关键字
报错原因
这个错误是Robot Framework(以下简称RF)解析逻辑时,把本应作为字符串/变量内容的RowCnt识别成待执行的关键字导致的,核心诱因按出现概率排序如下:
- 参数分隔不规范,长文本被错误拆分
RF语法规定,关键字与参数、参数与参数之间必须用至少2个半角空格分隔,只要出现连续2个及以上半角空格,就会被判定为参数边界。你代码中传给日志、断言关键字的消息是长文本,如果文本里误打了连续多空格,RF会直接把长文本拆成多个独立参数,多出来的参数会被识别为后续要执行的关键字,刚好你的报错文本里有连写的RowCnt,就会触发找不到关键字的报错。
另外你代码里写的info不是RF内置关键字,内置打印日志的关键字是Log,直接写不存在的info会加剧参数解析的混乱。 - 比较表达式写法不规范
你写的判断条件"${RowCnt}">= 1存在语法问题:变量和>=运算符之间没有留空格,在RF4.0以前的版本中,Run Keyword If的条件会按空格拆分解析,表达式粘连会导致RF错误拆分后续内容,把普通文本识别成关键字。 - 基础语法错误+依赖缺失引发连锁问题
第一行入参校验你写的是'$strQuery',漏掉了RF变量必需的大括号(正确写法是${strQuery}),会导致入参校验完全失效;另外你调用的Row Count是第三方数据库库(比如DatabaseLibrary)提供的关键字,如果没有提前导入对应库,关键字执行失败返回的错误信息会存入${RowCnt},叠加参数拆分问题就会触发这类报错。
修复方案
按以下步骤修改即可解决:
- 修正基础语法错误
- 所有写
info的位置替换为内置关键字Log,需要指定日志级别时可追加参数level=INFO - 把入参校验的
'$strQuery'改为'${strQuery}' - 所有比较表达式的运算符前后加半角空格,比如
${RowCnt} >= 1、"${Execution Status}" == "PASS",数字比较时不需要给变量加引号,避免变成字符串比较引发逻辑错误
- 所有写
- 规范长文本参数传值
所有传给Log、Fail的长文本消息,不要直接写在关键字后面,先用Catenate关键字拼接成单个变量再传入,避免文本里的多空格被RF识别为参数分隔符。 - 补全依赖导入
在套件/资源文件的Settings区域提前导入提供Row Count关键字的数据库库(比如DatabaseLibrary),并确保数据库连接初始化正常。
修复后的可运行参考代码:
# 校验查询语句非空 Should Be True '${strQuery}' msg="Query can not be Empty.. Please provide the Query" # 执行查询获取行数 ${Execution Status} ${RowCnt} Run Keyword And Ignore Error Row Count ${strQuery} # 提前拼接日志文本,避免分隔错误 ${success_log} Catenate SEPARATOR= Row Count for the given Query :- is ${strQuery} and Row Count is: - ${RowCnt} ${query_fail_msg} Catenate SEPARATOR= Error encountered while Querying the Database using Query - ${strQuery} and error is ${RowCnt} Run Keyword If "${Execution Status}" == "PASS" Log ${success_log} ELSE Fail ${query_fail_msg} # 校验返回行数 ${row_log} Catenate SEPARATOR= Records returned from DB are either 1 or more than 1:- ${RowCnt} ${row_fail_msg} Catenate SEPARATOR= Record returned from DB is 0 and RowCnt is - ${RowCnt}. Refine the query and re-execute it Run Keyword If ${RowCnt} >= 1 Log ${row_log} ELSE Fail ${row_fail_msg}
内容的提问来源于stack exchange,提问作者The Coder
相关产品推荐
相关产品推荐

