本稿について
WatirでWebサイトに対してファイルアップロードするスクリプトを書いていましたが、
古い環境で情報が見つけづらく困ったところ解決したので備忘録です。
環境
CentOS Linux 7
Ruby 2.0.0p648
仕様gemはWatir
ブラウザはFirefoxを使っていますが、Chromeなど、別のブラウザでも
やりたいこと
あるWebサイトに対して、Watirをつかって自動スクリプト起動でファイルアップロードさせたい。
アップロード画面ではSelect file というボタンを押して、ファイル選択画面が出た際にそこからファイルを選んでアップロードさせる仕様
躓いたこと
アップロード画面からファイル選択をする挙動ができておりません。
OS標準のファイル選択画面が開いた時点で、ブラウザ外の動作になってしまうのかスクリプトの操作が及びません。
試したこと
- watir内部でjavascriptを実行できるので、
クリップボードなどを使ってコピペができないか など試しましたがそもそも画面の仕様がスクリプトでのクリップボード経由の
ペーストを受け付けていないでいるらしく、ペーストがエラーも吐かずに静かに何も起こらず終了してしまいます。 - 強引にキーイベントをjavascriptから発動させる。
下記のようなコマンドを実行して強制的にEngerキーやTabキーなど打つことできないか試しましたが、
ブラウザ自体にフォーカスがあたってしまっている?ようで、ファイル選択画面がキーコマンドを受け付けないでいます。
browser.execute_script("
document.dispatchEvent( new KeyboardEvent( 'keydown', { keyCode: 86 , ctrlKey: true , key: 'V' }) );
")
(参考:https://ameblo.jp/personwritep/entry-12456996738.html)
などなど試しましたが、対象のファイルを読みに行くなどの動作は行ってくれません。
Webサイトの仕様・画面イメージ
ファイルアップロード用の画面が下記で、Select file
ボタン押す事ができます。
すると下記のようなOS標準のファイル選択画面が出て、そこからファイルをアップロードするような作りになっています。
人の手で操作する際はSelect file
ボタンを押してからファイルを選択するか、ドラッグ&ドロップでファイルアップロードすることも可能です。
出来た
結果、これでできてしまいました。
$browser.file_field(:id, //).set("filepath\/...\/file.png")
参考にした記事
https://stackoverflow.com/questions/15163816/automating-a-file-upload-with-watir-in-chrome-on-osx
https://www.rubydoc.info/gems/watir/1.8.1/Watir%2FContainer:file_field
最後に一言
いやWatirて。