2013-03-27 3 views
1

Я пытаюсь найти набор флажков, но мне нужно найти их в наборе полей. HTML, это так (это GWT приложение, так что создается тонны материала:.Поиск набора полей с использованием page-object

<div id="UpdateUserView-RolesColumn"> 
    <fieldset style=""> 
    <legend>Primary Role</legend> 
    <select class="gwt-ListBox"> 
     <option value="ROLE_GENERAL_USER">ROLE_GENERAL_USER</option> 
     <option value="ROLE_ADMIN">ROLE_ADMIN</option> 
    </select> 
    </fieldset> 
    <fieldset style="" class="createUser-otherRolesFieldset"> 
    <legend>Other Roles/Permissions</legend> 
    <div style="overflow: auto; position: relative; zoom: 1; height: 250px;"> 
     <div style="position: relative; zoom: 1;"> 
     <div> 
      <span class="gwt-CheckBox"> 
      <input type="checkbox" value="on" id="gwt-uid-760" tabindex="0" checked=""> 
      <label for="gwt-uid-760">ROLE_BLAH1_USER</label> 
      </span> 
      <span class="gwt-CheckBox"> 
      <input type="checkbox" value="on" id="gwt-uid-761" tabindex="0" checked=""> 
      <label for="gwt-uid-761">ROLE_BLAH2_USER</label> 
      </span> 
      <span class="gwt-CheckBox"> 
      <input type="checkbox" value="on" id="gwt-uid-762" tabindex="0" checked=""> 
      <label for="gwt-uid-762">ROLE_BLAH3_USER</label> 
      </span> 
      <span class="gwt-CheckBox"> 
      <input type="checkbox" value="on" id="gwt-uid-763" tabindex="0" checked=""> 
      <label for="gwt-uid-763">ROLE_BLAH4_USER</label> 
      </span> 
      <span class="gwt-CheckBox"> 
      <input type="checkbox" value="on" id="gwt-uid-764" tabindex="0" checked=""> 
      <label for="gwt-uid-764">ROLE_BLAH5_USER</label> 
      </span> 
     </div> 
     </div> 
    </div> 
    </fieldset> 
</div> 

Я использую Watir и страница-объект камень Я пытаюсь найти Fieldset, но есть нет элемента fieldset. Что мне нужно сделать в долгосрочной перспективе, это найти каждый флажок, получить значение его проверки или нет и сохранить его в хеше вместе с его именем.

Даже если объект страницы был метод fieldset Я не знаю, как я могу найти каждый последовательный флажок и получить значение и метку.

ответ

6

Вы можете объявить набор полей с помощью общего element способ доступа. Для вашего FIELDSET было бы:

element(:other_roles, :fieldset, :class => 'createUser-otherRolesFieldset') 

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

class MyPage 
    include PageObject 

    element(:other_roles, :fieldset, :class => 'createUser-otherRolesFieldset') 

    def other_role_values() 
     other_roles = {} 
     other_roles_element.span_elements.each do |span| 
      other_roles[span.label_element.text] = span.checkbox_element.checked? 
     end 
     return other_roles 
    end 
end 

Как вы можете видеть, метод other_role_values возвращает хэш, который заклиненный по имени (который я предполагаю, что вы имеете в виду этикетки) со значением флажок (true или false).

page = MyPage.new(browser) 
p page.other_role_values 
#=> {"ROLE_BLAH1_USER"=>true, "ROLE_BLAH2_USER"=>true, "ROLE_BLAH3_USER"=>true, "ROLE_BLAH4_USER"=>true, "ROLE_BLAH5_USER"=>true} 

Помимо

В ответ на комментарий Чака, то же самое можно записать так же без страницы объекта драгоценного камня.

В Watir:

other_roles_element = browser.fieldset(:class => 'createUser-otherRolesFieldset') 
other_roles = {} 
other_roles_element.spans.each do |span| 
    other_roles[span.label.text] = span.checkbox.checked? 
end 
p other_roles 

В Selenium-WebDriver:

other_roles_element = browser.find_element(:css => 'fieldset.createUser-otherRolesFieldset') 
other_roles = {} 
other_roles_element.find_elements(:tag_name => 'span').each do |span| 
    other_roles[span.find_element(:tag_name => 'label').text] = span.find_element(:tag_name => 'input').selected? 
end 
p other_roles 
+0

ах, которая работала прекрасно. Я полностью забыл о методе доступа к элементу. Спасибо! – snowe

+0

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

+0

@ChuckvanderLinden, чистые решения watir и selenium в основном одинаковы (см. Обновленный ответ). Решение селена немного более многословно, но не более, чем обычно. –

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