2013-09-24 14 views
5

In RSpec posso usare tale codice per passare alla finestra popup, link, Come posso fare una cosa del genere nei passaggi Cucumber?Passa a finestre popup in cetriolo, capibara

login_window = page.driver.find_window('PPA_identity_window') 
    main_window = page.driver.find_window('') 

    # We use this to execute the next instructions in the popup window 
    page.within_window(login_window) do 
     #Normally fill in the form and log in 
     fill_in 'email', :with => "<your paypal sandbox username>" 
     fill_in 'password', :with => "<your paypal sandbox password>" 
     click_button 'Log In' 
    end 

risposta

13

Non penso che ci sia un modo di cetriolo/capibara per farlo in quanto tale.

Ma si può ancora modificare la finestra utilizzando i comandi del driver selenio in questo modo:

#Get the main window handle 
    main = page.driver.browser.window_handles.first 
    #Get the popup window handle 
    popup = page.driver.browser.window_handles.last 

    #Then switch control between the windows 
    page.driver.browser.switch_to.window(popup) 

EDIT: Andrews risposta qui sotto è la risposta corretta da quando nuovi cambiamenti DSL sono state attuate.

+2

Capybara fornisce ora un DSL per l'interazione con le finestre popup. Vedi la mia risposta qui sotto. – Andrew

+0

Si prega di utilizzare la risposta di Andrew qui sotto in quanto questa implementazione causerà un errore quando si desidera accedere alla finestra principale dopo la chiusura della finestra modale. –

+0

Se stai usando Capybara, non andare con questo metodo specialmente se stai per usare il driver Chrome. Si verificherà un'eccezione quando si utilizza il metodo switch_to_window(). https://github.com/teamcapybara/capybara/issues/1861. Usa la risposta in basso di Andrew. – ibaralf

13

È possibile utilizzare Capybara nei vostri passi cetriolo di interagire con finestre popup:

login_window = window_opened_by do 
    click_button 'Open Login Window' 
end 
within_window(login_window) do 
    fill_in :email, with: "[email protected]" 
    fill_in :password, with: "password" 
    click_button 'Log In' 
end 
+0

miglior risposta di gran lunga –

+0

Dare a questo ragazzo un po 'di uptotes – Doydle

+0

Questa è la risposta corretta. –

0

In modo semplice si può fare così, senza within_window e senza indigeni selenio.

page.switch_to_window page.windows.first 

page.switch_to_window page.windows.last 

o

page.switch_to_window page.windows[0] 

page.switch_to_window page.windows[-1] 

0 - è la prima finestra
-1 - è l'ultima finestra

finestre funzione restituire una matrice di tutte le finestre.

Un altro modo, utilizzando il titolo della pagina.

page.switch_to_window {title == 'Google'}

Problemi correlati