Как с помощью Capybara перейти в новое окно для ссылок с целями "_blank"? - PullRequest
71 голосов
/ 30 сентября 2011

Возможно, это не та проблема, с которой я сталкиваюсь, но кажется, что когда я "нажимаю на ссылку" ссылку с target = "_ blank", сеанс фокусируется на текущем окне.

Поэтому я либо хочу иметь возможность переключиться в новое окно, либо игнорировать атрибут _blank - по сути, я просто хочу, чтобы он действительно перешел на страницу, указанную ссылкой, чтобы я мог убедиться, что это правильная страница.

Я использую драйверы webkit и selenium.


Ниже представлены мои выводы.Очень ценится более подробный ответ.

Кроме того, это работает только с селеном - эквивалент драйвера веб-набора (или указание, где я мог бы найти его сам) был бы очень признателен.

Ответы [ 14 ]

4 голосов
/ 01 января 2015

Это работает для меня в capybara-webkit:

within_window(windows.last) do
  # code here
end

(я использую capybara 2.4.1 и capybara-webkit 1.3.0)

3 голосов
/ 06 февраля 2015

Лучшая идея - обновить капибару до последней версии (2.4.1) и просто использовать windows.last потому что page.driver.browser.window_handles устарела.

3 голосов
/ 03 мая 2013

У меня была эта проблема при открытии ссылок в окне Gmail: я исправил это так:

Given /^(?:|I )click the "([^"]*)" link in email message$/ do |field|

  # var alllinks = document.getElementsByTagName("a");
  # for (alllinksi=0; alllinksi<alllinks.length; alllinksi++) {
  #   alllinks[alllinksi].removeAttribute("target");
  # }

  page.execute_script('var alllinks = document.getElementsByTagName("a"); for (alllinksi=0; alllinksi<alllinks.length; alllinksi++) { alllinks[alllinksi].removeAttribute("target"); }')

  within(:css, "div.msg") do
    click_link link_text
  end

end
0 голосов
/ 08 марта 2019

Основная реализация (window_opened_by) вызывает ошибку для меня:

*** Capybara::WindowError Exception: block passed to #window_opened_by opened 0 windows instead of 1

Итак, я разрешаю это решением:

new_window = open_new_window

within_window new_window do
  visit(click_link 'Something')
end

page.driver.browser.window_handles
# => ["CDwindow-F7EF6D3C12B68D6B6A3DFC69C2790718", "CDwindow-9A026DEC65C3C031AF7D2BA12F28ADC7"]
...