带有变量分配的机器人框架中的 IF ELSE
Posted
技术标签:
【中文标题】带有变量分配的机器人框架中的 IF ELSE【英文标题】:IF ELSE in robot framework with variables assignment 【发布时间】:2017-05-18 18:21:35 【问题描述】:我需要在机器人框架中有条件地执行一些关键字,但我不知道该怎么做,它不起作用。我尝试了很多选项,但我想我的“IF-ELSE”语句完全错误..
Choose Particular Filter $FILTER And Uncheck All Values
$bool= is filter opened $AVAILABLE FILTERS $FILTER
$uncheck_all_button= run keyword if "$bool" == "True" uncheck all in filter $AVAILABLE FILTERS $FILTER
... click element $uncheck_all_button
... ELSE
... Set variable $particular_filter: find particular filter $AVAILABLE FILTERS $FILTER
... click element $particular_filter
... Set variable $uncheck_all_button: uncheck all in filter $AVAILABLE FILTERS $FILTER
... click element $uncheck_all_button
它失败了:Variable '$particular_filter' not found.
但是如果我运行它,它甚至不应该去 ELSE 分支,因为 $bool 是 True...
我的自定义函数is filter opened
只是检查过滤器是否已经打开 - 如果是,则返回 True。
我的自定义函数uncheck all in filter
只返回“取消选中所有”按钮的 XPATH。
我的自定义函数find particular filter
返回“过滤器下拉菜单”按钮的 XPATH。
在这整个关键字中,我需要检查过滤器下拉菜单是否已经打开——如果是,那么我必须直接点击$uncheck_all_button
,否则如果过滤器下拉菜单还没有打开,我需要先点击过滤器本身@ 987654327@ 之后我可以点击$uncheck_all_button
我还尝试了“运行关键字”这一行:
$uncheck_all_button= run keyword if "$bool" == "True" Set Variable uncheck all in filter $AVAILABLE FILTERS $FILTER
或者这个:
run keyword if "$bool" == "True" $uncheck_all_button= uncheck all in filter $AVAILABLE FILTERS $FILTER
我也试过$bool == "True"
和$bool == True
但没有什么真正起作用,仍然是同样的错误:(
非常感谢您的帮助!
【问题讨论】:
我建议您使用“Log To Console $bool”查看它的值,然后添加条件。 当然,这是我做的第一件事——正如我所写,值为 True..所以不明白为什么它会转到 else 分支.. 【参考方案1】:在每个块中使用带有多个语句的 IF/THEN/ELSE 在 Robot 中不起作用(或者我想您必须使用“运行关键字”,但这会变得不可读)。所以我会用这种方式重构你的代码:
Choose Particular Filter $FILTER And Uncheck All Values
$is_filter_opened= is filter opened $AVAILABLE FILTERS $FILTER
run keyword if $is_filter_opened actions_when_unchecked
... ELSE actions_when_checked
actions_when_unchecked
uncheck all in filter $AVAILABLE FILTERS $FILTER
click element $uncheck_all_button
actions_when_checked
$particular_filter: find particular filter $AVAILABLE FILTERS $FILTER
click element $particular_filter
$uncheck_all_button: uncheck all in filter $AVAILABLE FILTERS $FILTER
click element $uncheck_all_button
希望这会有所帮助。
【讨论】:
【参考方案2】:根据以下语法,更新您的代码并检查它。
IF-ELSE 的语法:
Run Keyword If '$Condition'== 'True' Run Keywords <Keyword 1> <Keyword 2>
... ELSE <Keyword 1>
基于条件的“设置变量”语法:
$Status= Run Keyword If '$Condition'== 'True' Set Variable <Yes> <No>
根据你在 IF 部分的代码,
如果“bool=true”,它将只执行自定义关键字“uncheck all in filter”,而不执行“Click element”关键字。如果您希望根据条件执行两个关键字,请使用 IF-ELSE 语法中提到的“运行关键字”关键字。
【讨论】:
【参考方案3】:从4以上版本开始,支持IF-Else内部赋值的机器人框架 参考:https://robocorp.com/docs/languages-and-frameworks/robot-framework/conditional-execution
IF $random == $NUMBER_TO_PASS_ON
$var = set variable 10
ELSE IF $random > $NUMBER_TO_PASS_ON
$var = set variable $random
ELSE
$var = set variable $NUMBER_TO_PASS_ON
END
【讨论】:
这太棒了。 “运行关键字 if”对我来说很烦人。【参考方案4】:非常感谢 Laurent,您的解决方案是正确的! 我只需要进行一些小改动即可使其正常工作:
Choose Particular Filter $FILTER And Uncheck All Values
$is_filter_opened= is filter opened $AVAILABLE FILTERS $FILTER
run keyword if $is_filter_opened actions_when_unchecked $FILTER
... ELSE actions_when_checked $FILTER
actions_when_unchecked $FILTER
$uncheck_all_button= uncheck all in filter $AVAILABLE FILTERS $FILTER
click element $uncheck_all_button
actions_when_checked $FILTER
$particular_filter= find particular filter $AVAILABLE FILTERS $FILTER
click element $particular_filter
$uncheck_all_button= uncheck all in filter $AVAILABLE FILTERS $FILTER
click element $uncheck_all_button
【讨论】:
欢迎来到 SO!顺便说一句,您实际上可以使用您所做的更改来编辑@Laurent 的答案。【参考方案5】:$error_status Set Variable False
log $error_status
Run Keyword If $error_status calltrue ELSE login_sucessful
calltrue and login_sucessful are keywords it can be any keyword of your choice. so in this case login_sucessful keyword is executed. if error_status is set to true then calltrue function will get executed.
请注意缩进单个空格会扰乱您的执行流程
【讨论】:
以上是关于带有变量分配的机器人框架中的 IF ELSE的主要内容,如果未能解决你的问题,请参考以下文章
机器人框架:UnboundLocalError:分配前引用的局部变量“cellValue”