提问人:st0ve 提问时间:1/21/2020 最后编辑:st0ve 更新时间:9/21/2020 访问量:1105
Firefox Headless 在 Headless redhat Linux 机器上崩溃
Firefox headless crashing on headless redhat linux machine
问:
我正在尝试使用 firefox headless 在无头 redhat linux 构建机器上运行 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版本: |硒版本: |Geckdriver 版本:68.4.1
3.141.59
0.26.0
更深入地挖掘导致崩溃的测试。在崩溃发生之前,测试正在单击 SwaggerUI 的 API try 功能。网站上没有其他操作会导致此崩溃发生。
答:
我在您正在使用的二进制文件中没有看到任何版本错误,这与给定的 Geckodriver 版本支持哪个 Firefox 浏览器版本?中的讨论有关。
唯一的嫌疑人是 FirefoxOptions 类的 setHeadless()
方法,根据文档,该方法如下:
setHeadless(boolean headless)
因此,您的代码块将是:
FirefoxOptions options = new FirefoxOptions();
options.setHeadless(true)
更新
此外,密钥:
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");
您可以在如何使用 FirefoxProfile 通过 Firefox 浏览器自动下载中找到相关的详细讨论?
评论
options.setHeadless(true)
HEADLESS
options.setHeadless(true) == options.setHeadless(HEADLESS)
找到了一个有效的解决方案以及根本原因。
在 linux docker 容器中运行 firefox 时,必须至少有 2gb。我的生成计算机配置不符合此要求。将内存量增加到超过 2gb 的值立即解决了我的问题。/dev/shm
造成这种行为的原因是 Firefox 使用 POSIX 共享内存,该内存在 Linux 上(根据手册页)基于(预期)挂载在 .开放的共享内存对象/接口可以与 或 实用程序一起列出。shm_open(3)
tmpfs
/dev/shm
ipcs
lsof
评论