Исключение селена вебдрайвер - PullRequest
14 голосов
/ 28 ноября 2010

Сегодня, когда я использую селеновый webdrive, я получил ошибку. моя платформа Mac OSX. это мой журнал исключений.

ruby-1.9.2-p0 > Selenium::WebDriver.for :firefox
Selenium::WebDriver::Error::WebDriverError: unable to bind to locking port 7054 within 45 seconds
 from /Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/selenium-webdriver-0.1.0/lib/selenium/webdriver/firefox/socket_lock.rb:48:in `lock'
 from /Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/selenium-webdriver-0.1.0/lib/selenium/webdriver/firefox/socket_lock.rb:29:in `locked'
 from /Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/selenium-webdriver-0.1.0/lib/selenium/webdriver/firefox/launcher.rb:32:in `launch'
 from /Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/selenium-webdriver-0.1.0/lib/selenium/webdriver/firefox/bridge.rb:21:in `initialize'
 from /Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/selenium-webdriver-0.1.0/lib/selenium/webdriver/common/driver.rb:38:in `new'
 from /Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/selenium-webdriver-0.1.0/lib/selenium/webdriver/common/driver.rb:38:in `for'
 from /Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/selenium-webdriver-0.1.0/lib/selenium/webdriver.rb:51:in `for'
 from (irb):8
 from /Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.1/lib/rails/commands/console.rb:44:in `start'
 from /Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.1/lib/rails/commands/console.rb:8:in `start'
 from /Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.1/lib/rails/commands.rb:23:in `<top (required)>'
 from script/rails:6:in `require'
 from script/rails:6:in `<main>'

Я не знаю, почему это произошло. мой путь Firefox является путем по умолчанию. спасибо за помощь !!

Ответы [ 5 ]

20 голосов
/ 29 ноября 2010

WebDriver использует порт 7054 («порт блокировки») в качестве мьютекса, чтобы не запускать два экземпляра Firefox одновременно.Каждый новый созданный вами экземпляр будет ждать мьютекс перед запуском браузера, а затем отключать его, как только браузер будет открыт.

Так что это действительно может быть проблема с ресурсами - ранее созданный драйвер требует более 45секунд до запуска и удерживает блокировку в течение этого времени.

Если это кажется маловероятным в вашем случае, было бы интересно узнать, какой процесс удерживает блокировку.Попробуйте запустить lsof -i TCP:7054 за 45 секунд до истечения времени ожидания.

Запуск ruby ​​с -d (или установкой $DEBUG = true) также предоставит некоторую полезную информацию для дальнейшей отладки.

6 голосов
/ 15 июля 2011

Я сделал lsof -i TCP:7054 и нашел соответствующий process_id, а затем окончательно убил данный процесс с помощью kill -9 process_id

А потом снова попробовал тест, и он сработал :)

1 голос
/ 02 июля 2014

Я также получил это и запустил "lsof -i TCP: 7054", и уничтожение pid-нарушителя также устранило мою проблему.

1 голос
/ 15 февраля 2012

Я использую огурец + капибара + вебдрайвер + параллельные_тесты, и я столкнулся с упомянутой ошибкой.Чтобы решить эту проблему, я добавил следующее в features / support / env.rb:

unless (env_no = ENV['TEST_ENV_NUMBER'].to_i).zero?
  # Standard, which is described at the parallel_tests github page
  Capybara.server_port = 8888 + env_no

  # This successfully avoids locking port error, may require less, but
  # on my 8 cores vm, this works like a charm
  sleep env_no * 10
end

U, вероятно, нужно адаптировать вышеприведенное, чтобы соответствовать тому, что вы используете, идея состоит в том, чтобы просто заставить время снаСтарайтесь не запускать все экземпляры Firefox одновременно, когда может не хватить 45 секунд.

0 голосов
/ 22 апреля 2015

Я заметил, что он будет работать на порту 7054, но он искал его на порту 7055.

bundle update сделал это для меня

...