我正在尝试使用初始化脚本和守护进程工具启动 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 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 检查:'/Applications/Minefield.app/Contents/MacOS/firefox-bin' 处的 Firefox 2 启动器是否有效…… 13:21:29.207 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 检查位于:“/Applications/Firefox-2.app/Contents/MacOS/firefox-bin”的 Firefox 2 启动器是否有效…… 13:21:29.207 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 检查位于:'/Applications/Firefox.app/Contents/MacOS/firefox-bin' 的 Firefox 2 启动器是否有效... 13:21:29.207 DEBUG [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 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 检查位于:'/usr/lib/firefox/firefox-bin' 的 Firefox 2 启动器是否有效... 13:31:16.414 DEBUG [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 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 检查位于“/usr/lib/firefox-addons/firefox-bin”的 Firefox 3 启动器是否有效…… 13:31:16.434 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 检查位于“/usr/lib/firefox-addons/firefox”的 Firefox 3 启动器是否有效... 13:31:16.434 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 检查位于:'/usr/lib/firefox-11.0/firefox-bin' 的 Firefox 3 启动器是否有效…… 13:31:16.434 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 检查位于:'/usr/lib/firefox-11.0/firefox' 的 Firefox 3 启动器是否有效... 13:31:16.434 DEBUG [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,正在启动...
答案1
正如上面的评论所述,当作为守护进程运行时,您的环境看起来会有所不同:)
答案2
问题出在守护进程执行的环境上。--env
清除环境变量。你可以很容易地看到这一点
daemon -O /tmp/export --env="FOO=BAR" -- bash -c export
cat /tmp/export
解决方案是daemon
使用“-i”开关复制路径设置。使用此更改,Firefox 将被找到。
脚本的工作版本是可在 GitHub 上获取。
答案3
初始化脚本在这里可能是一个解决方案。
但是 Selenium 只是通过“&”运算符被置于后台。所以我认为这个初始化脚本在退出调用它的 shell 后将无法继续存在。