Firefox Headless 在 Headless redhat Linux 机器上崩溃

Firefox headless crashing on headless redhat linux machine

提问人:st0ve 提问时间:1/21/2020 最后编辑:st0ve 更新时间:9/21/2020 访问量:1105

问:

我正在尝试使用 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.13.141.590.26.0

更深入地挖掘导致崩溃的测试。在崩溃发生之前,测试正在单击 SwaggerUI 的 API try 功能。网站上没有其他操作会导致此崩溃发生。

Java Selenium Firefox Gecko驱动程序 无头

评论


答:

0赞 undetected Selenium 1/21/2020 #1

我在您正在使用的二进制文件中没有看到任何版本错误,这与给定的 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 浏览器自动下载中找到相关的详细讨论?

评论

0赞 st0ve 1/21/2020
是的。setHeadless(Boolean) 将 “--headless” 参数添加到浏览器的初始化中
0赞 undetected Selenium 1/21/2020
@st0ve 设置后是否看到任何错误?options.setHeadless(true)
0赞 st0ve 1/21/2020
我已经编辑了我的原始文本。 是一个布尔值,在生成计算机上始终为 true。所以HEADLESSoptions.setHeadless(true) == options.setHeadless(HEADLESS)
0赞 undetected Selenium 1/21/2020
@st0ve 查看更新的答案并让我知道状态。
0赞 st0ve 1/22/2020
我只是试了一下。仍然看到问题:(。我已经深入研究了围绕崩溃的测试,并将其添加到我的原始帖子中
1赞 st0ve 2/12/2020 #2

找到了一个有效的解决方案以及根本原因。

在 linux docker 容器中运行 firefox 时,必须至少有 2gb。我的生成计算机配置不符合此要求。将内存量增加到超过 2gb 的值立即解决了我的问题。/dev/shm

造成这种行为的原因是 Firefox 使用 POSIX 共享内存,该内存在 Linux 上(根据手册页)基于(预期)挂载在 .开放的共享内存对象/接口可以与 或 实用程序一起列出。shm_open(3)tmpfs/dev/shmipcslsof