Sha256: 805dc7fd00381711750f82f121ff268e819910c560ff01b5168070a8c486f560

Contents?: true

Size: 1.7 KB

Versions: 44

Compression:

Stored size: 1.7 KB

Contents

require "webrat/core_extensions/detect_mapped"
require "webrat/core/locators/locator"

module Webrat
  module Locators
    
    class SelectOptionLocator < Locator # :nodoc:
  
      def initialize(session, dom, option_text, id_or_name_or_label)
        @session = session
        @dom = dom
        @option_text = option_text
        @id_or_name_or_label = id_or_name_or_label
      end
      
      def locate
        if @id_or_name_or_label
          field = FieldLocator.new(@session, @dom, @id_or_name_or_label, SelectField).locate!
          
          field.options.detect do |o|
            if @option_text.is_a?(Regexp)
              Webrat::XML.inner_html(o.element) =~ @option_text
            else
              Webrat::XML.inner_html(o.element) == @option_text.to_s
            end
          end
        else
          option_element = option_elements.detect do |o|
            if @option_text.is_a?(Regexp)
              Webrat::XML.inner_html(o) =~ @option_text
            else
              Webrat::XML.inner_html(o) == @option_text.to_s
            end
          end
          
          SelectOption.load(@session, option_element)
        end
      end
      
      def option_elements
        Webrat::XML.xpath_search(@dom, *SelectOption.xpath_search)
      end
      
      def error_message
        if @id_or_name_or_label
          "The '#{@option_text}' option was not found in the #{@id_or_name_or_label.inspect} select box"
        else
          "Could not find option #{@option_text.inspect}"
        end
      end
  
    end
    
    def select_option(option_text, id_or_name_or_label = nil) #:nodoc:
      SelectOptionLocator.new(@session, dom, option_text, id_or_name_or_label).locate!
    end
    
  end
end

Version data entries

44 entries across 44 versions & 14 rubygems

Version Path
adva-0.3.2 test/webrat/lib/webrat/core/locators/select_option_locator.rb
adva-0.3.1 test/webrat/lib/webrat/core/locators/select_option_locator.rb
adva-0.3.0 test/webrat/lib/webrat/core/locators/select_option_locator.rb
adva-0.2.4 test/webrat/lib/webrat/core/locators/select_option_locator.rb
adva-0.2.3 test/webrat/lib/webrat/core/locators/select_option_locator.rb
adva-0.2.2 test/webrat/lib/webrat/core/locators/select_option_locator.rb
adva-0.2.1 test/webrat/lib/webrat/core/locators/select_option_locator.rb
adva-0.2.0 test/webrat/lib/webrat/core/locators/select_option_locator.rb
adva-0.1.4 test/webrat/lib/webrat/core/locators/select_option_locator.rb
adva-0.1.3 test/webrat/lib/webrat/core/locators/select_option_locator.rb
adva-0.1.2 test/webrat/lib/webrat/core/locators/select_option_locator.rb
adva-0.1.1 test/webrat/lib/webrat/core/locators/select_option_locator.rb
adva-0.1.0 test/webrat/lib/webrat/core/locators/select_option_locator.rb
adva-0.0.1 test/webrat/lib/webrat/core/locators/select_option_locator.rb
aslakhellesoy-webrat-0.3.2.1 lib/webrat/core/locators/select_option_locator.rb
aslakhellesoy-webrat-0.3.2.2 lib/webrat/core/locators/select_option_locator.rb
auxesis-webrat-0.4.1 lib/webrat/core/locators/select_option_locator.rb
benschwarz-webrat-0.3.2.1 lib/webrat/core/locators/select_option_locator.rb
brynary-webrat-0.3.2.1 lib/webrat/core/locators/select_option_locator.rb
brynary-webrat-0.3.2.2 lib/webrat/core/locators/select_option_locator.rb