Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium 如何在每个测试场景之后重新启动浏览器_Selenium_Cucumber_Capybara - Fatal编程技术网

Selenium 如何在每个测试场景之后重新启动浏览器

Selenium 如何在每个测试场景之后重新启动浏览器,selenium,cucumber,capybara,Selenium,Cucumber,Capybara,我正在使用Cucumber与Capybara和Selenium Webdriver一起测试一个Chrome扩展 我的测试非常简单: @chrome_extension @javascript Scenario: Test1 Given I open a browser And I close the browser When I do nothing Then nothing happens 其中步骤定义为: requir

我正在使用Cucumber与Capybara和Selenium Webdriver一起测试一个Chrome扩展

我的测试非常简单:

  @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'
在每个场景之后重新启动浏览器的正确方式是什么?我需要每个测试尽可能无状态


提前谢谢

> P>这可能有更优雅的方式,但我会考虑将每个场景放在自己的RAKE任务中,并在黄瓜中使用标签,比如:

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

这样做将完全满足您的要求,因为Cucumber支持使用--tags参数进行开箱即用。

使用与selenium非常相似的Watir webdriver

你可以用钩子来做这件事。对钩子做一些研究以获得更好的理解,但是在项目的支持目录中,您可能希望创建一个钩子文件。我使用ruby和rubymine来运行测试,所以在您的环境中可能会有所不同

您的钩子文件可能看起来像这样

require 'watir-webdriver'



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


After do
  @browser.close
end

然后,在运行每个场景之前,它将打开浏览器的一个实例,并在场景完成时关闭浏览器

清除cookies并在后挂接中刷新浏览器。例如,我在Watir Webdriver中使用了这个

After do |scenario|
  browser.cookies.clear
  browser.refresh
end
删除了java示例

水豚通过预测你想做的事来拯救你的工作。水豚在每一步后都会关闭会话。如果显式关闭浏览器会话,则当水豚尝试清理cookie时,没有要清理的会话


如果你不想让水豚来处理这类事情,那就不用水豚自己动手。

我在下面补充了一个答案。关键是,当你设置它的时候,你只需要确保你的@After钩子每次都会彻底破坏WebDriver驱动程序。你可以在我的GitHub页面上看到上面更详细的内容。从他的错误消息看,他正在使用Ruby。我不确定Java实现在这种情况下是否能帮助他。