2012-04-19 14 views
6

Sono nuovo per Cucumber e Ruby. Sono un analista di affari abituato a scrivere requisiti e casi di test, e ho letto su Cucumber e Watir, ma ho difficoltà a trovare ciò che mi serve per funzionare.Profili cetriolo e ganci globali per selezionare il browser

Sto testando un set di pagine Web in IE, Firefox e Chrome e come diversi tipi di utenti. Sto scrivendo e taggando le caratteristiche e creando profili in cucumber.yml in modo da poter eseguire cetriolo con -p per eseguire solo i test codificati appropriati per diversi tipi di utenti.

Sto creando diversi oggetti di pagina in modo che possa accedere facilmente come utente di base, utente di report, utente di editor, ecc. I file di funzionalità avranno scenari leggermente diversi e condizioni pass/fail per ciascun tipo di utente e step defs richiamerà gli oggetti pagina appropriati per l'accesso come tali tipi di utenti.

Anziché duplicare i test tre volte ciascuno per aprire il browser giusto con watir-webdriver, e piuttosto che avere il browser aperto e chiuso con ogni scenario, ho voluto creare un hook globale in env.rb o hooks.rb per aprire il browser una volta e solo una volta prima dell'esecuzione di tutte le funzionalità, quindi chiuderlo con e dopo l'istruzione dagli hook globali quando tutte le funzioni sono state eseguite. Ancora una volta, sto usando i profili che chiamano scenari con tag per scegliere quali test eseguire per ogni tipo di utente.

Il problema che sto avendo è un passo avanti, basta aprire il browser. So come utente watir-webdriver per aprire ciascun browser.

Quello che volevo era inserire ganci globali per aprire un browser prima di qualsiasi test. Quindi nell'env.rb stavo per mettere la chiamata browser = Watir :: Browser.new.

Quello che voglio fare è avere tre hook globali separati, uno per IE, Chrome e Firefox, e chiamarli in base a una condizione passata da un profilo in cetriolo.yml, ma non riesco a ottenerlo lavorare. Ho provato a taggarli e questo non ha funzionato. Non puoi taggare gli hook globali? L'ho provato con un setup if/then/else ma non ha funzionato neanche.

Vorrei poter passare un parametro o tag da un profilo in cucumber.yml chiamare un solo gancio globale, come ad esempio:

basicuser_overviewtests_ie: --tags @basic @overview @ie 

basicuser_overviewtests_ff: --tags @basic @overview @firefox 

Basicuser_newpagetests_ie: --tags @basic @newpage @ie 

Ecc ... i primi due tag farebbero riferimento agli scenari, il terzo al hook env.rb corretto.

Oppure, se potessi passare una variabile dal profilo, funzionerebbe anche quella. Non sono riuscito a capire come potrei usare una variabile d'ambiente lì.

Mi manca qualcosa? Questa informazione è sufficiente per spiegare il problema? Grazie!


UPDATE: Parte del problema sembra essere che il cetriolo non ha riconosciuto la cartella [supporto] quando era sullo stesso livello della cartella [caratteristiche], aveva bisogno di essere in [Impostazioni]. Le informazioni su cuke avevo detto che sarebbe stato Ok allo stesso livello piuttosto che all'interno delle funzionalità. Non è il caso.

Così ora posso ottenere i miei tre hook globali per l'esecuzione dei browser, ma il tagging non aiuta, vengono eseguiti tutti contemporaneamente anche se taggati per essere eseguiti solo prima di feature tagged @ie o con profili taggati solo per l'esecuzione @ vale a dire.

risposta

8

MODIFICA: pp.147-148 da The Cucumber Book mi porta a credere che questo dovrebbe funzionare:

Before ('@ie') do 
    @browser = Watir::Browser.new :ie 
end 

non ho ancora testato, ma che probabilmente si ottiene quello che si voleva se si voleva passare il browser come un tag.


Non sono riuscito a capire come leggere i tag, anche se penso che ci sia probabilmente un modo per farlo. Ti aggiornerò se lo trovo nello The Cucumber Book. Ho finito per usare variabili d'ambiente. Ecco come ho fatto:

case ENV['BROWSER'] 
    when 'ie', 'Internet Explorer' 
    browser = Watir::Browser.new :ie 
    when 'ff', 'Firefox' 
    browser = Watir::Browser.new :ff 
    when 'chrome' 
    browser = Watir::Browser.new :chrome 
    when 'opera' 
    browser = Watir::Browser.new :opera 
    when 'debug' 
    debug_profile = Selenium::WebDriver::Firefox::Profile.new 
    debug_profile.add_extension 'features/support/firebug.xpi' 
    browser = Watir::Browser.new :firefox, :profile => debug_profile 
    else 
    browser = Watir::Browser.new :ie 
end 

Before do 
    @browser = browser 
end 

at_exit() do 
    browser.close 
end 

Poi ho solo passare BROWSER=<browser> sulla riga di comando. Per una discussione più approfondita su cosa ho fatto per usare le variabili ENV, puoi leggere il post sul blog che ho scritto here.

+0

Ha funzionato, grazie! Sembra che fossi sulla buona strada: avevo tentato di lavorare con le variabili di ambiente, ma non avevo la sintassi corretta, e passai al tagging, che non funzionava affatto. Funziona esattamente come mi serve e il tuo post sul blog ha aiutato moltissimo - è parallelo al tipo di test che sto svolgendo. Grazie ancora! –

+0

Ottimo! Sono contento di poterti aiutare. Se non lo hai ancora, prendi il Libro di Cetriolo. È stato così utile per me. –