The League of Extraordinary Developers

0113 815 0986


Whilst working on client projects we often find useful bits of information out. Where possible we blog about that information to pass on our knowledge. Below are some of our most recent entries.

Screengrab of the new LED site

How we added automated html validation to our web development process

As part of our development process we already write lots of integration tests using cucumber. We decided to look into validating our HTML code as part of our integration test suite. It turns out this was incredibly easy to do and we only wish we added this to our tests sooner.

markup_validity Gem

We initially looked at using the markup_validity gem. The major benefit to this gem is that your tests don't have to hit the W3C validator to check for valid code, as the gem compares the markup against schema files directly, thus making validation checks pretty quick. This works fine as long as you aren't using HTML5 for your websites, as the gem doesn't have an appropriate schema file. We could hunt around for an appropriate schema file, but with HTML5 being in a state of flux we would constantly have to update any schema files ourselves. We decided it would be best to use a gem that hit the W3C validator directly.

be_valid_asset Gem

This gem provides methods to validate X/HTML, CSS and feeds. This was certainly the level of functionality we were going to need. As it hits the W3C validator it also meant we could validate any of our HTML5 work.

Using be_valid_asset

To add the gem into cucumber tests, firstly you need to update your env.rb file with a reference to the gem.

require 'be_valid_asset'

We found the best way to add in validation was to update a couple of steps in the web_steps.rb file rather than create specific validation steps in the cucumber features. This keeps the tests as DRY as possible.

include BeValidAsset


Given /^(?:|I )am on (.+)$/ do |page_name|
  visit path_to(page_name)
  page.body.should be_valid_xhtml if ENV['VALIDATEHTML']

When /^(?:|I )go to (.+)$/ do |page_name|
  visit path_to(page_name)
  page.body.should be_valid_xhtml if ENV['VALIDATEHTML']

The ENV['VALIDATEHTML'] makes it easy for us to tell cucumber whether it should run the validation or not.

be_valid_asset comes with some handy configuration settings that help to speed up the validation process. Basically you can added caching to reduce the number of calls to the validators. If a response hasn't changed then the gem knows not to do another lookup. You can add the following code into your env.rb file.

BeValidAsset::Configuration.enable_caching = true
BeValidAsset::Configuration.cache_path = 
                    File.join(RAILS_ROOT, %w(tmp be_valid_asset_cache))
A quick gotcha

There is one slight issue with this process at the moment. If you are using Selenium or Culerity for any of your tests they currently appear to not render the Doctype information which then causes the page validation code to fail. To get around this problem we don't run any javascript features with page validation.

#don't run any javascript features and validate the pages
cucumber -t ~@javascript VAILDATEHTML=true

#only run the javascript features with not markup validation
cucumber -t @javascript

Read more entries

Keep up to date

Blog RSS feed

Want to find out more?

If we have piqued your interest then we'd love to hear from you.

Get in contact with us


  • Ruby on Rails
  • .Net
  • PHP
  • HTML5
  • CSS3
  • JavaScript
  • Web Apps
  • Mobile Web Apps
  • iOS Apps


  1. Blog title
    C4DI and the magical coffee beans
    Post Date
    Thursday, September 05 2013
  1. Blog title
    Designers - how far should their coding knowledge go?
    Post Date
    Thursday, May 30 2013
  1. Blog title
    Twitter Bootstrap - It's not all roses
    Post Date
    Friday, June 22 2012
  1. Blog title
    Keep your requests thin
    Post Date
    Friday, January 06 2012
  1. Blog title
    Storing a Product Catalog for eCommerce with a Document Database
    Post Date
    Monday, November 21 2011
  1. Blog title
    Success for Incentive Maker - Hull Digital Post
    Post Date
    Friday, July 08 2011