2013-05-25 36 views
24

下記のSelenium Webdriverを使用して次のタスクを実行する必要があります。 (例えばhttp://selenium.googlecode.com/files/selenium-server-standalone-2.33.0.jarの場合)登場した場合に任意のファイルのダウンロードを開始任意のリンク/ボタンをSelenium Webdriverを使用して任意のファイルをダウンロードして目的の場所に保存する方法

  1. クリックして、ポップアップで「保存」の
  2. クリック(ファイルタイプは何の画像、PDF、瓶などであってもよいです)
  3. ファイルを保存する場所を指定します。

誰でも共有できますが、どのようにJavaを使用してこれを実装できますか?

+0

あなたは(あなたが[同様のポスト]への私の返事をREFEREも変更したり、任意の設定またはプロパティファイルを参照することなく、非常にスムーズにこれを行うには、代わりのAutoItを使用することができhttps://stackoverflow.com/questions/27789023/ポップアップボックスとのインタラクション - セレン - イン - パイソン/ 45323191#45323191) – eaccmk

+0

関連する質問:https://stackoverflow.com/questions/18439851/downloading-file-using-selenium – stiemannkj1

答えて

19

保存ダイアログボックスにアクセスすることはできません。これはOSによって制御されます。本当にできるのは、ブラウザのデフォルトのダウンロード場所を設定し、自動的にファイルをダウンロードできるようにすることだけです。その後、Javaでファイルをチェックします。

this answerthis previous SO questionにチェックしてください。設定する際に基本的にはあなたのFirefoxは常にダウンロードするMIMEタイプのカンマ区切りリストにプロパティbrowser.helperApps.neverAsk.saveToDiskを設定するための呼び出しを追加するプロファイル:コンフィグ:

firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk","text/csv"); 

約上this Mozilla KB FAQ articleを参照してください。

UPDATEそれは今see this answer in another question

+3

これは可能ですアクセス保存ダイアログボックスでロボットクラスを使用して、ロボットクラス – Luffy

+1

@Luffyを使用してENTER、TABS、ESCAPEなどのイベントにアクセスして実行することができます。私はあなたが別の質問で答えを投稿したのを見ます。私が最初にこの質問に答えたときは、これは不可能でした。私はあなたのソリューションを参照する答えを更新しました。 – Dirk

+0

ようこそ。回答をお寄せいただきありがとうございます.... – Luffy

1

は、私はあなたがサイトがあるので、保存/キャンセル対話のポップアップが表示されることがあり、この

//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(); 
7

ような何かを探していると思う可能性があり、このようになります 異なるMIMEタイプを送信します。

実際のヘッダーの内容を確認してください。

開発ツールに組み込まれているFirefoxを使用して、右クリックして投稿を閲覧し、投稿をリンクしてからNetwork Monitorを見て、返されたContentTypeヘッダー値を確認してください。私は「テキスト/ CSVを期待していたに応じ

firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk", 
        "application/octet-stream,text/csv"); 

プロフィールの設定を行います。..

enter image description here

それが受け入れられたタイプが期待どおりにすべてが働いたリストに、ませポップアップ

+1

実際のHEADER CONTENTを実際にチェックしなければならないという事実を強調してくれてありがとう。私がダウンロードしているファイルはcsvなので、それは 'text/csv'であるべきだと思ったが、少年は間違っていた。私の場合、それはあなたの場合のように 'application/octet-stream'でもなく' application/csv'でした。 ありがとう! – mkab

1

一つの潜在的解決策は、セレンを介したファイルのURLを取得することはありません追加されました一度 application/octet-stream 『を「ただしなった』、作成(非セレン)接続、セレンのクッキーを接続にコピー(必要な場合)し、ファイルをダウンロードしてください。ほとんどの言語には、HTTP要求を実行するためのAPI(またはライブラリ)があります。たとえば、Javaでこれを実現するために、あなたはURL.openConnection()HttpURLConnection.getInputStream()を使用することができます。

String link = linkElement.getAttribute("href"); 
URL url = new URL(link); 
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 
httpURLConnection.setRequestMethod("GET"); 

// You may need to copy over the cookies that Selenium has in order 
// to imitate the Selenium user (for example if you are testing a 
// website that requires a sign-in). 
Set<Cookie> cookies = browserDriver.getBrowserCookies(); 
String cookieString = ""; 

for (Cookie cookie : cookies) { 
    cookieString += cookie.getName() + "=" + cookie.getValue() + ";"; 
} 

httpURLConnection.addRequestProperty("Cookie", cookieString); 
try (InputStream in = httpURLConnection.getInputStream()) { 
    Files.copy(in, new File("/path/to/file.ext").toPath(), 
     StandardCopyOption.REPLACE_EXISTING); 
} 

この方法では、さまざまなプログラミング言語ごとに異なるだろうが、それはすべてのブラウザで同じように動作します。

0
String path="D:\xyz\abc\"; 

FirefoxOptions profile = new FirefoxOptions(); 

profile.addPreference("browser.download.folderList", 2); 

profile.addPreference("browser.download.manager.showWhenStarting", false); 

profile.addPreference("browser.download.dir", **path**); 

profile.addPreference("browser.helperApps.neverAsk.openFile","text/csv,application/x-msexcel,application/excel,application/x-excel,application/vnd.ms-excel,image/png,image/jpeg,text/html,text/plain,application/msword,application/xml"); 

profile.addPreference("browser.helperApps.neverAsk.saveToDisk","text/csv,application/x-msexcel,application/excel,application/x-excel,application/vnd.ms-excel,image/png,image/jpeg,text/html,text/plain,application/msword,application/xml"); 

profile.addPreference("browser.helperApps.alwaysAsk.force", false); 

profile.addPreference("browser.download.manager.alertOnEXEOpen", false); 

profile.addPreference("browser.download.manager.focusWhenStarting", false); 

profile.addPreference("browser.download.manager.useWindow", false); 

profile.addPreference("browser.download.manager.showAlertOnComplete", false); 

profile.addPreference("browser.download.manager.closeWhenDone", false); 

new FirefoxDriver(profile); 
関連する問題