Ruby - невозможно связать с портом блокировки 7054 в течение 45 секунд (Selenium :: WebDriver :: Error :: WebDriverError) - PullRequest
11 голосов
/ 26 июля 2011

Я недавно начал видеть это сообщение об ошибке при попытке запустить любой тест Cucumber.Я провел некоторое исследование и обнаружил несколько других подобных случаев этой ошибки, но большинство из них были связаны с браузером.В этих выходных данных я не вижу сообщений об ошибках, относящихся к конкретному браузеру:

unable to bind to locking port 7054 within 45 seconds (Selenium::WebDriver::Error::WebDriverError)

Я увидел еще один вопрос, опубликованный здесь, на который был дан ответ ( Исключение для веб-драйвера selenium ), однако это решение не помогло.я не работаюВыполнение « lsof -i TCP: 7054 » не приводит к выводу.

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

Вот соответствующие драгоценные камни, которые я использую:

capybara (0.4.1.2)
cucumber (0.10.7)   
cucumber-rails (0.4.1)
fuubar-cucumber (0.0.9)
selenium-webdriver (0.2.0)

Просто чтобы быть уверенным, я также попытался запустить эти тесты с Firefox 3.6, 4.0 и 5.0.Каждый раз одно и то же сообщение.

Не для того, чтобы быть теоретиком заговора или чем-то в этом роде, но все работало нормально, прежде чем я вручную завершил работу с моим набором тестов и запустил pkill для всех активных процессов Firefox, запущенных Cucumber.У меня одновременно работало около 9 экземпляров Firefox.Я не уверен, что это вызвало бы что-то запутанное, что дало бы результаты, которые я вижу сейчас при выполнении тестов Cucumber.

У кого-нибудь есть какие-либо предложения по устранению этой проблемы?

Ответы [ 3 ]

19 голосов
/ 02 августа 2011

Обновление: проблема решена

После установки $ DEBUG в значение true и повторного запуска тестов эта ошибка была наиболее интересной:

<Selenium::WebDriver::Firefox::SocketLock:0x00000102f9c010>: getaddrinfo: nodename nor servname provided, or not known
Exception `SocketError' at /Users/bobrossasaurus/.rvm/gems/ruby-1.9.2-p136/gems/selenium-webdriver-0.2.0/lib/selenium/webdriver/common/platform.rb:131 - getaddrinfo: nodename nor servname provided, or not known

Посмотрев на platform.rb: 131, я заметил, что он пытается подключиться к «localhost» через порт 80, но не работает. Это подняло красный флаг, поскольку у меня недавно были проблемы с доступом к «localhost» через браузер, и вместо этого мне пришлось использовать 127.0.0.1:3000 для просмотра моих проектов rails.

Решение:

Мне не хватало записи файла хоста localhost в / etc / hosts:

127.0.0.1 localhost

Довольно неловкая проблема, но, тем не менее, это был ответ.

0 голосов
/ 04 марта 2016

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

# config / initializers / selenium.rb

module Selenium module WebDriver module Firefox class Launcher Selenium::WebDriver::Firefox::Launcher::SOCKET_LOCK_TIMEOUT = 10 end end end end

0 голосов
/ 02 ноября 2015

Так как это лучшая запись о данной проблеме как в Google, так и в Duck Duck Go, я опишу здесь свое решение.Проблема, насколько я понимаю, состоит в том, что селен использует порт 7054 в качестве мьютекса * для решения проблемы, заключающейся в том, что firefox при запуске разветвляет настоящий firefox и закрывает стартовый скрипт.Таким образом, PID реального лиса можно угадать только по селену, а запуск нескольких копий firefox параллельно приведет к постоянным условиям гонки.Таким образом, порт блокировки, который может стать проблемой, если многие Firefox должны запускаться параллельно.

Наш обходной путь - увеличить это время ожидания.

# Starting many firefoxen in parallel can easily take more than 45 (default) seconds
module Selenium
  module WebDriver
    module Firefox
      class Launcher
        remove_const(:SOCKET_LOCK_TIMEOUT)
      end
    end
  end
end
Selenium::WebDriver::Firefox::Launcher::SOCKET_LOCK_TIMEOUT = 90

в коде запуска для селена.

Исправлено по образцу этой подсказки: http://www.assertselenium.com/selenium-tips-tricks/

* Мьютекс - это программный объект, который позволяет нескольким программным потокам совместно использовать один и тот же ресурс, например доступ к файлу, но не одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...