3

我试图在文档中找到具有特殊类的第 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>

我想找到具有 class 的第一个、第二个或第三个元素.foo

我试过了

page.find '.foo'

哪些错误Capybara::Ambiguous: Ambiguous match, found 3 elements matching css ".foo"

然后我尝试了

page.all('.foo')[n]

效果很好,只是它似乎不像 Capybarasfind那样等待这么短的时间,这是我需要的,因为 HTML 实际上是从 ajax 数据生成的。那么如何用 find 正确地做到这一点呢?

4

2 回答 2

1

好的,在 freenode 上的#RubyOnRails 中进行了简短的聊天后,我很清楚这并不像听起来那么容易。问题是 Capybara 无法知道.foo已经插入页面的 s 是否是它们的“全部”。这就是为什么.all没有(或不需要)支持等待的原因.find

解决方案是手动等待适当的时间,然后使用.all.

于 2013-04-11T09:09:23.153 回答
-1

Nokogiri 的 CSS 查询对于查找某些类的元素非常有效。教程中对此进行了说明。

例如,您可以使用以下 Ruby one-liner 从给定文件中读取并找到 class 的第二个元素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获取其内容。

于 2013-04-11T09:03:45.553 回答