无法根据文本选中/取消选中特定复选框

时间:2015-08-15 10:05:28

标签: ruby checkbox selenium-webdriver cucumber watir

我正在尝试根据以下要求检查和取消选中复选框:

  1. 如果存在特定文本,我需要选中它的复选框。
  2. 如果其他一些文字设置了复选框,我需要取消选中该复选框

    <table class="adm">
      <tbody>
       <tr class="action">
        <td width="20px">
         <input class="checkbox" type="checkbox" name="checkbox1">
        </td>
        <td>
         <span class="label">
          <script id="start"></script>
          Action1
          <script id="end"></script>
         </span>
    
         <p class="desc">
         <script id="start"></script>
         Description1
         <script id="end"></script>
         </p>
        </td>
       </tr>
      </tbody>
    </table>
    
    <table class="adm">
      <tbody>
       <tr class="action">
        <td width="20px">
         <input class="checkbox" type="checkbox" name="checkbox2">
        </td>
        <td>
         <span class="label">
          <script id="start"></script>
          Action2
          <script id="end"></script>
         </span>
    
         <p class="desc">
         <script id="start"></script>
         Description2
         <script id="end"></script>
         </p>
        </td>
       </tr>
      </tbody>
    </table>
    
  3. 并且有5个复选框类,如上所述。 所以,我需要检查:

    • 查找“Action1” - &gt;检查它的复选框。
    • 如果“Action2”设置了复选框 - &gt;取消选中该复选框。

    因此,需要根据要求设置复选框,并取消选中所有其他复选框。

    我发现这是检查/取消选中所有复选框:

    checkbox_class = /checkbox/
      @browser.checkboxes(:class => checkbox_class).each do |checkbox|
        if(!checkbox.checked?)
          p "checkbox not set"
          checkbox.set
        else
          p "checkbox set"
          checkbox.clear
        end
      end
    

    但是根据我的要求,我无法满足这个要求,试过这个:

    checkbox_class = /checkbox/
    action_class = /label/
    
      @browser.checkboxes(:class => checkbox_class).each do |checkbox|
        if(!@browser.span(:class=>action_class,:text=>"some_action").checkbox.checked?)
          p "checkbox not set"
          checkbox.set
        else
          p "checkbox set"
          checkbox.clear
        end
      end
    

2 个答案:

答案 0 :(得分:0)

鉴于标签和复选框是由它们的共享祖先(表元素)相关联的,我认为迭代表格更容易。在每个表格中,您可以检查标签文本,然后决定是否设置/清除复选框。

以下将设置“Action1”复选框并取消选中其余部分:

action = 'Action1'
browser.tables(:class => 'adm').each do |table|

  # Check if the label matches the action we want to check
  value = (table.span(:class => 'label').text == action)

  # Set the checkbox if the label matches, otherwise clears
  table.checkbox.set(value)
end

答案 1 :(得分:0)

我认为以下内容可行:

action_trs = @ browser.trs(class:'action')

action_trs.each do |action_tr|
  if action_tr.td(index: 1).span.text == ‘some_action’
    action_tr.checkbox.set unless action_tr.checkbox.set?
  else
    action_tr.checkbox.clear
  end
end
祝你好运! :)