2011-08-16 10 views
11

Antes de utilizar el selenio 2.4.0 que tenía el siguiente código de trabajo:selenio 2.4.0, cómo comprobar la presencia de una alerta

alert = page.driver.browser.switch_to.alert 
if alert.text 
    .... 
end 

selenio 2.4.0 contiene el cambio "* Elevar en switch_to.alert cuando no hay alerta presente ", entonces obtengo una excepción de No alert is present (Selenium::WebDriver::Error::NoAlertOpenError).

¿Cómo puedo verificar la presencia de una alerta con selenium-web-driver 2.4.0?

Respuesta

19

Aquí es una opción:

driver.switch_to.alert.accept rescue Selenium::WebDriver::Error::NoAlertOpenError 

Esto clic en Aceptar en la alerta si la hay, de lo contrario se producirá un error con gracia (silencio).

+1

Por desgracia, esta es la mejor forma que tengo de haz esto con Capibara. Pero tuve que modificarlo ligeramente: page.driver.browser.switch_to.alert.accept rescue Selenium :: WebDriver :: Error :: NoAlertPresentError – jackocnr

+0

¡Muchas gracias chicos! He pasado horas hoy tratando de hacer funcionar mis especificaciones y esto funcionó :) –

+0

Esto, con la sugerencia de @ jackocnr, debería ser la respuesta aceptada de la OMI. – mattsch

1
status = true 
while (status) 
    alert = driver.switch_to.alert rescue "exception happened" 
    if (alert == "exception happened") 
     status = true 
     alert = "nothing happened" 
    else 
     status = false 
    end 
end 

No hay un método directo para verificar si hay una alerta. Usando el método anterior puede verificar si hay alerta. Se va a salir del bucle, mientras que una vez que alerta está presente

6

he implementado un método para manejar esto en Ruby que creo que es bastante limpio:

def alert_present? 
    begin 
    session.driver.browser.switch_to.alert 
    puts "Alert present! Switched to alert." 
    true 
    rescue 
    puts "No alert present." 
    return false 
    end 
end 
+0

Debo añadir: la 'sesión' aquí representa una sesión de Capybara, aunque obviamente esto funcionaría solo con Selenium si deja la parte de 'sesión' desactivada. – aceofbassgreg

6
WebDriverWait wait = new WebDriverWait(driver, 18); 
wait.until(ExpectedConditions.alertIsPresent()); 
Cuestiones relacionadas