如果字典中存在键,则运行关键字(机器人框架)
Posted
技术标签:
【中文标题】如果字典中存在键,则运行关键字(机器人框架)【英文标题】:Run Keyword If key exists in dictionary (Robot Framework) 【发布时间】:2020-05-03 14:49:47 【问题描述】:我目前正在使用 Robot Framework 对表单进行自动化测试。为了提供表单数据,我使用了这样的字典:
*** Variables ***
&TestCase1 key1=a key2=b key3=c key4=d
&TestCase2 key2=x key3=y
我想要做的是,如果匹配键存在于该测试用例的字典中,则填充某些字段,以便可选字段留空。我尝试运行以下关键字:
*** 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]
...但无济于事。我收到此错误:
FAIL: Dictionary &TestCase has no key 'key1'.
...这在某种程度上是有道理的,因为它没有,但这就是重点。我希望这会使条件评估为 False 并使 RF 跳过关键字。
任何人都可以解释为什么它不能以这种方式工作,以及是否有其他方法可以做到这一点?非常感谢任何帮助!
【问题讨论】:
【参考方案1】:您需要检查键是否存在,而不是值。在 python 中这看起来像if 'key1' in TestCase
,所以在机器人语法中它看起来像这样:
Run keyword if 'key1' in $TestCase Input Text ...
这是一个完整的例子。运行时,它应该添加“key1 在日志中符合预期”但not“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
【讨论】:
感谢您的回复。我试图以多种方式正确地使用语法,但 RF 似乎无法识别其中任何一种中的 in 关键字。 @tomheffels:in
不是机器人语法,它是 python 语法。只要您完全按照我在答案中所做的那样编写它,它就会起作用。我已更新我的答案以包含完整的工作测试。
现在知道了,谢谢!我使用了 & 而不是 $,仍然对变量/参数的语法感到有些困惑【参考方案2】:
正如@Swapnil 和@Bryan 所强调的,有几种方法可以实现这一点。下面的示例使用键/字段 ID 组合的映射,然后使用提供键值对的测试用例。填充脚本只是执行一个 for 循环,并不关心字段的数量。 Input Text
关键字由自定义关键字模拟,用于记录到控制台。
*** Settings ***
Library Collections
*** Variables ***
&mapping
... key1=field1 key2=field2
... key3=field3 key4=field4
*** Test Cases ***
Test Case 1
&testcase Create Dictionary
... key1=value1 key3=value3
...
Log to Console \n #For Formatting purpose
Fill Form $testcase $mapping
Test Case 2
&testcase Create Dictionary
... key1=value1 key3=value3
... key2=value2
Log to Console \n #For Formatting purpose
Fill Form $testcase $mapping
*** Keywords ***
Fill Form
[Arguments] $fields $mapping
$keys Get Dictionary Keys $fields
FOR $key IN @keys
Input Text id=$mapping[$key] $fields[$key]
END
Input Text
[Arguments] $locator $value
Log To Console Test Name: "$TEST NAME" Locator: [$locator] Value: "$value"
将产生以下结果:
==============================================================================
Test Case 1
Test Name: "Test Case 1" Locator: [id=field1] Value: "value1"
Test Name: "Test Case 1" Locator: [id=field3] Value: "value3"
| PASS |
------------------------------------------------------------------------------
Test Case 2
Test Name: "Test Case 2" Locator: [id=field1] Value: "value1"
Test Name: "Test Case 2" Locator: [id=field2] Value: "value2"
Test Name: "Test Case 2" Locator: [id=field3] Value: "value3"
| PASS |
------------------------------------------------------------------------------
【讨论】:
很好的解决方案,谢谢!但是,我确实需要让这个“Run Keyword If”方法起作用,因为我正在处理的实际表单比我发布的示例更复杂,并且包含更多元素(下拉菜单、复选框、按钮等)以上。以上是关于如果字典中存在键,则运行关键字(机器人框架)的主要内容,如果未能解决你的问题,请参考以下文章