2016-11-22 3 views
1

У меня есть сценарий автоматизации Ruby, который использовался для работы с selenium-webdriver и watir-webdriver в Linux.Ошибка в Ruby web автоматизации

Несколько дней назад один из моих сценариев разбился, и с тех пор веб-автоматики перестали работать.

теперь я получаю следующее сообщение об ошибке:

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

Я попытался переустановить оба селен WebDriver и Watir-WebDriver драгоценных камней, и это не помогло.

Я сравнивал все файлы .rb в сообщении об ошибке с файлами на производственном сервере, и они точно такие же.

Вот код теста, я бегу:

#!/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 

Этот код отлично на других серверах работает. Чувствуется, что что-то испортилось, но я не могу понять, что.

ответ

1

Вы, скорее всего, не используете новейший хромированный реверс (сейчас это 2,25). Убедитесь, что вы получаете правильный здесь: https://sites.google.com/a/chromium.org/chromedriver/downloads

«Watir-WebDriver» код был переименован в просто «Watir», поэтому вам следует обновить, чтобы использовать Watir 6.0 с require 'watir'

Кроме того, вы можете инициализировать Watir :: Browser без предварительного создания драйвера:

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

Благодарим за сообщение. Как я уже говорил, эта среда работала несколько дней назад. Я не могу внести изменения, которые вы предлагаете, поскольку среда разработки должна соответствовать производственной. – Andrey

+2

Какая версия Chrome и какая версия хромирования? Большинство EOFError, которые я видел, являются результатом несоответствующих версий. Я не понимаю проблему с разработчиком и производством, так как оба будут независимы от того, как вы тестируете Black-box с помощью Selenium. – titusfortner

+0

Во время обновления ОС версии нескольких модулей и Chrome вышли из синхронизации. После того, как все было доведено до правильных версий, Ruby начал работать правильно. Спасибо. – Andrey