2012-10-05 9 views
10

Ich habe einen nUnit-Test mit Selen in C# geschrieben.Selen C# akzeptieren bestätigen box

Alles lief gut, bis ich ein JS-Bestätigungsfeld bestätigen muss.

hier ist der Code ich verwende:

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

Das bestätigen Feld erscheint nach dem Absenden-Button. Die Bestätigung wird angezeigt und verschwindet sofort, das Formular wird jedoch nicht übermittelt. Das Verhalten ist unabhängig von der obigen Zeile accept() gleich.

Ich bin mit Firefox v15.0.1 und Selen V2.24

Ich habe versucht, eine Thread.Sleep zwischen dem Klick einreichen setzen und bestätigen akzeptieren.

Alles, was ich gelesen habe, hat gesagt, dass der selen-Treiber automatisch eine Bestätigung OK senden wird, aber etwas anderes scheint zu passieren.

+0

Es ist meine eigene Schuld, gibt es keine Fehler. Ich schaute auf die falsche Schaltfläche Senden in meinem Test :(. Complete Programmer Fehler. Akzeptierte Lösung unten, weil es der richtige Weg ist, Alarm-Box zu wählen. –

Antwort

11

in dieser Ausgabe würde ich versuchen zu bestätigen, Box Präsenz.

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; 

} 

dann, wenn doen 'T Arbeit: es so etwas wie sein. versuche Schritt für Schritt zu debuggen. einige zusätzliche Informationen über alert (bestätigen Boxen) here Hoffnung in Selen damit umgehen Sie irgendwie hilft

0

Der Endpunkt-I-Tests bin nicht über zuverlässige Reaktionszeiten und die einzige Art, wie ich es immer mit WebDriver Selen bekommen könnte arbeiten -dotnet-2.33.0 (.NET4) Firefox war durch folgende Maßnahmen:

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

Sie brauchen nur:

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