module Selenium::WebDriver::SearchContext

Constants

FINDERS

@api private

Public Instance Methods

find_element(*args) click to toggle source

Find the first element matching the given arguments.

When using #find_element with :xpath, be aware that webdriver follows standard conventions: a search prefixed with “//” will search the entire document, not just the children of this current node. Use “.//” to limit your search to the children of the receiving Element.

@param [:class, :class_name, :css, :id, :link_text, :link, :partial_link_text, :name, :tag_name, :xpath] how @param [String] what @return [Element]

@raise [Error::NoSuchElementError] if the element doesn't exist

# File lib/selenium/webdriver/common/search_context.rb, line 35
def find_element(*args)
  how, what = extract_args(args)

  unless by = FINDERS[how.to_sym]
    raise ArgumentError, "cannot find element by #{how.inspect}"
  end

  bridge.find_element_by by, what.to_s, ref
end
find_elements(*args) click to toggle source

Find all elements matching the given arguments

@see #find_element

@param [:class, :class_name, :css, :id, :link_text, :link, :partial_link_text, :name, :tag_name, :xpath] how @param [String] what @return [Array<Element>]

# File lib/selenium/webdriver/common/search_context.rb, line 55
def find_elements(*args)
  how, what = extract_args(args)

  unless by = FINDERS[how.to_sym]
    raise ArgumentError, "cannot find elements by #{how.inspect}"
  end

  bridge.find_elements_by by, what.to_s, ref
end

Private Instance Methods

extract_args(args) click to toggle source
# File lib/selenium/webdriver/common/search_context.rb, line 67
def extract_args(args)
  case args.size
  when 2
    args
  when 1
    arg = args.first

    unless arg.respond_to?(:shift)
      raise ArgumentError, "expected #{arg.inspect}:#{arg.class} to respond to #shift"
    end

    # this will be a single-entry hash, so use #shift over #first or #[]
    arr = arg.dup.shift
    unless arr.size == 2
      raise ArgumentError, "expected #{arr.inspect} to have 2 elements"
    end

    arr
  else
    raise ArgumentError, "wrong number of arguments (#{args.size} for 2)"
  end
end