2010-08-14 9 views
31

Estoy tratando de ejecutar Capybara en un simple script de Ruby, es decir, sin/fuera de Rails. Aquí está la secuencia de comandos:¿Cómo usar el carpincho en Ruby puro (sin rieles)?

require 'rubygems' 
require 'capybara' 
require 'capybara/dsl' 

include Capybara 

Capybara.current_driver = :selenium 
Capybara.app_host = 'http://www.google.com' 

visit('/') 

El problema es que cuando corro esto me sale este error:

NameError: uninitialized constant Capybara::Session 

at top level in dsl.rb at line 52 
method gem_original_require in custom_require.rb at line 36 
method require in custom_require.rb at line 36 
at top level in capybara_test.rb at line 3 
method gem_original_require in custom_require.rb at line 31 
method require in custom_require.rb at line 31 
at top level in capybara_test.rb at line 

¿Qué estoy haciendo mal?

algo más de información:

  • Mac OS X 10.5
  • rubí 1.8.6 (2009-06-08 Patchlevel 369) [universal darwin9.0]
  • capibara (0.3.9)

Gracias!

Neal

Nota: Por el comentario de jnicklas He intentado esto, que corresponda a la nueva README más de cerca:

require 'rubygems' 
require 'capybara' 
require 'capybara/dsl' 

Capybara.default_driver = :selenium 
Capybara.app_host = 'http://www.google.com' 

module MyCapybaraTest 
    include Capybara 

    def test_google 
    visit('/') 
    end 
end 

Por desgracia, todavía estoy viendo el mismo error:

NameError: uninitialized constant Capybara::Session 

¿Pensamientos?

Gracias!

+1

El La última API requiere incluir Capybara :: DSL – bparanj

+0

Echa un vistazo a este git proyecto central: https://github.com/searls/remote-capybara-cucumber-example A partir de ahí, es bastante fácil configurar un proyecto de prueba independiente. – leifg

Respuesta

28

Aquí hay algo que parece funcionar para mí:

require 'rubygems' 
require 'capybara' 
require 'capybara/dsl' 

Capybara.run_server = false 
Capybara.current_driver = :selenium 
Capybara.app_host = 'http://www.google.com' 

module MyCapybaraTest 
    class Test 
    include Capybara::DSL 
    def test_google 
     visit('/') 
    end 
    end 
end 

t = MyCapybaraTest::Test.new 
t.test_google 
+1

Esto es genial, pero código como "página".should have_content ('Mi cuenta') "no parece funcionar. 'should' generalmente se define en Kernel (creo), y no parece ser así en este caso. He mirado alrededor, pero no pude inmediatamente averigüe cómo solucionarlo. –

+2

Está respondiendo a un comentario de hace casi 4 años, pero en caso de que haya algún googlers que también tenga confianza, 'should' (then) y' expect' (estilo actual) son provistos por la gema 'rspec-expectations' Con eso instalado usted podrá tener expectativas tales como' expect (page) .to have_content "foo" ' – DVG

5

Muestra que incluso la documentación incorrecta perdura para siempre. El README Capybara solía recomendar incluir Capybara en el espacio de nombres global, esta es una mala idea realmente, y estropea cualquier cantidad de cosas al azar. Debe incluir Capybara en su propio módulo o clase y usar eso en su lugar.

Consulte el README para conocer las mejores prácticas actuales.

+0

¡Gracias! Lamentablemente, sigo viendo el mismo error (NameError: constante no inicializada Capybara :: Session) cuando coloco el include dentro de un módulo. ¿Qué más estoy haciendo mal? –

1

Por favor marque esta CapybaraRspec101 ejemplo y tenedor ella.

Es un pequeño ejemplo para pruebas de aceptación en http://www.hi5.com utilizando desde cero:

  • Carpincho
  • Rspec
  • Selenio-WebDriver

Todas las instrucciones están en el repositorio

Cuestiones relacionadas