Ruby on rails 如何检查“我的选择”菜单中的一个选项是否包含文本?
我在Nokogiri上使用Rails 4.2.7。使用Nokogiri,我有没有办法判断我的选择菜单中的一个选项在其文本字段中包含“结果”一词(最终用户可以看到) 我有: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
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