Недавно у меня появился новый виртуальный сервер, который я пытаюсь настроить уже несколько дней, чтобы запустить мое веб-приложение selenium на основе Java (8). Это веб-приложение работает внутри tomcat (8.5.31) и использует селен для некоторого базового анализа веб-сайта. ОС сервера - gentoo (до того, как у меня была система Debian, которая работала нормально)
Я потратил уже несколько дней, чтобы заставить его работать, но теперь я застрял в следующей ошибке:
1526203737341 geckodriver INFO geckodriver 0.20.1
1526203737367 geckodriver INFO Listening on 127.0.0.1:25016
1526203737796 mozrunner::runner INFO Running command: "/usr/bin/firefox-bin" "-marionette" "-profile" "/tmp/rust_mozprofile.ESuH8rdqpwT8"
1526203737802 geckodriver::marionette DEBUG Waiting 60s to connect to browser
1526203739872 Marionette INFO Listening on port 2828
1526203797867 webdriver::server DEBUG <- 500 Internal Server Error {"value":{"error":"unknown error","message":"connection refused","stacktrace":""}}
11:29:57.944 [pool-2-thread-1] ERROR test.Test - Exception occured while processing.
org.openqa.selenium.WebDriverException: connection refused
Build info: version: '3.12.0', revision: '7c6e0b3', time: '2018-05-08T14:04:26.12Z'
System info: host: 'gentoo', ip: 'xxx.xxx.xxx.xxx', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.95-gentoo', java.version: '1.8.0_172'
Driver info: driver.version: FirefoxDriver
Вот что показывает список процессов:
root 7808 1 0 14:36 ? 00:00:00 /usr/bin/Xvfb :99 -screen 0 1600x1200x24 -auth /etc/conf.d/Xvfb.cfg -listen tcp
tomcat 7863 1 59 14:38 ? 00:00:51 /etc/java-config-2/current-system-vm/bin/java -Djava.util.logging.config.file=/opt/tomcat8/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderL
tomcat 7923 7863 0 14:38 ? 00:00:00 /opt/geckodriver --port=31399 -b /usr/bin/firefox-bin
tomcat 7943 7923 6 14:38 ? 00:00:04 /opt/firefox/firefox -marionette --headless -profile /tmp/rust_mozprofile.qpQfCj8DR1ab
tomcat 8032 7943 0 14:38 ? 00:00:00 /opt/firefox/plugin-container -greomni /opt/firefox/omni.ja -appomni /opt/firefox/browser/omni.ja -appdir /opt/firefox/browser 7943 true tab
tomcat 7977 1 0 14:38 ? 00:00:00 dbus-launch --autolaunch 32b951aa6b930bec1f195b765af588f5 --binary-syntax --close-stderr
tomcat 7978 1 0 14:38 ? 00:00:00 /usr/bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
tomcat 7993 1 0 14:38 ? 00:00:00 /usr/libexec/gconfd-2
Код для создания экземпляра Firefox (использовались более подробные уровни журнала для получения дополнительной информации о проблеме):
System.setProperty("webdriver.gecko.driver", driverGeckoPath);
LoggingPreferences loggingPrefs = new LoggingPreferences();
loggingPrefs.enable(LogType.BROWSER, Level.ALL);
loggingPrefs.enable(LogType.CLIENT, Level.ALL);
loggingPrefs.enable(LogType.DRIVER, Level.ALL);
loggingPrefs.enable(LogType.PERFORMANCE, Level.ALL);
loggingPrefs.enable(LogType.PROFILER, Level.ALL);
loggingPrefs.enable(LogType.SERVER, Level.ALL);
DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
desiredCapabilities.setCapability("marionette", true);
desiredCapabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
desiredCapabilities.setCapability(CapabilityType.LOGGING_PREFS, loggingPrefs);
FirefoxOptions options = new FirefoxOptions(desiredCapabilities);
options.setLogLevel(FirefoxDriverLogLevel.TRACE);
driver = new FirefoxDriver(options);
Геккодривер лежит в / opt / и является исполняемым.
Моя текущая настройка / конфигурация
Селен
Все компоненты имеют версию 3.12.0 (selenium-java, selenium-remote-driver, selenium-firefox-driver, selenium-api)
Firefox
Версия 60.0
geckodriver
Версия 20.1
Конфигурация Xvfb
XVFB=/usr/bin/Xvfb
XVFBARGS=":99 -screen 0 1600x1200x24 -auth /etc/conf.d/Xvfb.cfg -nolisten tcp"
PIDFILE=/var/run/Xvfb.pid
Xvfb config
localhost
Xvfb init.d-script
start() {
ebegin "Starting virtual X frame buffer: Xvfb"
start-stop-daemon --start --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS
eend ${?}
}
stop() {
ebegin "Stopping virtual X frame buffer: Xvfb"
start-stop-daemon --stop --pidfile $PIDFILE
eend ${?}
}
Экспорт отображаемой переменной (инициализируется во время загрузки для всех пользователей):
DISPLAY=:99
/ etc / conf.d / hostname
gentoo
/ etc / hosts
127.0.0.1 gentoo
127.0.0.1 localhost
::1 localhost
Буду очень признателен за любые советы / подсказки, чтобы получить больше информации о том, как отладить / решить эту проблему ...
Обновление 1
Я попытался запустить свой компонент селена с ChromeDriver
, что интересно работает . Код:
System.setProperty("webdriver.chrome.driver", "/opt/chromedriver");
driver = new ChromeDriver();
Журнал показывает:
Starting ChromeDriver 2.38.552522 (437e6fbedfa8762dec75e2c5b3ddb86763dc9dcb) on port 24646
Only local connections are allowed.
Обновление 2
Когда я запускаю приложение в моей локальной среде (similary сконфигурированный / gentoo), все работает нормально. Но я не использую здесь Xvfb, а вместо этого xorg-сервер.
Это вывод журнала:
1526217622830 geckodriver INFO geckodriver 0.20.1
1526217622833 geckodriver INFO Listening on 127.0.0.1:12500
1526217622955 mozrunner::runner INFO Running command: "/usr/bin/firefox-bin" "-marionette" "-profile" "/tmp/rust_mozprofile.AZMw0iETRqFj"
1526217622955 geckodriver::marionette DEBUG Waiting 60s to connect to browser
1526217623246 Marionette DEBUG Received observer notification profile-after-change
1526217623372 Marionette DEBUG Received observer notification command-line-startup
1526217623372 Marionette DEBUG Received observer notification nsPref:changed
1526217624744 Marionette DEBUG Received observer notification sessionstore-windows-restored
1526217624816 Marionette DEBUG Setting recommended pref toolkit.cosmeticAnimations.enabled to false
1526217624816 Marionette DEBUG Setting recommended pref datareporting.policy.dataSubmissionPolicyAccepted to false
1526217624816 Marionette DEBUG Setting recommended pref extensions.shield-recipe-client.api_url to
1526217624847 Marionette DEBUG New connections are accepted
1526217624848 Marionette INFO Listening on port 34253
1526217624860 geckodriver::marionette DEBUG Connected to Marionette on localhost:34253
1526217624868 Marionette DEBUG Accepted connection 0 from 127.0.0.1:56070
Мне кажется, это проблема соединения между Марионеткой и геккодривером. Может ли это быть проблема порта? На сервере Marionette, кажется, всегда слушает порт 2828, на моей локальной машине он всегда случайный порт ...