由于某些我无法理解的原因,我的测试用例在Firefox上失败但在Chrome上成功执行。
例如,这个简单的测试用例在Chrome上执行得很好但在Firefox上会失败:
*** Settings ***
Documentation This is some test sample login test
Library Selenium2Library
Resource ../Resources/common_resources.robot
Resource ../Resources/users.robot
*** Test Cases ***
Test Robot Framework Logging
[Documentation] Some info about the valid login test step
[Tags] Login
Open Browser ${LOGIN URL} ${BROWSER}
Input Text Username ${VALID USER}
Input Password Password ${VALID PASSWORD}
Click Button Log On
Page Should Contain Welcome
[Teardown] Close Browser
但是,如果我在按钮单击和断言之间放置一个Sleep 10
关键字,它就可以工作。这让我认为由于某种原因,gecko webdriver参与其中。
我正在运行最新版本的robotframework-selenium2library和webdriver。
我的理解是,根本不鼓励在代码中包含Sleeps。我该如何解决这个问题?我应该在哪里看?
非常感谢您提供任何建议!
答案 0 :(得分:2)
你应该避免睡觉是正确的。等待明确的条件比等待一段固定的时间要好得多。如果你养成了很多调用sleep
的习惯,你最终会导致你的chrome测试运行速度慢得多。
根据我的经验,测试在firefox上的运行速度要慢于chrome,所以你必须小心等待页面加载和元素可用。一个简单的解决方案可能是用page should contain替换Wait until page contains并使用合适的超时。
您还可以使用更高级的库,该库具有一些内置支持,可以等待加载页面,例如robotframework-pageobjectlibrary。该库使您可以轻松编写自己的关键字,这些关键字可以访问完整的selenium API,包括wait on various conditions的功能。页面对象库还提供了python上下文管理器,它们包含导致新页面加载的操作。