我正在尝试找到文档中有特殊类的第n个元素。元素不一定是同一父元素的子元素。例如,
<ul>
<li><div class="foo">This</div></li>
<li><div>Nothing</div>
<ul>
<li><div class="foo">This also</div></li>
</ul>
</li>
<li><div class="foo">And this</div><li>
</ul>
我想找到包含.foo
类的第一,第二或第三个元素。
我试过
page.find '.foo'
Capybara::Ambiguous: Ambiguous match, found 3 elements matching css ".foo"
然后我尝试了
page.all('.foo')[n]
除了它似乎没有像Capybaras find
那样等待这个小小的时间之外,哪个很好用,因为HTML实际上是从ajax数据生成的。那么如何正确地使用find?
答案 0 :(得分:1)
好的,在freenode的#RubyOnRails上进行了一次简短的聊天后,我发现这并不像听起来那么容易。问题是Capybara无法知道已插入页面的.foo
是否是“全部”。这就是为什么.all
没有(或不需要)像.find
这样的等待支持。
解决方案是手动等待适当的时间,然后使用.all
。
答案 1 :(得分:-1)
Nokogiri的CSS查询可以有效地查找某些类的元素。它在the tutorial中解释。
例如,您可以使用以下Ruby one-liner从给定文件中读取并找到类foo
的第二个元素:
ruby -rnokogiri -e 'puts Nokogiri::HTML(readlines.join).css(".foo")[1]' sample.html
返回
<div class="foo">This also</div>
将[1]
中的数字替换为您要查找的元素的索引,并将sample.html
替换为您要搜索的html文件。如果您想挑选元素的某些部分你可以使用Nokogiri::XML::Element
的方法,例如content
获取其内容。