我有以下代码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;? 谢谢。
答案 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']")