Prueba de eventos anteriores a la descarga desde Selenium
-
03-07-2019 - |
Pregunta
Estoy tratando de escribir una prueba de Selenium para una página web que utiliza un evento onbeforeunload para avisar al usuario antes de irse. Parece que Selenium no reconoce el cuadro de diálogo de confirmación que aparece o no proporciona una forma de presionar Aceptar o Cancelar. ¿Hay alguna forma de hacer esto? Estoy usando el controlador Java Selenium, si es relevante.
Solución
Puede escribir una extensión de usuario (o solo un poco de JavaScript en storeEval, etc.) que pruebe que se establece window.onbeforeunload y luego lo reemplaza por nulo antes de continuar desde la página. Feo, pero debería sacarte de la página.
Otros consejos
Acabo de hacer esto para una aplicación mía en la que el controlador onbeforeunload
muestra un mensaje si un usuario abandona una página mientras un documento está en estado no guardado. Código de Python:
driver.switch_to.alert.accept()
El equivalente de Java sería:
driver.switchTo().alert().accept();
Si la alerta no existe, el código anterior fallará con una NoAlertPresentException
, por lo que no es necesario realizar una prueba por separado para verificar la existencia antes de aceptar la solicitud.
Estoy ejecutando Selenium 2.43.0 pero creo que esto ha sido posible por un tiempo ahora.
En los casos en que no quiero que aparezca el mensaje porque no es lo que estoy probando, ejecuto JavaScript personalizado en el navegador para configurar window.onbeforeunload
en nulo
antes de salir de la página. Puse esto en el código de desmontaje de prueba.
Advertencia: esto proporciona una solución alternativa
Watij - http://watij.com/ - puede ayudar aquí. O si se siente cómodo con Ruby, Watir puede ayudarlo: http://wtr.rubyforge.org/ install.html
Cuando me enfrenté a un control limitado que tenía sobre el navegador usando Selenium, recurrí a MozLab plugin que resolvió mi problema aunque solo fuera para una plataforma de navegador.