使用RF的时候,经常会用到 Run Keyword If 这个buildin的关键字。 把使用中遇到的问题记录一下:
${key}= Run Keyword If ${len} > 0 Set Variable TEST
当${len}大于0时,${key}中存放的是TEST, 但是当${len} 小于等于0时, ${key}的值是None. 推荐的处理方式是加上ELSE或者ELSE IF, 来确保在任何情况下, 变量${key}都会被赋值.
Run Keyword If ${expectedKey} is None MyKeyword
如果${expectedKey}的值是None, 那么MyKeyword会被执行
如果${expectedKey}的值是数字字符串, 或者是布尔常量, 条件表达式能被正常解析
如果${expectedKey}的值是字符串,例如 abcd, 那么执行时会报错, 说abcd这个变量未定义. 从下面这句文档中我们可以理解造成这个问题的原因:
def run_keyword_if(self, condition, name, *args):
"""Runs the given keyword with the given arguments, if ``condition`` is true.
The given ``condition`` is evaluated in Python as explained in
`Evaluating expressions`, and ``name`` and ``*args`` have same
semantics as with `Run Keyword`.
Variables used like ``${variable}``, as in the examples above, are
replaced in the expression before evaluation. Variables are also
available in the evaluation namespace and can be accessed using special
syntax ``$variable``. This is a new feature in Robot Framework 2.9
and it is explained more thoroughly in `Evaluating expressions`.
可以这样理解, ${expectedKey} is None这个表达式中变量会被其实际值代替(或者对象的字符串表示). 然后将新的字符串放到python环境下, 调用evaluate. 所以当${expectedKey}是abcd时, 可以想见, python解释器肯定会去寻找一个abcd的变量,但是肯定找不到,然后就报错了.
其实这个变量未定义的问题,不仅仅出现在判断是否None时, 但是其他情况下,我们可以通过给变量将引号的方式解决:
Run Keyword If "${expectedKey}" == abcd MyKeyword
在确实需要判断是否是None时,我们推荐采用下面的方式:
Run Keyword If $expectedKey is not None Log ${expectedKey}
变量访问时不用大括号,但是这种用法仅从RF2.9才开始支持。