2012-03-27 9 views
5

私は過去2日間のjavaを使用してクロームドライバのドライバ設定を運行なしに設定する方法を探していました。Selenium 2 chromeドライバの環境設定RubyBindingsに相当するJava

私はRuby VIA RubyBindingsのソリューションを見つけましたが、これに使用できるJavaの同等の行があるかどうかを知りたいと思います。

Rubyコードは以下の通りです:

profile = Selenium::WebDriver::Chrome::Profile.new 
profile['download.prompt_for_download'] = false 
profile['download.default_directory'] = "/path/to/dir" 

driver = Selenium::WebDriver.for :chrome, :profile => profile 

検索私はクロムは、私はFirefoxProfileクラスのように使用することができプロファイラを持っていないことがわかったので、私が代わりにDesireCapabilitiesクラスを使用して開始している間。この問題をさらに調査した後、私は「スイッチ」と「環境設定」VIA capabilities.setCapabilitiyを設定することができることを発見し、以下になってしまった:

Map<String, String> prefs = new Hashtable<String, String>(); 
prefs.put("download.prompt_for_download", "false"); 
prefs.put("download.default_directory", "/path/to/dir"); 
prefs.put("download.extensions_to_open", "pdf"); 

DesiredCapabilities capabilities = DesiredCapabilities.chrome(); 
capabilities.setCapability("chrome.prefs", prefs); 
dr = new ChromeDriver(capabilities); 

私は、デフォルトのこの作業を取得することができませんでしたがダウンロードしたディレクトリは、一度起動すると指定したディレクトリに変更されませんでした。どのようにこの機能を設定しようとしているか、問題が他の場所にあるかどうかに問題があるかどうかは不明です。最後に

は私が最終的に解決策がここで提案使用:
http://dkage.wordpress.com/2012/03/10/mid-air-trick-make-selenium-download-files/

が、行うことは可能であれば私が知りたいのですが、このもっときれいにちょうど好みを設定する代わりに、直接のUI

使用

お手数ですが、ありがとうございます!

更新:(ウィンドウが22をChromeにして)、マップで上記のコードが期待作品として
は、驚くべきことに、バージョン2.24.1へのセレン2を更新した後、唯一の問題は今、彼らはの使用は推奨しませんということです コンストラクタChromeDriver(DesiredCapabilities機能)を使用して、代わりにChromeOptionsクラスを使用することをお勧めします。これは上記のシナリオではうまくいきません。以下は

ChromeOptionsとDesiredCapabilitiesの両方の使用を説明するwikiページです:

{ 
    "download": { 
     "prompt_for_download": false, 
     "default_directory": "/path/to/dir" 
    } 
} 

あなたのJavaのprefsを構築してみているようなオブジェクトおよびかどうかを確認: http://code.google.com/p/chromedriver/wiki/CapabilitiesAndSwitches

答えて

2

のRubyバインディング、実際にはその拡大できます。文字列vs boolean falseも問題になります。

+0

私は提案がありがとうございました。残念ながら、そうしても依然として助けにはなりませんでした(私はchromeがデフォルトで問題の可能性を避けるために "prompt_for_download"を除外していました) – Zero4573

0

は、この(かなり錆びている私のjavaを許し、うまくいけばあなたのアイデアを得る)

Dictionary download = new Dictionary(); 
download["default_directory"] = "/path/to/dir"; 
Dictionary prefs = new Dictionary(); 
prefs["browser"] = download; 

DesiredCapabilities capabilities = DesiredCapabilities.chrome(); 
capabilities.setCapability("chrome.prefs", prefs); 
WebDriver driver = new ChromeDriver(capabilities); 

アップデートをお試しください:私は、コードを閲覧し、何私はおそらく上記の提案は動作しませんようです。ルビークロムプロファイルクラスは、クロムプリファレンスをサポートするためにクロムプロファイルファイル構造を持つzipファイルを作成します。私はjavaでそのような施設コードを見つけることができませんでした。 Firefoxにはsimliarを行うFirefoxプロファイルがありますが、明らかにchromeではうまくいきません。要するに、この機能はJavaではまだサポートされていません。

+0

jaribが提案するものと同じアイデアから、 「ダウンロード」ではなく「ブラウザ」を使用しています。私もこれを変更しようとしましたが、残念ながらこれはまだ動作しませんでした(辞書とハッシュテーブルの両方がMapを実装しているので、辞書やハッシュテーブルを使用するかどうかは関係ありません) – Zero4573

+0

json文字列たとえば、 の場合 capabilities.setCapability( "chrome.prefs"、 "{\" download \ ":{\" default_directory \ ":\"/path/to/dir \ "}}"); – KailuoWang

+0

私は上記のコードがおそらくうまくいかないと思われるコードを参照します。ルビークロムプロファイルクラスは、クロムプリファレンスをサポートするためにクロムプロファイルファイル構造を持つ物理的なzipファイルを作成します。私はjavaでそのような施設コードを見つけることができませんでした。 Firefoxにはsimliarを行うFirefoxプロファイルがありますが、明らかにchromeではうまくいきません。 – KailuoWang

0

新しいバージョン(Chrome 44.0.2403.125、Selenium 2.47.1、およびChromeDriver 2.17をテストしました。340128)は、次のように動作します。

ChromeOptions options = new ChromeOptions(); 
Map<String, Object> prefs = new HashMap<String, Object>(); 
prefs.put("download.default_directory", "/path/to/directory"); 
options.setExperimentalOption("prefs", prefs); 
ChromeDriver chromeDriver = new ChromeDriver(options); 
関連する問題