带有变量分配的机器人框架中的 IF ELSE
问题描述
我需要在机器人框架中有条件地执行一些关键字,但我不知道该怎么做,它不起作用.我尝试了很多选项,但我想我的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}
它失败了:Variable '${particular_filter}' not found.
但是如果我运行它,它甚至不应该去 ELSE 分支,因为 ${bool} 是 True...我的自定义函数 is filter opens
只是检查过滤器是否已经打开 - 如果是,则返回 True.我的自定义函数 uncheck all in filter
只返回uncheck all"按钮的 XPATH.我的自定义函数 find specific filter
返回filter dropdown"按钮的 XPATH.在这整个关键字中,我需要检查过滤器下拉菜单是否已经打开 - 如果是,那么我必须直接点击 ${uncheck_all_button}
,否则如果过滤器下拉菜单尚未打开,我需要首先点击过滤器本身 ${particular_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}
我还尝试了运行关键字"这一行:
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} == True
但没有什么真正起作用,仍然是同样的错误:(
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}
希望这会有所帮助.
相关文章