机器人框架单击按钮与提交表单

时间:2018-08-08 22:14:08

标签: selenium-webdriver robotframework

我是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检查执行得太早了,而浏览器仍在原始登录页面上。我找到了两个可行的解决方案,但从概念上看这两个都是错误的:

  1. 使用sleep

    Submit Credentials
    sleep ${DELAY}
    Dashboard Page Should Be Open
    

    在这种情况下,${DELAY}应该很大(例如10秒),以确保该页面确实已加载,否则可能会失败。另外,我读到最佳实践是避免入睡。而且我不能使用某些Wait Until Page Contains,因为我不知道登录页面是否会再次加载并显示错误消息,还是仪表板页面是否成功加载。

  2. 使用Form Submit代替Click Button

    Submit Credentials
        Submit Form  login-form
    

Form Submit可以正常工作,但是与实际单击按钮不同,因为按钮可能具有一些onclick处理程序,这会阻止提交表单。

在其他一些线程中建议使用Wait Until Keyword Succeeds似乎无济于事,因为Click Button立即成功。

1 个答案:

答案 0 :(得分:2)

您绝对不应该使用sleep,因为它会引入人为延迟,这可能会使您的整个套件变得比所需的慢。我个人也Wait until keyword succeeds几乎不应该使用。重试时,它会在日志中填充消息。另外,我认为它掩盖了问题,而不是解决问题。

答案是使用wait关键字之一。您说您不能使用Wait Until Page Contains“”,因为我不知道,登录页面是否将再次加载并显示错误消息,还是成功加载了仪表板页面。“我不理解这种推理。

您的申请应具有确定性。也就是说,如果输入正确的登录凭据,则应保证将其转到仪表板页面,如果输入错误的条件,则应看到错误和/或重定向回登录页面。

测试的重点是验证那些条件。因此,对于要验证是否获得仪表板页面的测试,您应该在仪表板页面上找到一个元素,并在提交表单后等待其可见。如果未在适当的时间内显示,则您的测试应引发错误。

我个人建议使用页面对象。例如,我写的库[1]具有等待页面刷新的机制,并具有断言来验证您是否在您认为应该打开的页面上。但是,您不需要使用我的库-代码的核心只有几百行代码,因此编写自己的代码很容易。

[1] https://github.com/boakley/robotframework-pageobjectlibrary