在测试HTML属性是否包含预期的URL时,如何忽略主机名?

时间:2014-06-27 15:01:08

标签: ruby regex rspec capybara

我正在编写测试以检查元标记是否存在以及内容是否匹配。请看下面的例子:

def have_meta(name, expected)
    page.find "meta[property='#{name}'][content='#{expected}']", :visible => false
end

我正在调用以下函数:

have_meta("og:title", "this is the title")
have_meta("og:url", "http://www.lorem.com/ipsum")

问题是我的网址内容会根据我工作的环境而变化。它可以是:

http://www.lorem.com/ipsum

http://www.sdfsd.com/ipsum 

我希望与"内容"进行正则表达式匹配。 Meta的一部分。忽略主网址,但检查" ipsum"部分。你知道我怎么能这样做吗?

2 个答案:

答案 0 :(得分:2)

我会使用CSS的结尾 - 使用属性选择器:

def have_meta_with_path(name, path)
  page.find "meta[property='#{name}'][content$='#{path}']", :visible => false
end

其中path只是例如' / ipsum的&#39 ;.不需要正则表达式。最安全的方法是使用两种方法:测试整个值的原始have_meta和测试结束的上述方法。您不想只测试og:title的结尾。

答案 1 :(得分:0)

您可以使用XPath而不是CSS。

page.should have_xpath "//meta[@property='og:url'][contains(@content, 'ipsum')]"