Run Keyword If 中遇到的问题

使用RF的时候,经常会用到 Run Keyword If 这个buildin的关键字。 把使用中遇到的问题记录一下:

 

1. 如果我们要将待执行的关键字的返回值进行存储的话,一定要注意如果条件不成立时,存储到变量中的是None

${key}=    Run Keyword If    ${len} > 0    Set Variable    TEST

当${len}大于0时,${key}中存放的是TEST,  但是当${len} 小于等于0时,  ${key}的值是None.  推荐的处理方式是加上ELSE或者ELSE IF, 来确保在任何情况下, 变量${key}都会被赋值.

 

2. 如果表达式中,是在验证变量值是否为None, 那么你要小心了

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才开始支持。

 

3. None或者 null, True 或者 False, 在RF中使用用应该用$和大括号括起来, 例如${None},  否则它会被当成字符串,所在在给关键字传参,或者设置参数的默认值时,一定要注意

你可能感兴趣的:(Robot,framework)