【1】ファイルダイアログが表示されてしまう
ZIPファイルをダウンロードするサイトに対して、
http://design-ambience.com/wordpress/?p=114
などのサイトを参考に、ファイルダイアログ(下記「ダイアログ表示内容」を参照)が表示されないような JUnitテストコード(下記「サンプル」を参照)を組んだが、 ファイルダイアログが表示されてしまう。
ダイアログ表示内容
ファイル名
ファイルの種類: HTMLドキュメント ファイルの場所: http://localhost:8080
サンプル
@Test public void DownloadSample() throws Exception { // プロファイルの作成 FirefoxProfile profile = new FirefoxProfile(); // ダウンロードするファイルの保存先フォルダを指定 // 0:デスクトップ 1:ダウンロードフォルダ 2:ダウンロードに指定された最後のフォルダ profile.setPreference("browser.download.folderList", 0); // ダウンロードするファイルの保存先フォルダが指定してあればそれを使う profile.setPreference("browser.download.useDownloadDir", true); // ダウンロードフォルダ profile.setPreference("browser.download.dir","c:/temp"); // 指定したmimeタイプは有無を言わさずダウンロードする profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "text/plain, application/vnd.ms-excel, text/csv, application/zip, text/comma-separated-values, application/octet-stream"); // ダウンロードダイアログを見せないようにする profile.setPreference("browser.download.manager.showWhenStarting", false);
対応策
修正前
// 指定したmimeタイプは有無を言わさずダウンロードする profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "text/plain, application/vnd.ms-excel, text/csv, application/zip, text/comma-separated-values, application/octet-stream");
修正後(「text/html」を追加)
// 指定したmimeタイプは有無を言わさずダウンロードする profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "text/html, text/plain, application/vnd.ms-excel, text/csv, application/zip, text/comma-separated-values, application/octet-stream");
補足
* 今回、ファイルダイアログの表示が「ファイルの種類: HTMLドキュメント」だったので、「text/html」を追加したが、 もし、ファイルの種類が違えば、別の対応をする必要がある
【2】エラー「ClientAbortException ... java.net.SocketException: Broken pipe」が表示されてしまう
* 以下のサンプルにあるようなコードで、ファイルダウンロード試験していたら、 サーバ側で、エラー「ClientAbortException ... java.net.SocketException: Broken pipe」が表示されてしまう
サンプル
@Test public void DownloadSample() throws Exception { // プロファイルの作成 FirefoxProfile profile = new FirefoxProfile(); // ダウンロードするファイルの保存先フォルダを指定 // 0:デスクトップ 1:ダウンロードフォルダ 2:ダウンロードに指定された最後のフォルダ profile.setPreference("browser.download.folderList", 0); // ダウンロードするファイルの保存先フォルダが指定してあればそれを使う profile.setPreference("browser.download.useDownloadDir", true); // ダウンロードフォルダ profile.setPreference("browser.download.dir","c:/temp"); // 指定したmimeタイプは有無を言わさずダウンロードする profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "text/plain, text/plain, application/vnd.ms-excel, text/csv, application/zip, text/comma-separated-values, application/octet-stream"); // ダウンロードダイアログを見せないようにする profile.setPreference("browser.download.manager.showWhenStarting", false); // 作成したプロファイルでFirefox(のドライバー)を起動する driver = new FirefoxDriver(profile); driver.get("http://localhost:8080/"); FileLoader(driver); driver.quit(); } private static void FileLoader(WebDriver driver) throws InterruptedException { WebElement download = driver.findElement(By.linkText("Download")); // ここでダウンロードする download.click(); // ダウンロードファイルの確認処理(省略) }
原因
* ダウンロードを行った直後に、ダウンロードファイルの確認処理を行ってしまっている。 ただ、ダウンロードがまだ完了していないので、確認処理でファイルがなくて、エラーとしてしまっている エラーになると、Client側でダウンロード処理を中断するので、「ClientAbortException」が発生する
対応策(サンプルを修正)
download.click(); // ★ここを追加★ Thread.sleep(3000); // ダウンロードファイルの確認処理(省略)
関連記事
Selenium IDE
https://dk521123.hatenablog.com/entry/2015/05/19/233246
Selenium WebDriver + Java ~ 初期設定編 ~
https://dk521123.hatenablog.com/entry/2015/05/12/230924
Selenium に関するトラブルシューティング ~ 設定編 ~
https://dk521123.hatenablog.com/entry/2015/05/11/210707