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