我是Robot Framework的新手,并且坚持使用SeleniumLibrary
进行非常简单的登录网页测试:
*** Test Cases ***
Valid Login
Open Browser To Login Page
Input Username admin
Input Password test
Submit Credentials
Dashboard Page Should Be Open
[Teardown] Close Browser
除该问题外,大多数关键字与问题无关
Submit Credentials
Click Button login-button
Dashboard Page Should Be Open
Location Should Be ${DASHBOARD URL}
Title Should Be Dashboard
如果运行此测试,它将失败,因为Location Should Be
检查执行得太早了,而浏览器仍在原始登录页面上。我找到了两个可行的解决方案,但从概念上看这两个都是错误的:
使用sleep
Submit Credentials
sleep ${DELAY}
Dashboard Page Should Be Open
在这种情况下,${DELAY}
应该很大(例如10秒),以确保该页面确实已加载,否则可能会失败。另外,我读到最佳实践是避免入睡。而且我不能使用某些Wait Until Page Contains
,因为我不知道登录页面是否会再次加载并显示错误消息,还是仪表板页面是否成功加载。
使用Form Submit
代替Click Button
:
Submit Credentials
Submit Form login-form
Form Submit
可以正常工作,但是与实际单击按钮不同,因为按钮可能具有一些onclick
处理程序,这会阻止提交表单。
在其他一些线程中建议使用Wait Until Keyword Succeeds
似乎无济于事,因为Click Button
立即成功。
答案 0 :(得分:2)
您绝对不应该使用sleep
,因为它会引入人为延迟,这可能会使您的整个套件变得比所需的慢。我个人也Wait until keyword succeeds
几乎不应该使用。重试时,它会在日志中填充消息。另外,我认为它掩盖了问题,而不是解决问题。
答案是使用wait
关键字之一。您说您不能使用Wait Until Page Contains
“”,因为我不知道,登录页面是否将再次加载并显示错误消息,还是成功加载了仪表板页面。“我不理解这种推理。>
您的申请应具有确定性。也就是说,如果输入正确的登录凭据,则应保证将其转到仪表板页面,如果输入错误的条件,则应看到错误和/或重定向回登录页面。
测试的重点是验证那些条件。因此,对于要验证是否获得仪表板页面的测试,您应该在仪表板页面上找到一个元素,并在提交表单后等待其可见。如果未在适当的时间内显示,则您的测试应引发错误。
我个人建议使用页面对象。例如,我写的库[1]具有等待页面刷新的机制,并具有断言来验证您是否在您认为应该打开的页面上。但是,您不需要使用我的库-代码的核心只有几百行代码,因此编写自己的代码很容易。
[1] https://github.com/boakley/robotframework-pageobjectlibrary