Robotframework:如何计算从Javascript调用返回的布尔值

Robotframework: How to evaluate boolean value returned from Javascript call

本文关键字:Javascript 调用 返回 布尔值 计算 何计算 Robotframework      更新时间:2023-09-26

我很困惑这失败了,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中评估这一点?

版本:

蟒蛇 2.7.8

机器人框架 3.0

你从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.

您可以在内置库的文档中找到对此的描述(强调我的):

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