2012-03-27 9 views
5

Ich habe nach einem Weg gesucht, die Fahrereinstellungen für Chrome-Treiber mit Java für die letzten zwei Tage ohne Glück zu setzen.Selen 2 Chrome Treibereinstellungen Java entspricht RubyBindings

Ich habe jedoch eine Lösung in Ruby VIA RubyBindings gefunden und würde gerne wissen, ob es eine Java-äquivalente Zeile gibt, die ich dafür verwenden kann.

Der Ruby-Code ist der folgende:

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 

Während der Suche fand ich, dass Chrom nicht einen Profiler hat ich wie die FirefoxProfile Klasse verwenden könnte, also fing ich an, anstatt die DesireCapabilities Klasse. Nach einem weiteren Untersuchung in dieses Problem fand ich, dass ich die „Schalter“ einstellen könnte und „Prefs“ VIA capabilities.setCapabilitiy und endete mit dem folgenden:

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

Allerdings war ich nicht in der Lage diese Funktion zu erhalten, der Standard Download-Verzeichnis wurde nach dem Start nie in das angegebene Verzeichnis geändert. Ich bin mir nicht sicher, ob es ein Problem damit gibt, wie ich diese Fähigkeit einstellen möchte oder ob das Problem woanders liegt.

Am Ende habe ich schließlich die hier vorgeschlagene Lösung:
http://dkage.wordpress.com/2012/03/10/mid-air-trick-make-selenium-download-files/

aber ich würde gerne wissen, ob es möglich ist, diese sauberer zu tun, sondern nur die Präferenzen einstellen direkt anstelle der Verwendung der UI

Jede Hilfe wird geschätzt, Danke!

Update:
Überraschenderweise nach 2.24.1 Selen 2 auf Version zu aktualisieren (und die Fenster 22 Chrom), den obigen Code mit den Karten wie erwartet, jetzt ist das einzige Problem ist, dass sie von der Verwendung als veraltet Der Konstruktor ChromeDriver (DesiredCapabilities-Funktionen) empfiehlt stattdessen, die ChromeOptions-Klasse zu verwenden, die im obigen Szenario nicht funktioniert. beide ChromeOptions und DesiredCapabilities

Unten ist die Wiki-Seite die Verwendung Erläuterung: http://code.google.com/p/chromedriver/wiki/CapabilitiesAndSwitches

Antwort

2

Die Ruby-Bindungen erweitert eigentlich, dass auf:

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

Versuchen Sie Ihr Java Prefs wie das Objekt zu bauen und sehen, ob Es klappt. Die Zeichenfolge vs. boolean false könnte ebenfalls ein Problem darstellen.

+0

Danke für den Vorschlag, habe ich nicht bemerkt, dass die Bindungen so erweitern. Leider half dies aber immer noch nicht (ich hatte das "prompt_for_download" ausgeschlossen, da Chrome dies bereits standardmäßig tut, um die Möglichkeit eines Problems dort zu vermeiden) – Zero4573

0

Versuchen Sie, diese (meine java Vergib die ziemlich rostig ist, aber hoffentlich bekommen Sie die Idee)

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

Update: Ich durchsucht nur den Code und es scheint, dass das, was ich oben wahrscheinlich vorgeschlagen wird nicht funktionieren. Die Ruby-Chrome-Profilklasse erstellt eine Zip-Datei mit einer Chromprofil-Dateistruktur, um die Chrome-Einstellung zu unterstützen. Ich konnte einen solchen Einrichtungscode in Java nicht finden. Es gibt ein Firefox-Profil in Java, das das Gleiche für Firefox tut, aber offensichtlich wird das nicht für Chrome funktionieren. Kurz gesagt, diese Funktion wird in Java noch nicht unterstützt.

+0

Von dem, was ich sehen kann, ist die Idee die gleiche wie die von jarib, außer wir verwenden "browser" statt "download". Ich habe versucht, dies auch zu ändern, aber leider hat es immer noch nicht funktionieren (beachten Sie, dass Wörterbuch und Hashtables beide Map implementieren, so dass es keine Rolle spielt, wenn ich Wörterbücher oder Hashtables verwendet) – Zero4573

+0

Ich frage mich, was, wenn Sie eine JSON-Zeichenfolge erstellen für Prefs zum Beispiel capabilities.setCapability ("chrome.prefs", "{\" download \ ": {\" default_directory \ ": \/pfad/zu/dir \"}} "); – KailuoWang

+0

Ich stöbere nur den Code, es scheint, dass das, was ich oben vorgeschlagen habe, wahrscheinlich auch nicht funktionieren wird. Die Ruby-Chrome-Profilklasse erstellt eine physische Zip-Datei mit einer Chromprofildateistruktur, um die Chrome-Einstellung zu unterstützen. Ich konnte einen solchen Einrichtungscode in Java nicht finden. Es gibt ein Firefox-Profil in Java, das das Gleiche für Firefox tut, aber offensichtlich wird das nicht für Chrome funktionieren. – KailuoWang

0

Neuere Versionen (Ich habe Chrome 44.0.2403.125, Selen 2.47.1 und ChromeDriver 2.17 getestet.340128) arbeite mit folgenden:

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