【发布时间】:2012-10-23 00:18:18
【问题描述】:
我们有一个用于 Rails 项目的大型黄瓜套件。都是水豚,主要是通过 Firefox。
最近我们开始经历失败,我正在努力解决问题。这是它的样子:
- 在某些时候(总是一样),capybara
visit在尝试加载页面时卡住了,capybara 最终超时以查找正在寻找的任何元素(参见下面的跟踪);其他所有功能中的每次后续访问也会超时; - 如果它发生的功能独立运行,问题就会消失;
- 如果粘贴调试器(binding.pry)就在失败之前,问题就消失了;
- 当它卡住时,如果我在 firefox 地址栏中按 enter,请求会立即通过,测试会继续并完成,没有任何问题。
一个可能相关也可能不相关的细节:我们正在使用多个会话 (capybara using_session),所以到失败时有三个 firefox 实例。但话又说回来,在这之前有三个实例很高兴地过去了。
同样的行为出现在我伙伴的机器上。
rails 日志中没有任何可疑之处。没有任何试图通过该请求的迹象。
OSX 10.8.2、ruby 1.9.3、rails 3.2.6、sqlite3、最新的 capybara/selenium。
错误堆栈跟踪:
Timeout::Error (Timeout::Error)
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/protocol.rb:146:in `rescue in rbuf_fill'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/protocol.rb:140:in `rbuf_fill'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/protocol.rb:122:in `readuntil'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/protocol.rb:132:in `readline'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:2562:in `read_status_line'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:2551:in `read_new'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:1319:in `block in transport_request'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:1316:in `catch'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:1316:in `transport_request'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:1293:in `request'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:1286:in `block in request'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:745:in `start'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:1284:in `request'
(eval):2:in `has_css?'
./features/step_definitions/home_page_steps.rb:70:in `/^I am taken to the products page on the retailer site$/'
features/home_page.feature:21:in `Then I am taken to the products page on the retailer site'
Timeout::Error (Timeout::Error)
编辑
bundle update 似乎让它消失了
编辑 2
如果您遇到类似问题并且正在使用 FireBug (capybara/firebug),请尝试禁用它。
编辑 3
我突然想到,自从我们从 webrick 切换到 Thin(在测试/开发中)之后,这从未发生过。就像在 Gemfile 中添加 gem 'thin' 一样简单。可能值得一试。
【问题讨论】:
-
'bundle update capybara' 让它再次工作。感谢您提醒我更新 gem。
-
请创建一个答案并将其标记为解决方案
标签: ruby-on-rails selenium cucumber capybara