2012-06-20 18 views
11

Estoy teniendo un momento difícil (pero muy interesante) de inmersión en el desarrollo impulsado por el comportamiento con Cucumber, RSpec, Selenium y Rails.Rieles y selenio: cómo detener/pausar la ejecución de una prueba en el navegador?

Tengo mi configuración lista para probar con Selenium, y es divertido ver a Firefox aparecer y ejecutar automáticamente a través de mis escenarios. Pero una cosa que me gustaría hacer es detener o detener la ejecución en cierto punto, para poder inspeccionar lo que el Selenium ve en cierto punto.

Conozco el comando save_and_open_page, pero esto solo me muestra HTML sin formatear. Entonces, ¿tal vez hay un método stop_execution o algo que detiene a Selenium sin cerrando el navegador?

Respuesta

25

Instale pry, luego ponga binding.pry en su prueba donde desea que se detenga. Cuando haya terminado, presione Ctrl + D o escriba exit en el REPL que se abre para continuar la ejecución.

+0

Sí, ¡esta es una gran respuesta! Ya lo estoy haciendo así, gracias por señalarme esta vieja pregunta mía. :) por cierto, 'pry-depurador' también le da algunas capacidades de depuración muy básicas. –

+0

Esto funciona muy bien para mí, excepto cuando pego binding.pry en una vista. ¿Alguna idea de cómo pausar la ejecución en una vista? Sé que realmente no debería necesitar hacer esto, pero a veces puede ser útil. – peteretep

0

tratan de utilizar selenium.sleep (ms) Esto hará que la ejecución de la prueba esperar a que el período de tiempo especificado

+0

Gracias , esta es una buena pista, pero en mi *** _ steps.rb el selenio no parece estar disponible: 'variable local indefinida o método 'selenio' para # (NameError) ' –

+0

oops .. use java. entonces en el código selenium.sleep(), el selenio es el nombre del objeto ... así que tienes que modificarlo en consecuencia :) – Acid

+0

Lo intenté con 'page.driver.sleep (5000)' pero luego recibí 'private method' sleep 'llamado por # (NoMethodError) '. –

1

Uso depurador donde desea stop/pause la ejecución.

o

En Selenio IDE puede hacer clic derecho en los comandos alinean y puede seleccionar Set/Clear Start punto-stop/pause la ejecución.

1

Bien, lo tengo funcionando instalando ruby-debug19 (para Ruby 1.9.3), y luego simplemente estableciendo un punto de interrupción en algún lugar en un paso de Cucumber.

http://rails.vandenabeele.com/blog/2011/12/21/installing-ruby-debug19-with-ruby-1-dot-9-3-on-rvm/

Otra opción es utilizar la gema Carpincho-quemador, lo que añade un "y luego se detiene y me dejó depurar" el paso que básicamente parece hacer lo mismo (no sé si se basa en el rubí -barro gemas).

16

o simplemente:

visit '/' 
sleep(inspection_time=5) 
visit '/dreamland' 
+2

"Esto puede morderte de dos maneras. Primero, debes establecer el tiempo de sueño lo suficientemente largo como para dar suficiente tiempo para obtener la respuesta. Pero eso significa que pasarás mucho tiempo esperando ociosamente el La segunda mordida es que, sin importar cuánto tiempo duerma, a veces no será suficiente. Habrá algún cambio en el entorno que hará que supere el sueño y obtendrá un falso error. Como resultado, le recomiendo encarecidamente que nunca use durmientes desnudos como este ". de http://martinfowler.com/articles/nonDeterminism.html – Hugo

+1

No recomendaría esto para probar. Es solo para inspección Tener algo desagradable como este instará a eliminarlo, después de la inspección. Tipo de 'p' para depuración o' console.log' –

0

Todas las respuestas tienen que instalar nuevas gemas o incluso el establecimiento de un sueño, que no es el mejor enfoque. Se puede poner esta línea en cualquier lugar de paso:

ask "Continue?" 

Se detendrá la ejecución hasta que se introduce y (Sí)

Así, por ejemplo, podría tener este aspecto:

expect(page).to have_button('Submit') 
ask "Continue?" 
click_button('Submit') 
Cuestiones relacionadas