【问题标题】:Watir-Webdriver EOFError and Errno::ECONNREFUSEDWatir-Webdriver EOFError 和 Errno::ECONNREFUSED
【发布时间】:2015-03-10 09:35:45
【问题描述】:

在运行使用 Watir-Webdriver(带有 Headless 和 Firefox)的 DelayedJobs 队列每小时几次从网络上获取一些数据时,我遇到了随机的 EOFErrorECONNREFUSED 错误。

这是一个相当简单的脚本,它可以访问站点、登录、在表单中输入数据并验证返回的数据。但是,错误似乎随机出现在脚本中的任何位置。您可以在下面看到示例。我认为还需要注意的是,一个单独的应用程序正在同一台机器上运行,也使用 Headless、Watir-Webdriver 和 Firefox。

由于随机性、备用应用程序以及谷歌搜索将我引导至 this issue with Selenium and ports 导致随机出现 EOF 问题,我倾向于认为这是在运行 Selenium 驱动的 Firefox(通过 Watir)时出现的问题同时也是根本原因。所以我的问题是:

  • 究竟是什么阻止了 Selenium 驱动的 Firefox 打开两个可以很好运行的实例?我是否认为端口锁定或某些连接问题可能是罪魁祸首?
  • 如果可能,我如何以编程方式避免这些重叠执行导致问题?

EOF错误示例

例如,EOFError: end of file reached 在尝试 .goto 时发生在这里:

/home/sam/.rvm/gems/ruby-2.0.0-p353/gems/watir-webdriver-0.7.0/lib/watir-webdriver/browser.rb:77:in `goto'

然后在.text

/home/sam/.rvm/gems/ruby-2.0.0-p353/gems/watir-webdriver-0.7.0/lib/watir-webdriver/elements/element.rb:83:in `text'

ECONNREFUSED 示例

这里,Errno::ECONNREFUSED Connection refused - connect(2) 发生在 .set

/home/sam/.rvm/gems/ruby-2.0.0-p353/gems/watir-webdriver-0.7.0/lib/watir-webdriver/user_editable.rb:11:in `set'"

然后在.click:

/home/sam/.rvm/gems/ruby-2.0.0-p353/gems/watir-webdriver-0.7.0/lib/watir-webdriver/elements/element.rb:119:in `click'

堆栈:

  • Mozilla Firefox 31.5.0
  • 无头 1.0.2
  • watir-webdriver 0.7.0
  • 红宝石 2.0.0p353
  • rvm 1.25.25(稳定)
  • CentOS 6.5 版(最终版)

【问题讨论】:

    标签: firefox selenium webdriver watir-webdriver headless


    【解决方案1】:

    如果任何一个测试在单独运行时完全可靠,那么我认为您关于并行运行它们的假设可能是正确的。

    我要么一个接一个地连续运行它们,要么尝试找到其他方法来更好地分离它们。也许使用油轮之类的东西并在 linux 容器中运行测试? (如果你在 linux 上运行)

    【讨论】:

      【解决方案2】:

      我成功地为每个应用程序提供了自己的 Xvfb 显示:

      在服务器本身:

      $ sudo /usr/bin/Xvfb :98 -screen 0 1280x1024x24 -ac &
      $ sudo /usr/bin/Xvfb :99 -screen 0 1280x1024x24 -ac &
      

      App 1 - 在创建浏览器之前:

      # ~/repo1/whatever.rb
      # ...
      h = headless(:display => '98')
      # ...
      

      App 2 - 在创建浏览器之前:

      # ~/repo2/something.rb
      # ...
      h = headless(:display => '99')
      # ...
      

      @chuck-van-der-linden 可能是正确的,不过,使用 VM 或类似的解决方案是更好的解决方案。如果我从这个架构开始,这将是我的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-01
        • 2012-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-28
        相关资源
        最近更新 更多