Post

Capybaraで新しいwindowを指定するため、window contextを切り替える方法

Capybara で system テストを行った時、can't find element'のエラーが出た。 byebugpage.body`で確認したら、リンクをクリックした前のページに止まっていることがわかった。

調べてみたら、その原因はページ内のリンクをクリックして、新規 window/tab で開く場合は、window contextは自動切り替えがなく、前のページに止まること。

解決方法はwindow contextを指定すること。

主に二つ種類があり、 複数の window が開いたまま、使いたい window context を指定するか、 一つの window context を維持するようにする。

まずは複数 window context のままで使いたい context を指定する方法 一番簡単なのは、switch_to_windowメソッドを使う

1
2
click__on "the link that opens the new tab"
switch_to_window(windows.last)

あるいは

1
2
3
switch_to_window(
  window_opened_by { click_on "the link that opens the new tab" },
)

二つ目の方法は、` within_window `メソッドを使う

1
2
3
within_window(windows.last) do
  # code here
end

あるいは

1
2
3
4
5
new_window = window_opened_by { click_link "the link that opens the new tab" }

within_window(new_window) { click_link "the link inside the new tab" }

new_window.close # if you want to close the tab that was opened

もし複数の window context がいらない、今の window context のみを残すなら、

1
visit find_link("the link that opens the new tab")["href"]

これで今の window context が維持される。


参照:
With Capybara, how do I switch to the new window for links with “_blank” targets?
Changing the focus of the window on Capybara
Clicked link and still on the same page (capybara)

This post is licensed under CC BY 4.0 by the author.