Net:: ReadTimeout on headless Firefox Watir-WebDriver cukes
j'ai commencé à courir en tonnes de ces erreurs aujourd'hui:
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'
j'exécute headless (via headless gem) Watir-WebDriver cukes sur Firefox 21, serveur Ubuntu. Voici le paquet actif de gemmes:
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)
je ne sais même pas par où commencer à résoudre ce problème. Les délais sont aléatoires. Ils ne se produisent pas lorsque je lance ces tests sur Firefox 21 sur OS X (pas sans tête). Quelqu'un at-il vécu cela avant? TOUT et TOUTES les idées beaucoup apprécié -- je vous remercie!
2 réponses
j'ai rencontré ce problème. Je ne sais pas pourquoi, mais j'ai trouvé une solution. J'arrête juste le navigateur watir et sans tête, puis je réessaie. Le problème est que watir délié la connexion au navigateur de sorte qu'il ne peut pas être résilié. Je pense que cela fait partie du problème initial. Pour terminer le navigateur watir je décharge l'objet du navigateur avec YAML puis analyse le résultat pour trouver le pid du navigateur émulé. Une fois que c'est fait, l'ordre de tuer est envoyé au bon pid. Enfin, le navigateur et sans tête sont réinitialisés.
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 ;}' "#{@tmpDumpFile}" | xargs -rt kill 2>&1`
FileUtils.rm_f(@tmpDumpFile)
end
@headless.stop
`killall Xvfb 2>&1`
# Reinitialize @watir / @headless then retry
end
j'ai vu ça sur la machine de quelqu'un d'autre, et j'ai passé un peu de temps à le diagnostiquer.
dans cette situation particulière, le problème semblait être une certaine confusion avec les gestionnaires de versions de Ruby, ce qui signifie que certains gemmes compilées pour une version plus ancienne de Ruby étaient ramassées.
nous avons fait sauter leurs gemmes, réinstallé les gemmes, et tout a recommencé à fonctionner de manière fiable.
peut-être pas votre problème ici, mais il est intéressant de noter pour les autres. Rubis gestion de version est devenir plus facile de nos jours, mais il est encore beaucoup trop facile de mettre les choses dans la confusion.