ひーろのアウトプットブログ

プログラミングの学習記録と開発日記です

Rspecで確認メッセージを選択する記述方法

システムスペックを書いている時に確認ダイアログを選択する方法を知らなかったので調べてみました。

前提

ruby: 2.6.6
rails: 6.0.3.5

内容

とりあえず分からないなりに書いてみると、案の定エラーがでました。

Selenium::WebDriver::Error::UnexpectedAlertOpenError

テストのビュー該当部分はこんな感じです。

= form_with model: @contact, local: true do |f|
  .form-group
    = f.label :message
    = f.text_area :message, size: '10x10', class: 'form-control'
  = f.submit '送信する', class: 'btn btn-primary', data: { confirm: '送信しますか?' }

解決方法

確認ダイアログを選択するにはaccept_confirmと使うと良いそうです。
なので、上記の「送信する」の場合にはこのようになります。

page.accept_confirm do
  click_on '送信する'
end

これで確認ダイアログを選択でき、テストを走らせたところパスしました。

ちなみに、確認ダイアログでキャンセルを選択する場合はこのように書けば良いようです。

page.dismiss_confirm do
  click_on '送信する'
end
参考

https://blog.regonn.tokyo/rails/2017-06-13-rspec-capybara/

https://qiita.com/at-946/items/403d85d45cb02615c323