以下のSelenium Webdriverを使用して、以下のタスクを実行する必要があります。
1.1. 任意のファイル(ファイルタイプは画像、PDF、jarなど何でも可)のダウンロードを開始するリンク/ボタンをクリックします。 2.2. ポップアップが表示されたら、"Save" をクリックします(例: http://selenium.googlecode.com/files/selenium-server-standalone-2.33.0.jar の場合)。 3.3.保存したい場所を指定する。
どなたか、Javaを使ってどのように実装できるか教えてください。
保存ダイアログボックスにアクセスすることはできません。それはOSが制御しています。唯一できることは、ブラウザのデフォルトのダウンロード場所を設定し、自動的にファイルをダウンロードするようにすることです。そして、Javaでファイルを確認します。
この前のSOの質問]2からこの回答を確認するとよいでしょう。基本的には、Firefoxのプロファイルを設定するときに、常にダウンロードするMIMEタイプのカンマ区切りリストへのプロパティ browser.helperApps.neverAsk.saveToDisk
を設定する呼び出しを追加するのです。
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk","text/csv");
About:configs の この Mozilla KB FAQ の記事 を参照してください。
UPDATE これで可能になりそうです別の質問での回答参照。
キャンセル/保存ダイアログのポップアップが表示されるのは、サイトが異なるMIMEタイプを送信しているためと思われます。
**実際のヘッダー内容を確認してください。
Firefoxに組み込まれている開発者ツールを使用して、右クリックして、投稿した要素/ダウンロードリンクを検査し、ネットワークモニタを見て、ContentTypeヘッダの値が返されるのを確認します...。それはあなたが使用したいものであろう....
それに合わせてプロフィール設定を行う
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk",
"application/octet-stream,text/csv");
text/csvを期待していたのですが、application/octet-streamが表示されました。 受け入れるタイプのリストに追加された後、すべてが期待どおりに動作しました。
このようなものを探しているのだと思います。
//common to all the cases
FirefoxProfile prof = new FirefoxProfile();
//Case:1 - Use this case to set download this code to your browser's default location
//prof.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/zip");
//Case:2 - Download file to Desktop
//prof.setPreference("browser.download.folderList", 0);
//prof.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/zip");
//Case:3 - Download to custom folder path. Replace d:\\selenium with your Download Location
prof.setPreference("browser.download.dir","D:\\selenium\\");
prof.setPreference("browser.download.folderList", 2);
prof.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/zip");
//This will work for all cases mentioned above
WebDriver driver = new FirefoxDriver(prof);
driver.get("http://docs.seleniumhq.org/download/");
driver.findElement(By.xpath("//tr[1]/td[4]/a[text()='Download']")).click();