Selenium С# accept confirm box
Я написал тест nUnit, используя селен в С#.
Все прошло хорошо, пока я не подтвержу подтверждение JS.
вот код, который я использую:
this.driver.FindElement(By.Id("submitButton")).Click();
this.driver.SwitchTo().Alert().Accept();
После кнопки отправки появится окно подтверждения. Подтверждение появляется, а затем исчезает сразу, но форма не отправляется. Поведение одинаково независимо от строки accept() выше.
Я использую Firefox v15.0.1 и selenium v2.24
Я попытался поставить Thread.Sleep между нажатием кнопки и подтверждением подтверждения.
Все, что я прочитал, сказал, что драйвер selenium автоматически отправит подтверждение OK, но что-то еще происходит.
Ответы
Ответ 1
в этом выпуске я попытаюсь проверить наличие окна подтверждения.
это будет что-то вроде:
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;
}
тогда, если не получится. попробуйте отлаживать шаг за шагом.
некоторые дополнительные сведения об оповещениях (подтверждающие поля) обрабатываются в селене здесь
надеюсь, что это как-то поможет вам
Ответ 2
Вам просто нужно:
IAlert alert = driver.SwitchTo().Alert();
alert.Accept();
Ответ 3
Конечная точка, которую я тестирую, не имеет надежного времени отклика, и единственный способ заставить ее всегда работать с webdriver selenium-dotnet-2.33.0 (.NET4) с помощью Firefox - это сделать следующее:
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);
}
}
}
}