lib/watir/radio_set.rb in watir-6.10.0 vs lib/watir/radio_set.rb in watir-6.10.1
- old
+ new
@@ -1,231 +1,231 @@
-module Watir
- class RadioSet
- extend Forwardable
- include Watir::Exception
- include Enumerable
-
- delegate [:exists?, :present?, :visible?, :browser] => :source
-
- attr_reader :source, :frame
-
- def initialize(query_scope, selector)
- unless selector.kind_of? Hash
- raise ArgumentError, "invalid argument: #{selector.inspect}"
- end
-
- @source = Radio.new(query_scope, selector)
- @frame = @source.parent(tag_name: :form)
- end
-
- #
- # Yields each Radio associated with this set.
- #
- # @example
- # radio_set = browser.radio_set
- # radio_set.each do |radio|
- # puts radio.text
- # end
- #
- # @yieldparam [Watir::RadioSet] element iterate through the radio buttons.
- #
-
- def each(&block)
- radios.each(&block)
- end
-
- #
- # Get the n'th radio button in this set
- #
- # @return Watir::Radio
- #
-
- def [](idx)
- radios[idx]
- end
-
- #
- # @return Watir::Radio
- #
-
- def radio(opt = {})
- n = name
- if !n.empty? && (!opt[:name] || opt[:name] == n)
- frame.radio(opt.merge name: n)
- elsif n.empty?
- return source
- else
- raise Watir::Exception::UnknownObjectException, "#{opt[:name]} does not match name of RadioSet: #{n}"
- end
-
- end
-
- #
- # @return Watir::RadioCollection
- #
-
- def radios(opt = {})
- n = name
- if !n.empty? && (!opt[:name] || opt[:name] == n)
- element_call(:wait_for_present) { frame.radios(opt.merge name: n) }
- elsif n.empty?
- Watir::RadioCollection.new(frame, element: source.wd)
- else
- raise Watir::Exception::UnknownObjectException, "#{opt[:name]} does not match name of RadioSet: #{n}"
- end
- end
-
- #
- # Returns true if any radio buttons in the set are enabled.
- #
- # @return [Boolean]
- #
-
- def enabled?
- any?(&:enabled?)
- end
-
- #
- # Returns true if all radio buttons in the set are disabled.
- #
- # @return [Boolean]
- #
-
- def disabled?
- !enabled?
- end
-
- #
- # Returns the name attribute for the set.
- #
- # @return [String]
- #
-
- def name
- @name ||= source.name
- end
-
- #
- # If RadioSet exists, this always returns 'radio'.
- #
- # @return [String]
- #
-
- def type
- source.send :assert_exists
- 'radio'
- end
-
- #
- # Returns true if the radio set has one or more radio buttons where label matches the given value.
- #
- # @param [String, Regexp] str_or_rx
- # @return [Boolean]
- #
-
- def include?(str_or_rx)
- radio(label: str_or_rx).exist?
- end
-
- #
- # Select the radio button whose value or label matches the given string.
- #
- # @param [String, Regexp] str_or_rx
- # @raise [Watir::Exception::UnknownObjectException] if the Radio does not exist.
- # @return [String] The value or text of the radio selected.
- #
-
- def select(str_or_rx)
- found_by_value = radio(value: str_or_rx)
- found_by_text = radio(label: str_or_rx)
-
- if found_by_value.exist?
- found_by_value.click unless found_by_value.selected?
- return found_by_value.value
- elsif found_by_text.exist?
- found_by_text.click unless found_by_text.selected?
- return found_by_text.text
- else
- raise UnknownObjectException, "Unable to locate radio matching #{str_or_rx.inspect}"
- end
- end
-
- #
- # Returns true if any of the radio button label matches the given value.
- #
- # @param [String, Regexp] str_or_rx
- # @raise [Watir::Exception::UnknownObjectException] if the options do not exist
- # @return [Boolean]
- #
-
- def selected?(str_or_rx)
- found = frame.radio(label: str_or_rx)
-
- return found.selected? if found.exist?
- raise UnknownObjectException, "Unable to locate radio matching #{str_or_rx.inspect}"
- end
-
- #
- # Returns the value of the selected radio button in the set.
- # Returns nil if no radio is selected.
- #
- # @return [String, nil]
- #
-
- def value
- sel = selected
- sel && sel.value
- end
-
- #
- # Returns the text of the selected radio button in the set.
- # Returns nil if no option is selected.
- #
- # @return [String, nil]
- #
-
- def text
- sel = selected
- sel && sel.text
- end
-
- #
- # Returns the selected Radio element.
- # Returns nil if no radio button is selected.
- #
- # @return [Watir::Radio, nil]
- #
-
- def selected
- find(&:selected?)
- end
-
- #
- # Returns true if two elements are equal.
- #
- # @example
- # browser.radio_set(id: 'new_user_newsletter_yes') == browser.radio_set(id: 'new_user_newsletter_no')
- # #=> true
- #
-
- def ==(other)
- return false unless other.kind_of?(self.class)
- radios == other.radios
- end
- alias_method :eql?, :==
-
- private
-
- def element_call(*args, &blk)
- source.send :element_call, *args, &blk
- end
- end # RadioSet
-
- module Container
- def radio_set(*args)
- RadioSet.new(self, extract_selector(args).merge(tag_name: "input", type: "radio"))
- end
-
- Watir.tag_to_class[:radio_set] = RadioSet
- end # Container
-
-end # Watir
+module Watir
+ class RadioSet
+ extend Forwardable
+ include Watir::Exception
+ include Enumerable
+
+ delegate [:exists?, :present?, :visible?, :browser] => :source
+
+ attr_reader :source, :frame
+
+ def initialize(query_scope, selector)
+ unless selector.kind_of? Hash
+ raise ArgumentError, "invalid argument: #{selector.inspect}"
+ end
+
+ @source = Radio.new(query_scope, selector)
+ @frame = @source.parent(tag_name: :form)
+ end
+
+ #
+ # Yields each Radio associated with this set.
+ #
+ # @example
+ # radio_set = browser.radio_set
+ # radio_set.each do |radio|
+ # puts radio.text
+ # end
+ #
+ # @yieldparam [Watir::RadioSet] element iterate through the radio buttons.
+ #
+
+ def each(&block)
+ radios.each(&block)
+ end
+
+ #
+ # Get the n'th radio button in this set
+ #
+ # @return Watir::Radio
+ #
+
+ def [](idx)
+ radios[idx]
+ end
+
+ #
+ # @return Watir::Radio
+ #
+
+ def radio(opt = {})
+ n = name
+ if !n.empty? && (!opt[:name] || opt[:name] == n)
+ frame.radio(opt.merge name: n)
+ elsif n.empty?
+ return source
+ else
+ raise Watir::Exception::UnknownObjectException, "#{opt[:name]} does not match name of RadioSet: #{n}"
+ end
+
+ end
+
+ #
+ # @return Watir::RadioCollection
+ #
+
+ def radios(opt = {})
+ n = name
+ if !n.empty? && (!opt[:name] || opt[:name] == n)
+ element_call(:wait_for_present) { frame.radios(opt.merge name: n) }
+ elsif n.empty?
+ Watir::RadioCollection.new(frame, element: source.wd)
+ else
+ raise Watir::Exception::UnknownObjectException, "#{opt[:name]} does not match name of RadioSet: #{n}"
+ end
+ end
+
+ #
+ # Returns true if any radio buttons in the set are enabled.
+ #
+ # @return [Boolean]
+ #
+
+ def enabled?
+ any?(&:enabled?)
+ end
+
+ #
+ # Returns true if all radio buttons in the set are disabled.
+ #
+ # @return [Boolean]
+ #
+
+ def disabled?
+ !enabled?
+ end
+
+ #
+ # Returns the name attribute for the set.
+ #
+ # @return [String]
+ #
+
+ def name
+ @name ||= source.name
+ end
+
+ #
+ # If RadioSet exists, this always returns 'radio'.
+ #
+ # @return [String]
+ #
+
+ def type
+ source.send :assert_exists
+ 'radio'
+ end
+
+ #
+ # Returns true if the radio set has one or more radio buttons where label matches the given value.
+ #
+ # @param [String, Regexp] str_or_rx
+ # @return [Boolean]
+ #
+
+ def include?(str_or_rx)
+ radio(label: str_or_rx).exist?
+ end
+
+ #
+ # Select the radio button whose value or label matches the given string.
+ #
+ # @param [String, Regexp] str_or_rx
+ # @raise [Watir::Exception::UnknownObjectException] if the Radio does not exist.
+ # @return [String] The value or text of the radio selected.
+ #
+
+ def select(str_or_rx)
+ found_by_value = radio(value: str_or_rx)
+ found_by_text = radio(label: str_or_rx)
+
+ if found_by_value.exist?
+ found_by_value.click unless found_by_value.selected?
+ return found_by_value.value
+ elsif found_by_text.exist?
+ found_by_text.click unless found_by_text.selected?
+ return found_by_text.text
+ else
+ raise UnknownObjectException, "Unable to locate radio matching #{str_or_rx.inspect}"
+ end
+ end
+
+ #
+ # Returns true if any of the radio button label matches the given value.
+ #
+ # @param [String, Regexp] str_or_rx
+ # @raise [Watir::Exception::UnknownObjectException] if the options do not exist
+ # @return [Boolean]
+ #
+
+ def selected?(str_or_rx)
+ found = frame.radio(label: str_or_rx)
+
+ return found.selected? if found.exist?
+ raise UnknownObjectException, "Unable to locate radio matching #{str_or_rx.inspect}"
+ end
+
+ #
+ # Returns the value of the selected radio button in the set.
+ # Returns nil if no radio is selected.
+ #
+ # @return [String, nil]
+ #
+
+ def value
+ sel = selected
+ sel && sel.value
+ end
+
+ #
+ # Returns the text of the selected radio button in the set.
+ # Returns nil if no option is selected.
+ #
+ # @return [String, nil]
+ #
+
+ def text
+ sel = selected
+ sel && sel.text
+ end
+
+ #
+ # Returns the selected Radio element.
+ # Returns nil if no radio button is selected.
+ #
+ # @return [Watir::Radio, nil]
+ #
+
+ def selected
+ find(&:selected?)
+ end
+
+ #
+ # Returns true if two elements are equal.
+ #
+ # @example
+ # browser.radio_set(id: 'new_user_newsletter_yes') == browser.radio_set(id: 'new_user_newsletter_no')
+ # #=> true
+ #
+
+ def ==(other)
+ return false unless other.kind_of?(self.class)
+ radios == other.radios
+ end
+ alias_method :eql?, :==
+
+ private
+
+ def element_call(*args, &blk)
+ source.send :element_call, *args, &blk
+ end
+ end # RadioSet
+
+ module Container
+ def radio_set(*args)
+ RadioSet.new(self, extract_selector(args).merge(tag_name: "input", type: "radio"))
+ end
+
+ Watir.tag_to_class[:radio_set] = RadioSet
+ end # Container
+
+end # Watir