IF ELSE在具有变量赋值的机器人框架中 [英] IF ELSE in robot framework with variables assignment
问题描述
我需要在机器人框架中有条件地执行一些关键字,但我不知道该怎么做,它不起作用。我尝试了很多选项,但我想我的IF-ELSE语句完全错误..
I need to execute some keywords conditionally in robot framework, but I dont know how to do it, it does not work. I tried many options, but I guess I have the "IF-ELSE" statement completely wrong..
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}
它失败了:找不到变量'$ {special_filter}。
但是如果我运行它,它甚至不应该去ELSE分支,因为$ {bool}是真的...
我的自定义函数是过滤器打开的
只检查过滤器是否已经打开 - 如果是,则返回True。
我的自定义函数取消选中过滤器中的所有内容
只返回取消全部选中按钮的XPATH。
我的自定义函数查找特定过滤器
返回过滤器下拉列表按钮的XPATH。
在这整个关键字中我需要检查过滤器下拉列表是否已经打开 - 如果是,那么我必须直接点击 $ {uncheck_all_button}
,否则如果过滤器下拉列表尚未打开,我需要先点击过滤器本身 $ {specific_filter}
然后点击 $ {uncheck_all_button }
It fails with: Variable '${particular_filter}' not found.
But in case I run it it should not even go to ELSE branch because ${bool} is True...
My custom function is filter opened
just checks whether filter is already opened - if so, returns True.
My custom function uncheck all in filter
just returns XPATH of "uncheck all" button.
My custom function find particular filter
returns XPATH of "filter dropdown" button.
In this whole keyword I need to check whether the filter dropdown is already opened - if so, then I have to click directly on ${uncheck_all_button}
, else if the filter dropdown is not opened yet, I need to first click on the filter itself ${particular_filter}
and after that I can click on ${uncheck_all_button}
我也试过run keyword这一行:
I also tried the "run keyword" line to have like this:
${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} ==真
但没有真正有效,仍然是同样的错误:(
But nothing really works, still the same error :(
非常感谢你的帮助!
推荐答案
在每个块中使用多个语句的IF / THEN / ELSE在Robot中不起作用(或者你必须使用运行关键字,但这会变得难以理解)。因此,我会以这种方式重构您的代码:
Having IF/THEN/ELSE with multiple statements in each block does not work in Robot (or you would have to use "Run Keywords" I suppose, but that would become unreadable). So I would refactor your code this way:
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}
希望这会有所帮助。
这篇关于IF ELSE在具有变量赋值的机器人框架中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!