Selenium force driver.Quit无视"要求离开"对话

时间:2018-02-09 16:25:25

标签: c# selenium selenium-webdriver webdriver selenium-firefoxdriver

背景 我正在使用Selenium,C#和Firefox来自动执行我定期执行的任务。我选择此选项是因为我访问的网站不再提供REST API。在我的代码中,我定期检查错误,例如找不到网页元素。在这个时候,我希望我的应用程序正常退出并显示错误消息。

供参考我当前的代码

        if (driver != null)
        {
            driver.Quit();
        }

问题: 当从具有部分填写的表单的网页调用时,driver.Quit()不会关闭Firefox或geckodriver。而是会弹出一个对话框,上面写着

  

此页面要求您确认是否要离开 - 为您提供数据   已输入可能无法保存。

进行一些搜索我发现该对话框是由网页生成的。我试图寻找一个Firefox首选项来禁用弹出窗口但是没有找到一个相关的。一次搜索result提供了有关杀死Firefox进程的信息。

问题: 是否有推荐的Selenium方法来确保Firefox和Web驱动程序被终止?

1 个答案:

答案 0 :(得分:1)

您可以做几件事:

  • 如评论中所述,完全禁止它们
  • 正如您所说,Process.Kill。我使用的实现是:

    // ProccessId's can be gotten by Proccess.GetProcessesByName("Name")
    public static void KillProcessAndChildren(params int[] processIds)
    {
        foreach (var processID in processIds)
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(
                "Select * From Win32_Process Where ParentProcessID=" + processID);
            ManagementObjectCollection moc = searcher.Get();
            foreach (ManagementObject mo in moc)
            {
                KillProcessAndChildren(Convert.ToInt32(mo["ProcessID"]));
            }
            try
            {
                Process proc = Process.GetProcessById(processID);
                proc.Kill();
            }
            catch (ArgumentException)
            {
                // Process already exited.
            }
        }
    }
    
  • 验证您不需要注意后接受警告对话框。在我看来,这是最好的解决方案,因为它确保如果出现意外错误,您的测试不会返回错误传递。执行此操作的代码是:

    var alert = driver.SwitchTo().Alert();
    if (alert.Text == "The expected error message")
        alert.Accept();
    else
        Assert.Fail("The webriver raised an unexpected warning: " + alert.Text);