2012-10-05 6 views
10

Ho scritto un test nUnit utilizzando il selenio in C#.Selenium C# accetta conferma casella

Tutto andava bene fino a quando non devo confermare una casella di conferma JS.

Ecco il codice che sto usando:

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

casella Conferma appare dopo il pulsante di invio. La conferma appare e quindi scompare immediatamente ma il modulo non viene inviato. Il comportamento è lo stesso indipendentemente dalla riga accept() sopra.

sto usando Firefox v15.0.1 e selenio v2.24

Ho provato a mettere un Thread.Sleep tra il clic e inviare la conferma di accettare.

Tutto ciò che ho letto ha detto che il driver del selenio invierà automaticamente una conferma OK, ma sembra che stia succedendo qualcos'altro.

+0

E 'colpa mia, non c'è problema. Stavo guardando il pulsante di invio sbagliato nel mio test: (. Errore completo del programmatore Soluzione accettata di seguito perché è il modo giusto per selezionare la casella di avviso. –

risposta

11

in questo numero proverei a verificare la presenza della casella di conferma. essere qualcosa di simile:

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; 

} 

quindi se il lavoro doen't. prova a eseguire il debug passo dopo passo. alcune informazioni riguardanti ulteriore avviso (Conferma) gestire in selenio here speranza questo in qualche modo ti aiuta

0

L'end point Sono test non ha tempi di risposta affidabili e l'unico modo ho potuto farlo funzionare sempre con WebDriver selenio -dotnet-2.33.0 (.NET4) utilizzando Firefox è stato effettuando le seguenti operazioni:

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

Hai solo bisogno:

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