【发布时间】:2013-11-01 23:28:12
【问题描述】:
显然,webpageupdates 显示,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 驱动程序作为调试步骤。
【问题讨论】:
-
你可以尝试使用webdriver进行调试,但我也有类似的问题。
-
我在使用 ajax 时遇到了与 capybara-webkit 相同的问题。我不知道 poltergeist 是否可以解决这个问题,但值得一试。
-
你能解释一下你看到的失败是什么吗?我不清楚“缺少 css 元素”的真正含义。
-
我看到测试失败。有时,失败是缺少 html 或 css 元素的大型堆栈跟踪,并且由于某种原因,这会引发异常。但是,大多数情况下,查找元素或单击链接或其他任何内容的测试都会失败,因为该元素(还)不存在于页面上。当添加足够的计时代码,或者如果我执行“save_and_open_page”之类的操作时,故障就会消失
-
在您提供的 2 个文档链接中,他们没有说
sleep在 Capybara 中无效。事实上,这会很奇怪,因为它是一个 Ruby 函数,而不是 Capybara DSL 的一部分。
标签: javascript ruby-on-rails capybara sleep capybara-webkit