2012-06-20 10 views
11

Sto attraversando un periodo difficile (ma molto interessante) per lo sviluppo del comportamento guidato utilizzando Cucumber, RSpec, Selenium e Rails.Rails e selenio: come fermare/sospendere l'esecuzione di un test nel browser?

Ho la mia configurazione pronta per i test con Selenium, ed è divertente vedere Firefox apparire e funzionare automaticamente attraverso i miei scenari. Ma una cosa che mi piacerebbe fare è mettere in pausa o fermare l'esecuzione ad un certo punto, così posso ispezionare ciò che il selenio vede ad un certo punto.

Conosco il comando save_and_open_page, ma questo mi mostra solo HTML semplice senza formattazione. Quindi forse c'è un metodo stop_execution o qualcosa che ferma Selenium senza chiudendo il browser?

risposta

25

Installare pry, quindi inserire binding.pry nel test in cui si desidera che si interrompa. Al termine, premere Ctrl + D o digitare exit nel REPL che viene aperto per continuare l'esecuzione.

+0

Sì, questa è davvero una bella risposta! Lo sto già facendo, grazie per avermi riportato a questa mia vecchia domanda. :) a proposito, 'pry-debugger' offre anche alcune funzionalità di debugger molto semplici. –

+0

Funziona perfettamente per me tranne quando applico binding.pry in una vista. Qualche idea su come sospendere l'esecuzione in una vista? So che non avrei davvero bisogno di farlo, ma a volte può essere davvero utile. – peteretep

0

tenta di utilizzare selenium.sleep (ms) questo renderà l'esecuzione di test attendere il periodo di tempo specificato

+0

Grazie , questo è un buon suggerimento, ma nel mio *** _ steps.rb il selenio non sembra essere disponibile: 'variabile locale non definita o metodo 'selenio' per # (NameError) ' –

+0

oops .. usa java. così nel codice selenium.sleep(), il selenio è il nome dell'oggetto .. quindi devi modificarlo di conseguenza :) – Acid

+0

L'ho provato con 'page.driver.sleep (5000)' ma poi ottengo 'metodo privato' sleep 'ha richiesto # (NoMethodError) '. –

1

Usa Debugger in cui si desidera stop/pause l'esecuzione.

o

In Selenio IDE è possibile fare clic destro sui comandi allineano ed è possibile selezionare Set point/Cancella Inizio-stop/pause l'esecuzione.

1

OK, ho funzionato installando ruby-debug19 (per Ruby 1.9.3), e quindi semplicemente impostando un punto di interruzione da qualche parte in un passo di Cucumber.

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

Un'altra opzione è quella di utilizzare la gemma Capybara-Firebug che aggiunge un "quindi arrestare e mi lascia il debug" step che sembra sostanzialmente a fare lo stesso (non so se si basa sul rubino -debuggi le gemme).

16

o semplicemente:

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

"Questo ti può mordere in due modi: per prima cosa ti consigliamo di impostare il tempo di sospensione sufficientemente lungo da dare tutto il tempo necessario per ottenere la risposta, ma questo significa che trascorrerai molto tempo in attesa del risposta, rallentando così i test.Il secondo morso è che, per quanto a lungo dormi, a volte non sarà sufficiente. Ci saranno dei cambiamenti nell'ambiente che ti faranno superare il sonno - e avrai un errore falso Di conseguenza ti esorto vivamente a non usare mai il sonno nudo come questo. " da http://martinfowler.com/articles/nonDeterminism.html – Hugo

+1

non lo consiglierei per il test. È solo per ispezione. Avere qualcosa di così brutto spinge a rimuoverlo, dopo l'ispezione. Una sorta di 'p' per il debug o' console.log' –

0

Tutte le risposte devono installare nuove gemme o anche l'impostazione di un sonno che non è l'approccio migliore. Si può mettere questa linea in qualsiasi passo:

ask "Continue?" 

si fermerà l'esecuzione fino a quando si entra y (Si)

Così, per esempio, sarebbe simile a questa:

expect(page).to have_button('Submit') 
ask "Continue?" 
click_button('Submit') 
Problemi correlati