2012-10-05 25 views
10

He escrito una prueba nUnit usando selenio en C#.Selenium C# accept confirm box

Todo iba bien hasta que tengo que confirmar un cuadro de confirmación JS.

aquí es el código que estoy utilizando:

this.driver.FindElement(By.Id("submitButton")).Click(); 
this.driver.SwitchTo().Alert().Accept(); 

Aparece el cuadro de confirmación después de que el botón de enviar. La confirmación aparece y luego desaparece inmediatamente, pero el formulario no se envía. El comportamiento es el mismo independientemente de la línea accept() de arriba.

estoy usando Firefox v15.0.1 y v2.24 selenio

he intentado poner un Thread.Sleep entre el clic y enviar la confirmación aceptar.

Todo lo que he leído ha dicho que el controlador de selenio enviará automáticamente una confirmación OK, pero algo más parece estar sucediendo.

+0

es mi culpa, no hay ningún error. Estaba buscando el botón de envío incorrecto en mi prueba :(. Error completo del programador. Solución aceptada a continuación porque es la manera correcta de seleccionar el cuadro de alerta. –

Respuesta

11

en este tema, trataría de verificar la presencia de la caja de confirmación. que ser algo como:

this.driver.FindElement(By.Id("submitButton")).Click(); 


boolean presentFlag = false; 

    try { 

    // Check the presence of alert 
    Alert alert = driver.switchTo().alert(); 
    // Alert present; set the flag 
    presentFlag = true; 
    // if present consume the alert 
    alert.accept(); 

    } catch (NoAlertPresentException ex) { 
    // Alert not present 
    ex.printStackTrace(); 
    } 

    return presentFlag; 

} 

continuación, si el trabajo doen't. intenta depurar paso a paso. algo de información referente a alerta adicional (confirmar cajas) manejar en selenio here esperanza esto de alguna manera le ayuda

0

El punto final yo soy la prueba no tiene tiempos de respuesta fiables y la única manera de que pudiera conseguir que funcione siempre con selenio WebDriver -dotnet-2.33.0 (.NET4) usando Firefox fue de la siguiente manera:

private void acceptAlert(){ 
string alertText = ""; 
IAlert alert = null; 
while (alertText.Equals("")){ 
if (alert == null) 
{ 
try{ 
alert = driver.SwitchTo().Alert(); 
} 
catch{ 
System.Threading.Thread.Sleep(50); } 
} 
else{ 
try{ 
alert.Accept(); 
alertText = alert.Text; 
} 
catch (Exception ex){ 
if (ex.Message.Equals("No alert is present")) alertText = "Already Accepted"; 
else System.Threading.Thread.Sleep(50); 
} 
} 
} 
} 
6

Sólo se necesita:

IAlert alert = driver.SwitchTo().Alert(); 
alert.Accept();