Switching FieldLabeledLocator to use elements

This commit is contained in:
Bryan Helmkamp 2008-11-30 14:59:33 -05:00
parent 28bd5f2533
commit e72bba29c7
4 changed files with 22 additions and 15 deletions

View File

@ -21,5 +21,17 @@ module Webrat
Webrat::XML.attribute(@element, "for") Webrat::XML.attribute(@element, "for")
end end
def field
Field.load(@session, field_element)
end
def field_element
if for_id.blank?
Webrat::XML.xpath_at(@element, *Field.xpath_search)
else
Webrat::XML.css_search(@session.dom, "#" + for_id).first
end
end
end end
end end

View File

@ -21,7 +21,7 @@ module Webrat
end end
def area_elements def area_elements
Webrat::XML.css_search(@scope.dom, "area") Webrat::XML.xpath_search(@scope.dom, Area.xpath_search)
end end
def error_message def error_message

View File

@ -7,22 +7,9 @@ module Webrat
class FieldLabeledLocator < Locator class FieldLabeledLocator < Locator
def locate def locate
# TODO - Convert to using elements
@scope.send(:forms).detect_mapped do |form|
possible_fields = form.send(:fields_by_type, @field_types)
matching_fields = possible_fields.select do |possible_field|
possible_field.send(:labels).any? do |label|
text(label.element) =~ /^\W*#{Regexp.escape(@value.to_s)}\b/i
end
end
matching_fields.min { |a, b| a.label_text.length <=> b.label_text.length } matching_fields.min { |a, b| a.label_text.length <=> b.label_text.length }
end end
# matching_fields.min { |a, b| a.label_text.length <=> b.label_text.length }
end
def matching_fields def matching_fields
matching_labels.map(&:field).compact.uniq matching_labels.map(&:field).compact.uniq
end end
@ -39,6 +26,10 @@ module Webrat
end end
end end
def label_elements
Webrat::XML.xpath_search(@scope.dom, Label.xpath_search)
end
def error_message def error_message
"Could not find field labeled #{@value.inspect}" "Could not find field labeled #{@value.inspect}"
end end

View File

@ -200,6 +200,10 @@ module Webrat
@_page_scope ||= Scope.from_page(self, response, response_body) @_page_scope ||= Scope.from_page(self, response, response_body)
end end
def dom
page_scope.dom
end
def_delegators :current_scope, :fill_in, :fills_in def_delegators :current_scope, :fill_in, :fills_in
def_delegators :current_scope, :set_hidden_field def_delegators :current_scope, :set_hidden_field
def_delegators :current_scope, :submit_form def_delegators :current_scope, :submit_form