从包含单词Capybara的行中选择复选框

时间:2014-06-26 11:08:26

标签: ruby checkbox html-table capybara

我一直在寻找答案。 我需要创建自动测试,其中一个必须从表中删除一行。这一行看起来像这样:

Html看起来像这样:

<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可能不同。

我在问,如何选择没有自己的ID或名称或类的复选框,我需要选择位于包含Capybara的同一行的复选框

这是一个href部分。

我可以选择带有ID的复选框。但我想从包含单词capybara :)的行中选择包含未知id的复选框。

我尝试了很多不同的东西,但没有任何作用......

所以我要求一些帮助。我需要做什么,有什么建议吗?

2 个答案:

答案 0 :(得分:2)

我不确定我是否理解你在问什么,但...... 因此,您可以从表中获取每一行,然后检查该行是否具有值&#39; Capybara&#39;

$('#stack tbody tr').find('td a').text().match(new RegExp('Capybara'))

如果确实如此,请从同一行按复选框执行操作。 我需要做很多事情才能给你一个水豚版本,但你只需将它翻译成水豚。

希望有所帮助。

答案 1 :(得分:1)

我建议您使用的方法是:

  1. 确定如何find你想要的行(即包含&#34; Capybara&#34;)
  2. 使用within方法查找该行中的复选框
  3. 例如,您可以找到包含单词&#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