我一直在寻找答案。 我需要创建自动测试,其中一个必须从表中删除一行。这一行看起来像这样:
<tr>
<td colspan="1" class="name" rowspan="1">
<a href="/mpromoter/whitelist/edit/3">Capybara852</a>
</td>
<td colspan="1" class="description" rowspan="1">This whitelist is added by Capybara automated test</td>
<td colspan="1" class="whitelistType" rowspan="1">Internal</td>
<td colspan="1" class="status" rowspan="1">None</td>
<td colspan="1" class="active" rowspan="1">false</td>
<td colspan="1" class="msCount" rowspan="1">40</td>
<td colspan="1" class="modifiedBy" rowspan="1">admin</td>
<td colspan="1" class="modifiedOn" rowspan="1">26.06.2014 11:08</td>
<td colspan="1" class="selected" rowspan="1">
<input class="check" onclick="disableButton('delete', false);" id="check_0" name="check_0" type="checkbox">
<img id="check_0_icon" class="t-error-icon" alt="" src="/mpromoter/assets/4716a6a0a357181/core/spacer.gif" style="display: none;">
</td>
</tr>
我需要选中此复选框,该复选框位于Capybara所在的同一行。我无法选中此复选框,因为每次运行这些自动测试时,其ID可能不同。
这是一个href部分。
我可以选择带有ID的复选框。但我想从包含单词capybara :)的行中选择包含未知id的复选框。
我尝试了很多不同的东西,但没有任何作用......
所以我要求一些帮助。我需要做什么,有什么建议吗?
答案 0 :(得分:2)
我不确定我是否理解你在问什么,但...... 因此,您可以从表中获取每一行,然后检查该行是否具有值&#39; Capybara&#39;
$('#stack tbody tr').find('td a').text().match(new RegExp('Capybara'))
如果确实如此,请从同一行按复选框执行操作。 我需要做很多事情才能给你一个水豚版本,但你只需将它翻译成水豚。
希望有所帮助。
答案 1 :(得分:1)
我建议您使用的方法是:
find
你想要的行(即包含&#34; Capybara&#34;)within
方法查找该行中的复选框例如,您可以找到包含单词&#34; Capybara&#34;任何地方使用:
find('tr', :text => 'Capybara')
您可以在find
中使用这些相同的within
选项。当找到within
块内的复选框时,Capybara将仅搜索该行。所以,如果你不在乎&#34; Capybara&#34;显示在行中,你可以这样做:
within('tr', :text => 'Capybara') do
find('input.check').set(true)
end
如果需要,您可以将within
选项更改为更具体。例如,您可能只想要第一列(具有类&#34; name&#34;)的行包含&#34; Capybara&#34; (而不是&#34; Capybara&#34;只是在描述栏中)。这可以通过以下方式完成:
within(:xpath, '//tr[td[@class="name" and contains(., "Capybara")]]') do
find('input.check').set(true)
end