CSS'包含'选择器&升级Capybara

时间:2013-06-05 10:02:33

标签: css ruby-on-rails css-selectors capybara qtwebkit

以前我的规格有以下几行:

within "h3:contains('FooBar text') + dl" do
  page.should have_content 'FizzBuzz'
end

(在包含指定文本的标题旁边的定义列表中)

我升级了capybara-webkit,现在'包含'选择器不起作用 (这很好,可以理解,因为它在CSS3中被弃用了。)

我无法找到一种简单的方法来重写它。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

如果您想避免弄清楚xpath,可以使用Nokogiri::CSS.xpath_for它会返回一个数组,因此您需要执行[0]

within :xpath, Nokogiri::CSS.xpath_for("<CSS SELECTOR>")[0] do

答案 1 :(得分:2)

我认为你不仅升级了capybara-webkit而且升级了水豚。

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

但是,我觉得它不太可读,所以最好选择一个更简短,更易读的更好的选择器。