4

はい、そうすべきではないことはわかっていますが、コントローラーで少しのカピバラスクリプトを実行する必要があるだけです。

問題は、ブラウザとすべてを開くことですが、テストを完全にシャットダウンするか、単独で実行したいと考えています。

たとえば、次のようなものを実行すると:

Capybara.current_driver = :selenium
Capybara.app_host = 'https://www.google.com'
Capybara.visit("/")
Capybara.has_content?('foo')
Capybara.reset_sessions!

ブラウザとセッションは開いたままです。

ブラウザを閉じてテストを再実行すると、「接続が拒否されました - connect(2)」という例外がスローされます。

テストを再実行するには、Rails アプリ全体を再起動する必要があります。

これは、何も再起動することなく、いくつかのカピバラテストを何度も実行して再実行する方法はありますか?

このような仮説的なものが良いでしょう:

Capybara.new do
    #the tests...
end

それとも最後にこれ…Capybara.shutdown

ドキュメントに何も見つからないようです。

4

2 に答える 2

4

Capybara の selenium ドライバーにはquitメソッドがあります。カピバラはブラウザ起動時にat_exitquitを呼び出すフックを登録します。

ただし、それ自体を終了したい場合は、次の 2 つのことを行う必要があります。

  1. Capybara.page.driver.quit自分自身を呼び出す
  2. 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


「いくつかのカピバラコマンド」だけが必要なので、必要に応じてヘルパーメソッドを書くこともできます:

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

于 2013-08-19T22:27:07.447 に答える