Firefox headless 在 headless redhat linux 机器上崩溃
Firefox headless crashing on headless redhat linux machine
我正在尝试 运行 在无头 redhat linux 使用 firefox 无头构建机器上进行 selenium 测试。我创建驱动程序的方法如下所示:
private static WebDriver createFireFoxDriver() {
WebDriverManager.firefoxdriver()
.setup();
FirefoxOptions options = new FirefoxOptions();
options.setHeadless(true);
options.addPreference("browser.download.folderList", 2);
options.addPreference("browser.download.dir", ABSOLUTE_PATH_TO_FOLDER);
options.addPreference("browser.download.manager.showWhenStarting", false);
options.addPreference("browser.helperApps.neverAsk.saveToDisk", "application/json");
return new FirefoxDriver(options);
}
我在日志文件中看到的错误如下所示:
[Parent 65433, Gecko_IOThread] WARNING: pipe error (82): Connection reset by peer: file /builds/worker/workspace/build/src/ipc/chromium/src/chrome/common/ipc_channel_posix.cc, line 358
[Parent 65433, Gecko_IOThread] WARNING: pipe error: Broken pipe: file /builds/worker/workspace/build/src/ipc/chromium/src/chrome/common/ipc_channel_posix.cc, line 727
###!!! [Parent][MessageChannel] Error: (msgtype=0x1E0074,name=PBrowser::Msg_StopIMEStateManagement) Channel error: cannot send/recv
###!!! [Parent][MessageChannel] Error: (msgtype=0x1E008F,name=PBrowser::Msg_Destroy) Channel error: cannot send/recv
1579539977190 Marionette TRACE [11] Frame script loaded
1579539977191 Marionette TRACE [11] Frame script registered
A content process crashed and MOZ_CRASHREPORTER_SHUTDOWN is set, shutting down
我检查过我们在机器上安装了正确版本的 gtk、glib、pango、xorg 和 libstdc++。有没有人 运行 在使用无头构建机器之前遇到过这个问题?
Firefox 版本:68.4.1
|硒版本:3.141.59
| Geckdriver 版本:0.26.0
深入研究导致崩溃的测试。就在崩溃发生之前,测试正在单击 SwaggerUI 的 API 尝试功能。网站上没有其他操作会导致此崩溃发生。
关于 Which Firefox browser versions supported for given Geckodriver version? 中的讨论,我在您使用的二进制文件中没有看到任何版本不匹配。
唯一的嫌疑人是 setHeadless()
method of FirefoxOptions class,根据文档如下:
setHeadless(boolean headless)
如此有效,您的代码块将是:
FirefoxOptions options = new FirefoxOptions();
options.setHeadless(true)
更新
此外 Keys:
browser.download.folderList
browser.download.dir
browser.download.manager.showWhenStarting
browser.helperApps.neverAsk.saveToDisk
需要使用FirefoxProfile()
的实例通过setPreference()
方法配置如下:
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("browser.download.folderList", 2);
profile.setPreference("browser.download.dir", ABSOLUTE_PATH_TO_FOLDER);
profile.setPreference("browser.download.manager.showWhenStarting", false);
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/json");
You can find a relevant detailed discussion in
找到了与根本原因一样有效的解决方案。
当 运行 firefox 在 linux docker 容器中时,/dev/shm
必须至少有 2gb。我的构建机器配置不满足此要求。将内存量增加到 2gb 以上的值立即解决了我的问题。
此行为的原因是 Firefox 使用 POSIX 共享内存,Linux(根据 shm_open(3)
手册页)基于 tmpfs
(预期将) 安装在 /dev/shm
上。可以使用 ipcs
或 lsof
实用程序列出打开的共享内存 objects/interfaces。
我正在尝试 运行 在无头 redhat linux 使用 firefox 无头构建机器上进行 selenium 测试。我创建驱动程序的方法如下所示:
private static WebDriver createFireFoxDriver() {
WebDriverManager.firefoxdriver()
.setup();
FirefoxOptions options = new FirefoxOptions();
options.setHeadless(true);
options.addPreference("browser.download.folderList", 2);
options.addPreference("browser.download.dir", ABSOLUTE_PATH_TO_FOLDER);
options.addPreference("browser.download.manager.showWhenStarting", false);
options.addPreference("browser.helperApps.neverAsk.saveToDisk", "application/json");
return new FirefoxDriver(options);
}
我在日志文件中看到的错误如下所示:
[Parent 65433, Gecko_IOThread] WARNING: pipe error (82): Connection reset by peer: file /builds/worker/workspace/build/src/ipc/chromium/src/chrome/common/ipc_channel_posix.cc, line 358
[Parent 65433, Gecko_IOThread] WARNING: pipe error: Broken pipe: file /builds/worker/workspace/build/src/ipc/chromium/src/chrome/common/ipc_channel_posix.cc, line 727
###!!! [Parent][MessageChannel] Error: (msgtype=0x1E0074,name=PBrowser::Msg_StopIMEStateManagement) Channel error: cannot send/recv
###!!! [Parent][MessageChannel] Error: (msgtype=0x1E008F,name=PBrowser::Msg_Destroy) Channel error: cannot send/recv
1579539977190 Marionette TRACE [11] Frame script loaded
1579539977191 Marionette TRACE [11] Frame script registered
A content process crashed and MOZ_CRASHREPORTER_SHUTDOWN is set, shutting down
我检查过我们在机器上安装了正确版本的 gtk、glib、pango、xorg 和 libstdc++。有没有人 运行 在使用无头构建机器之前遇到过这个问题?
Firefox 版本:68.4.1
|硒版本:3.141.59
| Geckdriver 版本:0.26.0
深入研究导致崩溃的测试。就在崩溃发生之前,测试正在单击 SwaggerUI 的 API 尝试功能。网站上没有其他操作会导致此崩溃发生。
关于 Which Firefox browser versions supported for given Geckodriver version? 中的讨论,我在您使用的二进制文件中没有看到任何版本不匹配。
唯一的嫌疑人是 setHeadless()
method of FirefoxOptions class,根据文档如下:
setHeadless(boolean headless)
如此有效,您的代码块将是:
FirefoxOptions options = new FirefoxOptions();
options.setHeadless(true)
更新
此外 Keys:
browser.download.folderList
browser.download.dir
browser.download.manager.showWhenStarting
browser.helperApps.neverAsk.saveToDisk
需要使用FirefoxProfile()
的实例通过setPreference()
方法配置如下:
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("browser.download.folderList", 2);
profile.setPreference("browser.download.dir", ABSOLUTE_PATH_TO_FOLDER);
profile.setPreference("browser.download.manager.showWhenStarting", false);
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/json");
You can find a relevant detailed discussion in
找到了与根本原因一样有效的解决方案。
当 运行 firefox 在 linux docker 容器中时,/dev/shm
必须至少有 2gb。我的构建机器配置不满足此要求。将内存量增加到 2gb 以上的值立即解决了我的问题。
此行为的原因是 Firefox 使用 POSIX 共享内存,Linux(根据 shm_open(3)
手册页)基于 tmpfs
(预期将) 安装在 /dev/shm
上。可以使用 ipcs
或 lsof
实用程序列出打开的共享内存 objects/interfaces。