2012-03-27 13 views
5

He estado buscando una forma de establecer las preferencias del controlador para el controlador de Chrome utilizando Java durante los últimos dos días sin suerte.Selenium 2 preferencias de controlador de Chrome Java equivalente a RubyBindings

Sin embargo, he encontrado una solución en ruby ​​VIA RubyBindings y me gustaría saber si hay una línea equivalente a Java que pueda usar para esto.

código El rubí es la siguiente:

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 

Si bien la búsqueda me encontré con que el cromo no tiene un generador de perfiles que podría utilizar como la clase FirefoxProfile, por lo que comenzó a usar la clase DesireCapabilities lugar. Después de más investigaciones sobre este problema me encontré que podría establecer los "interruptores" y "Preferencias" VIA capabilities.setCapabilitiy y terminó con las siguientes:

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

Sin embargo, no fue capaz de conseguir este trabajo, el valor predeterminado el directorio de descarga nunca se cambió al directorio especificado una vez que se inició. No estoy seguro si hay un problema con la forma en que estoy tratando de establecer esta capacidad o si el problema se encuentra en otra parte.

Al final el tiempo que utilizan la solución que aquí se propone:
http://dkage.wordpress.com/2012/03/10/mid-air-trick-make-selenium-download-files/

pero me gustaría saber si es posible hacer esto de forma más limpia, pero sólo la creación de las preferencias directamente en lugar de utilizar la interfaz de usuario

¡Se agradece cualquier ayuda, gracias!

Actualización:
Sorprendentemente después de la actualización a la versión 2 de selenio 2.24.1 (y para las ventanas de Chrome 22), el código anterior con los mapas funcionan como se esperaba, el único problema ahora es que el desuso del uso de el constructor ChromeDriver (Capacidades de DesiredCapabilities), y en su lugar, recomiendo usar la clase ChromeOptions, que no puedo trabajar para el escenario anterior.

A continuación se muestra la página wiki explicando el uso de ambos ChromeOptions y DesiredCapabilities: http://code.google.com/p/chromedriver/wiki/CapabilitiesAndSwitches

Respuesta

2

Los enlaces de Rubí en realidad se expande que a:

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

Intenta construir sus Preferencias de Java objeto de esa manera y ver si funciona. La cadena frente a booleano falso también podría ser un problema.

+0

Gracias por la sugerencia, no me di cuenta de que los enlaces se expanden así. Lamentablemente, aunque hacerlo todavía no ayudó (he excluido el "prompt_for_download", ya que Chrome ya lo hace por defecto para evitar la posibilidad de un problema) – Zero4573

0

probar este (valga mi java que es bastante oxidado, pero espero que usted consigue la 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); 

Actualización: acabo navegado el código y parece que lo he sugerido más arriba, probablemente, no va a funcionar. La clase de perfil Ruby Chrome crea un archivo zip con una estructura de archivo de perfil de Chrome para admitir la preferencia de Chrome. No pude encontrar ese código de instalación en Java. Hay un perfil de Firefox en Java que hace lo mismo para Firefox, pero obviamente eso no funcionará para Chrome. En resumen, esta función aún no se admite en Java.

+0

Por lo que puedo ver, la idea es la misma que la sugerida por jarib, excepto que estamos usando "navegador" en lugar de "descargar". Traté de cambiar esto también, pero desafortunadamente esto todavía no funcionaba (tenga en cuenta que tanto el diccionario como las tablas hash implementan Map así que no debería importar si usé el diccionario o hashtables) – Zero4573

+0

Me pregunto qué pasaría si creas una cadena json para las preferencias por ejemplo capabilities.setCapability ("chrome.prefs", "{\" descargar \ ": {\" default_directory \ ": \"/path/to/dir \ "}}"); – KailuoWang

+0

Solo busco el código, parece que lo que sugerí anteriormente probablemente tampoco funcionará. La clase de perfil Ruby Chrome crea un archivo zip físico con estructura de archivo de perfil de Chrome para admitir la preferencia de Chrome. No pude encontrar ese código de instalación en Java. Hay un perfil de Firefox en Java que hace lo mismo para Firefox, pero obviamente eso no funcionará para Chrome. – KailuoWang

0

Versiones más nuevas (He probado Chrome 44.0.2403.125, Selenium 2.47.1 y ChromeDriver 2.17.340128) trabajar con lo siguiente:

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