2010-06-02 3 views
7

Setup mit Gurken, Capybara und Selen, aber einige Szenarien funktioniert nur zufällig.
Lauf
Rubin 1.8.6 auf rvm
Schienen 2.3.8
Selen aufspringt firefox 3.6

Ich habe versucht, dies ohne Glück hinzuzufügen:Gurke, Capybara & Selen funktioniert nach dem Zufallsprinzip

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

Der Fehlerausgang ist manchmal:

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

Und othertimes:

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

Und manchmal funktioniert es einfach ....

Dies ist, wie meine env.rb wie

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-Schritte aus:
Da bin ich auf der Anmeldeseite
Und ich fülle "user_login" mit "[email protected]" in "body"
Und ich fülle "user_password" mit "secret" in "body"
Und Ich fülle in „user_password_confirmation“ mit „geheimen“ innerhalb „Körper“
Und ich überprüfen „terms_of_use“ im „Körper“
Und ich drücke „create_user_button“ im „Körper“

Einsicht wäre toll :)

+0

Did Sie schaffen es, dies zu lösen? Ich finde auch, dass der Selen-Treiber scheint nicht Elemente auf einer inkonsistenten Basis zu finden.Dies ist auf einer sehr einfachen Seite (dh kein Ajax), so dass Timing kein Problem sein sollte. – AlistairH

Antwort

3

Es ist HTTP-Mocking, wenn Sie Fakeweb oder Webmock (vollständig) aus Ihrer Umgebung entfernen, sollte alles wieder funktionieren.

Der letzte Kommentar von Adam Greene ARBEITET bezüglich Curb Einrichtung mit: Selen :: WebDriver.for: firefox,: http_client => Selen :: WebDriver :: Fern :: Http :: Curb

Read the thread on the Capybara group.

Das Problem, das wir haben, ist die Wiedergabe von aufgezeichneten http-Verkehr mit Fakeweb oder Webmock seit Web-Treiber ist jetzt Curb. Wenn Sie also den Traffic über Capybara fälschen möchten, erhalten Sie einen Browser-Test, um die Arbeit wieder aufzunehmen, aber Sie können den Traffic nicht über denselben Browser wiedergeben. (Wir verwenden VCR zum Aufnehmen.)

Das Hinzufügen von Curb Support wird als "Ticket" auf der Fakeweb Github Issues Seite aufgelistet.

0

traf ich diese in einem Rails 2.3 App mit Gurke/Capybara/akephalos/fakeweb vor kurzem, bekam aber schließlich dieses Problem zu beheben, indem vollständig alle Edelsteine ​​in meinem Bündel zu töten (sie in .bundle/ und Neuinstallation gehalten, wo.