CSS'包含'Capybara的选择器和升级

Arn*_*psa 5 css ruby-on-rails css-selectors qtwebkit capybara

以前我的规格有这些线:

within "h3:contains('FooBar text') + dl" do
  page.should have_content 'FizzBuzz'
end
Run Code Online (Sandbox Code Playgroud)

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

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

我无法想出一个简单的方法来重写这个.有任何想法吗?

Kar*_*k T 5

如果你想避免弄清楚xpath,你可以使用Nokogiri::CSS.xpath_for它返回一个数组,所以你需要做[0]

within :xpath, Nokogiri::CSS.xpath_for("<CSS SELECTOR>")[0] do
Run Code Online (Sandbox Code Playgroud)


And*_*lov 2

我认为您不仅升级了 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
Run Code Online (Sandbox Code Playgroud)

但是,我认为它的可读性不太好,因此最好选择一个更好的选择器,它会更短且更具可读性。