通过 GeckoDriver 的 Firefox 在 Selenium 3.0.1 中的 .Quit() 上抛出异常
Firefox via GeckoDriver throws exception on .Quit() in Selenium 3.0.1
上下文: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。
我遇到了同样的问题,我发现有人发过here。现在您可以降级到 Firefox 48.0.2,直到它被修复。
问题仅在 windows 8.1 上出现(我检查了 win7 和 win10,它工作正常)。所以您应该升级您的 OS 或降级浏览器。
如果使用 driver.quit(),此问题与 webdriver.gecko.driver 有关
我在 selenium-java-3.0.1、FF v 50.1.0、Eclipse Kepler、JDK1.8
上遇到了同样的问题
解决方案:使用 driver.close()
使用这个。杀掉所有firefox的进程和异常进程windows(网上加入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();
}
上下文: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。
我遇到了同样的问题,我发现有人发过here。现在您可以降级到 Firefox 48.0.2,直到它被修复。
问题仅在 windows 8.1 上出现(我检查了 win7 和 win10,它工作正常)。所以您应该升级您的 OS 或降级浏览器。
如果使用 driver.quit(),此问题与 webdriver.gecko.driver 有关 我在 selenium-java-3.0.1、FF v 50.1.0、Eclipse Kepler、JDK1.8
上遇到了同样的问题解决方案:使用 driver.close()
使用这个。杀掉所有firefox的进程和异常进程windows(网上加入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();
}