Selenium WebDriver cómo cerrar el navegador emergente

Estoy escribiendo pruebas para una aplicación web usando Selenium webDriver y me encontré con un escenario en el que cuando bash cerrar el navegador aparece una ventana emergente que dice “¿Estás seguro?”. La página te pide que confirmes que quieres irte. estar perdido.” con 2 botones: dejar página y permanecer en la página

¿Cómo hago clic en esos botones?

( ( JavascriptExecutor ) _driver ) .executeScript( "window.onbeforeunload = function(e){};" ); 

resuelto el problema para mí

 IAlert alert = driver.SwitchTo().Alert(); alert.Accept(); //for two buttons, choose the affirmative one // or alert.Dismiss(); //to cancel the affirmative decision, ie, pop up will be dismissed and no action will take place 

Puede interactuar con alertas y similares utilizando Alert API . Cambiar a la alerta y confirmar que se vería así (en Java):

 Alert alert = driver.switchTo().alert(); alert.accept(); 

Esto también se explica en las preguntas frecuentes de Selenium .

 def close_all_popups(driver): driver.window_handles for h in driver.window_handles[1:]: driver.switch_to_window(h) driver.close() driver.switch_to_window(driver.window_handles[0]) 

No estoy seguro de cuál es la estructura de la ventana emergente que ha utilizado. Aquí hay algunos que pueden funcionar para usted si ha utilizado una ventana emergente.

Si es una alerta. puedes probar:

 driver.SwitchTo().Alert() 

Si es una ventana que aparece, entonces:

 driver.SwitchTo().Window() 

Para iFrame:

 driver.SwitchTo().Frame("iFrmLinks") 

Una vez que pasas por cualquiera de los tres, puedes acceder a todos sus elementos internos.

Saludos a Tahir

Puede intentar usar eventos de teclado. Entonces, una vez que aparece la ventana emergente:

Pestaña el botón “Aceptar”.

 driver.Keyboard.PressKey(Keys.Tab); 

Tendrá que jugar para ver cuántas prensas de tabs se requieren.

Luego, haz clic en el espacio.

 driver.Keyboard.PressKey(Keys.Space); 

Sí, es una especie de truco, pero WebDriver todavía es bastante inmaduro.

EDITAR: Esto funcionará para ventanas emergentes “reales”, pero como dijo otra persona que responde, tal vez no para cosas raras en la página. Básicamente, si puede tabular manualmente el botón de cierre, este método debería funcionar.

Tengo el mismo problema cuando tengo la forma de los campos y el botón de envío “hecho”, porque cuando Selenium IDE hace clic automáticamente en la función javascript, ese responsable de deshabilitar la ventana de confirmación (deja la página o permanece en ella), lo hace no tome el evento mouse “mouseup” que significa window.confirm todavía funciona y la prueba de auto-pass fue fallida. Mi solución es anular la ventana de la función javascript. Antes de descargar en este caso (no es necesario preguntar si sabemos que lo hacemos cuando registramos la prueba en Selenium IDE). Puede ejecutar la secuencia de comandos de anulación en el IDE de Selnium antes de hacer clic en el botón “Guardar” (o algo así) a través de selenium.runScript – simplemente debe deshabilitar la ventana de confirmación.

  Command: runScript Target: {window.onbeforeunload=function(e){};} 

Debe manejar las alertas inesperadas utilizando try catch blocks. Pon tu código en el bloque try y atrapa la ‘UnhandledAlertException’

Ejemplo:

 try{ ..... ..... code here }catch(UnhandledAlertException e ){ driver.switchto().alert().dismiss(); } 

Ponga uno de estos antes del evento click:

 selenium.chooseCancelOnNextConfirmation() selenium.chooseOkOnNextConfirmation()