1

チェックボックスのセットを見つけようとしていますが、それらをフィールドセットに配置する必要があります。html は次のようになります (これは gwt アプリなので、大量のものが生成されます。

<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 と page-object gem を使用しています。フィールドセットを見つけようとしていますが、フィールドセット要素がありません。長期的には、各チェックボックスを見つけて、チェックされているかどうかの値を取得し、その名前とともにハッシュに保存する必要があります。

page-object に fieldset メソッドがあったとしても、連続する各チェックボックスを見つけて値とラベルを取得する方法がわかりません。

4

1 に答える 1

6

ジェネリックelementアクセサー メソッドを使用してフィールドセットを宣言できます。フィールドセットの場合、次のようになります。

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}

さておき

Chuck さんのコメントへの返信で、ページ オブジェクト gem を使用せずに同じように書くことができます。

ワティルで:

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
于 2013-03-27T21:08:20.817 に答える