2015-08-15 8 views
1

Я пытаюсь проверить и снимите флажок флажков на основе следующих требований:Невозможно проверить/снимите флажок конкретной основе текста

  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> 
    

И Есть 5 Чекбокс классы, как один из приведенных выше. Итак, мне нужно проверить:

  • Найти "Action1" -> check it's checkbox.
  • Если «Action2» установлен, установите флажок -> снимите этот флажок.

Поэтому необходимо установить флажок в соответствии с требованиями и снять отметку со всех остальных флажков.

Я нашел это проверить/снимите все флажки:

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([email protected](:class=>action_class,:text=>"some_action").checkbox.checked?) 
     p "checkbox not set" 
     checkbox.set 
    else 
     p "checkbox set" 
     checkbox.clear 
    end 
    end 

ответ

0

Проблема заключается в том, что ваш цикл и ваше условие не синхронизировано. @browser.span(:class=>action_class,:text=>"some_action").checkbox - это то же самое, что и: @browser.span(:class=>action_class,:text=>"some_action").checkbox(:index => 0) Это относится к тому же элементу на странице, независимо от того, установлен ли флажок в вашем цикле.

Возможно, было бы проще снять все флажки с кодом, который вы нашли, а затем установить флажок с нужным действием и просто установить этот флажок.

0

Учитывая, что этикетки и флажки связаны их общим предком, элементом таблицы, я думаю, что легче перебирать таблицы. Внутри каждой таблицы вы можете проверить текст этикетки, а затем решить, установить или снять флажок.

Далее будет установить "ДЕЙСТВИЙ1" флажок и снимите остальные:

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 
0

Я думаю, что следующий будет работать:

action_trs = @ browser.trs (класс: 'действие')

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 

Удачи вам! :)

Смежные вопросы