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