Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby SeleniumWebDriver异常_Ruby_Selenium_Qa - Fatal编程技术网

Ruby SeleniumWebDriver异常

Ruby SeleniumWebDriver异常,ruby,selenium,qa,Ruby,Selenium,Qa,今天,当我使用selenium webdrive时,我遇到了一个错误。我的平台是MacOSX。这是我的异常日志 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/g

今天,当我使用selenium webdrive时,我遇到了一个错误。我的平台是MacOSX。这是我的异常日志

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>'
ruby-1.9.2-p0>Selenium::WebDriver.for:firefox
Selenium::WebDriver::Error::WebDriverError:无法在45秒内绑定到锁定端口7054
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'
来自/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”
来自/Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/selenium-webdriver-0.1.0/lib/selenium/webdriver/firefox/launcher.rb:32:in'launch'
来自/Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/selenium-webdriver-0.1.0/lib/selenium/webdriver/firefox/bridge.rb:21:在“初始化”中
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'
来自(irb):8
来自/Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.1/lib/rails/commands/console.rb:44:在“开始”中
来自/Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.1/lib/rails/commands/console.rb:8:在“开始”中
来自/Users/Apple/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.1/lib/rails/commands.rb:23:in`'
来自脚本/rails:6:in'require'
来自脚本/rails:6:in`'
我不知道为什么会这样。我的firefox路径是默认路径。 谢谢你的帮助

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

因此,这确实可能是一个资源问题-一个以前创建的驱动程序需要45秒以上的时间才能启动,并在这段时间内保持锁定

如果在您的案例中这似乎不太可能,那么了解什么进程持有锁将是一件有趣的事情。在超时前的45秒内尝试运行lsof-i TCP:7054


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

我确实使用了
lsof-I TCP:7054
并找到了相应的进程\u id,然后使用
kill-9进程\u id


然后又尝试了一次测试,结果成功了:)

我一直在使用cucumber+capybara+webdriver+parallel_测试,我遇到了上面提到的错误。为了解决这个问题,我在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上寻找它


捆绑包更新
为我做的

谢谢!这帮助我解决了这个问题,不知怎的,我有一个进程占用了75%的CPU来监听这个端口(可能是另一个没有正常停止的SeleniumWebDriver实例)。终止这个过程让firefox像正常一样启动。谢谢。你能告诉我什么是锁定端口和互斥锁吗?这对我来说完全有效,我发现我在该端口上运行了另一个进程,这是我以前参与的一个项目的残余。在杀死它之前,请确保你了解是什么进程在保留端口!例如,在我的例子中,我的远程连接正在使用该端口。在这个过程中杀死-9是个坏主意!