如果字典中存在键则运行关键字(机器人框架)

tom*_*els 6 python selenium automated-tests robotframework

我目前正在使用 Robot Framework 来自动测试表单。为了提供表单数据,我使用如下字典:

*** Variables ***
&{TestCase1}    key1=a    key2=b    key3=c    key4=d
&{TestCase2}    key2=x    key3=y
Run Code Online (Sandbox Code Playgroud)

我想做的是根据该测试用例的字典中是否存在匹配键来确定某些字段的填充,以便可选字段可以留空。我尝试运行以下关键字:

*** Keywords ***
Fill Form
    [Arguments]    &{TestCase}
    Run Keyword If    &{TestCase}[key1]    Input Text    id=field1    &{TestCase}[key1]
    Run Keyword If    &{TestCase}[key2]    Input Text    id=field2    &{TestCase}[key2]
    Run Keyword If    &{TestCase}[key3]    Input Text    id=field3    &{TestCase}[key3]
    Run Keyword If    &{TestCase}[key4]    Input Text    id=field4    &{TestCase}[key4]
Run Code Online (Sandbox Code Playgroud)

……但并没有什么卵用。我收到此错误:

FAIL: Dictionary &{TestCase} has no key 'key1'.
Run Code Online (Sandbox Code Playgroud)

...这在某种程度上是有道理的,因为事实并非如此,但这就是重点。我预计这会使条件评估为 False 并使 RF 跳过关键字。

谁能解释为什么它不能以这种方式工作,以及是否有其他方法可以实现这一点?任何帮助是极大的赞赏!

Bry*_*ley 6

您需要检查键是否存在,而不是值。在 python 中,这看起来像if 'key1' in TestCase,所以在机器人语法中,它看起来像这样:

Run keyword if  'key1' in $TestCase  Input Text  ...
Run Code Online (Sandbox Code Playgroud)

这是一个完整的例子。运行时,它应该添加“key1 按预期在日志中”,而不是“bogus 意外地在日志中”

*** Variables ***
&{TestCase1}    key1=a    key2=b    key3=c    key4=d
&{TestCase2}    key2=x    key3=y

*** Test Cases ***
Example
    Run keyword if  'key1' in $TestCase1  log  key1 is in the log as expected
    Run keyword if  'bogus' in $TestCase1  log  bogus is unexpectedly in the log
Run Code Online (Sandbox Code Playgroud)