RSpec + capybara + selenium + chromedriverで印刷ボタンの絡むシステムスペックを書いた
概要
自作webサービスのシステムスペックで、印刷ボタンが絡むテストを書くのに苦労したので、その忘備録
やりたかったこと
印刷ボタンを押させる -> キャンセル or 保存ボタンを押下させる
解決策
ヘッドレスブラウザではなく、バックグラウンドでchromeブラウザを立ち上げ、chromeブラウザオプションの--kiosk-printingを用いて、自動で保存ボタンが押下されるようにした。
なぜそうしたか
- ヘッドレスブラウザでは印刷機能が使えないらしい 参考:ruby - Access browser print popup for testing purposes - Stack Overflow
- webdriverの仕様で、printダイアログを対話的に操作することはできないとのこと 参考:Print Dialog does not close in Firefox Selenium Driver · Issue #2243 · teamcapybara/capybara
実際のコード
spec/support/capybara.rb
RSpec.configure do |config| config.before(:each, type: :system) do driven_by :selenium, using: :headless_chrome, screen_size: [375, 667] end config.before(:each, type: :system, headless: false) do driven_by :selenium, options: { browser: :chrome } do |driver_option| # 印刷ダイアログが開いたら自動で保存ボタンを押下する driver_option.add_argument('--kiosk-printing') end end end