Ожидаемое значение в виде списка, полученная строка - PullRequest
0 голосов
/ 03 апреля 2019

Я написал ключевое слово, которое вызывает под-ключевое слово. Теперь ключевое слово sub возвращает два значения, которые я пытаюсь сохранить в массиве, назначенном основному ключевому слову. Когда я записываю в консоль возвращенные значения, выдается сообщение об ошибке: ожидаемое значение в виде списка, получена строка

Я пробовал следующие обходные пути (не удалось):

1. Attempt1:
@{Items1}    Run keyword if    '${INACTIVEStateCount}'!='0'    INACTIVE OTOID selector    ${StateCount}
Log To console  Values are ${Items1}

2. Attempt2:
@{Items1}    Run keyword if    '${INACTIVEStateCount}'!='0'    INACTIVE OTOID selector    ${StateCount}
${Items2}   Create List    @{Items1}
Log To console  Values are ${Items2}

Main keyword:

@{Items1}    Run keyword if    '${INACTIVEStateCount}'!='0'    INACTIVE OTOID selector    ${StateCount}
${Items2}    Create List    @{Items1}
Log To console    Values are ${Items2}

SubKeyword:

INACTIVE OTOID selector
    [Documentation]    Used to select Inactive OTOIDs
    [Arguments]    ${StateCount}    ${LocatorWaitTime}=${defaultWait time}
    :FOR    ${INDEX}    IN RANGE    1    ${StateCount}
    \    ${Check}=    Run keyword and return status    Page should contain element     xpath=//*@id='lookupFiberDetailsResult']/table/tbody/tr[${INDEX}]/td[4][text()='INACTIVE']
    \    ${OTO_IDStatus}    Run keyword if    '${Check}'=='True'    Get Text             xpath=//*[@id='lookupFiberDetailsResult']/table/tbody/tr[${INDEX}]/td[4][text()='INACTIVE']
    \    Log to Console    Loop${INDEX} - OTOID:${OTO_IDStatus}
    \    ${OTO_ID}    Run keyword if    '${OTO_IDStatus}'!='None'   Get Text         xpath=//*[@id='lookupFiberDetailsResult']/table/tbody/tr[${INDEX}]/td[2]               
    \    ${LineIdentifier}    Run keyword if    '${OTO_IDStatus}'!='None'  Get Text    xpath=//*[@id='lookupFiberDetailsResult']/table/tbody/tr[${INDEX}]/td[1]             
    \    Run keyword if    '${OTO_IDStatus}'!='None'    Log to Console                  OTOID is: ${OTO_ID}
    \    Run keyword if    '${OTO_IDStatus}'!='None'    Log to Console                  OTOID is: ${LineIdentifier}
    \    Run Keyword If    '${OTO_IDStatus}'!='None'    [Return]    ${OTO_ID}
    \    Run Keyword If    '${OTO_IDStatus}'!='None'    [Return]    ${LineIdentifier}
    \    Exit For Loop if  '${OTO_IDStatus}'!='None'

Чего я намерен достичь: Я заставляю под-ключевое слово возвращать два значения: OTOID и LineIdentifier и сохранять его в массиве. А затем используйте эти два значения отдельно для дальнейшего использования.

Фактический: Когда я регистрирую в консоли значения, хранящиеся в массиве, я получаю сообщение об ошибке: Ожидаемое значение, похожее на список, получило строку

1 Ответ

1 голос
/ 03 апреля 2019

Проблема в том, что вы пытаетесь сохранить возвращаемые значения из ключевого слова sub в виде массива / списка, но возвращаете строки из него.

*** Keywords ***
Main keyword
    ${OTO_ID}    ${LineIdentifier}    Run keyword if    '${INACTIVEStateCount}'!='0'    INACTIVE OTOID selector    ${StateCount}

INACTIVE OTOID selector
    Return From Keyword If    '${OTO_IDStatus}'!='None'   ${OTO_ID}  ${LineIdentifier}

Это вернет значения ${OTO_ID} и ${LineIdentifier} как отдельные переменные, а не как массивы.

Обратите внимание, что я проигнорировал другие шаги в ключевом слове sub, чтобы сделать ответ проще.

Строка (и), которые необходимо заменить:

Run Keyword If    '${OTO_IDStatus}'!='None'    [Return]    ${OTO_ID} 
Run Keyword If    '${OTO_IDStatus}'!='None'    [Return]    ${LineIdentifier}

Обновление: Если вы хотите строго вернуть значения в виде списка, используйте код ниже

*** Keywords ***
Main keyword
    ${Identifiers}    Run keyword if    '${INACTIVEStateCount}'!='0'    INACTIVE OTOID selector    ${StateCount}

INACTIVE OTOID selector
    ${Identifiers}    Create List
    .
    <Your FOR loop here>
    .
    \ Run Keyword If    '${OTO_IDStatus}'!='None'   Append to List  ${identifiers}    ${OTO_ID}    ${LineIdentifier}
    Exit For Loop If  '${OTO_IDStatus}'!='None'

    Return From Keyword If    '${OTO_IDStatus}'!='None'    ${Identifiers}

Ссылка: Руководство пользователя робота

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...