ブラウザ(chrome, firefox等)のネイティブダイアログを閉じる方法


問題

Capybara(selenium)などでテストをしている時に、ファイルアップロードなどでブラウザネイティブのダイアログが開く時がある。

seleniumでは調べてみた限りJavascriptで表示されるようなalert confirm ダイアログの操作はできるが、ブラウザネイティブで表示されるダイアログはどうにも出来ない様子

解決方法

ダイアログが開いた状態でブラウザ自体にescapeキーが送れれば良いのでOSXの場合はAppleScriptを使う。

dialog_escape.script
# activate application "Google Chrome" chromeの場合はこっち
activate application "Firefox"
tell application "System Events"
  key code 53
end tell

特定のアプリケーションをフォーカスして、escapeキーを送っているだけ

上記のファイルを保存してrubyなどから以下のように実行

system("osascript /path/to/dialog_escape.script")