Запуск Selenium RC Headless с помощью сценария инициализации: Не удается запустить Firefox

Я пытаюсь запустить селен и X-сервер Xvfb без головы, используя скрипт init и инструмент daemon.

Но когда я запускаю свою среду, используя этот метод, 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 - Обнаружение 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 INFO [11] org.openqa.selenium.server.SeleniumDriverResourceHandler - Получен результат: не удалось запустить новый сеанс браузера: java.lang.NullPointerException при сеансе 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 - не нашел Firefox 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 - выделенный сеанс cb49662833c84b6cb62fcd5a4a7e9f61 для http://example.com/foo/bar/, запуск...

3 ответа

Решение

Проблема заключалась в том, что внутри демона выполнялась среда. --env прояснили переменные среды. Вы можете легко увидеть это с

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

Решение состоит в том, чтобы начать daemon с ключом -i, чтобы скопировать настройки пути. Используя это изменение, Firefox будет найден.

Рабочая версия скрипта доступна на GitHub.

Как отмечено в комментариях выше, ваша среда выглядит по-другому, когда работает как демон:)

Здесь могут быть сценарии инициализации.

Но Selenium отодвигается на задний план просто с помощью оператора "&". Поэтому я думаю, что этот сценарий инициализации не выжил бы после выхода из оболочки, из которой он был вызван.

Другие вопросы по тегам