Проблема с задержкой веб-драйвера

У кого-нибудь еще есть проблемы с задержкой в ​​Webdriver? У меня он работает на Cucumber с Capybara. И заполнение формы занимает более 30 секунд или даже минут. По какой-то причине он заполнит одно поле, а затем приостановится перед заполнением другого поля, когда на оба ссылается идентификатор.

Кроме того, я сталкиваюсь с ошибками тайм-аута из-за этой задержки. (Но они ошибочны...)

В полях нет ничего особенного. Они появляются при загрузке страницы, и на этой странице нет 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'

Изменить: это может быть связано с тем, что у меня уже был открыт экземпляр Firefox, когда я запускал тесты Cucumber. Хотя частота тайм-аутов уменьшилась, я все еще получаю их достаточно часто, поэтому я думаю, что это все еще проблема.

Изменить2: в файле функций будет указан шаг: 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"}

Я надеюсь, что эта дополнительная информация поможет! Если вам нужно что-то еще, пожалуйста, дайте мне знать в комментариях.


person Peter Kim    schedule 07.03.2011    source источник
comment
Вы имеете в виду веб-драйвер или селен-вебдрайвер? Кроме того, какие версии веб-драйвера, огурца, капибары, рельсов (похоже на рубиновую корпоративную версию 1.8.7)?   -  person carols10cents    schedule 21.03.2011
comment
Я почти уверен, что это не другой экземпляр Firefox, который у вас запущен. Время от времени я получаю тайм-ауты, используя ваш стек Cucumber, Capybara и WebDriver, но они никогда не связаны с другими запущенными экземплярами FF.   -  person awendt    schedule 23.05.2011


Ответы (2)


Я не знаком с webmock, но, глядя на обратную трассировку, вполне вероятно, что это виновник, поскольку WebDriver использует HTTP для связи с Firefox и, в частности, Net::HTTP по умолчанию.

Чтобы подтвердить это, вы можете указать WebDriver использовать Curb вместо, что, надеюсь, не будет зависеть от того, что делает webmock.

person jarib    schedule 12.03.2011
comment
Я смущен тем, почему это должно быть подтверждено. Кроме того, мне непонятно, что значит использовать Net::HTTP по умолчанию. Наконец, у меня не установлены гем Curb или net-http-persistent. Я имею в виду, что я, конечно, могу установить его, но, опять же, я не уверен, зачем мне это нужно. - person Peter Kim; 16.03.2011
comment
Извините за неясность. WebDriver по умолчанию использует Net::HTTP для отправки команд расширению Firefox, используемому для управления браузером. Webmock AFAIK исправит Net::HTTP, что является наиболее вероятной причиной проблемы. Если использование стека HTTP, которого Webmock не касается, решает проблему, мы подтверждаем, что Webmock является причиной проблемы, и мы на один шаг ближе к выяснению того, что происходит. - person jarib; 17.03.2011
comment
Если присмотреться, похоже, что WebMock также будет имитировать запросы Curb. Было бы полезно, если бы вы могли предоставить простой скрипт, который воспроизведет проблему. - person jarib; 17.03.2011

Проблема, с которой вы столкнулись, была вызвана WebMock, который нарушил поведение Net::HTTP по умолчанию. Эта проблема исправлена ​​в WebMock 1.7.0.

person Bartosz Blimke    schedule 15.08.2011