2012-03-27 7 views
5

Ho cercato un modo per impostare le preferenze del driver per il driver chrome utilizzando java negli ultimi due giorni senza fortuna.Preferenze del driver del selenio 2 chrome java equivalente a RubyBindings

Ho tuttavia trovato una soluzione in Ruby VIA RubyBindings e vorrei sapere se esiste una linea java equivalente che posso utilizzare per questo.

codice Il rubino è la seguente:

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 

Durante la ricerca ho scoperto che Chrome non ha un profiler ho potuto usare come la classe FirefoxProfile, così ho iniziato a utilizzare la classe DesireCapabilities invece. Dopo ulteriori indagini in questo problema ho trovato che ho potuto impostare gli "interruttori" e "Preferenze" VIA capabilities.setCapabilitiy e si è conclusa con il seguente:

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

Tuttavia non ero in grado di ottenere questo lavoro, il default la directory di download non è mai stata modificata nella directory specificata una volta avviata. Non sono sicuro se c'è un problema nel modo in cui sto cercando di impostare questa capacità o se il problema si trova altrove.

Alla fine fine ho usato la soluzione qui proposta:
http://dkage.wordpress.com/2012/03/10/mid-air-trick-make-selenium-download-files/

ma vorrei sapere se è possibile farlo in modo più pulito, ma solo impostando le preferenze direttamente invece di utilizzare l'interfaccia utente

Qualsiasi aiuto è apprezzato, grazie!

Aggiornamento:
Sorprendentemente dopo l'aggiornamento Selenio 2 alla versione 2.24.1 (e per le finestre di Chrome 22), il codice precedente con le mappe funzionano come previsto, l'unico problema ora è che l'deprecato l'uso di il costruttore ChromeDriver (funzionalità DesiredCapabilities), e invece consiglio di utilizzare la classe ChromeOptions, che non riesco a lavorare per lo scenario sopra.

Di seguito si riporta la pagina wiki che spiega l'uso di entrambi ChromeOptions e DesiredCapabilities: http://code.google.com/p/chromedriver/wiki/CapabilitiesAndSwitches

risposta

2

Gli attacchi di Ruby espande in realtà che a:

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

provare a costruire le vostre preferenze Java oggetto così e vedere se Funziona. Anche la stringa vs boolean false potrebbe essere un problema.

+0

Grazie per il suggerimento, non ho notato che le associazioni si espandono in questo modo. Sfortunatamente però farlo non ha aiutato (avevo escluso il "prompt_for_download" dato che Chrome lo fa già per impostazione predefinita per evitare la possibilità di un problema) – Zero4573

0

Prova questa (perdonate il mio java che è abbastanza arrugginito, ma spero che si ottiene l'idea)

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

Aggiornamento: Ho appena dato un'occhiata al codice e sembra che quello che ho suggerito sopra probabilmente non funzionerà. La classe profile di chrome ruby ​​crea file zip con la struttura del file di profilo chrome al suo interno per supportare le preferenze di chrome. Non sono riuscito a trovare un codice di questo tipo in Java. C'è un profilo di Firefox in Java che fa la cosa simliar per Firefox, ma ovviamente non funzionerà con Chrome. Quindi, in breve, questa funzione non è ancora supportata in Java.

+0

Da quello che posso vedere l'idea è la stessa di quella proposta da jarib, tranne che stiamo usando "browser" invece di "download". Ho provato a cambiare anche questo, ma sfortunatamente questo non funzionava ancora (si noti che sia il dizionario che le hashtables implementano Map così non dovrebbe importare se ho usato il dizionario o le hashtables) – Zero4573

+0

Mi chiedo cosa succederebbe se si creasse una stringa json per i prefetti ad esempio capabilities.setCapability ("chrome.prefs", "{\" download \ ": {\" directory_predefinita \ ": \"/percorso/a/dir \ "}}"); – KailuoWang

+0

Ho appena sfogliato il codice sembra che quello che ho suggerito sopra probabilmente non funzionerà neanche. La classe profilo chrome ruby ​​crea un file zip fisico con una struttura file profilo chrome al suo interno per supportare le preferenze di chrome. Non sono riuscito a trovare un codice di questo tipo in Java. C'è un profilo di Firefox in Java che fa la cosa simliar per Firefox, ma ovviamente non funzionerà con Chrome. – KailuoWang

0

Versioni più recenti (ho testato Chrome 44.0.2403.125, Selenium 2.47.1 e ChromeDriver 2.17.340128) funziona con:

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