2011-01-14 6 views
7

Nuestro sitio realiza una gran cantidad de JavaScript/jQuery en la función $ (documento) .ready(), configura botones, carga contenido a través de ajax, etc. Selenium espera hasta que se cargue DOM, pero luego procede a probar antes. listo() ha completado.

Una solución parcial parece estar usando una comprobación para ver si el navegador tiene pendientes peticiones Ajax:

selenium.browserbot.getCurrentWindow().jQuery.active == 0 

Sin embargo, eso no asegura que no estamos todavía estableciendo enlaces para botones y cosas.

Cualquier ayuda será enormemente apreciado. La "mejor" sugerencia actual es agregar un elemento a la página al final del método .Ready(), que Selenium puede detectar como señal para comenzar a trabajar, pero la idea de agregar código como este para fines de prueba parece incompleta en el mejor de los casos .

Respuesta

3

Creo que puede usar el control de carga de la ventana. Prueba esto:

$(window).load(function(){ 
    selenium.browserbot.getCurrentWindow().jQuery.active == 0 
}); 
1

El 'mejor' propuesta actual es añadir un elemento a la página al final del método ready(), que selenio puede coger como una señal para empezar a trabajar , pero la idea de agregar código como este para propósitos de prueba parece incompleto en el mejor de los casos.

Personalmente, no creo que modificar su código para mejorar la capacidad de prueba sea algo malo. Si realmente prefieres no contaminar tus páginas de producción, utiliza alguna herramienta de plantillas como PHP para generar el código solo en modo desarrollo/depuración.

Además, no necesita usar el DOM para esto. Selenium tiene acceso al contexto completo de javascript en la página para que pueda usar una variable global como indicador. Tal vez algo que es poco probable que sea usado por otros como SELENIUM_PAGE_FULLY_READY y luego tenga Selenium para verificar su existencia.

Cuestiones relacionadas