LoginSignup
1
0

More than 3 years have passed since last update.

Rubyの古いgemで自動ファイルアップロード Watirでの対処法

Last updated at Posted at 2020-09-08

本稿について

WatirでWebサイトに対してファイルアップロードするスクリプトを書いていましたが、
古い環境で情報が見つけづらく困ったところ解決したので備忘録です。

環境

 CentOS Linux 7
 Ruby 2.0.0p648
 仕様gemはWatir
 ブラウザはFirefoxを使っていますが、Chromeなど、別のブラウザでも

やりたいこと

あるWebサイトに対して、Watirをつかって自動スクリプト起動でファイルアップロードさせたい。
アップロード画面ではSelect file というボタンを押して、ファイル選択画面が出た際にそこからファイルを選んでアップロードさせる仕様

躓いたこと

アップロード画面からファイル選択をする挙動ができておりません。
OS標準のファイル選択画面が開いた時点で、ブラウザ外の動作になってしまうのかスクリプトの操作が及びません。

試したこと

  1. watir内部でjavascriptを実行できるので、 クリップボードなどを使ってコピペができないか など試しましたがそもそも画面の仕様がスクリプトでのクリップボード経由の ペーストを受け付けていないでいるらしく、ペーストがエラーも吐かずに静かに何も起こらず終了してしまいます。
  2. 強引にキーイベントを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ボタン押す事ができます。

image.png

すると下記のようなOS標準のファイル選択画面が出て、そこからファイルをアップロードするような作りになっています。
image.png

人の手で操作する際は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て。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0