【问题标题】:Watir webdriver Errno::ECONNREFUSED: No connection could be made because the target machine actively refused it. - connect(2)Watir webdriver Errno::ECONNREFUSED:无法建立连接,因为目标机器主动拒绝了它。 - 连接(2)
【发布时间】:2012-07-25 21:17:14
【问题描述】:

更新:

我正在运行以下代码来执行我的示例测试用例:(Windows 7, Watir 3.0.0, Watir-webdriver-0.6.1)

require "watir-webdriver"
require 'test/unit'

class Teste1    
    $var = Watir::Browser.new :chrome       
    def met1
        $var.goto 'google.com'
        $var.text_field(:name, "q").set 'sample'
        $var.button(:name =>'btnG').click
    end     
end

class Teste2 < Test::Unit::TestCase 
    $test = Teste1.new
    def test_gomet1
        $test.met1()
    end     
end

浏览器打开,但脚本抛出以下错误:

test_gomet1(Teste2):
Errno::ECONNREFUSED: No connection could be made because the target machine actively refused it. - connect(2)
   C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/default.rb:82:in `response_for'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/default.rb:38:in `request'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/common.rb:40:in `call'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:598:in `raw_execute'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:576:in `execute'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:99:in `get'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/common/navigation.rb:14:in `to'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.6.1/lib/watir-webdriver/browser.rb:63:in `goto'
maisum.rb:11:in `met1'
maisum.rb:21:in `test_gomet1'

谁能帮我解决这个问题?

【问题讨论】:

  • 我建议您尝试用尽可能少的代码行来重现问题。
  • 删除 met2test_gomet2test_closeVar 我遇到了同样的错误,这是我可以重现问题的最少代码行
  • 问题出在测试/单元代码还是 watir 代码中?我建议尝试在没有测试/单元代码的情况下重现代码。
  • 我认为问题出在测试/单元中,因为当我删除 &lt; Test::Unit::TestCase 并将我的方法称为 teste2 = Teste2.new; teste2.test_gomet1() 时,它可以工作。
  • 这是很好的信息。因此,调用方法会导致问题。

标签: ruby watir watir-webdriver


【解决方案1】:

我无法为test_closeVar 测试获得该异常,但是我可以为您的其他两个测试重现它。当您在浏览器关闭后尝试与它进行交互时,您会遇到该异常。

使用 Test::Unit 时,请记住测试按字母顺序运行。因此,您的 test_closeVar 测试将在 test_gomet1test_gomet2 甚至运行之前关闭浏览器。 test_gomet1test_gomet2 将抛出该异常,因为浏览器已关闭。

作为一种快速解决方法,您可以在测试名称中添加数字,让它们按特定顺序运行。

不过,长期的解决方案实际上是让您的测试独立,这样顺序就无关紧要了。

更新

几个观察:

  • 使用 Selenium-Webdriver 会出现问题,因此不是 Watir-Webdriver 特定的问题。
  • 该脚本在 Firefox 中运行良好,因此可能是 chromedriver 特有的问题。

解决方法:似乎 chrome 浏览器不喜欢在测试用例之外声明。我不明白为什么,但快速解决方法是在测试用例的设置中声明浏览器。如果你想为每个测试使用相同的浏览器,你可以在它不存在的情况下声明它。

以下将运行(尽管我建议清理它以减少全局变量的使用):

class Teste1    
    def met1
        $var.goto 'google.com'
        $var.text_field(:name, "q").set 'sample'
        $var.button(:name =>'btnG').click       
    end     
end

class Teste2 < Test::Unit::TestCase 
    def setup()
        unless defined?($var)
            $var = Watir::Browser.new :chrome       
        end
        $test = Teste1.new()
    end

    def test_gomet1
        $test.met1()
    end     
end

【讨论】:

  • 我只是从我的代码中删除了test_CloseVar test,但仍然遇到同样的错误。
  • 感谢 Justin Ko,它成功了,我是 Ruby/Watir 的初学者,我会努力改进我的脚本
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
  • 2023-03-25
  • 2015-04-05
  • 2016-12-08
相关资源
最近更新 更多