【问题标题】:Robotframework: How to evaluate boolean value returned from Javascript callRobotframework:如何评估从 Javascript 调用返回的布尔值
【发布时间】:2016-05-03 02:05:07
【问题描述】:

我很困惑,因为NameError 失败了:

${val} =    Execute Javascript    return sessionStorage.isMatching    
Should Be True     ${val}

日志输出为:

INFO Executing JavaScript:
INFO ${val} = true 
KEYWORD  BuiltIn . Should Be True ${val} 
TRACE Arguments: [ 'true' ] 
FAIL Evaluating expression 'true' failed: NameError: name 'true' is not defined 

这也不起作用:

Should Be True     ${val} == true    -->  Evaluating expression 'true == true' failed: NameError: name 'true' is not defined
Should Be True     ${val} == 'true'  -->  Evaluating expression 'true == 'true'' failed: NameError: name 'true' is not defined
Should Be True     ${val} == "true"  -->  Evaluating expression 'true == "true"' failed: NameError: name 'true' is not defined

阅读文档后,我了解到底层 python 不会将 JS true 评估为 true。然后我尝试在 JS 中将布尔值转换为字符串:

${val} =    Execute Javascript    return sessionStorage.isMatching.toString()

但我又收到了NameError

我知道的唯一方法是这看起来很糟糕(因为我必须明确地将布尔值转换为布尔值):

${val} =    Execute Javascript    return sessionStorage.isMatching
${bool} =    Convert To Boolean    ${val}
Should Be True     ${bool}

有没有更好的方法在 RF 或 JS 中对此进行评估?

版本:

Python 2.7.8

机器人框架 3.0

【问题讨论】:

    标签: javascript robotframework


    【解决方案1】:

    您从 javascript 中得到的是文字字符串 'true'。要在表达式中使用它,您必须引用它:

    Should be true    '${val}` == 'true'
    

    您收到错误NameError: name 'true' is not defined 的原因是机器人在评估表达式之前会进行字符串替换。

    换句话说,机器人中的这个表达式:

    should be true ${val} == 'true'
    

    ... 就像你在 python 中输入的一样:

    if true == 'true': 
        ...
    

    Python 看到true,尝试查找名为true 的变量的值,但没有找到任何此类变量。因此,您会得到NameError

    您可以在BuiltIn library 的文档中找到对此的描述(重点是我的):

    当使用普通 ${variable} 语法在表达式中使用变量时,它的值在表达式被计算之前被替换。这意味着表达式中使用的值将是变量值的字符串表示形式,而不是变量值本身。这对于具有可以直接评估的字符串表示的数字和其他对象来说不是问题,但对于其他对象,行为取决于字符串表示。最重要的是,字符串必须始终被引用,如果它们可以包含换行符,它们必须被三重引用。

    【讨论】:

    • 机器人在评估表达式之前会进行字符串替换,这是一个非常好的功能。我有很多像Run Keyword If '${exp}' == 'None' 这样的行。所以我应该知道——只是没想到,这一次。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-10-18
    • 2015-01-02
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 2011-11-28
    • 1970-01-01
    相关资源
    最近更新 更多