[英]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 操作系统:openSuSE 13.1浏览器: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. 无论我看着Firefox还是让它无头运行,该错误都会在每个循环内发生(在1到2分钟后)。
Step Code (from pastebin link in comments) 步骤代码(来自注释中的pastebin链接)
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) env.rb(来自注释中的pastebin链接)
#!/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.
在env.rb中,您要设置水豚,但要使用watir创建浏览器。 That's not good because capybara and watir at the same time may produce a conflict.
这不好,因为水豚和and可能同时产生冲突。 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.
但是我仍然不是100%确定。 Try it please.
请尝试一下。
This link did the trick: https://watirmelon.com/2013/05/16/stop-firefox-auto-updating-and-breaking-your-ci-build/ 该链接起到了作用: 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. 启用全局调试后,我可以看到Firefox内部的h264插件正在尝试更新并破坏构建。
Thanks four your help guys! 感谢四个您的帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.