如何在机器人框架中的for循环期间检查变量是否在列表中?

0 robotframework

第一次在这里发帖 我有一种感觉,这是一个非常愚蠢的问题,但由于某些原因,我的代码一直在失败,我只是无法指出错误.

这就是我所拥有的:

*** Settings ***
Library  Selenium2Library
Library  OperatingSystem
Library  String
Library  Collections


*** Test Cases ***
Test Robot Framework Logging
    @{ALLOWED}=  Create List  /page1  /page2  /page3
    ${ControllersList}=  Get File   ${EXEC_DIR}/Resources/controllers.txt
    @{PAGES}=  Split to lines  ${ControllersList}
    :FOR  ${PAGE}  IN  @{PAGES}
    \  Run Keyword If  '${PAGE} IN @{ALLOWED}'  Log  Testing  WARN
    [Teardown]  Close Browser
Run Code Online (Sandbox Code Playgroud)

这是输出:

Evaluating expression ''/page1 IN [u'/page1', u'/page2', u'/page3']'' failed: SyntaxError: invalid syntax (<string>, line 1)
Run Code Online (Sandbox Code Playgroud)

如果我将条件更改为类似的东西,它会起作用:

'${PAGE} == /page1'
Run Code Online (Sandbox Code Playgroud)

我检查了文档,似乎可以使用IN条件.我完全迷失在这里.任何提示?谢谢!

Bry*_*ley 6

这是表达式的正确方法:

Run Keyword If  $PAGE in $ALLOWED  Log  Testing  WARN
Run Code Online (Sandbox Code Playgroud)

通过删除引号和花括号,robot在评估表达式时能够将PAGE和ALLOWED视为python变量.

BuiltIn库文档中的Evaluating Expressions部分:

从Robot Framework 2.9开始,变量本身在评估命名空间中自动可用.可以使用特殊的变量语法访问它们,而不需要像$ variable那样的花括号.永远不应该引用这些变量,事实上它们甚至不会在字符串中被替换.

此外,在使用类似关键字时Run Keyword If,表达式必须是变量替换后的有效python表达式.因此,您必须使用运算符in而不是IN.后者仅由机器人:FOR声明使用.

*** Variables ***
@{ALLOWED}  /page1  /page2  /page3

*** Test Cases ***
Example that passes
    ${PAGE}=  set variable  /page1
    Run Keyword If  $PAGE in $ALLOWED
    ...  pass execution  ${PAGE} is allowed
    fail  ${PAGE} is not allowed

Example that fails
    ${PAGE}=  set variable  /page99
    Run Keyword If  $PAGE in $ALLOWED
    ...  pass execution  ${PAGE} is allowed
    fail  ${PAGE} is not allowed
Run Code Online (Sandbox Code Playgroud)