2012-05-25 14 views
8

Quindi quando eseguo i miei test individualmente, funzionano alla grande. Tuttavia, quando eseguo la mia funzione (test multipli) il mio codice non funziona.
Questo perché quando capybara esiste, non tutte le finestre si stanno chiudendo e quindi i miei driver di selenio non sanno quale finestra usare.Puoi chiudere tutte le finestre aperte in capybara?

Fondamentalmente, ciò che sta accadendo è che il mio test sta aprendo più finestre. Questo sta accadendo perché i miei test fanno clic sui collegamenti che aprono nuove finestre e controllano il contenuto nelle nuove finestre. Anche se sto dicendo page.quit alla fine di ogni test, questa funzione non sta chiudendo tutte le finestre aperte (chiude la finestra attiva ma non la finestra originale). Quando viene eseguito il secondo test, utilizza la finestra di creazione originale, ma quando apre il nuovo pop-up, utilizza la finestra sbagliata.

Come è possibile garantire che durante ogni test venga utilizzato un nuovo browser e tutte le finestre del test precedente vengano chiuse.
Attualmente sto usando page.reset! e page.quit.
Non sicuro, ma posso dire session.quit per chiudere tutte le finestre del browser aperte?

risposta

1

provare quanto segue:

page.driver.browser.window_handles.each do |handle| 
    page.driver.browser.switch_to.window(handle) 
    page.quit 
end 

(penso che funzionerà, ma non ho avuto la possibilità di testarlo.)

+1

Questo non funziona, la funzione 'esci' non esiste. Lo stesso con Close. – Jason

+1

Questo non funziona – Jason

+0

Questo funziona comunque a caso.Questa volta mi ha dato "Errore/Errore: impossibile trovare la linea corrispondente da backtrace Selenium :: Errore Web :: Errore :: NoSuchWindowError: esecuzione getUrl non riuscita; Impossibile trovare la finestra' – Ava

3

Io uso questo pezzo di codice per accedere popup e chiuderle dopo . Non dovrebbe essere molta differenza

within_window(page.driver.browser.window_handles.last) do 
    click buttons and stuff... 
    ... 
    page.driver.browser.close #closes popup 
end 

Speranza che aiuta

+0

Questo non funziona perché tutte le risorse sono perse e il 2 ° test fallisce dicendo "browser non trovato" o qualcosa del genere. – Jason

8

Questo codice funziona:

page.execute_script "window.close();" 

Ho appena eseguire questo mentre nella finestra Voglio chiudere.

+0

Questo codice non funziona se si utilizza un plug-in come i moduli sporchi e si dispone di una forma sporca sullo schermo, in tal caso javascript fa apparire un avviso "sei sicuro" e la pagina non viene chiusa. Molto meglio fare "page.reset!" prima di eseguire il test. – Rob

+0

'page.execute_script" window.close(); "' non funziona per me. Dovrebbe essere senza ';', ad esempio 'page.execute_script" window.close() "' –

3
page.driver.browser.window_handles.each do |handle| 
    page.driver.browser.switch_to.window(handle) 
    page.execute_script "window.close()" 

end 

Ha fatto il fascino per me. Combinazione di risposte @Jason e @ Justin.

Grazie!

1

Prova questo:

tab_id = page.driver.find_window("http://google.com.au") 
page.driver.browser.switch_to.window(tab_id) 
page.driver.quit 

questo ha funzionato per me.

0

Aggiungere questo ai vostri test di funzionalità, sarà reimpostare i cookie di sessione e avviare il test su una pagina vuota:

# Window washing - use a clean window before every example 
before(:example) do 
    page.reset! 
end 
1

Al fine di avere tutte le asserzioni di file spec, ho superato il controllo a nuova pagina (finestra), dopo l'esecuzione affermazioni mi chiuso nuova pagina e controllo passò alla pagina originale come muggito:

after(:each) do 
    expect(@static_page.has_logo?).to eq(true) # assertion in new page 
    page.execute_script('window.close()') # close new page 
    switch_to_window(windows.first) # return control to first page 
end 
Problemi correlati