我正在尝试为我们的每个rspec测试开始一个新的Capybara会话,我无法弄清楚如何在完成时正确退出/关闭会话。
这是我的spec_helper.rb文件。
RSpec.configure do |config|
config.include Capybara::DSL
config.before :each do
@session = Capybara::Session.new(:selenium)
end
config.after :each do
@session.driver.browser.quit
end
end
@ session.driver.browser.quit语句正确关闭了浏览器,但是对于上次运行的测试,我收到一条错误消息:
/Users/lpc/.rvm/gems/ruby-1.9.3-p448@capybara/gems/selenium-webdriver-2.37.0/lib/selenium/webdriver/common/file_reaper.rb:32:in `reap': file not added for reaping: "/var/folders/5l/kw4vv8bj7rvc4xv6yfyspkwh0000gn/T/webdriver-profile20131107-96496-cx4x5r" (Selenium::WebDriver::Error::WebDriverError)
from /Users/lpc/.rvm/gems/ruby-1.9.3-p448@capybara/gems/selenium-webdriver-2.37.0/lib/selenium/webdriver/firefox/launcher.rb:45:in `quit'
from /Users/lpc/.rvm/gems/ruby-1.9.3-p448@capybara/gems/selenium-webdriver-2.37.0/lib/selenium/webdriver/firefox/bridge.rb:58:in `ensure in quit'
from /Users/lpc/.rvm/gems/ruby-1.9.3-p448@capybara/gems/selenium-webdriver-2.37.0/lib/selenium/webdriver/firefox/bridge.rb:58:in `quit'
from /Users/lpc/.rvm/gems/ruby-1.9.3-p448@capybara/gems/selenium-webdriver-2.37.0/lib/selenium/webdriver/common/driver.rb:168:in `quit'
from /Users/lpc/.rvm/gems/ruby-1.9.3-p448@capybara/gems/capybara-2.1.0/lib/capybara/selenium/driver.rb:140:in `quit'
from /Users/lpc/.rvm/gems/ruby-1.9.3-p448@capybara/gems/capybara-2.1.0/lib/capybara/selenium/driver.rb:17:in `block in browser'
我认为问题是因为Capybara在所有测试结束时也退出了浏览器。有谁知道这样做的正确方法以及如何使这个错误信息无声?谢谢你的帮助。
==== UPDATE =====
要关闭此循环,我发布到Capybara google group,我的问题已修复并合并为主。
https://groups.google.com/forum/#!topic/ruby-capybara/tZi2F306Fvo
答案 0 :(得分:5)
尝试使用Capybara.reset_session。
feature "my test" do
before do
my logic
end
after { Capybara.reset_sessions! }
scenario "my test" do
blablabla
end
end
答案 1 :(得分:0)
也许有一种可以用来剪辑录音的酱汁方法,而是在你的after
中调用它?
不是在每次测试后退出,也许你可以在每次测试之前退出?如果在运行之前尝试退出时出错,或许有办法查看是否已经在运行?如果没有,你可以做一个可怕的,讨厌的黑客:在after
中设置一个全局变量,让你知道有一个你可以退出的驱动程序。
答案 2 :(得分:0)
老问题,但我刚遇到这个问题。如果您有Capybara :: Session,则在每个SPEC之后浏览器保持打开状态,从而在运行多个SPEC文件时生成多个浏览器。没有Capybara:Session quit方法,所以你需要先获取驱动程序对象然后退出。我通常在每个SPEC文件的末尾添加它:
#version 330
layout(location = 0) in vec3 bla_bla_bla_Vertex;
layout(location = 2) in vec3 bla_bla_bla_Normal;
layout(location = 8) in vec3 bla_bla_bla_TexCoord0;
其中@capybara_session是Capybara :: Session对象。