2008-09-19 26 views
20

Estamos ejecutando pruebas de regresión de Selenium contra nuestra base de códigos existente, y ciertas pantallas en nuestra aplicación web usan ventanas emergentes para pasos intermedios.Manejo de ventanas emergentes del navegador con Selenium

Actualmente utilizamos los comandos de la prueba:

// force new window to open at this point - so we can select it later 
selenium().getEval("this.browserbot.getCurrentWindow().open('', 'enquiryPopup')"); 
selenium().click("//input[@value='Submit']"); 
selenium().waitForPopUp("enquiryPopup", getWaitTime()); 
selenium().selectWindow("enquiryPopup"); 

... que trabaja la mayor parte del tiempo. De vez en cuando la prueba se producirá un error en la línea waitForPopUp() con

com.thoughtworks.selenium.SeleniumException: Permission denied 

¿Puede alguien sugerir una mejor, más método fiable?

También, principalmente pasa por estas pruebas en IE6 y 7

+2

qué demonios es que con este hilo? ¡Hay 5 personas diferentes abajo intentando secuestrarlo! – ryeguy

Respuesta

3

Funciona !! Solo para que sea más fácil para la gente que prefiere selenese.

Esto funcionó para mí usando IE7 (modo normal).

¡Qué maldita molestia! Gracias al monstruo de espagueti en el cielo por eso o no hay forma de que lo haya conseguido trabajando en IE.

<tr> 
    <td>getEval</td> 
    <td>selenium.browserbot.getCurrentWindow().open('', 'windowName');</td> 
    <td></td> 
</tr> 
<tr> 
    <td>click</td> 
    <td>buttonName</td> 
    <td></td> 
</tr> 
<tr> 
    <td>windowFocus</td> 
    <td>windowName</td> 
    <td></td> 
</tr> 
<tr> 
    <td>waitForPopUp</td> 
    <td>windowName</td> 
    <td>3000</td> 
</tr> 
<tr> 
    <td>selectWindow</td> 
    <td>windowName</td> 
    <td></td> 
</tr> 
+0

Esto no funciona para mí a menos que mueva windowFocus al último comando emitido. No tiene sentido que sea antes de waitForPopUp, ¿o sí? –

1

Si está ejecutando en modo iehta *, entonces van a ejecutar en algunos problemas aquí y allá. Ejecutamos Selenium en mi trabajo y parece que hay muchos problemas con IE y AJAX.

Sin embargo, parece que el problema al que se está enfrentando es cuando Selenium intenta acceder a un componente en otra ventana antes de que se cargue por completo. No estoy seguro de cómo se configura el intervalo de tiempo de espera predeterminado, pero es posible que desee intentar aumentarlo a 60 (60000 ms) segundos para poder superar el problema.

Aparte de eso, le sugiero que ejecute sus pruebas en Firefox (usando * chrome) ya que produce resultados mucho más confiables, pero a veces simplemente no es posible debido a los requisitos del negocio.

+0

¡Oh, créame, me gustaría poder ejecutarlo en Firefox! Pero el 99% de nuestros usuarios están en IE así que esa es la prioridad para probar ... Usamos * iexplore, no * iehta también. No estoy al tanto de las diferencias? – brasskazoo

+0

* iehta y * chrome permiten la compatibilidad con https. De esta forma, no tiene que preocuparse por los problemas que surgen de los certificados. – Josh

0

acabo probó añadiendo otra función selenio, windowFocus():

// force new window to open at this point - so we can select it later 
selenium().getEval("this.browserbot.getCurrentWindow().open('', 'enquiryPopup')"); 
selenium().click("//input[@value='Submit']"); 
selenium().windowFocus("enquiryPopup"); 
selenium().waitForPopUp("enquiryPopup", getWaitTime()); 
selenium().selectWindow("enquiryPopup"); 

La prueba tuvo éxito cuando me encontré de forma local, pero sólo con todos aquellos método llama - Crear/enfoque/esperar/select.

Estoy a punto de dejar que el servidor de compilación ejecute todas las pruebas, y si eso tiene éxito también, haré una función de biblioteca fuera de él ...!

+0

¡Háganos saber si funcionó! – mcherm

+0

Por el momento, ha estado funcionando, por lo que voy a extenderlo en todas las pruebas mediante ventanas emergentes (finalmente nos moveremos a cajas de luz). – brasskazoo

+0

¡Esto es muy útil! Puedo hacer que mi prueba funcione. ¡Gracias! – wen

-1

Intente agregar algunas declaraciones de espera acerca de las llamadas que le causan problemas.

que he tenido los mismos errores de antes y la única manera pude fiable resuelven ellos estaba haciendo llamadas a System.Threading.Thread.Sleep (5000) ..

0

Necesito seleccionar un iframe dentro de una ventana emergente y completar un formulario. Tuve problemas para usar el cmd de selectWindow donde el selenio no pudo encontrar mi iframe, por lo que eliminé el comando.

Este Selenese funcionado bien para mí (donde el título de marco flotante y el id = account_frame):

<tr> 
    <td>click</td> 
    <td>//a[@class='item_add']</td> 
    <td></td> 
</tr> 
<tr> 
    <td>windowFocus</td> 
    <td>account_frame</td> 
    <td></td> 
</tr> 
<tr> 
    <td>waitForPopUp</td> 
    <td>account_frame</td> 
    <td>10000</td> 
</tr> 
Cuestiones relacionadas