Glad You're Ready. Let's Get Started!

Let us know how we can contact you.

Thank you!

We'll respond shortly.

Making WebMock, Selenium, and WebDriver Play Nicely


Since this article was written, version 1.7.0 of WebMock has been released, which includes WebMock.disable! functionality, as well as fixes the problem with selenium-webdriver. So please use that, instead of webmock-disabler.

The Problem

Recently, one of my projects ran into a problem where our integration tests would intermittently fail with weird timeout errors and complaints about page elements that couldn’t be found.

A little googling revealed that we weren’t the only ones having this problem.

Apparently, WebMock, Selenium, and WebDriver don’t play nicely together, even if you tell WebMock to allow the outgoing connections necessary to drive the browser.

Some Gemfile hacking revealed that it was the mere presence of WebMock that caused the error. If we removed WebMock from our Gemfile, our integration tests ran fine, but then of course all of our tests that actually needed WebMock failed.

At that point, we could have decided to run our integration tests separately from the rest of the tests, but we really liked the idea of having all the tests run in the same VM, to avoid the duplicate VM startup time.

What we really needed was a way to turn WebMock on and off selectively for different types of tests.

The Solution

With some gnarly monkey patching and offensive use of alias_method, I have created webmock-disabler, a gem which provides new WebMock.disable! and WebMock.enable! methods. You can use these methods in individual tests, or on classes of tests as shown in the README.

The Result

We’re now able to run our tests that need WebMock in the same VM as those that would otherwise break if we didn’t do WebMock.disable!.

Celebration time!

  1. Thanks, but wouldn’t it be better to fork the webmock gem and submit a pull request? This is a bug within webmock, right?

  2. Wojtek says:

    Good thinking @Paul. Alas, I believe webmock-disabler only disables NetHTTP client integration. There’s more work to cover them all before the feature could be merged to webmock gem.

  3. Bartosz Blimke says:

    I just released new WebMock 1.7.0 which does both:

    1) Fixes selenium-webdriver compatibility
    2) Adds WebMock.disable! and WebMock.enable! for all adapters, or selectively with :except option. Full changelog is here

  4. Danny Burkes says:

    Great news, Bartosz- I’ll update the article to reflect this.

Post a Comment

Your Information (Name required. Email address will not be displayed with comment.)

* Copy This Password *

* Type Or Paste Password Here *