IE 11 - webdriver.Quit()不起作用

时间:2015-02-24 13:51:45

标签: c# internet-explorer selenium selenium-webdriver

我是Selenium的新手,并且似乎在第一道障碍中摔倒了。虽然我可以在Firefox中非常愉快地关闭浏览器窗口,但这在IE中也不起作用。

请参阅下面的示例测试,每次运行时都会给我一个打开的IE窗口:

using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.IE;

namespace TestingTesting123
{
    [TestClass]
    public class About
    {
        IWebDriver _ieDriver;
        IWebDriver _ffDriver;

        [TestInitialize]
        public void Startup()
        {
            _ffDriver = new FirefoxDriver(); // Closes
            _ieDriver = new InternetExplorerDriver(); // Doesn't
        }

        [TestMethod]
        public void Go_to_bbc()
        {
            _ffDriver.Url = "http://news.bbc.co.uk";
            _ieDriver.Url = "http://news.bbc.co.uk";
        }

        [TestCleanup]
        public void Cleanup()
        {
            _ffDriver.Quit();
            _ieDriver.Quit();
        }
    }
}

报告了类似的问题here用于Java - 我似乎有同样的问题,但C#。

我在Windows 8.1上使用IE 11。我可以通过这样做来解决这个问题:

using System.Diagnostics;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.IE;

namespace TestingTesting123Workaround
{
    [TestClass]
    public class About
    {
        IWebDriver _ieDriver;
        IWebDriver _ffDriver;
        int[] _startupIEProcessIds;

        [TestInitialize]
        public void Startup()
        {
            _startupIEProcessIds = Process.GetProcessesByName("iexplore")
                                          .Select(x => x.Id).ToArray();

            _ffDriver = new FirefoxDriver();
            _ieDriver = new InternetExplorerDriver();
        }

        [TestMethod]
        public void Go_to_bbc()
        {
            _ffDriver.Url = "http://news.bbc.co.uk";
            _ieDriver.Url = "http://news.bbc.co.uk";
        }

        [TestCleanup]
        public void Cleanup()
        {
            _ffDriver.Quit();
            _ieDriver.Quit();

            foreach (var ieDriver in Process.GetProcessesByName("IEDriverServer"))
                ieDriver.Kill();
            foreach (var ie in Process.GetProcessesByName("iexplore")
                                      .Where(x => !_startupIEProcessIds.Contains(x.Id)))
                ie.Kill(); // Typing that was oddly therapeutic
        }
    }
}

然而,这似乎非常沉重,而不是最佳实践。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可能想尝试一下,因为退出/关闭应该有效。  可能是IE目前有一个bug会在稍后修复,但与此同时这可能会有所帮助。我过去曾遇到类似Chrome驱动程序和firefox的问题。

Internet Explorer 11 does not close after Selenium Test