根据网页更新,显然,sleep
或者wait_until
使用最新版本的 Capybara 无效。
sleep(1)
但是,如果我向测试添加调用,我有一组测试仅适用于快速机器。也就是说,一个看起来像这样的测试:
describe "dosimeters page" do
before do
click_link("Dosimeter Read History", :match=>:first)
end
...
变成
describe "dosimeters page" do
before do
unix_wait
click_link("Dosimeter Read History", :match=>:first)
end
...
我定义unix_wait
为:
def unix_wait
case RbConfig::CONFIG['host_os']
when /darwin/
when /linux-gnu/
sleep(1)
end
end
问题是,我有一台旧的 Ubuntu 12.04 四核笔记本电脑在 Jenkins 上运行这些测试,并且在没有unix_wait
调用的情况下一切正常。测试在运行 Ubuntu 13.10 的六核桌面和 macbook pro 笔记本电脑上随机失败,但如果我添加unix_wait
调用,则测试通过。
测试失败本身表明加载失败(即,在某些运行中缺少 css 元素,但在其他运行中没有),并且当手动加载站点时,被测试的东西实际上可以工作。
那么这里的适当行动是什么?显然,sleep
在测试期间是不允许的,wait_until
. 然而,睡眠是有效的,但它对我来说似乎非常粗糙。我应该看#synchronized
吗?根据我从这些博客文章中收集到的信息,当我调用时已经调用click_link
了它,并且测试仍然失败。
这里接受的协议是什么?
我应该补充一下,因为我认为这很重要:这些都是 javascript 测试。我正在使用基于 qt4(不是 qt5)构建的 capybara-webkit。我正在考虑切换到 poltergeist 或其他一些 javascript 驱动程序作为调试步骤。