Matching Meta Tags With Capybara 2

As I updated my bundle, some capybara have_selector(…) matches started to fail. Here was the message :

1
expected to find xpath "//meta[@http-equiv='refresh']" but there were no matches. Also found "", which matched the selector but not all filters. (Capybara::ExpectationNotMet)

After some searching, I eventually understood that it was a modification in the behaviour of Capybara 2 that only matches elements in the html body, and not in the head anymore. If trying to match the title, stackoverflow suggests to use :

1
expect(response).to have_title('My page')

To match meta tags, I had to resort to the following :

1
2
meta_refresh_tags = Nokogiri::HTML(page.source).xpath("//meta[@http-equiv='refresh']")
expect(meta_refresh_tags).not_to(be_empty, 'could not find a meta refresh tag')

I could do with something nicer, but it’s ok for the moment.

Comments