2013-09-24 16 views
5

RSpec'te bu tür bir kod penceresini popup penceresine, link kullanabilir, Salatalık basamaklarında böyle bir şeyi nasıl yapabilirim? SanmıyorumAçılır pencerelere git cucumber, 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 

cevap

13

gibi bunu yapmanın bir salatalık/Kapibara yolu yoktur.

Ama hala böyle selenyum sürücü komutları kullanarak pencereyi değiştirebilirsiniz:

#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) 

DÜZENLEME: Andrews aşağıda cevap yeni DSL değişiklikler yapıldı beri doğru cevap şimdi.

+2

Capybara şimdi pop-up pencereler ile etkileşim için DSL sağlar. Cevabımı aşağıya bakın. – Andrew

+0

Lütfen modal pencerenin kapanmasından sonra ana pencereye erişmek istediğinizde bu uygulamanın size bir hataya neden olacağından, Andrew'un aşağıdaki yanıtını kullanın. –

+0

Capybara kullanıyorsanız, özellikle Chrome sürücüsünü kullanacaksanız bu yönteme gitmeyin. Switch_to_window() yöntemini kullanırken bir istisna karşılaşacaksınız. https://github.com/teamcapybara/capybara/issues/1861. Aşağıdaki cevabı Andrew tarafından kullanın. – ibaralf

13

Sen pop-up pencereler ile etkileşim için Salatalık adımlarla Capybara kullanabilirsiniz:

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

en iyi yanıt bugüne kadar –

+0

Bu adama ver biraz daha fazla puan – Doydle

+0

Doğru cevap bu. –

0

biz bunu basit bir şekilde, within_window olmadan ve selenyum yerlileri olmadan.

page.switch_to_window page.windows.first 

page.switch_to_window page.windows.last 

veya

page.switch_to_window page.windows[0] 

page.switch_to_window page.windows[-1] 

0 - ilk pencere
-1 - son pencere

pencere fonksiyonu tüm pencereleri bir dizi geri vermek.

Başka bir yol, sayfa başlığı kullanılarak.

page.switch_to_window {title == 'Google'}

İlgili konular