RobotFramework中的嵌套循环

时间:2017-04-21 13:41:22

标签: java selenium for-loop nested robotframework

我需要在Robot框架中创建一个嵌套循环。 你能帮帮我吗?

${contents}=    Get File    ${file path}
 @{lines}=    Split to lines    ${contents}
 ${matched elements}=    Get Webelements    ${LABEL PORTAIL XPATH }
 : FOR    ${element}    IN    @{matched elements}
 \    ${text}=    Get Text    ${element}
 \    : FOR    ${line}    IN    @{lines}
 \    Run Keyword If    '${text}' == '${line}'    Log    '${text} matched'

我需要一个嵌套循环,将所有${text}与文件中的所有@{lines}进行比较。

先谢谢

4 个答案:

答案 0 :(得分:3)

RF中没有嵌套循环;只能通过在外部循环中调用内部循环的关键字来完成。

在你的特定情况下,你可以没有它 - 因为你想匹配整行,这是可行的应该包含:

${contents}=    Get File    ${file path}
@{lines}=    Split to lines    ${contents}
${matched elements}=    Get Webelements    ${LABEL PORTAIL XPATH }
: FOR    ${element}    IN    @{matched elements}
\  ${text}=     Get Text    ${element}
\  ${present}=  Run Keyword And Return Status    Should Contain    ${lines} 
${text}
\    Run Keyword If  ${present}    Log    '${text} matched'

如果您正在进行部分匹配 - 即${text}成为${lines}成员的一部分,那么就不可能这样。

答案 1 :(得分:2)

如果没有包含内部循环的自定义关键字,则无法实现。 请参阅doc:http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#nested-for-loops

我会说这种逻辑应该总是使用一些更强大的语言(python,java ...)编写,然后从RF调用。

答案 2 :(得分:2)

从 4.0 版本开始,Robot Framework(终于:)支持嵌套 for 循环。
所以问题中的代码,使用新的 FOR 语法将是:

${contents}=  Get File    ${file path}
@{lines}=     Split to lines    ${contents}
${matched elements}=    Get Webelements    ${LABEL PORTAIL XPATH }
FOR    ${element}    IN    @{matched elements}
    ${text}=    Get Text    ${element}
    FOR    ${line}    IN    @{lines}
        Run Keyword If    '${text}' == '${line}'    Log    '${text} matched'
    END
END

4.0 版本还带来了 IF/ELSE 流控制,因此可以使内循环在第一次匹配时中断:

    FOR    ${line}    IN    @{lines}
        IF    '${text}' == '${line}'
            Log    '${text} matched'
            Exit For Loop
        END
    END

,对比使用 Run Keyword If 和 `Run Keywords:

    FOR    ${line}    IN    @{lines}
        Run Keyword If    '${text}' == '${line}'    Run Keywords    Log    '${text} matched'
                                                       ...    AND   Exit For Loop
    END

答案 3 :(得分:0)

嵌套for循环

嵌套for循环直接不支持,但可以在for循环中使用user关键字,并在那里使用另一个for循环。

*** Keywords ***
Handle Table
    [Arguments]    @{table}
    :FOR    ${row}    IN    @{table}
    \    Handle Row    @{row}

Handle Row
    [Arguments]    @{row}
    :FOR    ${cell}    IN    @{row}
    \    Handle Cell    ${cell}

参考:http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#nested-for-loops