¿Cómo evitar que Selenium cree perfiles temporales de Firefox con Web Driver?

Estoy usando Selenium Web Driver API con Java. Cada vez que quiero depurar mis casos de prueba, se crea un perfil temporal para Firefox en el directorio de archivos temporales. Este es un dolor de cabeza de dos maneras.

  1. Definitivamente se está tomando un tiempo innecesario para crear un perfil y se está tomando un espacio innecesario.
  2. No puedo instalar ningún complemento que esté disponible la próxima vez que inicie mis casos de prueba.

¿Cómo puedo evitar esto?

Puede controlar cómo el controlador de Firefox elige el perfil. Establezca la propiedad webdriver.firefox.profile en el nombre del perfil que desea usar. La mayoría de la gente piensa que es una mala idea, porque heredarás todas las cookies, el contenido del caché, etc. de los usos anteriores del perfil, pero está permitido si realmente quieres hacerlo.

Por ejemplo:

 System.setProperty("webdriver.firefox.profile", "MySeleniumProfile"); WebDriver driver = new FirefoxDriver(...); 

ACTUALIZACIÓN – Desde Ranhiru

Cómo lo manejé para Java

 FirefoxProfile profile = new FirefoxProfile(new File("D:\\Selenium Profile")); WebDriver driver = new FirefoxDriver(profile); 

Luego cambié la configuración en Firefox para borrar todas las cookies y el caché al salir. Mire aquí cómo hacerlo.

Asegúrate de llamar

 driver.quit(); 

en lugar de

 driver.close(); 

close () no eliminará archivos temporales

Puede cargar FirefoxWebDriver con los complementos deseados llamando al addExtension(File) en la clase FirefoxProfile .

Ejemplo:

 try { File firebug = new File("C:\\FFPlugins\\firebug-1.7.3.xpi"); File xpathChecker = new File("C:\\FFPlugins\\xpath_checker-0.4.4-fx.xpi"); profile.addExtension(firebug); profile.setPreference("extensions.firebug.currentVersion", "1.7.3"); profile.addExtension(xpathChecker); profile.setPreference("extensions.xpath_checker.currentVersion", "0.4.4"); } catch(IOException e) { e.printStackTrace(); } driver = new FirefoxDriver(profile); 

La respuesta fue en realidad bastante fácil después de pasar por esta pregunta donde encontré la documentación. Encontré la clase FirefoxProfile y el constructor tomó la ruta al perfil de Firefox.

 WebDriver driver = null; FirefoxProfile profile = new FirefoxProfile(new File("C:\\Users\\Ranhiru\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\qp1nizdo.Selenium")); driver = new FirefoxDriver(profile); 

Creé un nuevo perfil ejecutando “Firefox.exe” con el indicador -p .

 Firefox.exe -p 

Instalé las extensiones que necesitaba para este perfil y ¡estaba listo para empezar! 🙂

Actualizar

No importa si asigna un perfil o no, sin embargo, se crea el perfil temporal en la carpeta temporal. Al crear y asignar un perfil, tiene la oportunidad de usar firebug / xpather / su extensión favorita al realizar pruebas.

Tengo crear un perfil personalizado ejecutando el comando:

 firefox -profileManager 

(luego agrego cualquier excepción, etc. Exijo, como debido al selenium, la apertura del perfil limpio / instancia cada vez que se pierden las excepciones)

Entonces estaba creando directamente mi Firefox con este perfil usando lo siguiente:

 private static String profilePath = "C:\\fitnesse\\Selenesse\\FFProfiles"; private static FirefoxProfile ffprofile = new FirefoxProfile(profilePath); private static IWebDriver driver = new FirefoxDriver(ffprofile); 

No puede evitar que Selenium cree archivos temporales incluso si especifica uno. Pero puede borrarlo después de las pruebas completadas.

 TemporaryFilesystem.getDefaultTmpFS().deleteTemporaryFiles() 

Probado bajo MacOS y Ubuntu.

  1. Inicie Firefox con: firefox -P
  2. Cree un nuevo perfil (ej. Webdriver1), agregue los complementos necesarios, etc.
  3. Agregue a su caso de prueba:

     DesiredCapabilities desiredCapabilities = new DesiredCapabilities("firefox", "", Platform.ANY); FirefoxProfile profile = new ProfilesIni().getProfile("webdriver1"); desiredCapabilities.setCapability("firefox_profile", profile); WebDriver webdriver = new RemoteWebDriver(desiredCapabilities); 

Puede utilizar siempre el perfil denominado default , que es el utilizado por defecto por el usuario. Allí tendrá todas sus cookies, complementos, etc. y podrá usarlo sin complicaciones, utilizando

 System.setProperty("webdriver.firefox.profile", "default"); 

antes de crear WebDriver

 WebDriver driver = new FirefoxDriver(); 

para crear un nuevo perfil puedes ejecutarlo en el shell firefox -p que te mostrará

Agregar nuevo perfil a Firefox

y obtener un nuevo perfil además del default . Eso te dará toda la libertad que quieras.

Puede decirle a Selenium directamente que use un perfil específico. Este es uno de los ejemplos: http://automationtricks.blogspot.com/2010/05/how-to-run-test-cases-in-specified.html

puede especificar una ubicación diferente para los archivos temporales antes de que comience el progtwig, para que su progtwig no se detenga debido a “falta de espacio en la memoria”

 if(!new File("c:/temp_data").isDirectory()) //to check dir exist FileUtils.forceMkdir(new File("c:/temp_data")); //create dir if not exists TemporaryFilesystem.setTemporaryDirectory(new File("c:/temp_data")); //set new dir as temp file path for selenium FirefoxProfile profile = new FirefoxProfile();