Исключение исключения selenium webdriver

Сегодня, когда я использую selenium 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 - путь по умолчанию. спасибо за вашу помощь!

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

Я использую огурец + capybara + webdriver + parallel_tests, и я столкнулся с указанной ошибкой. Чтобы решить эту проблему, я добавил следующие функции /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 секунд может быть недостаточно.

Ответ 4

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

Ответ 5

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

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