Sha256: f3a2aaacb56e1f1ddee5d99305484010c3f5bb45617e7a464173d14bb6610336

Contents?: true

Size: 1.63 KB

Versions: 1

Compression:

Stored size: 1.63 KB

Contents

module Capybara::Poltergeist
  class Node < Capybara::Driver::Node
    alias id native

    def browser
      driver.browser
    end

    def command(name, *args)
      browser.send(name, id, *args)
    rescue BrowserError => error
      if error.text == 'Poltergeist.ObsoleteNode'
        raise ObsoleteNode.new(self)
      else
        raise error
      end
    end

    def find(selector)
      browser.find(selector, id).map { |node| self.class.new(driver, node) }
    end

    def text
      command :text
    end

    def [](name)
      command :attribute, name
    end

    def value
      command :value
    end

    def set(value)
      if tag_name == 'input'
        type = self[:type]

        if type == 'radio'
          click
        elsif type == 'checkbox'
          if value && !checked? || !value && checked?
            click
          end
        elsif type == 'file'
          command :select_file, value
        else
          command :set, value
        end
      elsif tag_name == 'textarea'
        command :set, value
      end
    end

    def select_option
      command :select, true
    end

    def unselect_option
      command(:select, false) or
      raise(Capybara::UnselectNotAllowed, "Cannot unselect option from single select box.")
    end

    def tag_name
      @tag_name ||= command(:tag_name)
    end

    def visible?
      command :visible?
    end

    def checked?
      self[:checked]
    end

    def selected?
      self[:selected]
    end

    def click
      command :click
    end

    def drag_to(other)
      command :drag, other.id
    end

    def trigger(event)
      command :trigger, event
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
poltergeist-0.1.0 lib/capybara/poltergeist/node.rb