module GemsOverriding

Public Instance Methods

click() click to toggle source
# File lib/page/gems_overriding.rb, line 9
def click
  bridge.execute_script('arguments[0].click();', self)
end
extract_args(args) click to toggle source

need for find_element reconstruction

# File lib/page/gems_overriding.rb, line 34
def extract_args(args)
  case args.size
  when 3
    args
  when 2
    # base timeout for find_element
    args.push(10)
    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.push(10)
    arr
  else
    raise ArgumentError, "wrong number of arguments (#{args.size} for 2)"
  end
end
find_element(*args) click to toggle source

element search with 10 seconds default

# File lib/page/gems_overriding.rb, line 61
def find_element(*args)
  sleep 0.4
  how, what, timeout = extract_args(args)
  by = Selenium::WebDriver::SearchContext::FINDERS[how.to_sym]
  wait = Object::Selenium::WebDriver::Wait.new(timeout: timeout, message: 'element not found')

  wait.until do
    begin
      bridge.find_element_by(by, what.to_s, ref)
    rescue
      false
    end
  end
rescue Selenium::WebDriver::Error::TimeOutError
  puts "element not found #{how} #{what}" if timeout > 3
  nil
end
find_elements(*args) click to toggle source
# File lib/page/gems_overriding.rb, line 79
def find_elements(*args)
  sleep 0.4
  how, what, timeout = extract_args(args)
  by = Selenium::WebDriver::SearchContext::FINDERS[how.to_sym]
  wait = Object::Selenium::WebDriver::Wait.new(timeout: timeout, message: 'element not found')

  wait.until do
    begin
      bridge.find_elements_by(by, what.to_s, ref)
    rescue
      false
    end
  end
rescue Selenium::WebDriver::Error::TimeOutError
  puts "elements not found #{how} #{what}"
  nil
end
select_list_value_set(identifier, value) click to toggle source
# File lib/page/gems_overriding.rb, line 22
def select_list_value_set(identifier, value)
  process_selenium_call(identifier, PageObject::Elements::SelectList, 'select') do |how, what|
    select_list = @browser.find_element(how, what)
    select_list.find_elements(tag_name: 'option').find do |option|
      option.text == value
    end.old_click
  end
end
send_keys(*args) click to toggle source
# File lib/page/gems_overriding.rb, line 13
def send_keys(*args)
  bridge.send_keys_to_element id, Selenium::WebDriver::Keys.encode(args)
# rescue if cant focus
rescue Selenium::WebDriver::Error::UnknownError
  bridge.execute_script('arguments[0].value = arguments[1];', self, Selenium::WebDriver::Keys.encode(args))
end
standard_methods(name, identifier, method, &block) click to toggle source
# File lib/page/gems_overriding.rb, line 100
def standard_methods(name, identifier, method, &block)
  define_method("#{name}_element") do
    return call_block(&block) if block_given?
    platform.send(method, identifier.clone)
  end

  define_method("#{name}?") do
    return call_block(&block).exists? if block_given?
    how, what = PageObject::Elements::Element.selenium_identifier_for(identifier.clone)
    element = browser.find_element(how, what, 3)
    element.try(:displayed?) ? true : false
  end
end