Превключване към изскачащи прозорци в краставица, капибара

В RSpec мога да използвам такъв код за превключване към изскачащ прозорец, връзка, Как мога да направя такова нещо в Cucumber steps?

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

person Aydar Omurbekov    schedule 24.09.2013    source източник


Отговори (3)


Не мисля, че има начин за краставица/капибара да се направи това като такова.

Но все още можете да промените прозореца, като използвате команди на селен драйвер като тази:

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

РЕДАКТИРАНЕ: Отговорът на Андрюс по-долу е правилният отговор сега, тъй като бяха въведени нови промени в DSL.

person snowstreams    schedule 26.09.2013
comment
Capybara вече предоставя DSL за взаимодействие с изскачащи прозорци. Вижте отговора ми по-долу. - person Andrew; 02.03.2016
comment
Моля, използвайте отговора на Андрю по-долу, тъй като тази реализация ще ви причини грешка, когато искате да получите достъп до главния прозорец, след като модалният прозорец се затвори. - person jetset; 10.01.2017
comment
Ако използвате Capybara, не използвайте този метод, особено ако ще използвате драйвера на Chrome. Ще срещнете изключение, когато използвате метода switch_to_window(). github.com/teamcapybara/capybara/issues/1861. Използвайте отговора по-долу от Андрю. - person ibaralf; 12.05.2017

Можете да използвате Capybara във вашите стъпки на Cucumber, за да взаимодействате с изскачащи прозорци:

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
person Andrew    schedule 01.03.2016
comment
най-добрият отговор досега - person C Johnson; 25.07.2016
comment
За използвана технология capybara, този е най-подходящият пример - person Sunil Kumar; 14.08.2018

По прост начин можем да го направим, без within_window и без селен нативни.

page.switch_to_window page.windows.first

page.switch_to_window page.windows.last 

or

page.switch_to_window page.windows[0]

page.switch_to_window page.windows[-1]

0 - е първият прозорец
-1 - е последният прозорец

Функцията windows връща масив от всички прозорци.

Друг начин е да използвате заглавието на страницата.

page.switch_to_window { title == 'Google' }

person Reinaldo Mateus Rossetti Junio    schedule 01.11.2017