Testing CSS computed styles with Capybara
May 7 2015
This week I found myself with the rather strange task of testing that styles had been correctly applied to the DOM. There was a good reason for it, honest.
Sadly with otherwise excellent Capybara, Poltergeist, and PhantomJS computed styles are not the most readily avalible information, so I wound up using a little Javascript to get what we need.
var el = document.querySelector('.my-ele'),
styles = window.getComputedStyle(el);
styles.color;
// => "rgb(243, 75, 125)"
As you can see, with window.getcomputedstyle
we can (gasp) get the computed
styles for a given element. Property names on the object are the same as in
CSS, though camelCase
rather than lisp-case
.
In Capybara tests we can run arbitrary Javascript with a Javascript capable
driver (such as PhantomJS) and the method page.evaluate_script
. My tests
wound up looking something like this.
def computed_style(selector, prop)
page.evaluate_script(
"window.getComputedStyle(document.querySelector('#{selector}')).#{prop}"
)
end
describe 'Users page' do
it 'should have the correct title colour' do
style = computed_style '.title', 'color'
expect(style).to eq 'rgb(243, 75, 125)'
end
end
Yup. Weird, isn’t it?