12

我在 c# 中使用 selenium 编写了一个 nUnit 测试。

一切都很顺利,直到我必须确认一个 JS 确认框。

这是我正在使用的代码:

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

确认框出现在提交按钮之后。确认出现然后立即消失,但表单未提交。无论上面的 accept() 行如何,行为都是相同的。

我正在使用 Firefox v15.0.1 和 selenium v​​2.24

我尝试在提交单击和确认接受之间放置一个 Thread.Sleep。

我读过的所有内容都说硒驱动程序会自动发送确认OK,但似乎正在发生其他事情。

4

3 回答 3

15

在这个问题中,我将尝试验证确认框的存在。它是这样的:

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;

 }

那么如果不工作。尝试逐步调试。一些关于硒在这里处理的警报(确认框)的附加信息 希望这对你有所帮助

于 2012-10-05T11:11:41.783 回答
9

您只需:

 IAlert alert = driver.SwitchTo().Alert();
 alert.Accept();
于 2013-11-21T05:43:19.350 回答
1

我正在测试的端点没有可靠的响应时间,我可以让它始终使用 Firefox 的 webdriver selenium-dotnet-2.33.0 (.NET4) 的唯一方法是执行以下操作:

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);
}
}
}
}
于 2013-06-03T08:49:00.963 回答