Ruby
Capybara

capybara で、テーブルの特定の行のボタンをクリックする方法

やりたいこと

capybara でテーブルの特定の行のボタンをクリックしたいです。
:arrow_down: HTML のイメージです。

<table>
  <tr>
    <th>名前</th>
    <th></th>
  </tr>
  <tr>
    <td>Alice</td>
    <td>
      <button>詳細</button>
    </td>
  </tr>
  <tr>
    <td>Bob</td>
    <td>
      <button>詳細</button>
    </td>
  </tr>
</table>

実現方法

テーブルの行毎にカスタムデータ属性を追加し、特定の DOM を取得出来るようにします。

<table>
  <tr>
    <th>名前</th>
    <th></th>
  </tr>
  <tr data-user-name='Alice'>
    <td>Alice</td>
    <td>
      <button>詳細</button>
    </td>
  </tr>
  <tr data-user-name='Bob'>
    <td>Bob</td>
    <td>
      <button>詳細</button>
    </td>
  </tr>
</table>

:arrow_down_small: Bob の詳細ボタンをクリックする例です。

within('tr[data-user-name=\'Bob\']') do
  click_on '詳細'
end