Class: Ferrum::Mouse
- Inherits:
-
Object
- Object
- Ferrum::Mouse
- Defined in:
- lib/ferrum/mouse.rb
Constant Summary collapse
- CLICK_WAIT =
ENV.fetch("FERRUM_CLICK_WAIT", 0.1).to_f
- VALID_BUTTONS =
%w[none left middle right back forward].freeze
Instance Method Summary collapse
- #click(x:, y:, delay: 0, wait: CLICK_WAIT, **options) ⇒ Object
- #down(**options) ⇒ Object
-
#initialize(page) ⇒ Mouse
constructor
A new instance of Mouse.
- #move(x:, y:, steps: 1) ⇒ Object
- #scroll_to(top, left) ⇒ Object
- #up(**options) ⇒ Object
Constructor Details
#initialize(page) ⇒ Mouse
Returns a new instance of Mouse.
8 9 10 11 |
# File 'lib/ferrum/mouse.rb', line 8 def initialize(page) @page = page @x = @y = 0 end |
Instance Method Details
#click(x:, y:, delay: 0, wait: CLICK_WAIT, **options) ⇒ Object
17 18 19 20 21 22 23 24 25 |
# File 'lib/ferrum/mouse.rb', line 17 def click(x:, y:, delay: 0, wait: CLICK_WAIT, **) move(x: x, y: y) down(**) sleep(delay) # Potential wait because if some network event is triggered then we have # to wait until it's over and frame is loaded or failed to load. up(wait: wait, **) self end |
#down(**options) ⇒ Object
27 28 29 |
# File 'lib/ferrum/mouse.rb', line 27 def down(**) tap { mouse_event(type: "mousePressed", **) } end |
#move(x:, y:, steps: 1) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/ferrum/mouse.rb', line 35 def move(x:, y:, steps: 1) from_x, from_y = @x, @y @x, @y = x, y steps.times do |i| new_x = from_x + (@x - from_x) * ((i + 1) / steps.to_f) new_y = from_y + (@y - from_y) * ((i + 1) / steps.to_f) @page.command("Input.dispatchMouseEvent", slowmoable: true, type: "mouseMoved", x: new_x.to_i, y: new_y.to_i) end self end |
#scroll_to(top, left) ⇒ Object
13 14 15 |
# File 'lib/ferrum/mouse.rb', line 13 def scroll_to(top, left) tap { @page.execute("window.scrollTo(#{top}, #{left})") } end |
#up(**options) ⇒ Object
31 32 33 |
# File 'lib/ferrum/mouse.rb', line 31 def up(**) tap { mouse_event(type: "mouseReleased", **) } end |