IF ELSE在具有变量赋值的机器人框架中 [英] IF ELSE in robot framework with variables assignment

查看:174
本文介绍了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}

它失败了:找不到变量'$ {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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆