module Capybara::Selenium::Node::Html5Drag

Constants

ATTACH_FILE
DROP_FILE
DROP_STRING
HTML5_DRAG_DROP_SCRIPT
LEGACY_DRAG_CHECK
MOUSEDOWN_TRACKER

Public Instance Methods

drag_to(element, delay: 0.05) click to toggle source

Implement methods to emulate HTML5 drag and drop

# File lib/capybara/selenium/extensions/html5_drag.rb, line 7
def drag_to(element, delay: 0.05)
  driver.execute_script MOUSEDOWN_TRACKER
  scroll_if_needed { browser_action.click_and_hold(native).perform }
  if driver.evaluate_script(LEGACY_DRAG_CHECK, self)
    perform_legacy_drag(element)
  else
    perform_html5_drag(element, delay)
  end
end

Private Instance Methods

html5_drop(*args) click to toggle source
# File lib/capybara/selenium/extensions/html5_drag.rb, line 28
def html5_drop(*args)
  if args[0].is_a? String
    input = driver.evaluate_script ATTACH_FILE
    input.set_file(args)
    driver.execute_script DROP_FILE, self, input
  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
    driver.execute_script DROP_STRING, items, self
  end
end
perform_html5_drag(element, delay) click to toggle source
# File lib/capybara/selenium/extensions/html5_drag.rb, line 23
def perform_html5_drag(element, delay)
  driver.evaluate_async_script HTML5_DRAG_DROP_SCRIPT, self, element, delay * 1000
  browser_action.release.perform
end
perform_legacy_drag(element) click to toggle source
# File lib/capybara/selenium/extensions/html5_drag.rb, line 19
def perform_legacy_drag(element)
  element.scroll_if_needed { browser_action.move_to(element.native).release.perform }
end