Firefox via GeckoDriver throws exception on .Quit() in Selenium 3.0.1

7

Context: Firefox 50.0.2 64bit, C#, Visual Studio 2015, Windows Server 2012 R2, Azure, ClearScript.V8.5.4.7, Selenium.Mozilla.Firefox.Webdriver.0.6.0.1, Selenium.WebDriver.GeckoDriver.Win64.0.11.1

I'm using ClearScript to wrap the Selenium objects for use in JavaScript, viz

    static JScriptEngine JSengine = null;
    ...
    JSengine = new JScriptEngine(WindowsScriptEngineFlags.EnableDebugging | WindowsScriptEngineFlags.EnableJITDebugging);
    ...
    JSengine.AddHostType("CSFirefoxDriver", typeof(FirefoxDriver));
    JSengine.AddHostType("CSFirefoxOptions", typeof(FirefoxOptions));
    JSengine.AddHostType("CSFirefoxDriverService", typeof(FirefoxDriverService));

I instantiate Firefox using the following JS

var driverService = CSFirefoxDriverService.CreateDefaultService();
driverService.FirefoxBinaryPath = "C:\\Program Files\\Mozilla Firefox\\firefox.exe";
driverService.HideCommandPromptWindow = true;
driverService.SuppressInitialDiagnosticInformation = true;
var options = new CSFirefoxOptions();
driver = new CSFirefoxDriver(driverService, options, CSTimeSpan.FromSeconds(30));

The matching Quit/Dispose code is

try {
  driver.Quit();
} catch (E) {
  T.Error().Send("driver.Quit() failed.");
}

try {
  driver.Dispose();
} catch (E) {
  T.Error().Send("driver.Dispose() failed.");
}

(T is a logging object)

When the .Quit() method call is executed, I get the following dialog.

Demonstration of crash

If I comment out the the .Quit() then I get the same on the .Dispose().

Other forums have suggested turning off hardware acceleration in Firefox's preferences. This has not made any difference at all.

There is also an issue on the geckodriver forum about this claiming a fix of some sort. It's certainly not fixed now.

Windows Event Log isn't particularly helpful here, viz

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
    <System>
        <Provider Name="Application Popup" Guid="{47BFA2B7-BD54-4FAC-B70B-29021084CA8F}" /> 
        <EventID>26</EventID> 
        <Version>0</Version> 
        <Level>4</Level> 
        <Task>0</Task> 
        <Opcode>0</Opcode> 
        <Keywords>0x8000000000000000</Keywords> 
        <TimeCreated SystemTime="2016-12-13T03:16:28.936810900Z" /> 
        <EventRecordID>1227958</EventRecordID> 
        <Correlation /> 
        <Execution ProcessID="5856" ThreadID="11580" /> 
        <Channel>System</Channel> 
        <Computer>VM1-SQLWEB-W12</Computer> 
        <Security UserID="S-1-5-18" /> 
    </System>
    <EventData>
        <Data Name="Caption">firefox.exe - Application Error</Data> 
        <Data Name="Message">The exception Breakpoint A breakpoint has been reached. (0x80000003) occurred in the application at location 0x880f00ef. Click on OK to terminate the program Click on CANCEL to debug the program</Data> 
    </EventData>
</Event>

Where do I go from here? I can fall back to PhantomJS until a fix is found.

c#
azure
selenium
firefox
geckodriver
asked on Stack Overflow Dec 13, 2016 by bugmagnet

4 Answers

5

I had the same problem, I found that someone posted it here. For now you can downgrade to Firefox 48.0.2 until it is fixed.

answered on Stack Overflow Dec 14, 2016 by mosaad
1

Problem appears only on windows 8.1 (I checked on win7 & wind10 and it's works properly). So you should upgrade your OS or downgrade browser.

answered on Stack Overflow Dec 14, 2016 by madSound
1

This issue is with webdriver.gecko.driver if used driver.quit() I got same issue with selenium-java-3.0.1, FF v 50.1.0, Eclipse Kepler, JDK1.8

Solution : Use driver.close()

answered on Stack Overflow Jan 13, 2017 by Samir 007
1

USE THIS. Kill every firefox`s process and the process of the exception windows (join 2 solutions on net):

string sProcessName = "firefox";

            if (driver.Capabilities.BrowserName == sProcessName)
            {
                // Special fix for firefox because of issue https://github.com/mozilla/geckodriver/issues/173
                // Kills all firefox processes

                Process[] oProccesses = null;
                bool bFound = true;

                while (bFound == true)
                {
                    bFound = false;
                    oProccesses = System.Diagnostics.Process.GetProcessesByName(sProcessName);

                    foreach (Process oCurrentProcess in oProccesses)
                    {
                        bFound = true;
                        //oCurrentProcess.Kill();


                        int waitTimeSecs = 2;

                        bool cleanExit = oCurrentProcess.WaitForExit(waitTimeSecs * 1000);
                        if (!oCurrentProcess.HasExited)
                        {
                            oCurrentProcess.CloseMainWindow();
                            System.Threading.Thread.Sleep(2000);
                        }

                        if (!oCurrentProcess.HasExited)
                        {
                            oCurrentProcess.Kill();
                            oCurrentProcess.WaitForExit();
                            // if an exception window has popped up, that needs to be killed too

                            foreach (var process in Process.GetProcessesByName("firefox"))
                            {
                                process.CloseMainWindow();
                                System.Threading.Thread.Sleep(2000);
                                if (!process.HasExited)
                                    process.Kill();
                            }
                        }


                    }
                }
                driver.Quit();
            }
answered on Stack Overflow Sep 16, 2017 by Pedro Arruda

User contributions licensed under CC BY-SA 3.0