我正在尝试找到一组复选框,但我需要在字段集中找到它们。 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方法,我也不知道如何找到每个连续的复选框并获取值和标签。
答案 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