【问题标题】:Watir+Cucumber Connection refusedWatir+Cucumber 连接被拒绝
【发布时间】:2012-01-26 18:25:40
【问题描述】:

伙计们,我在测试中使用 watir+cucumber,对于每个功能,我都在重用浏览器的实例,即我创建 @@browser = Watir::Browser.new 的实例,然后在整个测试中重用它,我正在使用 @ 987654322@,我的测试到目前为止运行良好,我刚刚添加了另一个场景,我一直收到以下错误消息:

Connection refused - connect(2) (Errno::ECONNREFUSED)
      /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:560:in `initialize'
      /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:560:in `open'
      /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:560:in `connect'
      /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:53:in `timeout'
      /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:93:in `timeout'
      /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:560:in `connect'
      /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:553:in `do_start'
      /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:542:in `start'
      /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:1035:in `request'

【问题讨论】:

  • 这是简单的信息。你添加了什么样的场景?它是在开始时失败还是在新场景开始时失败?是否会发生您忘记的其他更改(例如 Firefox 已升级)?如果删除新场景会发生什么?祝你好运。
  • 这是一个典型的 UI 场景,打开浏览器并执行一些 UI 操作。它在那个场景下失败了,当我删除那个场景时,一切正常。非常感谢。
  • 您添加的场景是使用 Net::HTTP 连接到某些东西。无法建立此连接。可以是任何东西,例如 URL 中的拼写错误。如果没有其他信息(例如场景和支持步骤定义),我们将无法提供更多帮助。
  • 向我们展示失败步骤的场景和步骤定义。尝试在场景中添加标签(例如@wip),这样您就可以将其与其他场景隔离开来,这将使测试和故障排除变得更加容易。

标签: ruby cucumber watir watir-webdriver


【解决方案1】:

只需在您的 env.rb 文件中创建一个名为 @browser 的实例变量,然后您就可以在您的黄瓜步骤中通过 @browser 访问它。

【讨论】:

  • 这是一个很好的一般建议,但我认为这不是他的问题的原因。
【解决方案2】:

我今天遇到了同样的问题,我花了很多时间分析它。

只有 Explorer 和 Chrome 才会发生这种情况。

最后,我的结论如下:

  • 为了在 Cucumber 测试后关闭浏览器,我使用了 at_exit 全局挂钩(在 http://cukes.info 中推荐)。
  • 我看到 Watir-webdriver(也可能是 Selenium)链接相同的钩子以关闭 chomedriver.exe 进程(或类似的 IE 进程)。
  • 经过一些试验(可能是因为我对 Ruby 没有深入的经验),我发现用于链接到 at_exit 的 顺序 至关重要。

当 Exit 事件被发送给 webdriver 时,它的进程被关闭,但你的关闭例程被执行,它试图做同样的事情,但它发现 webdriver 已关闭,因此它返回一个异常,它使软件界面仍然打开。 所以,你必须这样写代码:

    AfterConfiguration do |config|
       yourCodeStartUp()                    # Put your SETUP code here including the launch of webdriver
       at_exit 
           yourCodeTearDown()               # Put your CLOSING routine here
           puts 'stopped'
       end
    end

这样,您的例程 at_exit 代码在 Webdriver 之前执行,它可以有序地关闭系统。

【讨论】:

    猜你喜欢
    • 2016-03-12
    • 2017-08-08
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多