He creado un marco de prueba usando junit con Selenium WebDriver que satisface cada uno de sus puntos. Si bien no es exactamente lo que estás pidiendo, creo que puede ser beneficioso para ti.
carga la misma página web en un número de diferentes navegadores
Uso de la rejilla de selenio, esto es muy fácil de configurar. Configure algunas máquinas virtuales con los entornos que desea probar.En nuestro entorno, por ejemplo, tenemos una cuadrícula que se ejecuta con cuatro nodos (como máquinas virtuales) con una configuración como la siguiente
- de Windows con Internet Explorer 7 y Firefox
- de Windows con Internet Explorer 8 y Firefox
- de Windows con IE9 y Firefox
- Linux con Firefox
Nota que el selenio recomienda que sólo una instancia de IE se permite correr en los nodos de Windows. En cada uno de los nodos antes mencionados, hay una instancia del IE especificado y cinco instancias del FF especificado permitido ejecutar en cualquier momento dado. Con la configuración de la red y el concentrador configurados, las pruebas de desconexión son muy sencillas. En WebDriver, use el objeto DesiredCapabilities
para configurar el entorno deseado y luego simplemente envíe la prueba y espere a que vuelva el resultado.
Platform desiredPlatform;
DesiredCapabilities desiredCapabilities;
desiredPlatform = Platform.LINUX;
desiredCapabilities = DesiredCapabilities.firefox();
desiredCapabilities.setPlatform(desiredPlatform);
desiredCapabilities.setVersion("11");
WebDriver driver = new RemoteWebDriver("http://hubURL", desiredCapabilities);
carga la misma página web en un número de máquinas virtuales (que he establecido)
Solucioné éste forzando las pruebas para funcionar, aunque de una manera unconvential, en un roscado manera. Cada prueba JUnit utiliza una biblioteca de hilos compartidos que reuní y que crea todos los RemoteWebDrivers necesarios en hilos separados. Cada uno de estos subprocesos se ejecuta simultáneamente en su nodo mientras el subproceso principal se encuentra y espera a que todos finalicen. Luego, pasa a la siguiente prueba que se ejecuta también multiproceso.
Hubo un par de problemas que encontré, como la recuperación de las trazas de la pila Junit en todos los subprocesos secundarios. Lo resolví redireccionando Std.err
a una copia de seguridad en el hilo padre. Todos los errores se enrutan a esa secuencia, la cual luego convierto a una cadena e imprime al Std.out
al final de cada prueba. Las páginas html generadas al final de las pruebas incluyen Std.out
que funcionó perfectamente.
ser capaz de tomar instantáneas comparar los diferentes resultados de navegador
Mientras que he conseguido que esto funcione, hay algunos problemas inherentes con el acaparamiento de las capturas de forma remota. IE devolverá capturas de pantalla negras si el proceso se está ejecutando como un servicio. La solución fue simplemente ejecutar el jar desde la línea de comando y mantener al usuario conectado, en cuyo caso las capturas de pantalla regresan correctamente. Este es un problema conocido en el navegador y realmente no hay una buena solución al problema. Tomar capturas de pantalla funciona aproximadamente así
WebDriver augmentedDriver = new Augmenter().augment(driver);
TakesScreenshot ss = (TakesScreenshot) augmentedDriver;
String base64Screenshot = ss.getScreenshotAs(OutputType.BASE64);
byte[] decodedScreenshot = Base64.decodeBase64(base64Screenshot.getBytes());
FileOutputStream fos = new FileOutputStream(new File(imageName));
fos.write(decodedScreenshot);
fos.close();
que guarda la captura de pantalla capturada desde el navegador en ejecución de la máquina remota en la máquina local.
En realidad, la automatización del navegador aún tiene dificultades para estabilizarse. Hay una serie de características importantes, como las que está preguntando, que simplemente no se implementan sólidamente de lo que yo sé en cualquier marco. Con el tiempo, sin embargo, estoy seguro de que mucho de esto se calmará y los desarrolladores de QA en todas partes se regocijarán.
Cuando dice '1. Cargue la misma página web en una serie de navegadores diferentes ¿quiere decir a la vez? o secuencialmente? –
enseguida. Así que múltiples navegadores están abiertos cargando la misma página web. – lbrown
¿Es posible cambiar a MBunit? Después de algunas investigaciones, llegué a la conclusión de que Nunit no es la mejor herramienta para la paralelización. –