Webdriver延迟问题

时间:2011-03-07 22:56:31

标签: ruby-on-rails capybara webdriver

是否有其他人遇到过Webdriver的延迟问题?我把它和Cuyumber一起用Capybara运行。填写表格需要30秒甚至数分钟。出于某种原因,它将填充一个字段,然后在填充另一个字段之前暂停,两者都由id引用。

此外,由于这种延迟,我遇到了Timeout Errors。 (但他们不稳定......)

这些领域没什么特别之处。它们出现在页面加载中,此页面上没有Ajax。

有人有什么想法吗?

这是错误:

execution expired (Timeout::Error)
     /Users/me/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/timeout.rb:60:in `rbuf_fill'
     /Users/me/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/net/protocol.rb:134:in `rbuf_fill'
     /Users/me/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/net/protocol.rb:116:in `readuntil'
     /Users/me/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/net/protocol.rb:126:in `readline'
     /Users/me/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/net/http.rb:2026:in `read_status_line'
     /Users/me/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/net/http.rb:2015:in `read_new'
     /Users/me/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/net/http.rb:1051:in `request_without_webmock'
     /Users/me/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/net/http.rb:1037:in `request_without_webmock'
     /Users/me/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/net/http.rb:543:in `start'
     /Users/me/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/net/http.rb:1035:in `request_without_webmock'

编辑:这可能与我运行Cucumber测试时已经打开Firefox实例的事实有关。虽然超时频率下降,但我仍然经常使用它们,我认为这仍然是一个问题。

Edit2:功能文件将指定一个步骤: And I complete personal info

该步骤将进一步定义为其他步骤:

And /^I complete personal info$/ do
  fill_in('first_id', :with => "foo")
  fill_in('second_id', :with => "bar")
  ...more fill_ins...
end

Capybara有时会找到first_id,其他方案也会正常运行。其他时候,它会超时。在我看来,这是非常不可预测的。还有一些时候,它会找到first_id但找不到second_id。顺便说一句,这些id确实存在于页面上。

我应该包含有关错误的更多信息。它通常看起来像这样:

...all that stuff I included in the error above...
./features/step_definitions/web_steps.rb:107
./features/step_definitions/web_steps.rb:11:in `with_scope'
./features/step_definitions/web_steps.rb:105:in `/^(?:|I )should see "([^"]*)"(?: within "([^"]*)")?$/'
/my feature file:30:in 'Then we verify stuff we just filled out'

Then we verify stuff we just filled out是通过以下附加步骤定义的:

And %{I should see "foo"}
And %{I should see "bar"}

我希望这些额外的信息有所帮助!如果您还有其他需要,请在评论中告诉我。

2 个答案:

答案 0 :(得分:0)

我不熟悉webmock,但是看看它的回溯并不是罪魁祸首 - 因为WebDriver使用HTTP与Firefox通信,特别是默认情况下Net :: HTTP。

要确认这一点,您可以tell WebDriver to use Curb instead,希望不会受到webmock的影响。

答案 1 :(得分:0)

您遇到的问题是由WebMock引起的,它破坏了默认的Net :: HTTP beheviour。此问题现已在WebMock 1.7.0中修复