【问题标题】:A selenium webdriver exception硒网络驱动程序异常
【发布时间】:2011-05-16 19:46:46
【问题描述】:

今天,当我使用 selenium 网络驱动器时,我遇到了一个错误。我的平台是 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 路径是默认路径。 谢谢你的帮助!!

【问题讨论】:

    标签: ruby selenium qa


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢!这帮助我解决了这个问题,我有一个进程占用了 75% 的 CPU 来监听这个端口(可能是 selenium-webdriver 的另一个实例没有正常停止)。终止该进程让 Firefox 正常启动。
    • 谢谢。你能告诉我什么是锁定端口和互斥锁吗?
    【解决方案2】:

    我做了lsof -i TCP:7054,找到了对应的process_id,最后用kill -9 process_id杀死了给定的进程

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

    【讨论】:

    • 这对我来说完全有效,我发现我在该端口上运行了另一个进程,这是我过去从事的项目的残余。
    • 在杀死它之前,请确保您了解哪个进程正在占用该端口!例如,在我的情况下,我的远程连接正在使用该端口。在那个过程中杀死 -9 是个坏主意!
    【解决方案3】:

    我一直在使用 cucumber + capybara + 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 秒的等待可能不够。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        bundle update 为我做的

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-01
          • 2018-08-27
          相关资源
          最近更新 更多