以前我的规格有以下几行:
within "h3:contains('FooBar text') + dl" do
page.should have_content 'FizzBuzz'
end
(在包含指定文本的标题下一个定义列表中)
我升级了 capybara-webkit,现在“包含”选择器不起作用
(这是一种很好且可以理解的方法,因为它在 CSS3 中已被弃用)。
我想不出一个简单的方法来重写它。有任何想法吗?
以前我的规格有以下几行:
within "h3:contains('FooBar text') + dl" do
page.should have_content 'FizzBuzz'
end
(在包含指定文本的标题下一个定义列表中)
我升级了 capybara-webkit,现在“包含”选择器不起作用
(这是一种很好且可以理解的方法,因为它在 CSS3 中已被弃用)。
我想不出一个简单的方法来重写它。有任何想法吗?
如果你想避免必须弄清楚xpath
,你可以使用Nokogiri::CSS.xpath_for
它返回一个数组,所以你需要做[0]
within :xpath, Nokogiri::CSS.xpath_for("<CSS SELECTOR>")[0] do
我认为您不仅升级了 capybara-webkit,还升级了 capybara。
Capybara 2.1 现在使用驱动程序的 CSS 选择器实现。
以前它之所以有效,是因为 Capybara 使用 Nokogiri 将 CSS 选择器转换为 XPath。Nokogiri 似乎支持:contains
伪选择器(因为此代码以前有效)。
您可以使用 XPath 重写它,例如:
within(:xpath, "//dl[preceding-sibling::h3[contains(text(),'FooBar text')]]") do
page.should have_content 'FizzBuzz'
end
但是,我认为它的可读性不太高,所以最好选择一个更好的选择器,它会更短、更易读。