В подключении Watir + Cucumber отказано

Ребята, я использую watir + cucumber в своих тестах, и для каждой функции я повторно использую экземпляр браузера, то есть я создаю экземпляр @@browser = Watir::Browser.new, а затем повторно использую его в своих тестах, я использую watir-webdriver, мои тесты, где выполняются хорошо до сих пор, я просто добавил еще один сценарий и постоянно получаю следующее сообщение об ошибке:

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'

person Community    schedule 26.01.2012    source источник
comment
Это немного информации. Какой сценарий вы добавили? он терпит неудачу при запуске или при запуске нового сценария? Могло ли быть изменено что-то еще, что вы забыли (например, был обновлен Firefox)? Что произойдет, если вы удалите новый сценарий? Удачи.   -  person Dave McNulla    schedule 27.01.2012
comment
Это типичный сценарий пользовательского интерфейса, открывает браузер и выполняет некоторые действия пользовательского интерфейса. Он терпит неудачу прямо в этом сценарии, когда я удаляю этот сценарий, все работает нормально. Большое спасибо.   -  person    schedule 27.01.2012
comment
В добавленном вами сценарии для подключения к чему-либо используется Net :: HTTP. Это соединение не может быть установлено. Это может быть что угодно, например опечатка в URL-адресе. Без дополнительной информации (такой как сценарий и вспомогательные определения шагов) мы не сможем больше помочь.   -  person Mark Thomas    schedule 27.01.2012
comment
Покажите нам сценарий и определение шага для неудачного шага. попробуйте добавить тег к сценарию (например, @wip), чтобы его можно было запускать отдельно от других сценариев, что упростит тестирование и устранение неполадок.   -  person Chuck van der Linden    schedule 01.02.2012


Ответы (2)


Просто создайте переменную экземпляра с именем @browser в вашем файле env.rb, а затем вы сможете получить к ней доступ через @browser на шагах по огурцу.

person Alister Scott    schedule 28.01.2012
comment
Это хороший общий совет, но я не думаю, что это причина его проблемы. - person Chuck van der Linden; 01.02.2012

Сегодня я столкнулся с той же проблемой и потратил много времени на ее анализ.

Это происходит только с проводником и 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 и может корректно завершить работу системы.

person sbos61    schedule 07.01.2014