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 和页面对象 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方法将返回一个以名称(我假设您的意思是标签)和复选框值(真或假)为键的散列。

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 回答