7

コンテキスト: Firefox 50.0.2 64 ビット、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

私は ClearScript を使用して、JavaScript で使用する Selenium オブジェクトをラップしています。

    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));

次のJSを使用してFirefoxをインスタンス化します

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));

一致する Quit/Dispose コードは

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

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

(T はロギング オブジェクト)

.Quit() メソッド呼び出しが実行されると、次のダイアログが表示されます。

クラッシュのデモンストレーション

.Quit() をコメントアウトすると、.Dispose() でも同じ結果になります。

他のフォーラムでは、Firefox の設定でハードウェア アクセラレーションを無効にするよう提案されています。これはまったく違いはありません。

geckodriverフォーラムにも、何らかの修正が行われたと主張する問題があります。確かに今は治りません。

ここでは、Windows イベント ログは特に役に立ちません。

<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>

ここからどこへ行けばいいですか?修正が見つかるまで、PhantomJS にフォールバックできます。

4

4 に答える 4

5

私は同じ問題を抱えていました。誰かがここに投稿したことがわかりました。今のところ、修正されるまで Firefox 48.0.2 にダウングレードできます。

于 2016-12-14T08:10:38.267 に答える
1

問題は Windows 8.1 でのみ発生します (win7 と wind10 で確認したところ、正常に動作しています)。そのため、OS をアップグレードするか、ブラウザをダウングレードする必要があります。

于 2016-12-14T12:03:49.093 に答える
1

driver.quit() を使用した場合、この問題は webdriver.gecko.driver にあります。selenium-java-3.0.1、FF v 50.1.0、Eclipse Kepler、JDK1.8 で同じ問題が発生しました。

解決策: driver.close() を使用します

于 2017-01-13T08:40:16.943 に答える
1

これを使って。すべての firefox のプロセスと例外ウィンドウのプロセスを強制終了します (ネット上の 2 つのソリューションに参加します)。

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();
            }
于 2017-09-16T22:09:32.607 に答える