Capybara选择器的链接

时间:2015-11-26 05:40:23

标签: ruby-on-rails find cucumber capybara selector

我有以下代码HTML,我不确定是否可以为" find"构建一个选择器。在水豚,以获得我需要的元素。我在铁轨项目中使用水豚来制作黄瓜。 (生成HTML)

<tbody>
  <tr>
    <td>Heine</td>
    <td><a href="/customers/1">Show</a></td>
    <td><a href="/customers/1/edit">Edit</a></td>
    <td><a data-confirm="Are you sure?" rel="nofollow" data-method="delete" href="/customers/1">Destroy</a></td>
  </tr>
  <tr>
    <td>IKEA</td>
    <td><a href="/customers/2">Show</a></td>
    <td><a href="/customers/2/edit">Edit</a></td>
    <td><a data-confirm="Are you sure?" rel="nofollow" data-method="delete" href="/customers/2">Destroy</a></td>
  </tr>
  <tr>
    <td>testcustomer</td>
    <td><a href="/customers/5">Show</a></td>
    <td><a href="/customers/5/edit">Edit</a></td>
    <td><a data-confirm="Are you sure?" rel="nofollow" data-method="delete" href="/customers/5">Destroy</a></td>
  </tr>

我怎样才能找到&#34; href&#34;编辑&#34;对于第一个td包含的行&#34; testcutomer&#34;? 谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用以下内容:

find("td", :text => /\Atestcustomer\z/).first(:xpath,"..").find("a", :text => /\AEdit\z/)

find("td", :text => /\Atestcustomer\z/)为您提供了带有“testcustomer”文字的td,然后您使用td找到了first(:xpath,"..")的父级,然后您找到了带有文字的锚标记“编辑“使用find("a", :text => /\AEdit\z/)

答案 1 :(得分:0)

如果您正在使用racktest驱动程序,那么可以非常清楚地利用nokogiri css选择器可以使用兄弟选择器启动的事实,并且它将在元素的范围内被解释。

find(:css, 'td', text: 'testcustomer').find(:css, '~ td > a', text: 'Edit')

如果使用任何可能不允许的“真实浏览器”驱动程序,因为querySelector的规范不允许它。在这种情况下,最容易使用xpath(注意这也适用于racktest,因此是交叉驱动程序兼容性的首选解决方案)和以下兄弟轴

find(:xpath, ".//td[text()='testcustomer']/following-sibling::td/a[text()='Edit']")