usar - Haga clic en el botón Aceptar dentro de una alerta(Selenium IDE)
selenium webdriver tutorial español (12)
Necesito hacer clic en el botón ''Aceptar'' dentro de una ventana de alerta con un comando de Selenium . He intentado assertAlert
o verifyAlert
pero no hacen lo que quiero.
¿Es posible hacer clic en el botón "Aceptar"? Si es así, ¿alguien me puede dar un ejemplo del comando IDE de Selenio?
Esto es Pythoncode
El problema con los cuadros de alerta (especialmente las alertas dulces es que tienen un retraso y el selenio es demasiado rápido)
Una opción que funcionó para mí es:
while True:
try:
driver.find_element_by_xpath(''//div[@class="sweet-alert showSweetAlert visible"]'')
break
except:
wait = WebDriverWait(driver, 1000)
confirm_button = driver.find_element_by_xpath(''//button[@class="confirm"]'')
confirm_button.click()
Esta es una respuesta a partir de 2012, la pregunta es a partir de 2009, pero las personas todavía la miran y solo hay una respuesta correcta (use WebDriver
) y otra casi útil (pero no lo suficientemente buena).
Si está utilizando Selenium RC y realmente puede ver un cuadro de diálogo de alerta, entonces no se puede hacer. Selenium debería manejarlo por ti. Pero, como se indica en la documentación de Selenium :
Selenium intenta ocultar esos diálogos (reemplazando window.alert, window.confirm y window.prompt) para que no detengan la ejecución de su página. Si está viendo una ventana emergente de alerta, es probable que se deba a que se activó durante el proceso de carga de la página, lo que suele ser demasiado temprano para proteger la página.
Es una limitación conocida de Selenium RC (y, por lo tanto, Selenium IDE, también) y una de las razones por las que se desarrolló Selenium 2 (WebDriver). Si desea controlar alertas JS cargadas, debe usar el manejo de alertas de WebDriver .
Dicho esto, puede usar Robot
o selenium.keyPressNative()
para completar cualquier texto y presionar Enter y confirmar el diálogo a ciegas. No es la manera más limpia, pero podría funcionar. Sin embargo, no podrás recibir el mensaje de alert
.
Robot
tiene todas las teclas útiles asignadas a las constantes, por lo que será fácil. Con keyPressNative()
, desea usar 10
como valor para presionar Enter o 27
para Esc, ya que funciona con códigos ASCII .
La pregunta no está clara: ¿es esto una alerta en la carga de la página? No debería ver ningún diálogo de alerta cuando use Selenium, ya que reemplaza a alert()
con su propia versión que solo captura el mensaje dado para la verificación.
Selenium no es compatible con alert()
en la carga de la página, ya que necesita parchear la función en la ventana bajo prueba con su propia versión.
Si no puede deshacerse de las alertas de carga de la aplicación bajo prueba, debe buscar usar la automatización de GUI para hacer clic en las ventanas emergentes que se generan, por ejemplo, AutoIT si está en Windows.
Para el selenio, una alerta es la que se generó usando JavaScript, por ejemplo
javascript:alert();
Hay una verificación básica para verificar si su alerta es realmente una alerta de JavaScript o solo una casilla basada en div para mostrar algún mensaje. Si es una alerta de JavaScript, no podrás verla en la pantalla mientras ejecutas el script de selenio.
Si puede verlo, necesita obtener el localizador del botón Aceptar de la alerta y usar selenium.click (locator) para descartar la alerta. Puede ayudarlo mejor si puede proporcionar más contexto:
- IDE o RC?
- Código HTML de la alerta
- tu script de selenio
Vamyip
Para hacer clic en el botón "Aceptar" en un cuadro de alerta:
driver.switchTo().alert().accept();
Pruebe Selenium 2.0b1. Tiene un núcleo diferente que la primera versión. Debe admitir cuadros de diálogo emergentes según la documentation :
Diálogos emergentes
Comenzando con Selenium 2.0 beta 1, existe soporte integrado para manejar cuadros de diálogo emergentes. Después de activar y acción que abriría una ventana emergente, puede acceder a la alerta con lo siguiente:
Java
Alert alert = driver.switchTo().alert();
Rubí
driver.switch_to.alert
Esto devolverá el objeto de alerta actualmente abierto. Con este objeto, ahora puede aceptar, descartar, leer sus contenidos o incluso escribir en un aviso. Esta interfaz funciona igualmente bien en alertas, confirmaciones y avisos. Consulte los JavaDocs para obtener más información.
Puede buscar en chooseOkOnNextConfirmation
, aunque probablemente debería ser el comportamiento predeterminado si leo los documentos correctamente.
Si usa IDE de selenio, debe hacer clic en el botón Aceptar manualmente porque cuando el comando de mensaje de alerta se ejecuta, el navegador deja de funcionar y si desea hacer clic en el botón Aceptar automáticamente, debe usar Selenium RC o Webdriver y el comando siguiente es Selenio IDE
En selenium ide use comando storeeval
, diferentes tipos de cajas
storeEval | alert("This is alert box") |
storeEval | prompt("This is prompt box. Please enter the value") | text
storeEval | confirm("this is cofirm box") |
Use chooseOkOnNextConfirmation () para descartar la alerta y getAlert () para verificar que se haya mostrado (y opcionalmente tome su texto para verificación).
selenium.chooseOkOnNextConfirmation(); // prepares Selenium to handle next alert
selenium.click(locator);
String alertText = selenium.getAlert(); // verifies that alert was shown
assertEquals("This is a popup window", alertText);
...
Use la interfaz de alerta, First switchTo()
para alertar y luego use accept()
para hacer clic en OK o use dismiss()
para CANCELARLO
Alert alert_box = driver.switchTo().alert();
alert_box.accept();
o
Alert alert_box = driver.switchTo().alert();
alert_box.dismiss();
assertAlert debería hacer el truco. Veo en los documentos que las alertas generadas en el controlador de eventos OnLoad de una página no pueden escribirse de esta manera (y lo he experimentado yo mismo, lamentablemente, debido al ciclo de vida de la página ASP.NET). ¿Podría ser eso con lo que te estás metiendo?
1 | Texto emergente de Print Alert y cierre -I
Alert alert = driver.switchTo().alert();
System.out.println(closeAlertAndGetItsText());
2 | Imprimir texto emergente de alerta y cerrar -II
Alert alert = driver.switchTo().alert();
System.out.println(alert.getText()); //Print Alert popup
alert.accept(); //Close Alert popup
3 | Texto emergente de alerta de alerta y cierre
Alert alert = driver.switchTo().alert();
assertEquals("Expected Value", closeAlertAndGetItsText());