简体   繁体   中英

cucumber end of file reached (EOFError)

Running cucumber tests give me following error

  end of file reached (EOFError)
  /usr/lib64/ruby/2.0.0/net/protocol.rb:153:in `read_nonblock'
  /usr/lib64/ruby/2.0.0/net/protocol.rb:153:in `rbuf_fill'
  /usr/lib64/ruby/2.0.0/net/protocol.rb:134:in `readuntil'
  /usr/lib64/ruby/2.0.0/net/protocol.rb:144:in `readline'
  /usr/lib64/ruby/2.0.0/net/http/response.rb:39:in `read_status_line'
  /usr/lib64/ruby/2.0.0/net/http/response.rb:28:in `read_new'
  /usr/lib64/ruby/2.0.0/net/http.rb:1406:in `block in transport_request'
  /usr/lib64/ruby/2.0.0/net/http.rb:1403:in `catch'
  /usr/lib64/ruby/2.0.0/net/http.rb:1403:in `transport_request'
  /usr/lib64/ruby/2.0.0/net/http.rb:1376:in `request'
  /usr/lib64/ruby/2.0.0/net/http.rb:1369:in `block in request'
  /usr/lib64/ruby/2.0.0/net/http.rb:852:in `start'
  /usr/lib64/ruby/2.0.0/net/http.rb:1367:in `request'
  ./features/step_definitions/my_steps.rb:110:in `block (2 levels) in <top (required)>'
  ./features/step_definitions/my_steps.rb:58:in `each'
  ./features/step_definitions/my_steps.rb:58:in `/^action$/'
  features/myFeature.feature:18:in `Then I should XY'
  Connection refused - connect(2) (Errno::ECONNREFUSED)
  /usr/lib64/ruby/2.0.0/net/http.rb:878:in `initialize'
  /usr/lib64/ruby/2.0.0/net/http.rb:878:in `open'
  /usr/lib64/ruby/2.0.0/net/http.rb:878:in `block in connect'
  /usr/lib64/ruby/2.0.0/timeout.rb:66:in `timeout'
  /usr/lib64/ruby/2.0.0/net/http.rb:877:in `connect'
  /usr/lib64/ruby/2.0.0/net/http.rb:862:in `do_start'
  /usr/lib64/ruby/2.0.0/net/http.rb:851:in `start'
  /usr/lib64/ruby/2.0.0/net/http.rb:1367:in `request'
  ./features/support/env.rb:45:in `After' 

My gemlist from bundle:

* activemodel (4.2.6)
* activerecord (4.2.6)
* activesupport (4.2.6)
* addressable (2.4.0)
* arel (6.0.3)
* builder (3.2.2)
* bundler (1.6.5)
* capybara (2.6.2)
* childprocess (0.5.9)
* cucumber (2.3.3)
* cucumber-core (1.4.0)
* cucumber-wire (0.0.1)
* data_magic (0.22)
* diff-lcs (1.2.5)
* faker (1.6.3)
* ffi (1.9.10)
* gherkin (3.2.0)
* headless (2.2.3)
* i18n (0.7.0)
* json (1.8.3)
* mime-types (3.0)
* mime-types-data (3.2016.0221)
* mini_portile2 (2.0.0)
* minitest (5.8.4)
* multi_json (1.11.2)
* multi_test (0.1.2)
* mysql2 (0.4.3)
* nokogiri (1.6.7.2)
* page-object (1.1.1)
* page_navigation (0.9)
* rack (1.6.4)
* rack-test (0.6.3)
* rspec (3.4.0)
* rspec-core (3.4.4)
* rspec-expectations (3.4.0)
* rspec-mocks (3.4.1)
* rspec-support (3.4.1)
* rubyzip (1.2.0)
* selenium-webdriver (2.53.0)
* snapurl (0.0.3)
* syntax (1.2.0)
* thread_safe (0.3.5)
* tzinfo (1.2.2)
* watir-webdriver (0.9.1)
* websocket (1.2.2)
* xpath (2.0.0)
* yml_reader (0.7)
* zip-zip (0.3)

OS: openSuSE 13.1 Browser: Firefox 45.0

The error occurs inside a each loop (after 1 till 2 minutes), regardless if I watch the Firefox or let it run headless.

Step Code (from pastebin link in comments)

Then /^I should XY$/ do
  today = Date.today
  heute = today.to_s.sub(/(\w+)-(\w+)-(\w+)/, '\\3.\\2.\\1')
  letzter_tag = Date.today.end_of_month
  differenz = letzter_tag - today
  ueber_naechster_monats_beginn = Date.today.at_beginning_of_month.next_month.next_month
  deutscher_ueber_naechster_monats_beginn = ueber_naechster_monats_beginn.to_s.sub(/(\w+)-(\w+)-(\w+)/, '\\3.\\2.\\1')
  puts 'Heute ist das Datum: '+today.to_s
  puts 'Der letzte Tag des aktuellen Monats ist: '+letzter_tag.to_s
  puts 'Bis zum letzten Tag des aktuellen Monats sind es noch: '+differenz.to_s+' Tage'
  if differenz < 9 || differenz < 0
    puts "Der Monatswechsel liegt an, das neue Datum für den Monatsbeginn ist: "+ueber_naechster_monats_beginn.to_s
  else
    puts "Kein Monatswechsel liegt an."
  end
  tabellen_zeilen = @browser.table(:id => 'tabellenanfang').tbody.rows
  puts tabellen_zeilen.count.to_s+' Tabellenzeilen gefunden'
  link_list_2_mit_monats_wechsel = Array.new
  link_list_2_ohne_monats_wechsel = Array.new
  link_list_2 = Array.new
  link_list_1 = Array.new
  tabellen_zeilen.each do |tabellen_zeile|
    if !tabellen_zeile.cell(:index => 2).div.text.include?("nicht veröffentlicht")
      link_list_2 << tabellen_zeile.cell(:index => 0).div.a.text
      puts 'veröffentlicht: '+tabellen_zeile.cell(:index => 0).div.a.text
      beginn_datum = Date.parse(tabellen_zeile.cell(:index => 3).div.text)
      puts '  Beginn Datum ist: '+beginn_datum.to_s
      aktuelle_differenz = beginn_datum - today
      puts ' '
      # 
      if aktuelle_differenz < 10 || aktuelle_differenz < 0
        link_list_2_mit_monats_wechsel << tabellen_zeile.cell(:index => 0).div.a.text
        puts "  "
      else
        link_list_2_ohne_monats_wechsel << tabellen_zeile.cell(:index => 0).div.a.text
        puts "  "
      end
    else
      link_list_1 << tabellen_zeile.cell(:index => 0).div.a.text
      puts ' '
    end
  end
  puts ' '
  link_list_2.each { |link_text|
    puts '____________________________________________________________________________________________'
    puts ''
    puts link_text
    puts ''
    puts '____________________________________________________________________________________________'
    link = @browser.link(:text => link_text)
    begin
      link.click
    rescue Watir::Exception::UnknownObjectException => i #catch the Exception
      @browser.refresh
      link.wait_until_present(600)
      link.click
      puts "Objekt konnte nicht geklickt werden: #{i}"
    end
    puts '    Link geöffnet'
    begin
        @browser.input(:id => 'tab1').wait_until_present(600)
        @browser.input(:id => 'tab1').click
    rescue Watir::Exception::UnknownObjectException, TimeoutError => j #catch the Exception
      @browser.refresh
      @browser.input(:id => 'tab1').wait_until_present(600)
      @browser.input(:id => 'tab1').click
      puts "Objekt konnte nicht geklickt werden: #{j}"
    end
    puts ' '
    @browser.element(:id => 'begin_field').wait_until_present(600)
    @browser.element(:id => 'begin_field').exists?.should == true
    @browser.text_field(:id => 'begin_field').set heute
    @browser.element(:id => 'speichern_unten').wait_until_present(100)
    @browser.input(:id => 'speichern_unten').click
    begin
      @browser.input(:id => 'tab2').click
    rescue Watir::Exception::UnknownObjectException => e #catch the Exception
      @browser.refresh
      @browser.input(:id => 'tab2').wait_until_present(100)
      @browser.input(:id => 'tab2').click
      puts "Objekt konnte nicht geklickt werden: #{e}"
    end
    puts ' '
    begin
      @browser.element(:id => 'begin_date').wait_until_present(100)
      @browser.element(:id => 'begin_date').exists?.should == true
      @browser.text_field(:id => 'begin_date').set heute
    rescue Watir::Exception::UnknownObjectException, TimeoutError => l #catch the Exception
      @browser.refresh
      @browser.element(:id => 'begin_date').wait_until_present(100)
      @browser.element(:id => 'begin_date').exists?.should == true
      @browser.text_field(:id => 'begin_date').set heute
    end    
    begin
      @browser.element(:id => 'speichern_unten').wait_until_present(600)
      @browser.input(:id => 'speichern_unten').click
    rescue Watir::Exception::UnknownObjectException, TimeoutError => h #catch the Exception
      puts "Objekt konnte nicht geklickt werden: #{h}"
      @browser.refresh
      @browser.element(:id => 'speichern_unten').wait_until_present(600)
      @browser.input(:id => 'speichern_unten').click
    end    
    begin
      @browser.element(:id => 'tab1').wait_until_present(600)
      @browser.input(:id => 'tab1').click
    rescue Watir::Exception::UnknownObjectException, TimeoutError => g #catch the Exception
      puts "Objekt konnte nicht geklickt werden: #{g}"
      @browser.refresh
      @browser.element(:id => 'tab1').wait_until_present(600)
      @browser.input(:id => 'tab1').click
    end
    puts ' '
    begin
      @browser.element(:id => 'begin_field').wait_until_present(600)
    rescue Watir::Wait::TimeoutError => k
      puts "Objekt konnte nicht geklickt werden: #{k}"
      @browser.refresh
      @browser.element(:id => 'begin_field').wait_until_present(600)
    end
    @browser.element(:id => 'begin_field').exists?.should == true
    @browser.element(:id => 'begin_field').html.include?(heute).should == true
    @browser.element(:id => 'tab2').wait_until_present(600)
    @browser.input(:id => 'tab2').click
    begin
      @browser.element(:id => 'begin_date').wait_until_present(100)
    rescue Watir::Wait::TimeoutError => f
      puts "Objekt konnte nicht geklickt werden: #{f}"
      @browser.refresh
      @browser.element(:id => 'begin_date').wait_until_present(100)
    end
    @browser.element(:id => 'begin_date').exists?.should == true
    @browser.element(:id => 'begin_date').html.include?(heute).should == true 
    puts '    neuer Veröffentlichungszeitraum auf '+heute+' gesetzt'
    @browser.link(:text => 'buttonText').click
    puts '____________________________________________________________________________________________'
    puts ''
  }
  puts ' '
  puts "----------------------------------------------------------------------------------------------"
  puts ' '
  puts ' '
  puts ' '
  puts ' '
  link_list_2_mit_monats_wechsel.each { |monats_wechsel_link_text|
    puts '____________________________________________________________________________________________'
    puts ''
    puts monats_wechsel_link_text
    puts ''
    puts '____________________________________________________________________________________________'
    link = @browser.link(:text => monats_wechsel_link_text)
    link.click    
    puts '    Link geöffnet'
    @browser.input(:id => 'tab3').click   
    puts '    Reiter 1 Stelleninfo geöffnet'
    @browser.element(:id => 'dateField').wait_until_present(600)
    @browser.element(:id => 'dateField').exists?.should == true
    puts ' '
    @browser.text_field(:id => 'dateField').set deutscher_ueber_naechster_monats_beginn
    @browser.input(:id => 'speichern_unten').click
    sleep 1
    @browser.input(:id => 'tab1').click
    sleep 1
    @browser.input(:id => 'tab3').click   
    puts '    Reiter 1 Stelleninfo zur Kontrolle geöffnet'
    sleep 1
    @browser.element(:id => 'dateField').wait_until_present(600)
    @browser.element(:id => 'dateField').exists?.should == true
    @browser.element(:id => 'dateField').html.include?(deutscher_ueber_naechster_monats_beginn).should == true
    puts ' '
    @browser.link(:text => 'buttonText').click
    puts '____________________________________________________________________________________________'
    puts ' '
  }
  puts ' '
end

env.rb (from pastebin link in comments)

#!/bin/env ruby
# encoding: utf-8
# -*- coding: utf-8 -*- 
require 'rubygems'
require 'capybara'
# active_support wird fuer die Funktion end_of_month benoetigt
require 'active_support'
require 'active_support/core_ext'
require 'minitest'
require 'minitest/autorun'
require 'rspec/expectations'
require 'capybara/rspec'
require 'capybara/cucumber'
#require 'ruby_gntp'
require 'net/http'
#require 'escape_utils'
require 'watir-webdriver'
require 'page-object/page_factory'
World(PageObject::PageFactory)
require 'headless'
client = Selenium::WebDriver::Remote::Http::Default.new
client.timeout = 600 # seconds – default is 60
Capybara.run_server = true #Whether start server when testing
Capybara.default_selector = :css #default selector , you can change to :css
Capybara.default_max_wait_time = 180 #When we testing AJAX, we can set a default wait time
Capybara.ignore_hidden_elements = false #Ignore hidden elements when testing, make helpful when you hide or show elements using javascript

Before do
  @headless = Headless.new()
  @headless.start
  $DEBUG = true

  #profile = Selenium::WebDriver::Firefox::Profile.new
  @browser  = Watir::Browser.new :firefox, :http_client => client
  #@browser = Watir::Browser.new
  @browser.window.resize_to(2250, 1024)
end


After do
   @headless.destroy
   #@browser.close
end

What could I try?

I've just figured out. In your env.rb you are setting up capybara but you are creating browser using watir. That's not good because capybara and watir at the same time may produce a conflict. Switch Capybara off. Use only watir. Do not put 'capybara' to require. That's much more good suggestion than mine suggestion in a comment. But I am still not 100% sure. Try it please.

This link did the trick: https://watirmelon.com/2013/05/16/stop-firefox-auto-updating-and-breaking-your-ci-build/

With global debug enabled I could see, that a h264 addon inside Firefox was trying to update and breaking the build.

Thanks four your help guys!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM