Я пытаюсь запустить селен и 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 $?
Запуск всего этого работает нормально, но когда я запускаю тест на селен на этом сервере, я получаю следующее сообщение в /var/log/selenium-debug.log:
13:21:29.207 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - Discovering Firefox 2... 13:21:29.207 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - Checking whether Firefox 2 launcher at :'/Applications/Minefield.app/Contents/MacOS/firefox-bin' is valid... 13:21:29.207 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - Checking whether Firefox 2 launcher at :'/Applications/Firefox-2.app/Contents/MacOS/firefox-bin' is valid... 13:21:29.207 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - Checking whether Firefox 2 launcher at :'/Applications/Firefox.app/Contents/MacOS/firefox-bin' is valid... 13:21:29.207 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - Checking whether Firefox 2 launcher at :'/usr/lib/firefox/firefox-bin' is valid... 13:21:29.209 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Got result: Failed to start new browser session: java.lang.NullPointerException on session null
Когда я запускаю selenium и xvfb с одинаковыми параметрами под одним и тем же пользователем, я получаю
... 13:31:16.413 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - Checking whether Firefox 2 launcher at :'/usr/lib/firefox/firefox-bin' is valid... 13:31:16.414 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.CombinedFirefoxLocator - Did not find Firefox 2, now discovering Firefox 3... 13:31:16.415 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - Discovering Firefox 3... 13:31:16.433 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - Checking whether Firefox 3 launcher at :'/usr/lib/firefox-addons/firefox-bin' is valid... 13:31:16.434 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - Checking whether Firefox 3 launcher at :'/usr/lib/firefox-addons/firefox' is valid... 13:31:16.434 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - Checking whether Firefox 3 launcher at :'/usr/lib/firefox-11.0/firefox-bin' is valid... 13:31:16.434 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - Checking whether Firefox 3 launcher at :'/usr/lib/firefox-11.0/firefox' is valid... 13:31:16.434 DEBUG [11] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - Discovered valid Firefox 3 launcher : '/usr/lib/firefox-11.0/firefox' 13:31:16.435 INFO [11] org.openqa.selenium.server.BrowserSessionFactory - Allocated session cb49662833c84b6cb62fcd5a4a7e9f61 for http://example.com/foo/bar/, launching...
Как отмечалось в комментариях выше, ваша среда выглядит иначе, когда вы работаете как демон :)
Проблема заключалась в среде выполнения демона. В --env
прояснил переменные среды. Вы можете легко увидеть это с помощью
daemon -O /tmp/export --env="FOO=BAR" -- bash -c export
cat /tmp/export
Решение - начать daemon
с переключателем "-i", чтобы скопировать настройку пути. Используя это изменение, будет найден Firefox.
Рабочая версия скрипта доступно на GitHub.
Скрипты инициализации здесь может быть решением.
Но Selenium переводится в фоновый режим просто с помощью оператора "&". Поэтому я думаю, что этот сценарий инициализации не выдержит выхода из оболочки, из которой он был вызван.