Net:: ReadTimeout на безгласных Firefox Watir-WebDriver cukes

Сегодня я столкнулся с множеством этих ошибок:

Net::ReadTimeout (Net::ReadTimeout)
      /usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:158:in `rescue in rbuf_fill'
      /usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:152:in `rbuf_fill'
      /usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:134:in `readuntil'
      /usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/protocol.rb:144:in `readline'
      /usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http/response.rb:39:in `read_status_line'
      /usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http/response.rb:28:in `read_new'
      /usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1405:in `block in transport_request'
      /usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1402:in `catch'
      /usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1402:in `transport_request'
      /usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1375:in `request'
      /usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1368:in `block in request'
      /usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:851:in `start'
      /usr/local/rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/net/http.rb:1366:in `request'

Я бегу безголовым (через безголовый камень) Watir-WebDriver cukes на Firefox 21, сервер Ubuntu. Здесь активный пучок драгоценных камней:

Gems included by the bundle:
  * builder (3.2.2)
  * bundler (1.3.5)
  * childprocess (0.3.9)
  * cucumber (1.3.2)
  * cwtestgen (0.1.6)
  * data_magic (0.14)
  * diff-lcs (1.2.4)
  * faker (1.1.2)
  * ffi (1.8.1)
  * gherkin (2.12.0)
  * headless (1.0.1)
  * i18n (0.6.4)
  * multi_json (1.7.5)
  * page-object (0.8.10)
  * page_navigation (0.9)
  * require_all (1.2.1)
  * rspec (2.13.0)
  * rspec-core (2.13.1)
  * rspec-expectations (2.13.0)
  * rspec-mocks (2.13.1)
  * rubyzip (0.9.9)
  * selenium-webdriver (2.33.0)
  * syntax (1.0.0)
  * thor (0.18.1)
  * watir-webdriver (0.6.4)
  * watir-webdriver-performance (0.2.2)
  * websocket (1.0.7)
  * yml_reader (0.2)

Я даже не знаю, с чего начать эту проблему. Таймауты случайны. Они не возникают, когда я запускаю эти тесты в Firefox 21 на OS X (не без головы). Кто-нибудь испытал это раньше? ЛЮБЫЕ И ВСЕ идеи очень ценятся - спасибо!

Ответ 1

Я столкнулся с этой проблемой. Я не знаю, почему это происходит, но я нашел решение. Я просто завершаю браузер watir и безголовый, затем я повторяю. Проблема в том, что watir отключил соединение с браузером, чтобы он не мог быть завершен. Я думаю, что это часть первоначальной проблемы. Чтобы завершить браузер watir, я удаляю объект браузера с помощью YAML, затем проанализирую результат, чтобы найти pid эмулируемого браузера. После этого команда kill отправляется вправо pid. Наконец, браузер и безголовые повторно инициализируются.

tryLeft = 3
begin
  @watir.goto url
rescue => error
  tryLeft -= 1

  if tryLeft >= 0
    sleep 1
    retry
  end

  begin
    Timeout::timeout(2) { @watir.close }
  rescue
    File.open(@tmpDumpFile, 'w') { |file| file << YAML::dump(@watir) }
    `awk '/pid:/ {print $2;}' "#{@tmpDumpFile}" | xargs -rt kill 2>&1`
    FileUtils.rm_f(@tmpDumpFile)
  end

  @headless.stop
  `killall Xvfb 2>&1`

  # Reinitialize @watir / @headless then retry
end

Ответ 2

Я видел это на ком-то еще машине, и потратил немного времени на его диагностику.

В этой конкретной ситуации проблема представляла собой некоторую путаницу с менеджерами версий Ruby, что означало, что были собраны некоторые драгоценные камни, собранные для более старой версии Ruby.

Мы сдули их гемзеты, переустановили драгоценные камни, и все это снова начало работать надежно.

Это может быть не ваша проблема здесь, но это стоит отметить для других. Теперь управление версиями Ruby становится проще в настоящее время, но все же слишком легко заставить вещи запутаться.