Ruby on rails 如何检查“我的选择”菜单中的一个选项是否包含文本?

Ruby on rails 如何检查“我的选择”菜单中的一个选项是否包含文本?,ruby-on-rails,ruby,css-selectors,nokogiri,Ruby On Rails,Ruby,Css Selectors,Nokogiri,我在Nokogiri上使用Rails 4.2.7。使用Nokogiri,我有没有办法判断我的选择菜单中的一个选项在其文本字段中包含“结果”一词(最终用户可以看到) 我有: options = doc.css("#menu_id option") 我可以循环浏览所有这些内容,检查文本,但我想可能有一个CSS选择器表达式或类似的东西,我可以使用Nokogiri更快地告诉我这个答案。Nokogiri支持jQuery的:包含选择器,它选择具有给定内容的节点: doc.css(“#menu_id opt

我在Nokogiri上使用Rails 4.2.7。使用Nokogiri,我有没有办法判断我的选择菜单中的一个选项在其文本字段中包含“结果”一词(最终用户可以看到)

我有:

options = doc.css("#menu_id option")

我可以循环浏览所有这些内容,检查文本,但我想可能有一个CSS选择器表达式或类似的东西,我可以使用Nokogiri更快地告诉我这个答案。

Nokogiri支持jQuery的
:包含
选择器,它选择具有给定内容的节点:

doc.css(“#menu_id option:contains('Results'")
您还可以使用XPath来实现,XPath功能更强,但更为冗长:

doc.xpath('//*[@id='menu_id']//option[contains(text(), "Results")]')

请参阅“”。

这是执行此操作的一般方法:

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<html>
  <body>
    <form>
      <select id="menu_id">
        <option value="foo">foo</option>
      </select>
    </form>
  </body>
</html>
EOT

doc.search('#menu_id option').any?{ |option| option.text == 'foo' } # => true
查看文本而不是值是否包含子字符串
“foo”

查看
参数是否与单词
“foo”
匹配

同样,他们会告诉你是否有不匹配的地方:


我可能会依赖Nokogiri对@gmcnaughton提到的jQuery扩展的实现,但我就是这样。YMMV.

为什么?您应该知道菜单是否包含该选项,因为您已对视图进行了编程。这是单元测试吗?此外,您可能希望调整系统中的某些内容,因为它在代码中语法不正确的地方插入了卷曲引号;它们极难调试。
doc.search('#menu_id option').any?{ |option| option.text['foo'] } # => true
doc.search('#menu_id option').any?{ |option| option['value'] == 'foo' } # => true
doc.search('#menu_id option').any?{ |option| option.text == 'bar' } # => false
doc.search('#menu_id option').any?{ |option| option.text['bar'] } # => false
doc.search('#menu_id option').any?{ |option| option['value'] == 'bar' } # => false