预期的类似列表的值,有字符串

时间:2019-04-03 03:43:03

标签: selenium robotframework

我写了一个叫子关键字的关键字。现在,sub关键字返回两个值,我试图将其存储在分配给main关键字的数组中。当我登录控制台以返回值时,它会显示一条错误消息-预期的类似列表的值,有字符串

我尝试了以下解决方法(失败):

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 个答案:

答案 0 :(得分:1)

问题是您试图将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}

参考:Robot User guide