对于Robot Framework中的字典循环

use*_*074 6 robotframework

有没有一种正确的方法来循环RF中的字典?我使用了pythonic方式,但失败了:

:FOR  ${key}  ${value}  IN  &{dict}
Run Code Online (Sandbox Code Playgroud)

output:FOR循环值的数量应该是其变量的倍数.得到2个变量,但有1个值.

同样,当我将字典指向为标量变量时.我在文档中找不到一个例子.有人解决了吗?

PS

我知道解决方法,你使用kw.然后,获取字典键和获取字典值,以更新您使用的值设置为字典$ {key} $ {new_value},但这似乎是人类不友好并使用几个for循环迭代而不是一个.

Jan*_*řík 13

Loop Through Dict
    &{mydict}    Create Dictionary    a=1    b=2
    :FOR    ${key}    IN    @{mydict.keys()}
    \    Log    ${mydict["${key}"]}

Loop Through Dict And Multiplicate Values
    &{mydict}    Create Dictionary    a=1    b=2
    :FOR    ${key}    IN    @{mydict.keys()}
    \    ${new_value}    Evaluate    ${mydict["${key}"]}*2
    \    Set To Dictionary   ${mydict}    ${key}=${new_value}
    Log    ${mydict}
Run Code Online (Sandbox Code Playgroud)

  • 仍然比Python更糟糕的方法(我的意思是RF),但你已经尽可能好了,谢谢你:) (2认同)

Tod*_*kov 8

要迭代字典的键,您根本不必使用任何python方法,但是insted使用Robotframework的@修饰符进行列表扩展.例如:

${mydict}    Create Dictionary    a=1    b=2
:FOR    ${key}    IN    @{mydict}
\    Log     The current key is: ${key}
# there are at least to ways to get the value for that key
# "Extended variable syntax", e.g. direct access:
\    Log     The value is: ${mydict['${key}']}
# or using a keyword from the Collections library:
\    ${value}=    Get From Dictionary    ${mydict}    ${key}
\    Log     The value through Collections is: ${value}
Run Code Online (Sandbox Code Playgroud)

键上的循环很直接,因为在python list()中,字典的强制转换实际上是其键的列表.示例代码:

mydict = {'a': 1, 'b': 2}
print(list(mydict))
# the output is 
# ['a', 'b']
Run Code Online (Sandbox Code Playgroud)

有一个python的dict方法items()迭代字典并返回一个key,value元组.遗憾的是,有在机器人框架的for循环,还没有直接的替代品-这是可以做到Get Dictionary Items关键字.它返回表单中的一维列表

['key1', value_of_key1, 'key2', value_of_key2,]
Run Code Online (Sandbox Code Playgroud)

将其与@列表扩展相结合,您可以获得每个周期中的键和值:

${mydict}    Create Dictionary      a=1    b=2
${items}     Get Dictionary Items   ${mydict}

:FOR    ${key}    ${value}    IN    @{items}
\    Log     The current key is: ${key}
\    Log     The value is: ${value}
Run Code Online (Sandbox Code Playgroud)