Cucumber, Capybara and Selenium

Tuning with cucumber, capybara and selenium, but some scenarios work only randomly.
Launch
ruby 1.8.6 on rvm
rails 2.3.8
selenium pops open firefox 3.6

I tried adding this with no luck:

with_scope(selector) do click_button(button) selenium.wait_for_page_to_load end 

Error output sometimes:

 > Given I am logged in and have created newsletter and subscribers # features/step_definitions/newsletter_send_steps.rb:108 end of file reached (EOFError) /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/net/protocol.rb:133:in `sysread' /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/net/protocol.rb:133:in `rbuf_fill' /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/timeout.rb:62:in `timeout' /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/timeout.rb:93:in `timeout' /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/net/protocol.rb:132:in `rbuf_fill' /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/net/protocol.rb:116:in `readuntil' /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/net/protocol.rb:126:in `readline' /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/net/http.rb:2020:in `read_status_line' /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/net/http.rb:2009:in `read_new' /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/net/http.rb:1050:in `request_without_fakeweb' /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/net/http.rb:1037:in `request_without_fakeweb' /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/net/http.rb:543:in `start' /Users/christianhager/.rvm/rubies/ruby-1.8.6-p399/lib/ruby/1.8/net/http.rb:1035:in `request_without_fakeweb' ./features/step_definitions/web_steps.rb:24:in `__instance_exec2' ./features/step_definitions/web_steps.rb:9:in `with_scope' ./features/step_definitions/web_steps.rb:9:in `with_scope' ./features/step_definitions/web_steps.rb:23:in `/^(?:|I )press "([^\"]*)"(?: within "([^\"]*)")?$/' features/enhanced/newsletter_send1.feature:7:in `Given I am logged in and have created newsletter and subscribers' 

Once again:

 > no button with value or id or text 'create_user_button' found (Capybara::ElementNotFound) ./features/step_definitions/web_steps.rb:24:in `__instance_exec2' ./features/step_definitions/web_steps.rb:9:in `with_scope' ./features/step_definitions/web_steps.rb:9:in `with_scope' ./features/step_definitions/web_steps.rb:23:in `/^(?:|I )press "([^\"]*)"(?: within "([^\"]*)")?$/' features/enhanced/newsletter_send1.feature:7:in `Given I am logged in and have created newsletter and subscribers' 

And sometimes it just works ...

This is what my env.rb looks like

 ENV["RAILS_ENV"] ||= "cucumber" require File.expand_path(File.dirname(__FILE__) + '/../../config/environment') require 'cucumber/formatter/unicode' # Remove this line if you don't want Cucumber Unicode support require 'cucumber/rails/world' require 'cucumber/rails/active_record' require 'cucumber/web/tableish' require 'capybara/rails' require 'capybara/cucumber' require 'capybara/session' require 'cucumber/rails/capybara_javascript_emulation' require "selenium-webdriver" Capybara.default_driver = :selenium Capybara.default_wait_time = 5 Capybara.ignore_hidden_elements = false Capybara.default_selector = :css ActionController::Base.allow_rescue = false require 'database_cleaner' DatabaseCleaner.strategy = :truncation Before do Capybara.reset_sessions! DatabaseCleaner.clean end Cucumber::Rails::World.use_transactional_fixtures = false 

Cucumber steps:
Given that I'm on the registration page
And I fill in "user_login" "jeppsipeppsi@arcticelvis.com" inside the "body"
And I fill "user_password" with the "secret" inside the "body"
And I fill "user_password_confirmation" with the "secret" inside the "body"
And I check the "terms_of_use" inside the "body"
And I click create_user_button inside the body

Any insight would be great :)

+7
ruby selenium cucumber capybara
source share
2 answers

This is an HTTP mockery, if you remove fakeweb or webmock from your environment (completely), everything should work again.

Adam Green’s last comment DOES THE WORK regarding creating Curb with: Selenium :: WebDriver.for: firefox ,: http_client => Selenium :: WebDriver :: Remote :: Http :: Curb

Read the stream in the Capybara group.

The problem we are facing is playing back the recorded http traffic using fakeweb or webmock, since the web driver is now Curb. So if you are aiming to fake traffic through Capybara, you will get browser testing again, but you will not be able to play traffic through the same browser. (We use a VCR to record.)

The addition of Curb support is listed as a β€œticket” on the Fakeweb Github website.

+3
source share

Recently, I came across this in a Rails 2.3 application with a cucumber / capybara / akephalos / fakeweb, but eventually decided to solve this by completely destroying all the gems in my kit (they were there where they were stored in .bundle/ and reinstalling.

0
source share

All Articles