使用C#在Selenium IE中处理警报对话框

时间:2017-08-03 21:35:46

标签: c# selenium

我正在为使用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

非常感谢任何帮助

Chrome中的提醒: enter image description here

IE中的提醒: enter image description here

1 个答案:

答案 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;
    }
}