首页 文章

Robot Framework运行关键字如果.. ELSE失败

提问于
浏览
3

我是Robot Framework的新手,我正在尝试使用 Run Keyword If .. ELSE .. .

该怎么做:
添加新关键字以检查页面是否包含单词"closed" . 如果是,请刷新页面 . 如果没有,请单击元素"this"并继续执行该方案的其余部分 .

*** Keywords ***
Check if anything is closed
    ${ClickThis}  Click Element  xpath=//*[@id="this"]
    ${Closed}  Page Should Contain Element  xpath=//*[text()='Closed']
    Run Keyword If  ${Closed} =='PASS'  Reload Page  ELSE  ${ClickThis}

运行时会发生什么:
"Closed"未出现在页面中 . 单击"this" . 然后测试失败,因为:
Page should have contained element 'xpath=//*[text()='Closed']' but did not

请帮我纠正一下 .

编辑:已将 Page Should Contain 更改为 Page Should Contain Element . 结果相同 .

1 回答

  • 4

    ELSE 之后的参数应该是另一个关键字 .


    有效发生的是这条线

    ${ClickThis}  Click Element  xpath=//*[@id="this"]
    

    你已经为 ${ClickThis} 指定了值 - 这是什么, ${None} ,因为 Click Element 没有返回值 .

    在这一行,你再次分配 ${Closed} 的返回值 Page Should Contain

    ${Closed}  Page Should Contain  xpath=//*[text()='Closed']
    

    ,这不是你所期望的 - 如果文本不存在,那么本身关键字要么失败(如你的情况那样),要么默默地传递;但不会返回值 .

    因此,要获得您尝试完成的操作,请使用Run Keyword And Return status作为"page should contain" - 它将根据wrapped关键字的退出状态返回True / False:

    ${Closed}=  Run Keyword And Return Status  Page Should Contain  xpath=//*[text()='Closed']
    

    如果文本在页面中, ${Closed} 的值将为 ${True} ,否则为 ${False} ;在 Run Keyword If 块中使用它,传递 keyword 作为第二个参数:

    Run Keyword If    ${Closed}  Reload Page    ELSE    Click Element  xpath=//*[@id="this"]
    

相关问题