2009-04-03 22 views
16

Por diseño, Selenium hace una nueva copia de su perfil de Firefox cada vez que se ejecuta una nueva prueba. Me parece que este tiempo de copia es un cuello de botella considerable, especialmente cuando se ejecutan cientos de pruebas. (5-15 segundos para copiar el perfil de nuevo).¿Hay alguna forma de acelerar el tiempo de carga del Servidor Selenium?

¿Alguien sabe de algún comportamiento de invalidación para esto? Prefiero que mi servidor de Selenium reutilice el mismo perfil de Firefox. Sé que esto viola la filosofía de "configurar de forma limpia tus accesorios de prueba", pero es un atajo que estoy dispuesto a tomar, ya que mis pruebas no alteran materialmente mi perfil de Firefox lo suficiente como para poner en peligro futuras pruebas.

Respuesta

8

Acepto esto es un problema. Es bueno tener una copia nueva de un proceso de Firefox cada vez, pero un poco exagerado para duplicar el tiempo de inicio mediante la regeneración del perfil de Firefox. Si abre un informe de error en http://jira.openqa.org y me envía un correo electrónico a [email protected], me complacerá asegurarse de que tengamos una solución.

PD: He resuelto este problema como algo único para mí. Usamos el mismo perfil de Firefox y simplemente destruimos el DB de caché y cookies. Pero realmente debería parchear ese cambio a la fuente de Selenium.

+0

¿Puedes explicar cómo resolviste esto? Me gustaría poder volver a usar un objeto de navegador entre pruebas también. – djangofan

+3

también me gustaría la solución, por favor – DevDave

6

Es simplemente una cuestión de mover el código de abajo fuera de su configuración de prueba y en la configuración del accesorio y mantener un mundial de la instancia de selenio (código asume NUnit.)

[TestFixtureSetUp()] 
public void FixtureSetup() 
{ 
    selenium = New DefaultSelenium("localhost", 4444, "*firefox", "http://localhost/"); 
    selenium.Start(); 
    selenium.SetTimeout("30000"); 
    selenium.Open("/"); 
} 

Su configuración de prueba a continuación, debe buscar algo como esto:

[SetUp()] 
public void SetUpTest() 
{ 
    selenium.Open("default.aspx"); 
    selenium.WaitForPageToLoad("30000"); 
} 
+0

¿Se pregunta por qué tiene WaitForPageToLoad cuando esto es inherente al método Open()? Puede ser que esta sea una publicación de 2009 :-) – Blundell

0

Usando MSTest, yo era capaz de conseguir que el conductor sólo se abrirá una ventana única Firefox para todas las pruebas, en lugar de abrir y cerrar una ventana nueva para cada prueba, por inicializar el WebDriver en ClassInitialize (y Cleanup), en lugar de TestInitialize:

static string path; 
     static IWebDriver driver; 
     static string baseURL; 

     [ClassInitialize] 
     public static void ClassInitialize(TestContext context) { 
      DirectoryInfo di = new DirectoryInfo(Directory.GetCurrentDirectory()); 
      path = Path.Combine(di.Parent.Parent.Parent.FullName, "Tests\\bin\\debug\\"); 
      driver = new FirefoxDriver(); 
      baseURL = "http://localhost:5555/"; 
     } 

     [ClassCleanup] 
     public static void ClassCleanup() { 
      driver.Quit(); 
     } 
0

A pesar de que es una vieja pregunta ahora !! El servidor de Selenium o RC está desactualizado pero el mismo problema persiste con Selenium Webdriver. Se tarda unos 30 segundos en ejecutar Firefox a través de un controlador de web.

Pero como se explica aquí algunas personas tiene alrededor de este "Después de desactivar los adaptadores de red no utilizados (que se encuentra en el Panel de Control \ Red e Internet \ Conexiones de red)

se queda pegada en el punto:

ExtensionConnection connection = connectTo(exe.binary, profileToUse, "localhost"); 

https://groups.google.com/forum/#!topic/selenium-users/a2fNfF-mD_E

a pesar de que no funcionaba para mí, pero uno puede querer probar de forma segura !!

Otra millas wayout GHT ser:

FirefoxProfile profile = new FirefoxProfile(); 
FirefoxBinary binary = new FirefoxBinary(@"path\to\firefox.exe"); 
FirefoxDriver driver = new FirefoxDriver(binary,profile); 
1

Una pequeña manera de reducir el tiempo de carga en el perfil es eliminar los archivos más grandes fuera del perfil de Firefox. Para hacerlo, configure su propio perfil ejecutando el comando firefox.exe -p. Una vez que se haya creado el perfil, acceda a las opciones y desactive el almacenamiento en caché y otras actividades que no son necesarias para las pruebas web. Luego copie su perfil a una nueva ubicación y elimine los archivos sql que no son necesarios. (De lo contrario, cuando lo vuelva a abrir, restaure los archivos eliminados que mantienen el perfil muy pequeño). Cuando comience la prueba de selenio, haga referencia a su perfil en su nueva ubicación.Antes de esto, estaba copiando en un perfil de 50 MB en cada inicio de prueba, y ahora se copia en un perfil de 3-4 MB, y el tiempo de inicio es casi instantáneo.

De nuevo, esta no es una forma de volver a utilizar el mismo perfil, pero reducirá el tiempo de copia de cada perfil.

Cuestiones relacionadas