Selenium失败后,IEDriverServer可执行文件仍然存在

时间:2015-04-23 20:06:01

标签: java selenium

使用Selenium版本2.44和IE版本11.0.9600.17728

如果驱动程序构造函数因保护模式设置而失败,则EXE仍然在运行。

当一切正常时,似乎退出调用清理了事情,但由于驱动程序从未构建,因此无法使用。

当构造函数抛出异常时是否可以停止EXE?

import org.openqa.selenium.ie.InternetExplorerDriver;

public class SeleniumTest
{
    public static void main(String[] args)
    {
        System.setProperty("webdriver.ie.driver", "C:\\IEDriverServer_Win32_2.44.0.exe");

        try
        {
            InternetExplorerDriver driver = new InternetExplorerDriver();
            driver.get("http://www.google.com");
            Thread.sleep(10 * 1000);
            driver.quit();
        }
        catch (Exception e)
        {
            /*
             * To cause this, change the following IE settings:
             * 
             * On tab: Internet Options->Security
             * 
             * Make sure the four zones do not have the same value for "Enabled Protected Mode"
             */
            System.err.println("Failed making the driver");
            e.printStackTrace();
        }
        System.exit(0);
    }
}

运行上述代码时看到的输出:

Started InternetExplorerDriver server (32-bit)
2.44.0.0
Listening on port 9550
Failed making the driver
org.openqa.selenium.remote.SessionNotFoundException: Unexpected error launching Internet Explorer. Protected Mode settings are not the same for all zones. Enable Protected Mode must be set to the same value (enabled or disabled) for all zones. (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 1.67 seconds
Build info: version: '2.44.0', revision: '76d78cf323ce037c5f92db6c1bba601c2ac43ad8', time: '2014-10-23 13:11:40'
System info: host: 'T7610', ip: '192.168.0.11', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.8.0_31'
Driver info: org.openqa.selenium.ie.InternetExplorerDriver
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:204)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:162)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:599)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:240)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:225)
    at org.openqa.selenium.ie.InternetExplorerDriver.run(InternetExplorerDriver.java:182)
    at org.openqa.selenium.ie.InternetExplorerDriver.<init>(InternetExplorerDriver.java:174)
    at org.openqa.selenium.ie.InternetExplorerDriver.<init>(InternetExplorerDriver.java:146)
    at SeleniumTest.main(SeleniumTest.java:23)

2 个答案:

答案 0 :(得分:0)

即使测试捕获异常,驱动程序也会被实例化。当您尝试导航到url并且同时驱动程序已经实例化时,会发生异常。所以在catch块中调用quit,这将完成你想要的工作。

import org.openqa.selenium.ie.InternetExplorerDriver;

public class SeleniumTest
{
    public static void main(String[] args)
    {
        System.setProperty("webdriver.ie.driver", "C:\\IEDriverServer_Win32_2.44.0.exe");

        try
        {
            InternetExplorerDriver driver = new InternetExplorerDriver();
            driver.get("http://www.google.com");
            Thread.sleep(10 * 1000);
            driver.quit();
        }
        catch (Exception e)
        {
            /*
             * To cause this, change the following IE settings:
             * 
             * On tab: Internet Options->Security
             * 
             * Make sure the four zones do not have the same value for "Enabled Protected Mode"
             */
            driver.quit();
            System.err.println("Failed making the driver");
            e.printStackTrace();
        }
        System.exit(0);
    }
}

答案 1 :(得分:0)

您可以将以下代码放入catch块中。

ThreadPool.QueueUserWorkItem