Posted at

Capybaraと仲良くなる(タブ・ウィンドウの操作について)

More than 1 year has passed since last update.


別タブで開いた画面をテストする

※ここではタブ≒ウィンドウのニュアンス


別タブをスコープにして操作する方法

テスト実行しているカレントはそのままに別タブをスコープとして操作できる。

この方法だとテスト対象とするタブをスコープとして操作しているのでタブ間を行ったり来たりする操作、別タブを操作して元のウィンドウに戻る操作のときに対象がわかりやすい。

click_on '別タブでページを開く'

# 最後に開いたタブを指定している
handle = page.driver.browser.window_handles.last
page.driver.browser.within_window(handle) do
expect(page).to have_content('この文字列が見つかるかな?')

click_on 'モーダルを開く'
expect(page).to have_content('別タブ内のモーダルなどの操作もできる')
click_on 'モーダルを閉じる'
end

click_on '別タブでページを開く'

# 最後に開いたタブを指定している
within_window(windows.last) do
expect(page).to have_content('この文字列が見つかるかな?')

click_on 'モーダルを開く'
expect(page).to have_content('別タブ内のモーダルなどの操作もできる')
click_on 'モーダルを閉じる'
end


別タブに移動して操作する方法

テスト実行しているカレントも別タブに移動して操作する。

なので元々操作していた画面をテストするにはタブ移動するかスコープ定義する必要がある。

行ったり来たりするテストを書くとどの画面をテストしているのかの可読性が低くなりそう😑

click_on '別タブでページを開く'

# 最後に開いたタブに移動している
switch_to_window(windows.last)
expect(page).to have_content('この文字列が見つかるかな?')

click_on 'モーダルを開く'
expect(page).to have_content('別タブ内のモーダルなどの操作もできる')
click_on 'モーダルを閉じる'


アラートウィンドウを操作する

テストではアラートウィンドウを表示・操作するケースもあります。

そんなときは下記のように操作します。

# OK操作

page.driver.browser.switch_to.alert.accept

# キャンセル操作
page.driver.browser.switch_to.alert.dismiss


画面サイズを指定する

自分が知っているのは以下の2パターン。

driverの違いがまだ理解できていない。。。😇

width = 400

height = 800
Capybara.current_session.driver.browser.manage.window.resize_to(width, height)

width = 400

height = 800
Capybara.page.driver.resize(width, height)