2012-08-15 21 views
6

Estoy desarrollando una aplicación en la que debemos verificar si la aplicación web se está ejecutando y si la URL da los resultados esperados.¿Hay alguna forma de conectar un navegador que ya se está ejecutando a selenium webdriver en java?

Nuestro programador ejecuta esta aplicación 12 veces al día. En cada lanzamiento se ejecuta el controlador de Firefox y se abre una nueva ventana del navegador para realizar las operaciones.

Quiero una técnica en la que abramos el navegador firefox 1 vez y lo reutilicemos en cada llamada con el selenium-driver.

Respuesta

6

No estoy del todo seguro de que pueda cambiar a una ventana no generada por el controlador. Creo que las personas que trabajan en el proyecto de selenio 2 han trabajado un poco para cambiar a una ventana generada por un controlador diferente. Cuando lo haga:

driver.getWindowHandles() 

Todo lo que obtiene son las ventanas generadas por el objeto del controlador que se invoca.

Esta es una solicitud de función bastante antigua: Allow webdriver to attach to a running browser. Entonces no es posible en este momento.

+1

Eso es correcto. Siempre que todas las ventanas se hayan iniciado desde la misma instancia del controlador, no es demasiado problema reutilizar Windows. Solo necesita encontrar un método para poder cerrar ventanas secundarias y dejar una ventana principal abierta. – djangofan

5

Puede ver an example I wrote que demuestra que la reutilización de navegadores funciona bien en WebDriver. Básicamente, siempre que se instancia una ventana del navegador desde WebDriver, puede usar getWindowHandles() para acceder siempre a ella. Si tiene varias ventanas abiertas, simplemente haga un seguimiento de ellas usando una lista. Puede identificar ventanas que aparecen de cierta manera o contener cierta información en ellas mediante el uso de varios métodos WebDriver.

En otras palabras, si WebDriver no abre una ventana del navegador, entonces WebDriver no tiene la capacidad de engancharse a ella.

Un ejemplo aproximado:

public static boolean selectWindow(WebDriver driver, String windowTitle){ 
    //Search ALL currently available windows 
    for (String handle : driver.getWindowHandles()) { 
     String newWindowTitle = driver.switchTo().window(handle).getTitle(); 
     if(newWindowTitle.equalsIgnoreCase(windowTitle)) 
      //if it was found break out of the wait 
      return true; 
    } 
    return false; 

} 

En un proyecto que hice, he creado un método que devuelve ciertos códigos de estado int, dependiendo de mi disposición de las ventanas. Si el código de estado es lo que estoy esperando, entonces sé que la próxima prueba puede continuar sin iniciar sesión nuevamente o sin abrir una nueva ventana.

Por supuesto, si su marco de prueba, como Surefire o TestNG, bifurca los subprocesos por clase, entonces necesita una instancia de webdriver por clase. Si su marco de prueba se bifurca por método, deberá pasar la instancia de webdriver como argumento al método de prueba para que el hilo tenga acceso a él.

Cuestiones relacionadas