Java Firefox headless在headless redhat linux机器上崩溃
我正在尝试使用firefox headless在headless redhat linux构建机器上运行selenium测试。我创建驱动程序的方法如下所示:Java Firefox headless在headless redhat linux机器上崩溃,java,selenium,firefox,geckodriver,headless,Java,Selenium,Firefox,Geckodriver,Headless,我正在尝试使用firefox headless在headless redhat linux构建机器上运行selenium测试。我创建驱动程序的方法如下所示: private static WebDriver createFireFoxDriver() { WebDriverManager.firefoxdriver() .setup(); FirefoxOptions options = new FirefoxOptions(); options
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
| Selenium版本:3.141.59
| Geckdriver版本:0.26.0
深入研究导致碰撞的测试。就在崩溃发生之前,测试正在单击SwaggerUI的API try功能。站点上没有其他操作导致此崩溃发生。我在您使用的与中的讨论相关的二进制文件中没有看到任何版本错误 唯一可疑的是分类方法,根据文件,分类方法如下:
setHeadless(boolean headless)
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");
因此,有效地,您的代码块将是:
FirefoxOptions options = new FirefoxOptions();
options.setHeadless(true)
更新 此外,关键点包括:
browser.download.folderList
browser.download.dir
browser.download.manager.show启动时
browser.helperApps.neverAsk.saveToDisk
setPreference()
方法,使用FirefoxProfile()
的实例进行配置,如下所示:
setHeadless(boolean headless)
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");
您可以在中找到相关的详细讨论
找到了一个既有效又有效的解决方案 在linux docker容器中运行firefox时,
/dev/shm
必须至少有2gb。我的生成计算机配置不符合此要求。将内存量增加到2gb以上立即解决了我的问题
这种行为的原因是Firefox使用POSIX共享内存,而Linux上的POSIX共享内存(根据
shm_open(3)
手册页)是基于tmpfs
(预期)安装在/dev/shm
上的。打开的共享内存对象/接口可以与ipcs
或lsof
实用程序一起列出。是。setHeadless(布尔)将“--headless”参数添加到browser@st0ve设置选项后,您是否看到任何错误。setHeadless(true)
?我已编辑了原始文本HEADLESS
是一个布尔值,在生成机器上始终为真。所以options.setHeadless(true)==options.setHeadless(HEADLESS)
@st0ve签出更新的答案并告诉我状态。我刚刚尝试过。仍然看到了这个问题:(。我已经深入研究了围绕崩溃的测试,并将其添加到我原来的帖子中