Selenium Robotframework-使用运行关键字If/ELSE时出错

Selenium Robotframework-使用运行关键字If/ELSE时出错,selenium,robotframework,Selenium,Robotframework,我正在努力使用Selenium在robotframework中创建一个测试用例。 基本上,我的目标是使用一些xpath查询在FOR循环中捕获一些web元素,检查页面上是否存在实际的web元素,以防下一步无法通过。 我创建了以下脚本: *** Test Cases *** FOR ${href} IN @{hrefs} Log ${href} ${pl}= Run Keyword And Continue On Failure

我正在努力使用Selenium在robotframework中创建一个测试用例。 基本上,我的目标是使用一些xpath查询在FOR循环中捕获一些web元素,检查页面上是否存在实际的web元素,以防下一步无法通过。 我创建了以下脚本:

*** Test Cases ***
FOR     ${href}     IN      @{hrefs}
        Log     ${href}
    ${pl}=       Run Keyword And Continue On Failure    Get Element Count        xpath://a[contains(@href,'test')]
        ${photo_link}=    Run Keyword If    ${pl}> 0 Get WebElement    xpath://a[contains(@href,'test')]
            ${test_a}=    Set Variable    ${photo_link.get_attribute('innerHTML')}
    ELSE
        ${test_a}=  do something else
END
    Close All Browsers
但我总是犯错误:

'Else' is a reserved keyword. It must be in uppercase (ELSE) when used as a marker with 'Run Keyword If'.
检查文档时,我无法找到任何解决方案。 我是否使用了错误的语法? 是否有其他方法可以避免和跳过不匹配的“获取WebElements”?
谢谢

有两个语法错误,框架解析器为其中一个抛出异常-修复此错误后,您将看到另一个异常。从“隐藏的错误”开始,在这篇文章中:

Run Keyword If    ${pl}> 0 Get WebElement
,在条件
${pl}>0
和操作when true(获取Webelements)之间没有分隔符(2个或更多空格)。应该是

Run Keyword If    ${pl}> 0    Get WebElement
您看到的错误来自使用保留关键字
ELSE
;一般来说,它用于规定条件为false时的操作,并且是调用
运行关键字If
的一部分,例如,它应该写为:

Run Keyword If     condition    Action If True    ELSE    Action If False
或者像这样-有3个点,用于继续-当写在多行上时:

Run Keyword If     condition    Action If True    
...    ELSE    Action If False
你缺乏“延续性”(一个我当场编造的术语,不要引用我的话:)《用户指南》使用了其他东西)-这是一条独立的、独立的行,因此是错误的


为了修复它,最好使用框架版本4中引入的新IF/ELSE块;它看起来像是:

IF    ${pl}> 0
    ${photo_link}=    Get WebElement    xpath://a[contains(@href,'test')]
    ${test_a}=    Set Variable     ${photo_link.get_attribute('innerHTML')}
ELSE
    ${test_a}=    do something else
END

它看起来与您的代码几乎相同,但如果,则不使用
Run关键字。在RF v3.x中,通过使用关键字,您必须使用
运行关键字
在真正的blcok中使用多个关键字,并且-您不能在
运行关键字
中执行变量赋值。您想要实现的功能可以在那里完成,流程略有不同,看起来有点笨拙,但新的IF/ELSE语法是您最安全的选择。

有两个语法错误,框架解析器会为其中一个抛出异常-修复此错误后,您将看到另一个异常。从“隐藏的错误”开始,在这篇文章中:

Run Keyword If    ${pl}> 0 Get WebElement
,在条件
${pl}>0
和操作when true(获取Webelements)之间没有分隔符(2个或更多空格)。应该是

Run Keyword If    ${pl}> 0    Get WebElement
您看到的错误来自使用保留关键字
ELSE
;一般来说,它用于规定条件为false时的操作,并且是调用
运行关键字If
的一部分,例如,它应该写为:

Run Keyword If     condition    Action If True    ELSE    Action If False
或者像这样-有3个点,用于继续-当写在多行上时:

Run Keyword If     condition    Action If True    
...    ELSE    Action If False
你缺乏“延续性”(一个我当场编造的术语,不要引用我的话:)《用户指南》使用了其他东西)-这是一条独立的、独立的行,因此是错误的


为了修复它,最好使用框架版本4中引入的新IF/ELSE块;它看起来像是:

IF    ${pl}> 0
    ${photo_link}=    Get WebElement    xpath://a[contains(@href,'test')]
    ${test_a}=    Set Variable     ${photo_link.get_attribute('innerHTML')}
ELSE
    ${test_a}=    do something else
END

它看起来与您的代码几乎相同,但如果
,则不使用
Run关键字。在RF v3.x中,通过使用关键字,您必须使用
运行关键字
在真正的blcok中使用多个关键字,并且-您不能在
运行关键字
中执行变量赋值。你想要实现的目标可以在那里实现,流程略有不同,看起来有点尴尬,但新的IF/ELSE语法是你最安全的选择。

使用新语法的示例需要在
ELSE
后面加一个
结尾。谢谢@BenceKaulics(你应该直接编辑它:)是的,我应该这样做,但我不喜欢编辑新的答案,它们往往会有很大的变化使用新语法的示例需要在
ELSE
后面加一个
结尾。谢谢@BenceKaulics(你应该直接编辑它:)是的,我应该编辑,但我不喜欢编辑新的答案,它们往往会有很大的变化。:)