Robotframework 使用For循环检查状态

Robotframework 使用For循环检查状态,robotframework,Robotframework,我正在尝试编写一个测试套件来检查页面中的状态。状态显示为文本。要查看任何状态更改,需要首先刷新页面。通常,状态更改在一分钟内发生 因此,如果手动完成,我必须: 登上一页 检查是否显示状态 检查显示的状态是否为“准备就绪”: 如果“准备就绪”,则继续执行任何进一步的操作 如果是其他内容,请重新加载页面,直到状态为“Good to go” 有两个半途而废的例子: 当我登陆页面时,如果状态为“goodtogo”,那么这很有效。如果不是,页面将重新加载10次,如果同时状态变为“Good to go”

我正在尝试编写一个测试套件来检查页面中的状态。状态显示为文本。要查看任何状态更改,需要首先刷新页面。通常,状态更改在一分钟内发生

因此,如果手动完成,我必须:

  • 登上一页
  • 检查是否显示状态
  • 检查显示的状态是否为“准备就绪”:
    • 如果“准备就绪”,则继续执行任何进一步的操作
    • 如果是其他内容,请重新加载页面,直到状态为“Good to go”
  • 有两个半途而废的例子:

  • 当我登陆页面时,如果状态为“goodtogo”,那么这很有效。如果不是,页面将重新加载10次,如果同时状态变为“Good to go”,则忽略它并继续重新加载页面

    ${Status}  Get Text  xpath=//*[@id="status"]
    :FOR    ${CheckStatus}    IN RANGE  10
    \   ${StatusVisible}  Run Keyword And Return Status  Page Should Contain Element  ${Status}
    \   Run Keyword If  '${Status}'=='Good to go'  Exit For Loop  ELSE  Reload Page
    
  • 当我运行它时,将返回此错误:

  • 关键字'BuiltIn.Continue For Loop If'应为1个参数,但得到2个



    我非常感谢您的帮助。

    在您的第二个示例中,关键字“Continue For Loop If”应该只包含一个参数。您应该删除“重新加载页面”。这就是为什么你会犯这个错误

     Continue For Loop If  '${Status}'!=='Good to go'  
    

    如果
    只接受一个参数,但您提供了2个参数,则继续循环

    如果必须重新加载页面以检查状态是否已更改为所需状态,则可以执行以下操作:

    :FOR    ${CheckStatus}    IN RANGE    10
    \    ${Status}    Get Text    xpath=//*[@id="status"]
    \    Page Should Contain    ${Status}    # Check that the element exists
    \    Exit For Loop If    '${Status}'=='Good to go'    # Break out of loop if status is expected value
    \    Run Keyword    Reload Page    # Otherwise, reload and loop again
    

    这确实解决了这个错误(我得到了另一个)。但是,如果页面未重新加载,则无法重新检查状态。让我重新措辞:重新加载页面以检查状态是否已更改为所需状态是很简单的。如果您甚至不使用
    ${StatusVisible},则调用
    Run关键字并返回status
    ,目的是什么
    ?在解决状态检查问题后,我打算添加一个可见性检查。“页面应包含元素”导致未找到元素的错误。“页面应包含”就是其中的关键。但是,它会导致另一个问题:如果状态在重新加载之间更改为所需的状态,测试将失败,因为它暗示应包含旧状态(页面应包含文本“错误状态”,但未包含)。删除此检查会使测试的行为完全与我的示例#1中的测试相同(即使出现了所需的状态,也会重新加载页面10次)。您可以在循环的开头抓取文本。
    :FOR    ${CheckStatus}    IN RANGE    10
    \    ${Status}    Get Text    xpath=//*[@id="status"]
    \    Page Should Contain    ${Status}    # Check that the element exists
    \    Exit For Loop If    '${Status}'=='Good to go'    # Break out of loop if status is expected value
    \    Run Keyword    Reload Page    # Otherwise, reload and loop again