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.