Как перезапустить браузер после каждого тестового сценария - PullRequest
5 голосов
/ 09 февраля 2012

Я тестирую расширение Chrome, используя Cucumber вместе с Capybara и Selenium-Webdriver.

Мой тест очень прост:

  @chrome_extension
    @javascript
      Scenario: Test1
      Given I open a browser
      And I close the browser
      When I do nothing
      Then nothing happens

Где шаги определены как:

require 'selenium-webdriver'

Given /^I open a browser$/ do
  visit 'http://google.com'
  STDERR.puts self
end

Given /^I close the browser$/ do
  page.driver.browser.quit
end

Given /^I do nothing$/ do

end

Given /^nothing happens$/ do

end

Когда я вызываю page.driver.browser.quit, он выходит из сеанса браузера. Но тогда возникает следующая ошибка:

Connection refused - connect(2) (Errno::ECONNREFUSED)
      /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:644:in `initialize'
      /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:644:in `open'
      /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:644:in `block in connect'
      /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/timeout.rb:44:in `timeout'
      /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/timeout.rb:87:in `timeout'
      /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:644:in `connect'
      /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:637:in `do_start'
      /Users/rui/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:626:in `start'
      /Users/rui/.rvm/gems/ruby-1.9.2-p180@yesware/gems/webmock-1.7.8/lib/webmock/http_lib_adapters/net_http.rb:90:in `request_with_webmock'
      /Users/rui/.rvm/gems/ruby-1.9.2-p180@yesware/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/http/default.rb:73:in `response_for'
      /Users/rui/.rvm/gems/ruby-1.9.2-p180@yesware/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/http/default.rb:41:in `request'
      /Users/rui/.rvm/gems/ruby-1.9.2-p180@yesware/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/http/common.rb:34:in `call'
      /Users/rui/.rvm/gems/ruby-1.9.2-p180@yesware/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/bridge.rb:406:in `raw_execute'
      /Users/rui/.rvm/gems/ruby-1.9.2-p180@yesware/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/bridge.rb:384:in `execute'
      /Users/rui/.rvm/gems/ruby-1.9.2-p180@yesware/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/remote/bridge.rb:228:in `deleteAllCookies'
      /Users/rui/.rvm/gems/ruby-1.9.2-p180@yesware/gems/selenium-webdriver-2.3.2/lib/selenium/webdriver/common/options.rb:67:in `delete_all_cookies'
      /Users/rui/.rvm/gems/ruby-1.9.2-p180@yesware/gems/capybara-1.1.2/lib/capybara/selenium/driver.rb:81:in `reset!'
      /Users/rui/.rvm/gems/ruby-1.9.2-p180@yesware/gems/capybara-1.1.2/lib/capybara/session.rb:70:in `reset!'
      /Users/rui/.rvm/gems/ruby-1.9.2-p180@yesware/gems/capybara-1.1.2/lib/capybara/dsl.rb:87:in `block in reset_sessions!'
      /Users/rui/.rvm/gems/ruby-1.9.2-p180@yesware/gems/capybara-1.1.2/lib/capybara/dsl.rb:87:in `each'
      /Users/rui/.rvm/gems/ruby-1.9.2-p180@yesware/gems/capybara-1.1.2/lib/capybara/dsl.rb:87:in `reset_sessions!'
      /Users/rui/.rvm/gems/ruby-1.9.2-p180@yesware/gems/capybara-1.1.2/lib/capybara/cucumber.rb:10:in `After'

Как правильно перезапускать браузер после каждого сценария? Мне нужно, чтобы каждый тест был как можно без гражданства.

Заранее спасибо!

Ответы [ 4 ]

1 голос
/ 23 мая 2014

Использование Watir-webdriver, который очень похож на селен.

Вы можете сделать это с помощью крючка.Чтобы лучше понять, проведите некоторые исследования хуков, но в вашем каталоге поддержки вашего проекта вы захотите создать файл хуков.Я использую ruby ​​и rubymine для запуска своих тестов, поэтому в вашей среде они могут отличаться.

Ваш файл ловушек может выглядеть примерно так.

require 'watir-webdriver'



Before do
  @browser = Watir::Browser.new :chrome
end


After do
  @browser.close
end

Затем, перед каждым сценарием, он откроет экземпляр браузера и закроет браузер, когда сценарий будет выполнен.

1 голос
/ 17 июня 2014

Очистить куки и обновить браузер в после подключения. Например, я использую это в Watir-Webdriver

After do |scenario|
  browser.cookies.clear
  browser.refresh
end
0 голосов
/ 17 марта 2016

Пример удаленного Java.

Капибара пытается спасти вашу работу, предугадывая, что вы хотите сделать. Капибара закрывает сессию после каждого шага. Если вы явно закроете сеанс браузера, то когда капибара пытается очистить куки, нет сеанса для очистки.

Если вы не хотите, чтобы капибара справлялась с подобными вещами, сделайте это самостоятельно без капибары.

0 голосов
/ 29 мая 2012

Возможно, есть более элегантный способ сделать это, но я бы подумал, чтобы каждый сценарий имел свою собственную задачу rake и использовал теги в огурце, например:

desc "Run scenario 1"
task :scenario_1 do
 cmd = "cucumber --tags @1"
 `#{cmd}`
end`

Делая это, вы получите именно то, что вам нужно, так как Cucumber поддерживает это "из коробки" с аргументом --tags.

...