2012-10-05 16 views
10

Napisałem test nUnit używając selenu w C#.Selenum C# zaakceptuj pole potwierdzenia

Wszystko szło dobrze, dopóki nie muszę potwierdzić pola potwierdzenia JS.

Oto kod używam: po naciśnięciu przycisku składania

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

Zostanie wyświetlone okno potwierdzenia. Potwierdzenie pojawi się, a następnie natychmiast zniknie, ale formularz nie zostanie przesłany. Zachowanie jest takie samo niezależnie od linii accept() powyżej.

używam Firefoksa v15.0.1 i selen v2.24

Próbowałem oddanie Thread.Sleep między kliknij Wyślij i potwierdzają zaakceptować.

Wszystko, co przeczytałem, mówi, że sterownik selenu automatycznie wyśle ​​potwierdzenie OK, ale wydaje się, że dzieje się coś innego.

+0

to moja wina, nie ma błędów. Szukałem niewłaściwego przycisku przesyłania w moim teście :(Całkowity błąd programisty Zaakceptowane rozwiązanie poniżej, ponieważ jest to właściwy sposób wybrania pola alertu. –

Odpowiedz

11

w tym numerze spróbuję zweryfikować obecność w polu potwierdzenia. to być coś takiego:

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; 

} 

wtedy jeśli doen't pracy. spróbuj debugować krok po kroku. niektóre informacje dotyczące dodatkowych alert (potwierdzić pola) obsługiwać w selen here nadzieję, że to w jakiś sposób pomaga

0

Punkt końcowy Jestem testowanie nie ma wiarygodnych czasy reakcji, a jedynym sposobem mogę dostać to, aby zawsze pracować z webdriver selenu -dotnet-2.33.0 (.NET4) za pomocą Firefoksa była w następujący sposób:

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

wystarczy:

IAlert alert = driver.SwitchTo().Alert(); 
alert.Accept(); 
Powiązane problemy