我正尝试使用init脚本和守护程序工具启动selenium和无头Xvfb X服务器。
但是,当我使用这种方法启动我的环境时,Firefox无法启动。 它看起来像无法findFirefox 2,然后停止。 当我正常启动这个环境的时候,它也没有findFirefox 2,但是它然后searchFirefox 3,find它并正常启动。
这是我的初始化脚本:
#!/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 $?
开始整个事情工作正常,但是当我在该服务器上运行seleniumtesting时,我在/var/log/selenium-debug.log中收到以下消息:
13:21:29.207 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 发现Firefox 2 ... 13:21:29.207 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 检查Firefox 2启动程序是否在'/ Applications / Minefield.app / Contents / MacOS / firefox-bin'有效。 13:21:29.207 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 检查Firefox 2的启动程序是否在'/ Applications / Firefox-2.app / Contents / MacOS / firefox-bin'有效。 。 13:21:29.207 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 检查Firefox 2启动程序是否在'/ Applications / Firefox.app / Contents / MacOS / firefox-bin'有效... 13:21:29.207 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 检查Firefox 2启动器是否在'/ usr / lib / firefox / firefox-bin'有效 13:21:29.209信息[11] org.openqa.selenium.server.SeleniumDriverResourceHandler - 得到的结果:无法启动新的浏览器会话:java.lang.NullPointerException session null
当我在相同的用户下使用相同的参数运行selenium和xvfb时,我得到了
... 13:31:16.413 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 检查Firefox 2启动器是否在'/ usr / lib / firefox / firefox-bin'有效 13:31:16.414 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.CombinedFirefoxLocator - 没有findFirefox 2,现在发现Firefox 3 ... 13:31:16.415 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 发现Firefox 3 ... 13:31:16.433 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 检查Firefox 3启动器是否在'/ usr / lib / firefox-addons / firefox-bin'有效。 13:31:16.434 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 检查Firefox 3启动器是否在'/ usr / lib / firefox-addons / firefox'有效 13:31:16.434 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 检查Firefox 3启动器是否在'/ usr / lib / firefox-11.0 / firefox-bin'有效 13:31:16.434 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - 检查Firefox 3启动器是否在'/ usr / lib / firefox-11.0 / firefox'有效 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,正在启动...
正如上面的评论所指出的那样,当你作为一个守护进程运行时,你的环境看起来不同:)
问题是守护进程内部的环境正在执行。 – --env清理了环境variables。 你可以很容易地看到这一点
daemon -O /tmp/export --env="FOO=BAR" -- bash -c export cat /tmp/export
解决方法是使用“-i”开关启动daemon以复制path设置。 使用这个改变,Firefox将被find。
脚本的工作版本在GitHub上可用 。
这里的init脚本可能是一个解决scheme。
但是selenium只是简单地用“&”运算符来放置。 所以我认为这个初始化脚本不会退出它被调用的shell。