带有变量分配的机器人框架中的 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}   

希望这会有所帮助.

相关文章