【问题标题】:Handling Alert dialog Box in Selenium IE using C#使用 C# 在 Selenium IE 中处理警报对话框
【发布时间】:2017-08-03 21:35:46
【问题描述】:

我正在为一个用 ASP.NET MVC5 编写的 Web 应用程序自动化一些测试,该应用程序也使用 jQuery。我一直在寻找在 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 中的警报:

IE 中的警报:

【问题讨论】:

  • 你能发布警报的截图吗?
  • 完成@SouvikGhosh

标签: c# selenium


【解决方案1】:

如果出现警报,您不必切换回窗口句柄。您可以简单地切换到警报,执行必要的操作,关闭警报。 我稍微修改了您的代码以获取变量中的警报文本,关闭警报弹出窗口,然后将警报文本与传入参数的消息进行比较并返回 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;
    }
}

【讨论】:

  • 谢谢!我仍然不确定最初的问题是什么,但这是有效的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 2014-07-15
  • 2023-01-02
  • 2012-01-04
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多