2012-02-16 2 views
1

a un problème très ennuyeux avec Watir WebDriver ..Watir/Sélénium - browser.goto continue à recevoir erreur TimeOut sur Chrome et Firefox

Je déboguée un peu, et a découvert que je reçois toujours TimeOut :: erreur sur un simple @ browser.goto ligne, même je peux voir visuellement la page a chargé entièrement ...

Le scénario est comme ceci: Ouvrez un navigateur, allez à une URL, cliquez sur quelques liens, puis soudainement à un moment donné , le script arrête de continuer à naviguer, en attente de plus de 30 secondes et de lancer des erreurs. Essayé à la fois Chrome et FF: Chrome est bien pire, normalement un deuxième ou troisième clic de lien se déclenchera; pour FF, prend parfois 10+ navigation page ...

Bet il y a un environnement ou un problème de comparabilité:

[email protected]:~$ uname -am 
Linux deskbox 3.0.0-12-generiC#20-Ubuntu SMP Fri Oct 7 14:56:25 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux 
[email protected]:~$ ruby -v 
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux] 
[email protected]:~$ rails -v 
Rails 3.2.1 
[email protected]:~$ gem -v 
1.8.15 
[email protected]:~$ gem list|grep webdriver 
selenium-webdriver (2.12.0) 
watir-webdriver (0.5.3) 

Quelqu'un peut-il aider à ce sujet? Le code source ici:

#!/usr/bin/env ruby 
require 'watir-webdriver' 
require 'pry' 

class Search 
    attr_accessor :browser, :company_url, :company_name 

    def initialize() 
     @browser = Watir::Browser.start 'http://www.google.com', :chrome 
    end 

    def visit_company_home_via_google(company) 
     @company_name = company 
     @browser.goto "http://www.google.com/search?q=#{company}" 
     link = @browser.div(:id=>'ires').link 
     return nil unless link.exists? 
     @browser.goto link.href 
     @company_url ||= @browser.url 
     @company_url 
    end 


    def logoff() 
     @browser.close if @browser 
    end 

end 
s = Search.new 
puts s.visit_company_home_via_google("github") 
puts s.visit_company_home_via_google("Mashable") 
puts s.visit_company_home_via_google("Barracuda Networks") 
s.logoff 

Mon résultat est comme:

[email protected]:~/cuda$ ./search.rb 
https://github.com/ 
/usr/local/lib/ruby/1.9.1/net/protocol.rb:140:in `rescue in rbuf_fill': Timeout::Error (Timeout::Error) 
    from /usr/local/lib/ruby/1.9.1/net/protocol.rb:134:in `rbuf_fill' 
    from /usr/local/lib/ruby/1.9.1/net/protocol.rb:116:in `readuntil' 
    from /usr/local/lib/ruby/1.9.1/net/protocol.rb:126:in `readline' 
    from /usr/local/lib/ruby/1.9.1/net/http.rb:2219:in `read_status_line' 
    from /usr/local/lib/ruby/1.9.1/net/http.rb:2208:in `read_new' 
    from /usr/local/lib/ruby/1.9.1/net/http.rb:1191:in `transport_request' 
    from /usr/local/lib/ruby/1.9.1/net/http.rb:1177:in `request' 
    from /usr/local/lib/ruby/1.9.1/net/http.rb:1170:in `block in request' 
    from /usr/local/lib/ruby/1.9.1/net/http.rb:627:in `start' 
    from /usr/local/lib/ruby/1.9.1/net/http.rb:1168:in `request' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.12.0/lib/selenium/webdriver/remote/http/default.rb:81:in `response_for' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.12.0/lib/selenium/webdriver/remote/http/default.rb:43:in `request' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.12.0/lib/selenium/webdriver/remote/http/common.rb:39:in `call' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.12.0/lib/selenium/webdriver/remote/bridge.rb:450:in `raw_execute' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.12.0/lib/selenium/webdriver/remote/bridge.rb:428:in `execute' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.12.0/lib/selenium/webdriver/remote/bridge.rb:99:in `get' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.12.0/lib/selenium/webdriver/common/navigation.rb:14:in `to' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.5.3/lib/watir-webdriver/browser.rb:61:in `goto' 
    from ./search.rb:17:in `visit_company_home_via_google' 
    from ./search.rb:33:in `<main>' 

Répondre

1

Je pense qu'il ya un bug dans Chromedriver qui ne renvoie pas l'URL correctement. J'ai eu votre exemple à travailler en utilisant:

require 'watir-webdriver' 

class Search 
    attr_accessor :browser, :company_name 

    def initialize 
    @browser = Watir::Browser.start 'http://www.google.com', :chrome 
    end 

    def get_company_url(company, url=nil) 
    @company_name = company 
    @company_url = url 
    @browser.goto "http://www.google.com/search?q=#{company}" 
    link = @browser.div(:id=>'ires').link 
    return nil unless link.exists? 
    @company_url ||= @browser.driver.current_url 
    end 

    def logoff() 
    @browser.close if @browser 
    end 

end 

s = Search.new 
puts s.get_company_url 'Barracuda Networks' 
+0

Merci, désolé ma question n'était pas très claire; Mon but n'était pas d'obtenir ces urls, mais de demander à watir de se rendre à la page, de la visiter et de revenir; En ce moment, GitHub va bien; mais les deux Mashable et Barracuda Networks sont gelés lors de la navigation ...; Est-ce que l'un d'entre vous peut l'essayer dans le même environnement si la même chose se produit? J'ai essayé avec une autre machine sur EC2, j'ai eu le même problème ... c'est pourquoi je demande ici ... –

Questions connexes