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

时间:2017-05-26 10:30:10

标签: robotframework

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

应该做什么:
添加新关键字以检查页面是否包含“已关闭”一词。如果是,请刷新页面。如果没有,请单击“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}

运行时会发生什么:
“已关闭”不会出现在页面中。单击“此”。然后测试失败,因为:
Page should have contained element 'xpath=//*[text()='Closed']' but did not

请帮我纠正。

编辑:将Page Should Contain更改为Page Should Contain Element。相同的结果。

1 个答案:

答案 0 :(得分: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作为“页面应包含” - 它将根据包装关键字的退出状态返回True / False:

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

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

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