Fix contains content steps

Steps such as "I see" and "I should not see" were searching the entire page
source, so hidden elements and Javascript were causing the tests to fail.
Instead we should only consider elements that are visible on the screen.

We do this by requesting elements via XPath and only considering elements
which are visible and contain the text we're interested in. Hypothetically
we should be able to do a //*[contains(text(), 'Badger')], but this doesn't
seem to work reliably for some unknown reason.