*** variables ***
${x} 0
*** Test Cases ***
Test1
run keyword if ${x} == 1 run keywords
... print hi
... ELSE
... print hi
Test2
run keyword if ${x} == 0 run keywords
... print hi
... ELSE
... print hi
*** keywords ***
print
[arguments] ${x}
log to console ${x}
输出:
Test1 hi
Test1 | PASS |
------------------------------------------------------------------------------
Test2 | FAIL |
Keyword 'print' expected 1 argument, got 0.
------------------------------------------------------------------------------
这是怎么回事?在第二个打印工作中有争论,但在第一个工作中被忽略。
答案 0 :(得分:3)
区别在于,在一种情况下,您正在调用run keywords
(带有参数),而在另一种情况下,您正在运行print
(带有参数)。
我们可以重新格式化您的代码,以显示机器人如何看待它:
run keyword if ${x} == 1
... run keywords print hi
... ELSE
... print hi
当表达式为false时,您会陷入并运行print hi
,一切正常。
在这种情况下,机器人将运行run keywords print hi
。 run keywords
将其每个参数视为要运行的单独关键字,因此它尝试运行print
,然后尝试运行hi
。由于您没有提供要打印的参数,因此会引发错误。
答案 1 :(得分:2)
问题出在您期望hi
作为print
构造中的run keywords
的参数而传递,但是机器人不会这样处理,{{1 }}只是要运行的另一个关键字。
在Run Keywords
documentation中,有一段如何使用带有参数的关键字-您必须将关键字与hi
链接起来:
...关键字也可以使用大写的AND作为关键字之间的分隔符,并使用参数运行。执行关键字是为了使第一个参数是第一个关键字,而后续的参数直到第一个AND是它的参数。第一个AND之后的第一个参数是第二个关键字,直到下一个AND的后续参数是它的参数。依此类推。
在您的情况下:
AND
,现在将调用更改为“使用参数'hi'运行关键字run keyword if ${x} == 1 run keywords
... print hi AND No Operation
... ELSE
... print hi
,然后运行关键字print
”(实际上不执行任何操作,在这种情况下会派上用场)。