簡體   English   中英

Firefox 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++。 有沒有人在使用無頭構建機器之前遇到過這個問題?

火狐版本: 68.4.1 | 硒版本: 3.141.59 | Geckdriver 版本: 0.26.0

深入研究導致崩潰的測試。 就在崩潰發生之前,測試是單擊 SwaggerUI 的 API 嘗試功能。 網站上沒有其他操作會導致此崩潰發生。

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

在 linux docker 容器中運行 firefox 時, /dev/shm必須至少有 2gb。 我的構建機器配置不符合此要求。 將內存量增加到超過 2GB 的值立即解決了我的問題。

這種行為的原因是 Firefox 使用 POSIX 共享內存,它在 Linux 上(根據shm_open(3)手冊頁)基於安裝在/dev/shm上的tmpfs (預計會)。 可以使用ipcslsof實用程序列出開放共享內存對象/接口。

對於給定 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 瀏覽器自動下載中找到相關的詳細討論

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM