Existe-t-il un moyen approprié de parcourir un dictionnaire en RF? J'ai utilisé la méthode Pythonic, mais j'ai échoué:
:FOR ${key} ${value} IN &{dict}
sortie: Le nombre de valeurs de boucle FOR doit être multiple de ses variables. Vous avez 2 variables mais 1 valeur.
Pareil, quand j'ai désigné dictionnaire comme variable scalaire. Je n'ai cependant pas trouvé d'exemple dans la documentation ... Est-ce que quelqu'un a résolu ce problème?
P.S.
Je suis au courant de la solution de contournement, que vous utilisez kw. Obtenir les clés du dictionnaire et Obtenir les valeurs du dictionnaire, puis, pour mettre à jour les valeurs que vous utilisez Définir vers le dictionnaire $ {key} $ {new_value}, mais cela semble être humain désagréable et utilise plusieurs itérations de boucles for à la place d'une.
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}
Pour parcourir les clés d'un dictionnaire, vous n'avez pas du tout besoin d'utiliser une méthode python, mais utilisez le modificateur @
de Robotframework pour développer la liste. Par exemple:
${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}
La boucle sur les clés fonctionne tout de suite, car en python une distribution list()
d'un dictionnaire est en fait la liste de ses clés. Exemple de code:
mydict = {'a': 1, 'b': 2}
print(list(mydict))
# the output is
# ['a', 'b']
Il existe une méthode dict de python, items()
, qui parcourt le dictionnaire et renvoie un tuple de clé, valeur. Malheureusement, Robot Framework ne peut se substituer directement aux boucles, mais cela peut être fait avec le mot clé Get Dictionary Items
. Il retourne une liste unidimensionnelle, sous la forme
['key1', value_of_key1, 'key2', value_of_key2,]
En combinant cela avec l’extension de liste @
, vous pouvez obtenir à la fois la clé et la valeur dans chaque cycle:
${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}
Une autre solution consiste à utiliser le mot clé "Obtenir du dictionnaire" lors de la boucle for.
Loop through and Log key and value in dict
[Documentation] Loops through each key and stores the key value
... in a variable that can be used during the for
... loop, as if you were iterating through python
... with "for key, value in dict.iteritems()".
&{mydict} Create Dictionary a=1 b=2
:FOR ${key} IN @{mydict.keys()}
\ ${value}= Get From Dictionary ${mydict} ${key}
\ Log ${key}, ${value}
référence: http://robotframework.org/robotframework/latest/libraries/Collections.html#Get%20From%20Dictionary
vérifier les solutions:
:FOR ${key} IN @{mydict}
# works as @{mydict.keys()}
:FOR ${key} ${value} IN @{mydict.items()}
# doesn't work at all
Trouvé une autre solution qui fonctionne:
:FOR ${key} ${value} IN Zip ${mydict.keys()} ${mydict.values()}
# And another less readable (can work without setters)
:FOR ${el} IN @{mydict.items()}
\ ${key}= Set Variable ${el[0]}
\ ${value}= Set Variable ${el[1]}