Sha256: cad970a8b2ede1fc03c6fdeb458f0a54d585cf7eacd01ffe7224080b891b3c57

Contents?: true

Size: 1.71 KB

Versions: 16

Compression:

Stored size: 1.71 KB

Contents

module Watir
  class TextFieldLocator < ElementLocator

    NON_TEXT_TYPES     = %w[file radio checkbox submit reset image button hidden url datetime date month week time datetime-local range color]
    # TODO: better way of finding input text fields?
    NEGATIVE_TYPE_EXPR = NON_TEXT_TYPES.map { |t| "@type!=#{t.inspect}" }.join(" and ")

    def locate_all
      find_all_by_multiple
    end

    private

    def build_xpath(selectors)
      return if selectors.values.any? { |e| e.kind_of? Regexp }

      selectors.delete(:tag_name)

      @building = :textarea
      textarea_attr_exp = attribute_expression(selectors)

      @building = :input
      input_attr_exp = attribute_expression(selectors)

      xpath = ".//input[(not(@type) or (#{NEGATIVE_TYPE_EXPR}))"
      xpath << " and #{input_attr_exp}" unless input_attr_exp.empty?
      xpath << "] "
      xpath << "| .//textarea"
      xpath << "[#{textarea_attr_exp}]" unless textarea_attr_exp.empty?

      p :build_xpath => xpath if $DEBUG

      xpath
    end

    def lhs_for(key)
      if @building == :input && key == :text
        "@value"
      elsif @building == :textarea && key == :value
        "text()"
      else
        super
      end
    end

    def matches_selector?(element, rx_selector)
      rx_selector = rx_selector.dup

      [:text, :value, :label].each do |key|
        if rx_selector.has_key?(key)
          correct_key = element.tag_name == 'input' ? :value : :text
          rx_selector[correct_key] = rx_selector.delete(key)
        end
      end

      super
    end

    VALID_TEXT_FIELD_TAGS = %w[input textarea]

    def tag_name_matches?(element, _)
      VALID_TEXT_FIELD_TAGS.include?(element.tag_name)
    end
  end # TextFieldLocator
end # Watir

Version data entries

16 entries across 16 versions & 2 rubygems

Version Path
watir-webdriver-0.2.0 lib/watir-webdriver/locators/text_field_locator.rb
watir-webdriver-0.2.0.dev2 lib/watir-webdriver/locators/text_field_locator.rb
watir-webdriver-0.2.0.dev lib/watir-webdriver/locators/text_field_locator.rb
watir-webdriver-0.1.9 lib/watir-webdriver/locators/text_field_locator.rb
watir-webdriver-0.1.8 lib/watir-webdriver/locators/text_field_locator.rb
watir-webdriver-0.1.7 lib/watir-webdriver/locators/text_field_locator.rb
watir-webdriver-0.1.6 lib/watir-webdriver/locators/text_field_locator.rb
watir-webdriver-0.1.5 lib/watir-webdriver/locators/text_field_locator.rb
watir-webdriver-0.1.4 lib/watir-webdriver/locators/text_field_locator.rb
watir-webdriver-0.1.3 lib/watir-webdriver/locators/text_field_locator.rb
watir-webdriver-0.1.2 lib/watir-webdriver/locators/text_field_locator.rb
ayanko-watir-webdriver-0.1.1.1 lib/watir-webdriver/locators/text_field_locator.rb
watir-webdriver-0.1.1 lib/watir-webdriver/locators/text_field_locator.rb
watir-webdriver-0.1.0 lib/watir-webdriver/locators/text_field_locator.rb
watir-webdriver-0.0.9 lib/watir-webdriver/locators/text_field_locator.rb
watir-webdriver-0.0.8 lib/watir-webdriver/locators/text_field_locator.rb