2012-06-04 10 views
11

Soy bastante nuevo en Python/JS y también pruebas automáticas con Selenium/WebDriver, ¡pero he progresado un poco!La secuencia de comandos de Selenium/WebDriver se ve interrumpida por la alerta - excepción "Mensaje: u'Modal dialog present" "

Ahora estoy atascado en un punto y es realmente frustrante.

El sitio web que estoy probando vende productos. Me las arreglé para hacer mi guión navegar al azar y llegar a la página de pago, rellenar datos ficticios, enviar los datos mediante el uso de:

browser.execute_script("document.Form.submit(); return true;") 
browser.execute_script("processPayment(); return true;") 

Por lo general, hay una ahora botón Pagar y haciendo clic en que los resultados de los elementos de la misma excepción y no había forma de que haga clic en Aceptar/Cancelar en él a través de WebDriver (sin WebElement), pero descubrí que al ejecutar este código JS puedo superarlo. La página que acabo de cargar (después de enviar los datos y confirmar su publicación) con una confirmación y todas las cargas de datos correctas, pero la secuencia de comandos de Python se interrumpe y no puedo continuar la prueba.

¿Existe una solución para esto? Lo que yo quiero que haga es hacer caso omiso de ese cuadro de diálogo modal, esperar a la siguiente página de confirmación para cargar y luego continuar elementos de colocación, la impresión de sus valores, almacenándolos etc.

intentado usar:

wait = ui.WebDriverWait(browser,10) 
wait.until(lambda browser: browser.title.lower().startswith('Your Receipt')) 
print(browser.title) 

pero el guion se interrumpe Lo siento si esto ha sido respondido, pero no pude encontrarlo, ¡y también soy un novato!

¡Gracias de antemano!

EDITAR:

Did it! En mi caso lo que funcionó se me acaba de modificar mi código un poco

browser.execute_script("document.roomBookingForm.submit(); return true;") 
alert = browser.switch_to_alert() 
alert.dismiss() 
browser.execute_script("processPayment(); return true;") 

Nota para los novatos que se necesitan para importar una alerta.

from selenium.webdriver.common.alert import Alert 

Respuesta

8

Nota para novatos (como yo) que tendrá que importar Alerta.

from selenium.webdriver.common.alert import Alert 

... ... ... (code placeholder) 

browser.execute_script("document.roomBookingForm.submit(); return true;") 
alert = browser.switch_to_alert() 
alert.dismiss() 
browser.execute_script("processPayment(); return true;") 

acaba de agregar el controlador de alerta

método
+1

alert.dismiss() trabajó para mí. Gracias Tihomir S. –

+2

Por supuesto, tenga en cuenta que alert.dismiss() presiona el botón "cancelar"; use alert.accept() para presionar "OK". –

+1

y el navegador en la respuesta es la instancia de 'webdriver'. – Sinux

Cuestiones relacionadas