Robotframework:如何评估从Javascript调用返回的布尔值

Wür*_*paß 2 javascript robotframework

我很困惑,这失败了NameError:

${val} =    Execute Javascript    return sessionStorage.isMatching    
Should Be True     ${val}
Run Code Online (Sandbox Code Playgroud)

日志输出是:

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 
Run Code Online (Sandbox Code Playgroud)

这既不起作用:

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
Run Code Online (Sandbox Code Playgroud)

在阅读完文档之后,我了解到底层python不会将JS评估truetrue.然后我尝试将布尔值转换为JS中的String:

${val} =    Execute Javascript    return sessionStorage.isMatching.toString()
Run Code Online (Sandbox Code Playgroud)

但我又得到了一个NameError.

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

${val} =    Execute Javascript    return sessionStorage.isMatching
${bool} =    Convert To Boolean    ${val}
Should Be True     ${bool}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法,在RF或JS中评估它?

版本:

Python 2.7.8

Robotframework 3.0

Bry*_*ley 5

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

Should be true    '${val}` == 'true'
Run Code Online (Sandbox Code Playgroud)

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

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

should be true ${val} == 'true'
Run Code Online (Sandbox Code Playgroud)

...就像你在python中键入它一样:

if true == 'true': 
    ...
Run Code Online (Sandbox Code Playgroud)

Python看到true,试图查找名为变量的值true,并且找不到任何这样的变量.因此,你得到了NameError.

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

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