是的,我知道我不应该,但我只需要在控制器中运行一点Capybara脚本.
问题是它打开了一个浏览器和一切,但我想完成关闭测试或单独运行它.
所以例如,如果我运行如下:
Capybara.current_driver = :selenium
Capybara.app_host = 'https://www.google.com'
Capybara.visit("/")
Capybara.has_content?('foo')
Capybara.reset_sessions!
浏览器和会话仍处于打开状态.
如果我关闭浏览器并重新运行测试,则会抛出“Connection refused – connect(2)”异常.
我必须重新启动整个rails应用程序才能重新运行测试.
这有一种方法可以一次又一次地运行并重新运行几个Capybara测试,而无需重新启动任何东西?
像这样假设的东西会很好:
Capybara.new do
#the tests...
end
或者最后…… Capybara.shutdown
我似乎无法在文档中找到任何内容.
最佳答案 Capybara的selenium驱动程序有一个
quit
method.当Capybara启动浏览器时,它会注册at_exit钩子,它将调用quit.
但是当你想要自己退出时,你应该做两件事:
>自己调用Capybara.page.driver.quit
> Monkeypatch Capybara,以便当Capybara在您关闭浏览器时尝试关闭浏览器时不会出现错误:
# from https://github.com/jnicklas/capybara/blob/master/lib/capybara/selenium/driver.rb#L9
# code inside at_exit hook is removed
class Capybara::Selenium::Driver
def browser
unless @browser
@browser = Selenium::WebDriver.for(options[:browser], options.reject { |key,val| SPECIAL_OPTIONS.include?(key) })
end
@browser
end
end
这是POC代码 – https://gist.github.com/abotalov/6274926
因为你只需要“一些Capybara命令”,你也可以编写一个帮助方法:
def with_capybara(&block)
Capybara.app_host = 'http://www.stackoverflow.com'
session = Capybara::Session.new(:selenium)
block.call(session)
session.driver.browser.quit
end
这也是POC代码 – https://gist.github.com/abotalov/6274999