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