ChromeのseleniumIDEを使ってテストの自動化を行っていた際、ファイルアップロードまわりでハマったポイントがあったので記録します。
環境について
OSはWindows10、Chromeのバージョンは81、seleniumIDEのバージョンは3.17.0
を使用していました。
事象
seleniumIDEを使ってフォームのテストを自動化しようとしたら、
<input type="file">
でローカルのファイルをアップロードするのに失敗した。
詳細
開発していたのはユーザー登録画面でした。
HTMLで組んだフォームの入力をPOSTで送信するという単純な機能です。
その中でローカルのファイルをアップロードするフォームがありました。
<input type="file" name="upload_file" id="upload_file">
テストを自動化しようということになり、seleniumIDEでChromeの自動操作を行います。
動作をseleniumIDEで記録してテストを作成します。
それが終わったら、テストを実行して各フォームに自動で値を入力していきます。
すると、上記のフォームに入力する際エラーが発生しました。
Failed:
{"code":-32000,"message":"Not allowed"}
原因と解決法
1
原因を調査したところ、まずVauleに入力するパスが間違っていました。
RECを使ってユーザーの動作を直接記録すると、入力したファイルのパスはC:\fakePath
から始まるものとなっています。
これをローカルにおけるパスに変更しました。
しかし、それでもまだエラーは出ました。
2
権限が原因なのかと考え、ローカルファイルの権限を調べるも問題はありませんでした。
3(解決)
原因はChrome拡張機能の設定にありました。
アドレスバーにchrome://extensions
と入力すると、インストールされている拡張機能の一覧が表示されます。
seleniumIDEの詳細を選択し、ファイルのURLへのアクセスを許可するの項目を確認したところ無効になっていました。
これを有効にしてテストを実行したところ、無事ファイルのアップロードをすることができました。
おそらくデフォルトで無効になっているのだと思います。
なかなか気づかないですよね。
参考資料
`type` command on `input type=file` broken for Chrome 72 #569