使用CSS和Capybara选择元素

时间:2015-04-22 10:59:12

标签: html css cucumber capybara

我正在尝试使用capybara在以下HTML结构中选择td.col_4,但到目前为止无济于事,所以想看看是否有人可以指出我正确的方向

<div id="potentialResults">
  <div class="result">
    <table class="report">
      <tbody>
        <tr>
          <td class="col_1">
           <img original-title="Sources : Telephone Directory">
             <a href="#"><u>Name 1</u></a>
          </td>
          <td class="col_2"></td>
          <td class="col_3"></td>
          <td class="col_4">Address 1</td>
        </tr>
      </tbody>
    </table>
  </div>

  <div class="result">
    <table class="report">
      <tbody>
        <tr>
          <td class="col_1">
           <img original-title="Sources : Telephone Directory">
             <a href="#"><u>Name 2</u></a>
          </td>
          <td class="col_2"></td>
          <td class="col_3"></td>
          <td class="col_4">Address 2</td>
        </tr>
      </tbody>
    </table>
  </div>

 </div>

所以目前要为address 1获取Name 1的文字

page.find("#potentialResults > .result > .report > tbody > tr > td.col_1 > a", text: "Name 1", match: :first).find('td.col_4').text

但我似乎正在努力获得相同的地址,但使用img data-attribute作为我的标识符

page.find("#potentialResults > .result > .report > tbody > tr > td.col_1 > img[original-title='Sources : Telephone Directory'] + td.col_4",  match: :first).text

td.col_4在这个例子中并不完全相邻吗?

在规定必须是第一场比赛时,我怎样才能获得该文本。

由于

1 个答案:

答案 0 :(得分:0)

你传给你的发现者的css太漫长了。它可以缩短而不会产生模棱两可的结果。

如果您只想从td.col_4获取文本,请执行以下操作:

find('#potentialResults .col_4').text

如果你想要“名字1”的地址,你需要先找到那个元素,然后通过几个级别遍历父级,然后找回你的方式。这是因为您正在寻找的元素是兄弟姐妹,而Capybara并没有真正提供一种简单的方法来找到它们:

find('#potentialResults .col_1 a', :text => 'Name 1').find(:xpath, '../../..').find('.col_4').text