第一次在这里发帖。我有一种感觉,这是一个真的愚蠢的问题,但由于某种原因,我的代码一直在失败,我只是无法指出错误。
这就是我所拥有的:
*** 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
这是输出:
Evaluating expression ''/page1 IN [u'/page1', u'/page2', u'/page3']'' failed: SyntaxError: invalid syntax (<string>, line 1)
如果我将条件改为这样的话,那就有效:
'${PAGE} == /page1'
我检查了documentation,似乎可以使用IN条件。我完全迷失在这里。任何提示?谢谢!
答案 0 :(得分:5)
这是表达式的正确方法:
_FILE_OFFSET_BITS=64
通过删除引号和花括号,robot在评估表达式时能够将PAGE和ALLOWED视为python变量。
来自Evaluating Expressions的文档中的BuiltIn library部分:
从Robot Framework 2.9开始,变量本身在评估命名空间中自动可用。可以使用特殊的变量语法访问它们,而不需要像$ variable那样的花括号。永远不应引用这些变量,事实上它们甚至不会在字符串中被替换。
此外,在使用Run Keyword If $PAGE in $ALLOWED Log Testing WARN
之类的关键字时,表达式必须是变量替换后的有效python表达式。因此,您必须使用运算符Run Keyword If
而不是in
。后者仅由机器人IN
声明使用。
:FOR
答案 1 :(得分:0)
文档Evaluating Expressions确实指定了评估本身使用的in
构造。另一种方法是使用Collections library关键字Get Match Count。如果未找到结果,则返回0,并且不会生成测试失败。
*** Settings ***
Library Collections
*** Test Cases ***
Test Robot Framework Logging
@{ALLOWED}= Create List /page1 /page2 /page3
@{PAGES}= Create List /page1 /page3 /page5
:FOR ${PAGE} IN @{PAGES}
\ ${InList}= Get Match Count ${ALLOWED} ${PAGE}
\ Run Keyword If ('${InList}' == '0') Log To Console Page Not Allowed
\ ... ELSE IF ('${InList}' == '1') Log To Console 1 Page Found
\ ... ELSE Log To Console More pages found.
答案 2 :(得分:0)
检查几乎是正确的,但是您通过用引号括起来有效地将布尔表达式转换为String。这是“它会这样做的语法:
\ Run Keyword If $PAGE in $ALLOWED Log Testing WARN
请注意,变量名称周围没有大括号{}
- 因此检查(几乎)是直接python的variable in another_variable