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.
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
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
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