我正在为使用jQuery的ASP.NET MVC5编写的webapp自动化一些测试。在IE中使用Selenium时,我一直在寻找处理警报确认框的选项。
我需要在框中确认消息,但我不需要单击对话框上的任何内容。这就是我现在所拥有的:
public bool IsAlertPresentAndCorrect(string Message)
{
try
{
WebDriverWait Wait = new WebDriverWait(Driver, System.TimeSpan.FromSeconds(10));
Wait.Until(ExpectedConditions.AlertIsPresent());
ReadOnlyCollection<string> Handles = Driver.WindowHandles;
string ToUse = "";
foreach (string Handle in Handles)
{
if (!Driver.CurrentWindowHandle.Equals(Handle))
{
ToUse = Handle;
}
}
IAlert Alert = (IAlert) Driver.SwitchTo().Window(ToUse);
return Alert.Text.Equals(Message);
}
catch (NoAlertPresentException)
{
return false;
}
finally
{
_driver.SwitchTo().DefaultContent();
}
}
我还尝试了IAlert Alert = Driver.SwitchTo().Alert()
和IAlert Alert = Driver.SwitchTo().ActiveElement()
代替获取窗口句柄,但它们也没有工作。
无论我使用什么代码,问题都完全相同:OpenQA.Selenium.UnhandledAlertException: Modal dialog present
。
非常感谢任何帮助
答案 0 :(得分:0)
如果发出警报,您不一定要切换回窗口手柄。您只需切换到警报,执行必要的操作,关闭警报即可。 我稍微修改了你的代码以获取变量中的警报文本,关闭警报弹出窗口,然后将警报文本与参数中传递的消息进行比较并返回bool值。
public bool IsAlertPresentAndCorrect(string Message)
{
try
{
WebDriverWait Wait = new WebDriverWait(Driver, System.TimeSpan.FromSeconds(10));
Wait.Until(ExpectedConditions.AlertIsPresent());
string alertText = Driver.SwitchTo().Alert().Text;
Driver.SwitchTo().Alert().Accept();
return alertText.Equals(Message);
}
catch (NoAlertPresentException)
{
return false;
}
}