Keep your Selenium browser open while you use Capybara to talk to it. Save seconds and sanity.
Go to file
John Bintz 5549ef5de4 add the ability to install a cucumber helper 2013-01-25 10:56:56 -05:00
bin some cleanup, docs too 2013-01-25 10:21:17 -05:00
lib add the ability to install a cucumber helper 2013-01-25 10:56:56 -05:00
skel/features/support add the ability to install a cucumber helper 2013-01-25 10:56:56 -05:00
.gitignore initial commit 2012-11-26 11:36:43 -05:00
Gemfile initial commit 2012-11-26 11:36:43 -05:00
LICENSE initial commit 2012-11-26 11:36:43 -05:00
README.md add the ability to install a cucumber helper 2013-01-25 10:56:56 -05:00
Rakefile initial commit 2012-11-26 11:36:43 -05:00
persistent_selenium.gemspec changes 2012-11-26 14:11:53 -05:00

README.md

Now you can keep that precious browser window open when doing continuous integration testing. Save seconds, and sanity, with every test re-run!

Also, the browser stays open at its last state so you can inspect it and more easily fix your tests and/or code.

Start an instance:

persistent_selenium [ --port 9854 ] [ --browser firefox ]

Tell Capybara to use it:

# features/support/env.rb

require 'persistent_selenium/driver'
Capybara.default_driver = :persistent_selenium

If you're using Cucumber, you can also install that hook:

persistent_selenium install

Should work just the same as if you used the standard Capybara Selenium driver, except for these two differences:

  • The browser starts up first thing and sticks around, so you don't pay the startup/shutdown penalty with each test run.
  • The last page you were on before your tests passed/failed stays there, so you can inspect it and adjust your tests.

The browser's cookies and such are reset before the next test runs, so you still get the state cleared out before your next set of tests.

Under the hood

It's DRb, which Just Works (tm), and a little reshuffling of the default Capybara Selenium driver's code.

When DRb doesn't Just Work (tm)

You may see recycled object errorrs. Capybara is complex enough that, eventually, something will get garbage collected on the server and an object on the client will notice. I turned off garbage collection on the server but it still happens. Just rerun the test. It doesn't happen too often. It's the price you pay for speed.