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);
}
}
}
}