org.openqa.selenium.WebDriverException: соединение отклонено при использовании Selenium Java и веб-драйвера (linux без Xvfb) - PullRequest
0 голосов
/ 13 мая 2018

Недавно у меня появился новый виртуальный сервер, который я пытаюсь настроить уже несколько дней, чтобы запустить мое веб-приложение 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, на моей локальной машине он всегда случайный порт ...

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Для тех, кого это касается, у меня была та же проблема, и я застрял в фиесте «отказано в соединении».После двух ночных проб и ошибок я обнаружил, что мои предыдущие процессы geckodriver, selenium и firefox не были закрыты, и у меня было что-то около 50 открытых процессов.Эти три простые команды решили мою проблему

pkill geckodriver
pkill firefox
pkill selenium
0 голосов
/ 13 мая 2018

Это сообщение об ошибке ...

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.test.test.test.Test - Exception occured while processing.
org.openqa.selenium.WebDriverException: connection refused

... означает, что GeckoDriver не смог успешно инициировать / порождать новый сеанс / экземпляр веб-клиента.

Ваша основная проблемаспособ, которым вы присвоили тип объекта DesiredCapabilities, т.е. требуемые возможности для FirefoxOptions, т. е. для опции .Правильным способом было бы передать объект класса DesiredCapabilities, то есть требуемые возможности через merge() функцию из MutableCapabilities класса в объект класса FirefoxOptions следующим образом::

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();
options.merge(desiredCapabilities);
options.setLogLevel(FirefoxDriverLogLevel.TRACE);

driver = new FirefoxDriver(options);

Обновление

Поскольку вы все еще сталкиваетесь с той же ошибкой, рассмотрите возможность выполненияследующие шаги:

  • Очистка вашего рабочего пространства проекта через IDE и Перестройка вашего проекта с необходимыми зависимостямитолько.
  • Используйте CCleaner , чтобы стереть все рутинные операции ОС до и после выполнения Test Suite .
  • Если версия вашего базового веб-клиента устарела, удалите ее через Revo Uninstaller и установите последнюю версию GA и выпущенную версию веб-клиента.
  • Выполните перезагрузку системы .
  • Выполните Test как пользователь без полномочий root.
  • Всегда вызывайте driver.quit() в методе tearDown(){} для закрытия и уничтожения WebDriver и Веб-клиента экземпляров изящно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...