我希望能够在排除某些课程的同时与课程相匹配。
我可以使用类似下面的内容来获取与指定类匹配的所有li元素,但我不确定如何同时筛选出类。
b = Watir::Browser.new
free_boxes = b.lis(:class, /cellGridGameStandard/)
我想将此更改为与cellGridGameStandard
类匹配所有li元素的内容,但不包括同时包含notEligible
类或ownAlready
类的所有元素。
答案 0 :(得分:3)
以下是几个选项。
让我们假设html就像:
<ul>
<li class="cellGridGameStandard">
Element 1
</li>
<li class="cellGridGameStandard ownAlready">
Element 2
</li>
<li class="cellGridGameStandard notEligible">
Element 3
</li>
<li class="cellGridGameStandard">
Element 4
</li>
</ul>
第一个和第四个li元素符合指定的条件。
一种选择是检查没有ownAlready
或notEligible
类的lis:
matching = browser.lis(:class => 'cellGridGameStandard')
.find_all { |li|
['ownAlready', 'notEligible'].none? {
|class_name| li.class_name.split.include? class_name
}
}
p matching.collect(&:text)
#=> ["Element 1", "Element 4"]
另一种选择,更易于编写但有时被认为更难阅读,是使用css定位器:
matching = browser.elements(:css => 'li.cellGridGameStandard:not(.ownAlready):not(.notEligible)')
p matching.collect(&:text)
#=> ["Element 1", "Element 4"]