Capybara 2.1.0似乎没有找到任何元标签:
(rdb:1) p page.find 'meta'
*** Capybara::ElementNotFound Exception: Unable to find css "meta"
即使它们出现在page.source
中
(rdb:1) p page.source
"<!doctype html>\n<html>\n<head>\n<title>MyTitle</title>\n<meta charset='utf-8'>\n<meta content='IE=edge,chrome=1' http-equiv='X-UA-Compatible'>\n<meta content='width=device-width, initial-scale=1' name='viewport'>\n<meta name='description'>\n\n..."
发布于 2013-04-18 07:51:59
解决方案是在find
或have_selector
中使用:visible => false
page.should have_css 'meta[name="description"]', visible: false
或者:
page.find 'meta[name="description"]', visible: false
发布于 2013-08-16 13:29:18
如果您想检查更具体的meta,包括描述文本等:
https://gist.github.com/Lordnibbler/6247531
RSpec::Matchers.define :have_meta do |name, expected|
match do |actual|
has_css?("meta[name='#{name}'][content='#{expected}']")
end
failure_message_for_should do |actual|
actual = first("meta[name='#{name}']")
if actual
"expected that meta #{name} would have content='#{expected}' but was '#{actual[:content]}'"
else
"expected that meta #{name} would exist with content='#{expected}'"
end
end
end
RSpec::Matchers.define :have_title do |expected|
match do |actual|
has_css?("title", :text => expected)
end
failure_message_for_should do |actual|
actual = first("title")
if actual
"expected that title would have been '#{expected}' but was '#{actual.text}'"
else
"expected that title would exist with '#{expected}'"
end
end
end
然后,像这样查找meta:
page.should have_meta(:description, 'Brand new Ruby on Rails TShirts')
用爱从施普雷那里借来:https://github.com/spree/spree/blob/master/core/lib/spree/testing_support/capybara_ext.rb
https://stackoverflow.com/questions/16072240
复制相似问题