通过初始化脚本运行 Selenium RC Headless:无法启动 Firefox

通过初始化脚本运行 Selenium RC Headless:无法启动 Firefox

我正在尝试使用初始化脚本和守护进程工具启动 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 后将无法继续存在。

相关内容