我需要在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}
进行比较。
先谢谢
答案 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