SelectOption is a Webrat::Element too

This commit is contained in:
Bryan Helmkamp 2008-11-30 01:26:07 -05:00
parent c84e5335b5
commit 830b459482
4 changed files with 41 additions and 31 deletions

View File

@ -7,7 +7,7 @@ require "webrat/core/scope"
require "webrat/core/elements/link" require "webrat/core/elements/link"
require "webrat/core/elements/area" require "webrat/core/elements/area"
require "webrat/core/elements/label" require "webrat/core/elements/label"
require "webrat/core/select_option" require "webrat/core/elements/select_option"
require "webrat/core/session" require "webrat/core/session"
require "webrat/core/methods" require "webrat/core/methods"
require "webrat/core/matchers" require "webrat/core/matchers"

View File

@ -369,7 +369,7 @@ module Webrat
end end
def options def options
option_elements.map { |oe| SelectOption.new(self, oe) } option_elements.map { |oe| SelectOption.new(@session, oe) }
end end
def option_elements def option_elements

View File

@ -0,0 +1,39 @@
require "webrat/core/elements/element"
module Webrat
class SelectOption < Element #:nodoc:
def matches_text?(text)
if text.is_a?(Regexp)
Webrat::XML.inner_html(@element) =~ text
else
Webrat::XML.inner_html(@element) == text.to_s
end
end
def choose
select.raise_error_if_disabled
select.set(value)
end
protected
def select
@session.element_to_webrat_element(select_element)
end
def select_element
parent = @element.parent
while parent.respond_to?(:parent)
return parent if parent.name == 'select'
parent = parent.parent
end
end
def value
Webrat::XML.attribute(@element, "value") || Webrat::XML.inner_html(@element)
end
end
end

View File

@ -1,29 +0,0 @@
module Webrat
class SelectOption #:nodoc:
def initialize(select, element)
@select = select
@element = element
end
def matches_text?(text)
if text.is_a?(Regexp)
Webrat::XML.inner_html(@element) =~ text
else
Webrat::XML.inner_html(@element) == text.to_s
end
end
def choose
@select.raise_error_if_disabled
@select.set(value)
end
protected
def value
Webrat::XML.attribute(@element, "value") || Webrat::XML.inner_html(@element)
end
end
end