2013-09-24 23 views
5

W RSpec mogę użyć takiego przełącznika kodu do okna wyskakującego, link, Jak mogę zrobić coś takiego w krokach Ogórek?Przełącz na okna wyskakujące w ogórku, kapibara

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 

Odpowiedz

13

Nie sądzę, że istnieje sposób ogórek/kapibara, aby to zrobić jako takie.

Ale można jeszcze zmienić okno za pomocą komend sterownika selen tak:

#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 odpowiedzieć poniżej jest poprawna odpowiedź teraz, ponieważ nowe zmiany DSL zostały wdrożone.

+2

Kapibara zapewnia teraz DSL dla interakcji z okna popup. Zobacz moją odpowiedź poniżej. – Andrew

+0

Proszę użyć odpowiedzi Andrew poniżej, ponieważ ta implementacja spowoduje błąd, gdy chcesz uzyskać dostęp do głównego okna po zamknięciu okna modalnego. –

+0

Jeśli używasz Capybara, nie używaj tej metody, szczególnie jeśli zamierzasz używać sterownika Chrome. Podczas korzystania z metody switch_to_window() napotkasz wyjątek. https://github.com/teamcapybara/capybara/issues/1861. Skorzystaj z odpowiedzi poniżej Andrew. – ibaralf

13

Można użyć Capybara w swoich krokach ogórka na interakcję z oknami 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

najlepsza odpowiedź do tej pory –

+0

Daj temu kolesiowi więcej przebojów – Doydle

+0

To jest poprawna odpowiedź. –

0

W prosty sposób możemy zrobić, bez within_window i bez tubylców selenu.

page.switch_to_window page.windows.first 

page.switch_to_window page.windows.last 

lub

page.switch_to_window page.windows[0] 

page.switch_to_window page.windows[-1] 

0 - to pierwsze okno
-1 - to ostatnie okno

okna powrotną tablicę wszystkich okien.

Inny sposób, używając tytułu strony.

page.switch_to_window {title == 'Google'}