Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CSS';包含';选择器&;水豚的升级_Css_Ruby On Rails_Css Selectors_Capybara_Qtwebkit - Fatal编程技术网

CSS';包含';选择器&;水豚的升级

CSS';包含';选择器&;水豚的升级,css,ruby-on-rails,css-selectors,capybara,qtwebkit,Css,Ruby On Rails,Css Selectors,Capybara,Qtwebkit,以前我的规格有以下几行: within "h3:contains('FooBar text') + dl" do page.should have_content 'FizzBuzz' end (位于包含指定文本的标题旁边的定义列表中) 我升级了capybara webkit,现在“包含”选择器不起作用 (这是一种很好的理解,因为它在CSS3中被弃用) 我想不出一个简单的重写方法。有什么想法吗?我想你不仅升级了水豚网络工具包,还升级了水豚 Capybara 2.1现在使用CSS选择器的驱动

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

within "h3:contains('FooBar text') + dl" do
  page.should have_content 'FizzBuzz'
end
(位于包含指定文本的标题旁边的定义列表中)

我升级了capybara webkit,现在“包含”选择器不起作用
(这是一种很好的理解,因为它在CSS3中被弃用)


我想不出一个简单的重写方法。有什么想法吗?

我想你不仅升级了水豚网络工具包,还升级了水豚

Capybara 2.1现在使用CSS选择器的驱动程序实现

以前它是有效的,因为Capybara使用Nokogiri将CSS选择器转换为XPath。Nokogiri似乎支持
:包含
伪选择器(与此代码以前的工作方式相同)

您可以使用XPath重写它,如:

within(:xpath, "//dl[preceding-sibling::h3[contains(text(),'FooBar text')]]") do
  page.should have_content 'FizzBuzz'
end

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

如果您不想计算
xpath
,可以使用
Nokogiri::CSS.xpath\u for
它返回一个数组,因此需要执行
[0]

within :xpath, Nokogiri::CSS.xpath_for("<CSS SELECTOR>")[0] do
内:xpath,Nokogiri::CSS.xpath\u for(“”[0]do

这差不多就是我的结局。丑陋,但有效。包含(text(),'FooBar text')==contains(,'FooBar text'))