Как передать словарь в качестве аргумента в некоторый метод, который будет динамически извлекать всех пользователей из метода и выполнять нужные операции? - PullRequest
0 голосов
/ 22 января 2019

Я столкнулся с одной проблемой, в которой мне нужно передать словарь (или некоторый другой тип данных для хранения данных) в качестве аргумента в некотором методе, который будет динамически извлекать всех пользователей из метода и выполнять нужные операции. Мои вопросы:

1) Возможно ли это в каркасе робота?

2) Если возможно, то как мы будем это делать?

Adding Participant
...  Number_of_users= depend on participants name
...  Participant name= x, y, z, etc..


Adding Participant 
  [Arguments]  ${Number_of_users}  ${Participant name}
  :FOR    ${ELEMENT}    IN   ${Participant name} -->  [How this participant name will be stored dynamically ?]
  \    Log    ${ELEMENT}
  \    Run Keyword  ${ELEMENT} {‌{‌{‌{It will do some operations for user x then in next loop y and so on}}}

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Чтобы передать словарь ключевому слову, вы делаете это как любой другой аргумент. В вашем случае, если у вас есть словарь с именем ${Participants}, вы должны передать его как ${Participants}.

Что касается перебора словаря, вам необходимо заменить $ на @ и использовать FOR / IN. В этом случае переменная цикла будет иметь ключ, который вы можете использовать для получения значения.

Пример:

*** Test Cases ***
Example
    ${Participants}  Create Dictionary  user1="John"  user2="Jane"
    Add Participant  2  ${Participants}


*** Keywords ***
Add Participant
    [Arguments]  ${Number_of_users}  ${Participants}
    :FOR  ${ELEMENT}  IN  @{Participants}
    \  log  element: ${Participants}[${ELEMENT}]

Выше приведены результаты в следующем журнале:

screenshot of log file

0 голосов
/ 22 января 2019

Как передать словарь в качестве аргумента ключевого слова? - так же, как и любой другой тип данных. В приведенном ниже примере вы можете увидеть это и два простых способа итерации (зацикливания) ключей словаря:

*** Test Cases ***
A case
    ${a dict}=    Create Dictionary     key1=value1    key2=another value
    My Keyword That Works With Dictionaries    ${a dict}

*** Keywords ***
My Keyword That Works With Dictionaries
[Arguments]     ${dct}

    ${the type}=    Evaluate    type($dct)
    Log To Console  The passed argument is of type ${the type}    # will print dict

    ${all keys in the dict}=    Get Dictionary Keys    ${dct}   # a list will all dictionary keys

    # 1st way to iterate/loop
    :FOR   ${key}    IN    @{all keys in the dict}
    \    Log To Console   Working with key ${key}
    \    ${value}=     Get From Dictionary   ${dct}    ${key}
    \    Log To Console   Its value is "${value}" (another way to get it is ${dct['${key}']})

    # the 2nd way
    :FOR   ${key}    IN    @{dct}  
    # this comes from the python's syntax "for key in dct:" - an 
    # iterator over a dictionary returns its keys
    \    Log To Console   Working with key ${key}
    # and so on
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...