Linux

通過初始化腳本執行 Selenium RC Headless:無法啟動 Firefox

  • June 7, 2013

我正在嘗試使用初始化腳本和守護程序工具啟動 selenium 和無頭 Xvfb X 伺服器。

但是當我使用這種方法啟動我的環境時,Firefox 無法啟動。看起來它找不到 Firefox 2 然後停止。當我正常啟動該環境時,它也找不到 Firefox 2,但隨後它搜尋 Firefox 3,找到並正常啟動。

這是我的初始化腳本:

#!/bin/bash
#
# Starts a Selenium-RC headless environment
# License: https://github.com/amenk/SelfScripts/blob/master/LICENSE.md

#
# BETA
# Fixmes:
# - We should take care of running the environment under a non-priviledged user


#
# Source function library.
. /lib/lsb/init-functions


LOG=/var/log/selenium.log

DISPLAY_NO=99

JAVA=/usr/bin/java
XVFB=/usr/bin/Xvfb
SELENIUM_JAR=/opt/selenium-server-standalone-2.20.0.jar
FIREFOX_TEMPLATE=/home/amenk/.mozilla/firefox/aph73r3f.selenium/


start() {
   log_daemon_msg "Starting Xvfb"
   daemon --dbglog=$LOG --errlog=$LOG --stdout=$LOG --stderr=$LOG\
       --name Xvfb -- $XVFB :$DISPLAY_NO -ac -screen 0 1024x768x8
   log_end_msg $?
   log_daemon_msg "Starting Selenium RC"
   daemon --dbglog=$LOG --errlog=$LOG --stdout=$LOG --stderr=$LOG\
        --name Selenium-RC --env=DISPLAY=$DISPLAY_NO\
        -- java -jar $SELENIUM_JAR -log /var/log/selenium-debug.log -browserSideLog -firefoxProfileTemplate $FIREFOX_TEMPLATE
   log_end_msg $?
   return
}

stop() {
   log_daemon_msg "Stopping Selenium RC"
   daemon --stop --name Selenium-RC
   log_end_msg $?

   log_daemon_msg "Stopping Xvfb"
   daemon --stop --name Xvfb
   log_end_msg $?
   return
}

status() {
   daemon -v10 --running --name Xvfb
   daemon -v10 --running --name Selenium-RC

}

case "$1" in
   start)
   start
   ;;
   stop)
   stop
   ;;
   status)
   status
   ;;
   restart)
   stop
   start
   ;;
   *)
   echo "Usage:  {start|stop|status|reload|restart[|probe]"
   exit 1
   ;;
esac
exit $?

啟動整個過程很好,但是當我在該伺服器上執行 selenium 測試時,我在 /var/log/selenium-debug.log 中收到以下消息:


13:21:29.207 調試 [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 發現 Firefox 2...
13:21:29.207 調試 [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 檢查 Firefox 2 啟動器是否位於:'/Applications/Minefield.app/Contents/MacOS/firefox-bin' 是否有效...
13:21:29.207 調試 [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 檢查 Firefox 2 啟動器是否位於:'/Applications/Firefox-2.app/Contents/MacOS/firefox-bin' 有效.. .
13:21:29.207 調試 [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 檢查 Firefox 2 啟動器是否位於:'/Applications/Firefox.app/Contents/MacOS/firefox-bin' 有效...
13:21:29.207 調試 [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 檢查 :'/usr/lib/firefox/firefox-bin' 處的 Firefox 2 啟動器是否有效...
13:21:29.209 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - 得到結果:無法啟動新的瀏覽器會話:會話 null 上的 java.lang.NullPointerException

當我在同一個使用者下使用相同的參數執行 selenium 和 xvfb 時,我得到

...
13:31:16.413 調試 [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 檢查位於:'/usr/lib/firefox/firefox-bin' 的 Firefox 2 啟動器是否有效...
13:31:16.414 調試 [11] org.openqa.selenium.browserlaunchers.locators.CombinedFirefoxLocator - 沒有找到 Firefox 2,現在發現 Firefox 3...
13:31:16.415 調試 [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 發現 Firefox 3...
13:31:16.433 調試 [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 檢查 Firefox 3 啟動器是否在:'/usr/lib/firefox-addons/firefox-bin' 有效...
13:31:16.434 調試 [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 檢查位於:'/usr/lib/firefox-addons/firefox' 的 Firefox 3 啟動器是否有效...
13:31:16.434 調試 [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 檢查位於:'/usr/lib/firefox-11.0/firefox-bin' 的 Firefox 3 啟動器是否有效...
13:31:16.434 調試 [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 檢查位於:'/usr/lib/firefox-11.0/firefox' 的 Firefox 3 啟動器是否有效...
13:31:16.434 調試 [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 發現有效的 Firefox 3 啟動器:'/usr/lib/firefox-11.0/firefox'
13:31:16.435 INFO [11] org.openqa.selenium.server.BrowserSessionFactory - 為 http://example.com/foo/bar/ 分配的會話 cb49662833c84b6cb62fcd5a4a7e9f61,啟動...

問題是守護程序內部的環境正在執行。--env清除了環境變數。你可以很容易地看到這個

daemon -O /tmp/export --env="FOO=BAR" -- bash -c export
cat /tmp/export

解決方案是從daemon“-i”開關開始複製路徑設置。使用此更改,將找到 Firefox。

該腳本的工作版本可在 GitHub 上獲得

如上面的評論所述,當作為守護程序執行時,您的環境看起來會有所不同 :)

引用自:https://serverfault.com/questions/381083