Переключиться на всплывающие окна в огурце, капибаре

В RSpec я могу использовать такой переключатель кода для всплывающего окна, link, Как я могу сделать это в шагах Cucumber?

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)


Я не думаю, что есть способ огурца/капибары сделать это как таковой.

Но вы все равно можете изменить окно, используя команды драйвера selenium, например:

    #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
Для используемой технологии водосвинки этот пример является наиболее подходящим. - person Sunil Kumar; 14.08.2018

Мы можем сделать это простым способом, без внутри_окна и без нативов селена.

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