2016-11-22 4 views
1

Ich habe ein Ruby-Automatisierungs-Skript, das mit Selen-Webdriver und Watir-Webdriver auf Linux arbeitete.Ruby-Web-Automatisierung schlägt fehl

Vor ein paar Tagen ist eines meiner Skripte abgestürzt und seither funktioniert die Webautomatisierung nicht mehr.

ich jetzt erhalte die folgende Fehlermeldung:

Headless display: :99 
D, [2016-11-22T12:59:42.668070 #16284] DEBUG -- : end of file reached (EOFError) 
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/protocol.rb:153:in `read_nonblock' 
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/protocol.rb:153:in `rbuf_fill' 
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/protocol.rb:134:in `readuntil' 
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/protocol.rb:144:in `readline' 
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http/response.rb:39:in `read_status_line' 
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http/response.rb:28:in `read_new' 
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:1414:in `block in transport_request' 
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:1411:in `catch' 
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:1411:in `transport_request' 
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:1384:in `request' 
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:1377:in `block in request' 
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:853:in `start' 
/home/batch/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/net/http.rb:1375:in `request' 
/home/batch/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/remote/http/default.rb:103:in `response_for' 
/home/batch/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/remote/http/default.rb:57:in `request' 
/home/batch/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/remote/http/common.rb:59:in `call' 
/home/batch/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/remote/bridge.rb:653:in `raw_execute' 
/home/batch/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/remote/bridge.rb:124:in `create_session' 
/home/batch/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/remote/bridge.rb:88:in `initialize' 
/home/batch/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/chrome/bridge.rb:41:in `initialize' 
/home/batch/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/common/driver.rb:61:in `new' 
/home/batch/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver/common/driver.rb:61:in `for' 
/home/batch/.rvm/gems/ruby-2.2.1/gems/selenium-webdriver-3.0.1/lib/selenium/webdriver.rb:82:in `for' 
test.rb:18:in `<main>' 

Ich habe versucht, beide Selen-WebDriver und watir-WebDriver Edelsteine ​​neu zu installieren und es hat nicht geholfen.

Ich habe alle .rb-Dateien in der Fehlermeldung mit den Dateien auf dem Produktionsserver verglichen und sie sind genau gleich. Hier

ist der Testcode bei mir läuft:

#!/bin/ruby 

require 'rubygems' 
require 'watir-webdriver' 
require 'selenium-webdriver' 
require 'headless' 
require 'logger' 

headless = Headless.new(autopick: true, reuse: false, destroy_at_exit: true).start 
puts "Headless display: #{ENV['DISPLAY']}" 

logger = Logger.new(STDOUT) 
logger.level = Logger::DEBUG 

begin 
    client = Selenium::WebDriver::Remote::Http::Default.new 
    client.timeout = 600 # seconds - default is 60 
    d = Selenium::WebDriver.for :chrome, :http_client => client, :switches => %w[--disable-popup-blocking --disable-translate] 
    b = Watir::Browser.new d 

    saved_cookies = b.cookies.to_a 

    site_url = 'https://www.google.com/' 
    puts site_url 
    b.goto site_url 
    sleep 2 
    b.close 
    exit 
rescue => err 
     logger.debug(err) 
end 

Dieser Code funktioniert auf anderen Servern in Ordnung. Es fühlt sich an wie etwas korrumpiert wurde, aber ich kann nicht herausfinden was.

Antwort

1

Sie verwenden höchstwahrscheinlich nicht den neuesten Chromtreiber (momentan ist es 2,25). Stellen Sie sicher, dass Sie die richtige bekommen hier: https://sites.google.com/a/chromium.org/chromedriver/downloads

„watir-WebDriver“ Code umbenannt wurde, nur „watir“ sein, so sollten Sie Watir 6.0 mit require 'watir'

auch verwenden ein Upgrade auf, können Sie initialisieren ein Watir :: Browser ohne zuerst einen Treiber zu erstellen:

client = Selenium::WebDriver::Remote::Http::Default.new 
client.timeout = 600 
switches = %w[--disable-popup-blocking --disable-translate] 
b = Watir::Browser.new :chrome, {http_client: client, switches: switches} 
+0

Vielen Dank für Ihre Antwort. Wie ich bereits erwähnt habe, hat diese Umgebung vor ein paar Tagen funktioniert. Ich kann die Änderungen, die Sie vorschlagen, nicht durchführen, da die Entwicklungsumgebung mit der Produktion übereinstimmen muss. – Andrey

+2

Welche Version von Chrome und welche Version von Chrom-Treiber? Die meisten EOFError, die ich gesehen habe, sind das Ergebnis nicht übereinstimmender Versionen. Ich verstehe das Thema "dev vs production" nicht, da beide davon unabhängig sind, wie Sie mit Selenium Black-Box-Tests durchführen. – titusfortner

+0

Während des Betriebssystemupgrades wurden die Versionen einiger Module und Chrome nicht mehr synchronisiert. Nachdem alles auf korrekte Versionen gebracht wurde, begann Ruby ordnungsgemäß zu funktionieren. Vielen Dank. – Andrey