预期的类似列表的值,得到了字符串

问题描述 投票:0回答:1

我写了一个调用子关键字的关键字。现在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'

我打算实现的目标:我使sub-keyword返回两个值:OTOID和LineIdentifier并将其存储在一个数组中。然后分别使用这两个值进一步使用。

实际:当我登录控制存储在数组中的值时,我得到一个错误说:预期的类似列表的值,得到了字符串

selenium robotframework
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.