module Capybara::Apparition::Drag

Constants

ATTACH_FILE
DROP_FILE
DROP_STRING
HTML5_DRAG_DROP_SCRIPT
LEGACY_DRAG_CHECK
MOUSEDOWN_TRACKER

Public Instance Methods

drag_by(x, y, delay: 0.1) click to toggle source
# File lib/capybara/apparition/node/drag.rb, line 31
def drag_by(x, y, delay: 0.1)
  pos = visible_center
  raise ::Capybara::Apparition::MouseEventImpossible.new(self, 'args' => ['hover']) if pos.nil?

  other_pos = { x: pos[:x] + x, y: pos[:y] + y }
  raise ::Capybara::Apparition::MouseEventFailed.new(self, 'args' => ['drag', test['selector'], pos]) unless mouse_event_test?(**pos)

  @page.mouse.move_to(**pos).down
  sleep delay
  @page.mouse.move_to(**other_pos)
  sleep delay
  @page.mouse.up
end
drag_to(other, delay: 0.1, html5: nil, drop_modifiers: []) click to toggle source
# File lib/capybara/apparition/node/drag.rb, line 5
def drag_to(other, delay: 0.1, html5: nil, drop_modifiers: [])
  drop_modifiers = Array(drop_modifiers)

  driver.execute_script MOUSEDOWN_TRACKER
  scroll_if_needed
  m = @page.mouse
  m.move_to(**visible_center)
  sleep delay
  m.down
  html5 = !driver.evaluate_script(LEGACY_DRAG_CHECK, self) if html5.nil?
  if html5
    driver.execute_script HTML5_DRAG_DROP_SCRIPT, self, other, delay, drop_modifiers
    m.up(**other.visible_center)
  else
    @page.keyboard.with_keys(drop_modifiers) do
      other.scroll_if_needed
      sleep delay
      m.move_to(**other.visible_center)
      sleep delay
    ensure
      m.up
      sleep delay
    end
  end
end
drop(*args) click to toggle source
# File lib/capybara/apparition/node/drag.rb, line 45
def drop(*args)
  if args[0].is_a? String
    input = evaluate_on ATTACH_FILE
    tag_name = input['description'].split(/[.#]/, 2)[0]
    input = Capybara::Apparition::Node.new(driver, @page, input['objectId'], tag_name: tag_name)
    input.set(args)
    evaluate_on DROP_FILE, objectId: input.id
  else
    items = args.each_with_object([]) do |arg, arr|
      arg.each_with_object(arr) do |(type, data), arr_|
        arr_ << { type: type, data: data }
      end
    end
    evaluate_on DROP_STRING, value: items
  end
end