以下代码产生了一些问题:
API Setup
[Arguments] ${url} ${username} ${password} ${run}=True ${fail}=False
Run Keyword If ${run}
... Run Keywords
... ${passed}= Run Keyword And Return Status Setup ${url} ${username} ${password}
... AND Log To Console ${passed}
... AND Should Not Be Equal ${fail} ${passed}
当我尝试执行该操作时,我的RF会说:Variable '${passed}' not found
。
RED IDE也显示
Multiple markers at this line:
• Variable 'passed' is used, but not defined
• Keyword name '${passed}=' contains variables. RED is unable to validate
arguments given to this keyword
关键字“运行关键字”是否不允许将值赋给变量?如果允许,是否有“最佳实践”方法来执行我想做的事情?
谢谢!
答案 0 :(得分:3)
Run Keywords
不允许允许分配,的确如此。这来自解析器-关键字的目的是运行其他关键字;它以赋值(${passed}= Run...
)开头,试图用其值替换变量“ passed”,以便它可以执行它,但在这一点上var仍未定义-并且失败。
看起来您想要做的是仅在条件为true时才运行特定关键字(Setup
),并且只有在条件为true时才记录其结果并断言(结果)是想要的。
这可以通过将模块分成两部分来实现。关键字Run Keyword If
返回嵌入式关键字的值,因此可以使用:
${passed}= Run Keyword If ${run} Run Keyword And Return Status Setup ${url} ${username} ${password}
... ELSE Set Variable ${False}
如果将运行${run} == True
关键字Setup
,并且执行通过后,{passed}
将保留True / False值。如果${run} != True
我们将${passed}
设置为False,那么它就没有值None(在这种情况下,它的值并不重要,但是这样做可以使它具有的数据类型具有一致性)。
另外两个关键字现在可以自己位于if块中-仅在${run} == True
时起作用:
Run Keyword If ${run} Run Keywords Log To Console ${passed}
... AND Should Not Be Equal ${fail} ${passed}
答案 1 :(得分:1)
的确,Run Keywords
不允许在其中进行变量分配
制作一个包含Run Keywords
中所有内容的关键字,然后直接调用它。
例如
*** Test Cases ***
API Setup
[Arguments] ${url} ${username} ${password} ${run}=True ${fail}=False
Run Keyword If ${run} Keyword A
*** Keywords ***
Keyword A
# put everything you need here