selenium webdriverexception

今天,当我使用selenium webdrive时,我收到了一个错误。 我的平台是mac osx。 这是我的exception日志。

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 `' from script/rails:6:in `require' from script/rails:6:in `' 

我不知道为什么会这样。 我的firefox路径是默认路径。 谢谢您的帮助!!

WebDriver使用端口7054(“锁定端口”)作为互斥锁,以确保我们不会同时启动两个Firefox实例。 您创建的每个新实例将在启动浏览器之前等待互斥锁,然后在浏览器打开后立即释放它。

所以这可能确实是一个资源问题 – 以前创建的驱动程序需要超过45秒的时间才能启动并且在那段时间内保持锁定状态。

如果在您的情况下这似乎不太可能,那么了解哪个进程持有锁将会很有趣。 尝试在超时之前的45秒内运行lsof -i TCP:7054

使用-d运行ruby(或设置$DEBUG = true )也将为进一步调试提供一些有用的信息。

我做了lsof -i TCP:7054并找到了相应的process_id,最后用kill -9 process_id终止了给定的进程

然后再次尝试测试,它确实有效:)

我一直在使用黄瓜+水豚+ webdriver + parallel_tests,我遇到了上面提到的错误。 要解决此问题,我将以下内容添加到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 

你可能需要调整上面的内容以适应你的用途,这个想法只是强制一个睡眠时间来避免在同一时间启动所有firefox实例,等待45秒可能还不够。

我也得到了这个并运行“lsof -i TCP:7054”并杀死了违规的pid也解决了我的问题。

我注意到它会在端口7054上运行,但它在端口7055上寻找它。

bundle update为我做了

Interesting Posts