2013-09-24 9 views
5

In RSpec kann ich solche Code-Schalter zum Popup-Fenster, link, Wie kann ich so etwas in Gurken-Schritten tun?Wechseln Sie in Popup-Fenster in Gurke, Capybara

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 

Antwort

13

Ich glaube nicht, dass es eine Gurke/Capybara Weg ist, dies als solches zu tun.

Sie können aber nach wie vor das Fenster mit Selen Treiberbefehle wie folgt ändern:

#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 beantworten unten ist die richtige Antwort jetzt, da neue DSL Änderungen umgesetzt wurden.

+2

Capybara bietet jetzt eine DSL für mit Popup-Fenster interagieren. Siehe meine Antwort unten. – Andrew

+0

Bitte verwenden Sie die unten stehende Antwort von Andrew, da diese Implementierung einen Fehler verursacht, wenn Sie nach dem Schließen des modalen Fensters auf das Hauptfenster zugreifen möchten. –

+0

Wenn Sie Capybara verwenden, gehen Sie nicht mit dieser Methode vor, besonders wenn Sie den Chrome-Treiber verwenden. Bei Verwendung der Methode switch_to_window() tritt eine Ausnahme auf. https://github.com/teamcapybara/capybara/issues/1861. Benutze die Antwort von Andrew. – ibaralf

13

Sie können Capybara in Ihrem Cucumber Schritte verwenden, um mit Popup-Fenster zu interagieren:

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

Beste Antwort bei weitem –

+0

Geben Sie diesem Kerl mehr upvotes – Doydle

+0

Dies ist die richtige Antwort. –

0

Auf einfache Art und Weise wir dies tun können, ohne within_window und ohne Selen Eingeborenen.

page.switch_to_window page.windows.first 

page.switch_to_window page.windows.last 

oder

page.switch_to_window page.windows[0] 

page.switch_to_window page.windows[-1] 

0 - ist das erste Fenster
-1 - ist das letzte Fenster

Fenster Funktion ein Array aller Fenster zurückzukehren.

Eine andere Möglichkeit, den Titel der Seite zu verwenden.

page.switch_to_window {title == 'Google'}

Verwandte Themen