2012-09-05 25 views
5

WebDriverを使用してhttpsサイトをナビゲートし、WebDriverを使用してファイルをダウンロードしようとしています。私がこれを好きにしたとき、ファイルのダウンロードダイアログが現れました。私は疑問に思ってWebDriverでHTTPを使用してファイルをダウンロードする

WebDriver driver = new ChromeDriver(); 
driver.get("http://xxx/file1.txt"); 

は、クリックするだけをシミュレートすることなく、通常のHTTPS要求を使用してファイルをダウンロードするためにwebdriverをでメソッドを呼び出す方法はありますか?

ありがとうございます。

答えて

8

少なくとも、すべてのブラウザで動作する方法はありません。プロンプトを表示せずに指定の場所にファイルをダウンロードするように、一部のブラウザ(FirefoxとChrome)を設定することができます。しかし、あなたが尋ねているようなものについては、セレンはまったく必要ありません。任意のプログラム的なHTTPクライアントが行います。 Javaでは、ApacheからHttpClientを見ることをお勧めします。 .NETでHttpWebRequestを使用すると、ジョブが完了します。ファイルをダウンロードしているサイトから認証が必要な場合は、HTTPリクエストでカスタムヘッダーを指定する必要があります。

ファイルのダウンロードをテストする必要があると思われる理由を再評価したい場合は、ブラウザ外でHTTPリクエストを実行するほど簡単ではない場合があります。 This articleはこの問題について非常に詳細に議論しており、ファイルをダウンロードするテストには問題があり、しばしば不必要であるという非常に合理的な議論を提供しています。

+0

おかげで、私は最初にログインした後、ダウンロードページに取得し、URLをクロールする必要があります。

追加chromedriverスイッチは、ここで見つけることができます。承認プロセスのため、URLに直接アクセスすることはできません。 – zsong

+2

Socraticを一時的に入手するには、ブラウザはHTTPのみを使用してファイルをどのようにダウンロードしますか?多くの場合、認証プロセスは認証情報を含むCookieを設定し、HTTP要求のヘッダーに渡します。幸いにも、HTTPクライアントライブラリは通常、HTTPリクエストヘッダーを制御する手段を提供します。そのため、必要なのはCookie情報のみです。元の質問には記載されていない問題に対処するために私の回答を編集します。 – JimEvans

+1

私はこの答えのdownvoteについて興味があります。技術レベルで間違っているわけではありません。その色調は炎症性ではありません。あなたが聞きたいものではないかもしれませんが、答えの有用性や正確さを損なうものではありません。ダウンボッターが答えに欠点があると思うところについてのコメントを残すならば、改善することができます。他のフィードバックをせずに単にdownvotingするだけで、同じまたは同様の質問に対する回答を見つけるために、回答者またはその後に来る人には役立たない。 – JimEvans

6

はいできます。

profile = Selenium::WebDriver::Chrome::Profile.new 
profile['download.prompt_for_download'] = false 
profile['download.default_directory'] = download_directory 

ダイアログが表示されません。カスタムクロムドライバプロファイルをセットアップする必要があります。 私は、ダウンロードディレクトリの設定方法とファイルが任意のサイズのhereであることを検証する方法についてより詳細な答えを得ました。 http://peter.sh/experiments/chromium-command-line-switches/

関連する問題