![](/img/trans.png)
[英]Is it required to set the DISPLAY for headless firefox browser on linux machine
[英]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
(預計會)。 可以使用ipcs
或lsof
實用程序列出開放共享內存對象/接口。
對於給定 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.