使用页面对象查找字段集

时间:2013-03-27 20:10:01

标签: ruby watir fieldset pageobjects page-object-gem

我正在尝试找到一组复选框,但我需要在字段集中找到它们。 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。我正在尝试找到fieldset,但是没有fieldset元素。从长远来看,我需要做的是找到每个复选框,获取是否检查它的值,并将其与其名称一起存储在哈希中。

即使page-object有一个fieldset方法,我也不知道如何找到每个连续的复选框并获取值和标签。

1 个答案:

答案 0 :(得分: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的情况下以相同的方式编写。

在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