Firefox 在驱动程序最后一个窗口关闭时崩溃

Posted

技术标签:

【中文标题】Firefox 在驱动程序最后一个窗口关闭时崩溃【英文标题】:Firefox crashes on driver last window close 【发布时间】:2017-12-15 02:35:26 【问题描述】:

我有一个项目,有时使用多个 FF 窗口,有时使用多个 FF 驱动程序。 在初始化期间,我创建了一个自定义 FirefoxProfile(或从 Selenium 加载默认值而不做任何更改),将其添加到 DesiredCapabilities,将功能添加到 FirefoxOptions 并使用 FirefoxOptions 启动 FF。

测试用例执行良好,直到我需要关闭窗口:

driver.getWindowHandles().forEach(name -> driver.switchTo().window(name).close());

driver.quit();

其中任何一个通过后,FF 都会关闭并出现“Firefox 已崩溃”弹出窗口。日志中未显示异常。

如果我删除 FirefoxProfile,则不会出现崩溃弹出窗口,但需要 FirefoxProfile 才能启用 Flash 支持并执行更多操作。

使用:

硒 3.4.0 Firefox 54(32 位) Geckodriver 0.17(32 位) Windows 10 64 位 // Windows 7 64 位

【问题讨论】:

我没有使用 Geckodriver(我正在使用 Selenium 2.5),但我在这里和 github 中看到了很多关于关闭浏览器的问题和错误报告。与此同时,this answer 可能会提供一个临时补丁。 @Guy - 我无法杀死 plugincontainer,因为我使用的是 Flash。如果是插件容器问题,则会显示“plugin-container.exe 已崩溃” @Hans 看起来这是一个已知的 Firefox/geckodriver 问题,有几个人面临并报告了相同的问题。尝试使用 FF v47.0.2,它对我也很好。 如果您还是要致电quit,为什么还要花时间关闭驱动程序的所有窗口句柄?我假设如果您刚刚调用driver.quit(),此错误仍然会发生,对吗? @anshulGupta - 我不能使用旧版 Firefox。高层管理人员和安全人员不允许。 【参考方案1】:

驱动程序未能正确终止 Firefox 创建的子进程,如 flash。

https://github.com/mozilla/geckodriver/issues/285

为避免出现该对话框,您可以将环境变量XRE_NO_WINDOWS_CRASH_DIALOG 设置为1。

【讨论】:

这感觉更像是隐藏问题而不是修复它:) 我同意,但是如果您不愿意自己修复它,有时您必须忍受它。子进程应该在那之后退出,所以可能没什么好担心的。 但这不会禁用所有 Windows 崩溃对话框吗? 此环境变量特定于 Firefox。它不会影响其他程序。 既然这是我目前唯一的选择,我会接受这个。【参考方案2】:

是的,同样的错误也发生在我身上。 我已经尝试了所有可能性,但除了降级 firefox 之外没有任何效果。

现在我有 46.01,它对我有用,没有崩溃问题。

【讨论】:

正如我的问题 cmets 中所述,我无法降级 FF。此外,这不是修复,而是一种解决方法。

以上是关于Firefox 在驱动程序最后一个窗口关闭时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

firefox 如何设置关闭之后再打开都是上次浏览时未关闭的页面

在 Swift 中打开一个关闭的 NSWindow 会导致应用程序崩溃

关闭父窗口时关闭所有子窗口

显示窗口 15 分钟后崩溃

SwiftUI 和 macOS:如何检测关闭的最后一个窗口并显示应用程序将退出的警报

火狐浏览器每次打开时窗口都是变白色加未响应