Class: Selenium::WebDriver::ActionBuilder
- Inherits:
-
Object
- Object
- Selenium::WebDriver::ActionBuilder
- Defined in:
- lib/selenium/webdriver/common/action_builder.rb
Overview
The ActionBuilder provides the user a way to set up and perform complex user interactions.
This class should not be instantiated directly, but is created by Selenium::WebDriver::DriverExtensions::HasInputDevices#action, which is available on Driver instances that support the user interaction API.
Direct Known Subclasses
Instance Method Summary collapse
-
#click(element = nil) ⇒ ActionBuilder
Clicks in the middle of the given element.
-
#click_and_hold(element = nil) ⇒ ActionBuilder
Clicks (without releasing) in the middle of the given element.
-
#context_click(element = nil) ⇒ ActionBuilder
Performs a context-click at middle of the given element.
-
#double_click(element = nil) ⇒ ActionBuilder
Performs a double-click at middle of the given element.
-
#drag_and_drop(source, target) ⇒ ActionBuilder
A convenience method that performs click-and-hold at the location of the source element, moves to the location of the target element, then releases the mouse.
-
#drag_and_drop_by(source, right_by, down_by) ⇒ ActionBuilder
A convenience method that performs click-and-hold at the location of the source element, moves by a given offset, then releases the mouse.
-
#initialize(mouse, keyboard) ⇒ ActionBuilder
constructor
private
A new instance of ActionBuilder.
-
#key_down(*args) ⇒ ActionBuilder
Performs a modifier key press.
-
#key_up(*args) ⇒ ActionBuilder
Performs a modifier key release.
-
#move_by(right_by, down_by) ⇒ ActionBuilder
Moves the mouse from its current position (or 0,0) by the given offset.
-
#move_to(element, right_by = nil, down_by = nil) ⇒ ActionBuilder
Moves the mouse to the middle of the given element.
-
#perform ⇒ Object
Executes the actions added to the builder.
-
#release(element = nil) ⇒ ActionBuilder
Releases the depressed left mouse button at the current mouse location.
-
#send_keys(*args) ⇒ ActionBuilder
Sends keys to the active element.
Constructor Details
#initialize(mouse, keyboard) ⇒ ActionBuilder
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of ActionBuilder.
28 29 30 31 32 33 34 35 |
# File 'lib/selenium/webdriver/common/action_builder.rb', line 28 def initialize(mouse, keyboard) @devices = { :mouse => mouse, :keyboard => keyboard } @actions = [] end |
Instance Method Details
#click(element = nil) ⇒ ActionBuilder
Clicks in the middle of the given element. Equivalent to:
driver.action.move_to(element).click
When no element is passed, the current mouse position will be clicked.
186 187 188 189 |
# File 'lib/selenium/webdriver/common/action_builder.rb', line 186 def click(element = nil) @actions << [:mouse, :click, [element]] self end |
#click_and_hold(element = nil) ⇒ ActionBuilder
Clicks (without releasing) in the middle of the given element. This is equivalent to:
driver.action.move_to(element).click_and_hold
145 146 147 148 |
# File 'lib/selenium/webdriver/common/action_builder.rb', line 145 def click_and_hold(element = nil) @actions << [:mouse, :down, [element]] self end |
#context_click(element = nil) ⇒ ActionBuilder
Performs a context-click at middle of the given element. First performs a move_to to the location of the element.
282 283 284 285 |
# File 'lib/selenium/webdriver/common/action_builder.rb', line 282 def context_click(element = nil) @actions << [:mouse, :context_click, [element]] self end |
#double_click(element = nil) ⇒ ActionBuilder
Performs a double-click at middle of the given element. Equivalent to:
driver.action.move_to(element).double_click
205 206 207 208 |
# File 'lib/selenium/webdriver/common/action_builder.rb', line 205 def double_click(element = nil) @actions << [:mouse, :double_click, [element]] self end |
#drag_and_drop(source, target) ⇒ ActionBuilder
A convenience method that performs click-and-hold at the location of the source element, moves to the location of the target element, then releases the mouse.
304 305 306 307 308 309 310 |
# File 'lib/selenium/webdriver/common/action_builder.rb', line 304 def drag_and_drop(source, target) click_and_hold source move_to target release target self end |
#drag_and_drop_by(source, right_by, down_by) ⇒ ActionBuilder
A convenience method that performs click-and-hold at the location of the source element, moves by a given offset, then releases the mouse.
329 330 331 332 333 334 335 |
# File 'lib/selenium/webdriver/common/action_builder.rb', line 329 def drag_and_drop_by(source, right_by, down_by) click_and_hold source move_by right_by, down_by release self end |
#key_down(*args) ⇒ ActionBuilder
Performs a modifier key press. Does not release the modifier key - subsequent interactions may assume it’s kept pressed. Note that the modifier key is never released implicitly - either #key_up(key) or #send_keys(:null) must be called to release the modifier.
Equivalent to:
driver.action.click(element).send_keys(key)
# or
driver.action.click.send_keys(key)
63 64 65 66 67 68 69 70 |
# File 'lib/selenium/webdriver/common/action_builder.rb', line 63 def key_down(*args) if args.first.kind_of? Element @actions << [:mouse, :click, [args.shift]] end @actions << [:keyboard, :press, args] self end |
#key_up(*args) ⇒ ActionBuilder
Performs a modifier key release. Releasing a non-depressed modifier key will yield undefined behaviour.
91 92 93 94 95 96 97 98 |
# File 'lib/selenium/webdriver/common/action_builder.rb', line 91 def key_up(*args) if args.first.kind_of? Element @actions << [:mouse, :click, [args.shift]] end @actions << [:keyboard, :release, args] self end |
#move_by(right_by, down_by) ⇒ ActionBuilder
Moves the mouse from its current position (or 0,0) by the given offset. If the coordinates provided are outside the viewport (the mouse will end up outside the browser window) then the viewport is scrolled to match.
264 265 266 267 |
# File 'lib/selenium/webdriver/common/action_builder.rb', line 264 def move_by(right_by, down_by) @actions << [:mouse, :move_by, [right_by, down_by]] self end |
#move_to(element, right_by = nil, down_by = nil) ⇒ ActionBuilder
Moves the mouse to the middle of the given element. The element is scrolled into view and its location is calculated using getBoundingClientRect. Then the mouse is moved to optional offset coordinates from the element.
Note that when using offsets, both coordinates need to be passed.
235 236 237 238 239 240 241 242 243 |
# File 'lib/selenium/webdriver/common/action_builder.rb', line 235 def move_to(element, right_by = nil, down_by = nil) if right_by && down_by @actions << [:mouse, :move_to, [element, right_by, down_by]] else @actions << [:mouse, :move_to, [element]] end self end |
#perform ⇒ Object
Executes the actions added to the builder.
342 343 344 345 346 347 348 |
# File 'lib/selenium/webdriver/common/action_builder.rb', line 342 def perform @actions.each { |receiver, method, args| @devices.fetch(receiver).__send__(method, *args) } nil end |
#release(element = nil) ⇒ ActionBuilder
Releases the depressed left mouse button at the current mouse location.
161 162 163 164 |
# File 'lib/selenium/webdriver/common/action_builder.rb', line 161 def release(element = nil) @actions << [:mouse, :up, [element]] self end |
#send_keys(*args) ⇒ ActionBuilder
Sends keys to the active element. This differs from calling Element#send_keys(keys) on the active element in two ways:
-
The modifier keys included in this call are not released.
-
There is no attempt to re-focus the element - so send_keys(:tab) for switching elements should work.
121 122 123 124 125 126 127 128 |
# File 'lib/selenium/webdriver/common/action_builder.rb', line 121 def send_keys(*args) if args.first.kind_of? Element @actions << [:mouse, :click, [args.shift]] end @actions << [:keyboard, :send_keys, args] self end |