selenium-webdriver 2.53.4 → 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGES +363 -10
- data/LICENSE +1 -1
- data/README.md +2 -3
- data/lib/selenium-webdriver.rb +0 -2
- data/lib/selenium/server.rb +69 -70
- data/lib/selenium/webdriver.rb +32 -23
- data/lib/selenium/webdriver/atoms.rb +18 -0
- data/lib/selenium/webdriver/atoms/getAttribute.js +8 -0
- data/lib/selenium/webdriver/chrome.rb +8 -6
- data/lib/selenium/webdriver/chrome/driver.rb +112 -0
- data/lib/selenium/webdriver/chrome/options.rb +168 -0
- data/lib/selenium/webdriver/chrome/profile.rb +17 -17
- data/lib/selenium/webdriver/chrome/service.rb +22 -89
- data/lib/selenium/webdriver/common.rb +13 -6
- data/lib/selenium/webdriver/common/action_builder.rb +49 -57
- data/lib/selenium/webdriver/common/alert.rb +5 -15
- data/lib/selenium/webdriver/common/bridge_helper.rb +10 -17
- data/lib/selenium/webdriver/common/driver.rb +53 -68
- data/lib/selenium/webdriver/common/driver_extensions/{has_input_devices.rb → has_addons.rb} +13 -23
- data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +4 -8
- data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +4 -7
- data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +0 -4
- data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +0 -4
- data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +1 -5
- data/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +0 -5
- data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +4 -9
- data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +7 -7
- data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +2 -7
- data/lib/selenium/webdriver/common/element.rb +57 -39
- data/lib/selenium/webdriver/common/error.rb +204 -106
- data/lib/selenium/webdriver/common/file_reaper.rb +3 -11
- data/lib/selenium/webdriver/common/html5/local_storage.rb +6 -10
- data/lib/selenium/webdriver/common/html5/session_storage.rb +6 -10
- data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +7 -18
- data/lib/selenium/webdriver/{safari/options.rb → common/interactions/input_device.rb} +20 -31
- data/lib/selenium/webdriver/common/interactions/interaction.rb +50 -0
- data/lib/selenium/webdriver/{safari/browser.rb → common/interactions/interactions.rb} +16 -15
- data/lib/selenium/webdriver/common/interactions/key_actions.rb +143 -0
- data/lib/selenium/webdriver/common/interactions/key_input.rb +62 -0
- data/lib/selenium/webdriver/{android.rb → common/interactions/none_input.rb} +11 -6
- data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +353 -0
- data/lib/selenium/webdriver/common/interactions/pointer_input.rb +132 -0
- data/lib/selenium/webdriver/common/keyboard.rb +7 -14
- data/lib/selenium/webdriver/common/keys.rb +99 -82
- data/lib/selenium/webdriver/common/log_entry.rb +3 -6
- data/lib/selenium/webdriver/common/logger.rb +140 -0
- data/lib/selenium/webdriver/common/logs.rb +2 -6
- data/lib/selenium/webdriver/common/mouse.rb +9 -14
- data/lib/selenium/webdriver/common/navigation.rb +2 -6
- data/lib/selenium/webdriver/common/options.rb +20 -23
- data/lib/selenium/webdriver/common/platform.rb +70 -97
- data/lib/selenium/webdriver/common/port_prober.rb +3 -4
- data/lib/selenium/webdriver/common/profile_helper.rb +6 -11
- data/lib/selenium/webdriver/common/proxy.rb +58 -72
- data/lib/selenium/webdriver/common/search_context.rb +22 -29
- data/lib/selenium/webdriver/common/service.rb +161 -0
- data/lib/selenium/webdriver/common/socket_lock.rb +6 -14
- data/lib/selenium/webdriver/common/socket_poller.rb +5 -12
- data/lib/selenium/webdriver/common/target_locator.rb +11 -15
- data/lib/selenium/webdriver/common/timeouts.rb +4 -8
- data/lib/selenium/webdriver/common/touch_action_builder.rb +2 -6
- data/lib/selenium/webdriver/common/touch_screen.rb +19 -23
- data/lib/selenium/webdriver/common/w3c_action_builder.rb +209 -0
- data/lib/selenium/webdriver/{phantomjs.rb → common/w3c_options.rb} +16 -14
- data/lib/selenium/webdriver/common/wait.rb +6 -13
- data/lib/selenium/webdriver/common/window.rb +48 -17
- data/lib/selenium/webdriver/common/zipper.rb +6 -10
- data/lib/selenium/webdriver/edge.rb +5 -12
- data/lib/selenium/webdriver/edge/bridge.rb +32 -63
- data/lib/selenium/webdriver/edge/driver.rb +73 -0
- data/lib/selenium/webdriver/edge/service.rb +18 -87
- data/lib/selenium/webdriver/firefox.rb +20 -11
- data/lib/selenium/webdriver/firefox/binary.rb +40 -56
- data/lib/selenium/webdriver/firefox/driver.rb +48 -0
- data/lib/selenium/webdriver/firefox/extension.rb +18 -8
- data/lib/selenium/webdriver/firefox/extension/prefs.json +3 -11
- data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
- data/lib/selenium/webdriver/firefox/launcher.rb +13 -22
- data/lib/selenium/webdriver/firefox/legacy/driver.rb +79 -0
- data/lib/selenium/webdriver/{iphone.rb → firefox/marionette/bridge.rb} +25 -6
- data/lib/selenium/webdriver/firefox/marionette/driver.rb +96 -0
- data/lib/selenium/webdriver/firefox/options.rb +149 -0
- data/lib/selenium/webdriver/firefox/profile.rb +46 -46
- data/lib/selenium/webdriver/firefox/profiles_ini.rb +8 -18
- data/lib/selenium/webdriver/firefox/service.rb +23 -83
- data/lib/selenium/webdriver/firefox/util.rb +0 -4
- data/lib/selenium/webdriver/ie.rb +4 -8
- data/lib/selenium/webdriver/ie/driver.rb +90 -0
- data/lib/selenium/webdriver/ie/options.rb +136 -0
- data/lib/selenium/webdriver/ie/service.rb +58 -0
- data/lib/selenium/webdriver/remote.rb +8 -16
- data/lib/selenium/webdriver/remote/bridge.rb +96 -565
- data/lib/selenium/webdriver/remote/capabilities.rb +76 -94
- data/lib/selenium/webdriver/remote/driver.rb +49 -0
- data/lib/selenium/webdriver/remote/http/common.rb +22 -20
- data/lib/selenium/webdriver/remote/http/curb.rb +9 -12
- data/lib/selenium/webdriver/remote/http/default.rb +54 -41
- data/lib/selenium/webdriver/remote/http/persistent.rb +9 -8
- data/lib/selenium/webdriver/remote/oss/bridge.rb +586 -0
- data/lib/selenium/webdriver/remote/oss/commands.rb +221 -0
- data/lib/selenium/webdriver/remote/response.rb +39 -27
- data/lib/selenium/webdriver/remote/server_error.rb +1 -5
- data/lib/selenium/webdriver/remote/w3c/bridge.rb +573 -0
- data/lib/selenium/webdriver/remote/w3c/capabilities.rb +290 -0
- data/lib/selenium/webdriver/remote/w3c/commands.rb +148 -0
- data/lib/selenium/webdriver/safari.rb +20 -29
- data/lib/selenium/webdriver/{firefox/w3c_bridge.rb → safari/driver.rb} +21 -30
- data/lib/selenium/webdriver/safari/service.rb +57 -0
- data/lib/selenium/webdriver/support.rb +1 -2
- data/lib/selenium/webdriver/support/abstract_event_listener.rb +17 -4
- data/lib/selenium/webdriver/support/block_event_listener.rb +1 -5
- data/lib/selenium/webdriver/support/color.rb +57 -42
- data/lib/selenium/webdriver/support/escaper.rb +41 -0
- data/lib/selenium/webdriver/support/event_firing_bridge.rb +36 -40
- data/lib/selenium/webdriver/support/select.rb +33 -86
- data/selenium-webdriver.gemspec +22 -25
- metadata +254 -261
- data/lib/selenium-client.rb +0 -21
- data/lib/selenium/client.rb +0 -57
- data/lib/selenium/client/base.rb +0 -151
- data/lib/selenium/client/driver.rb +0 -29
- data/lib/selenium/client/errors.rb +0 -28
- data/lib/selenium/client/extensions.rb +0 -132
- data/lib/selenium/client/idiomatic.rb +0 -507
- data/lib/selenium/client/javascript_expression_builder.rb +0 -135
- data/lib/selenium/client/javascript_frameworks/jquery.rb +0 -32
- data/lib/selenium/client/javascript_frameworks/prototype.rb +0 -32
- data/lib/selenium/client/legacy_driver.rb +0 -1722
- data/lib/selenium/client/protocol.rb +0 -123
- data/lib/selenium/client/selenium_helper.rb +0 -49
- data/lib/selenium/rake/server_task.rb +0 -176
- data/lib/selenium/webdriver/android/bridge.rb +0 -68
- data/lib/selenium/webdriver/chrome/bridge.rb +0 -139
- data/lib/selenium/webdriver/common/core_ext/base64.rb +0 -28
- data/lib/selenium/webdriver/common/core_ext/dir.rb +0 -61
- data/lib/selenium/webdriver/common/html5/location.rb +0 -19
- data/lib/selenium/webdriver/common/w3c_error.rb +0 -194
- data/lib/selenium/webdriver/edge/legacy_support.rb +0 -117
- data/lib/selenium/webdriver/firefox/bridge.rb +0 -89
- data/lib/selenium/webdriver/ie/bridge.rb +0 -88
- data/lib/selenium/webdriver/ie/server.rb +0 -133
- data/lib/selenium/webdriver/iphone/bridge.rb +0 -64
- data/lib/selenium/webdriver/phantomjs/bridge.rb +0 -78
- data/lib/selenium/webdriver/phantomjs/service.rb +0 -130
- data/lib/selenium/webdriver/remote/commands.rb +0 -211
- data/lib/selenium/webdriver/remote/w3c_bridge.rb +0 -668
- data/lib/selenium/webdriver/remote/w3c_capabilities.rb +0 -236
- data/lib/selenium/webdriver/remote/w3c_commands.rb +0 -132
- data/lib/selenium/webdriver/safari/bridge.rb +0 -135
- data/lib/selenium/webdriver/safari/resources/client.js +0 -7255
- data/lib/selenium/webdriver/safari/server.rb +0 -187
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
#
|
|
3
1
|
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
4
2
|
# or more contributor license agreements. See the NOTICE file
|
|
5
3
|
# distributed with this work for additional information
|
|
@@ -20,107 +18,42 @@
|
|
|
20
18
|
module Selenium
|
|
21
19
|
module WebDriver
|
|
22
20
|
module Chrome
|
|
23
|
-
|
|
24
21
|
#
|
|
25
22
|
# @api private
|
|
26
23
|
#
|
|
27
24
|
|
|
28
|
-
class Service
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
@executable_path ||= (
|
|
37
|
-
path = Platform.find_binary "chromedriver"
|
|
38
|
-
path or raise Error::WebDriverError, MISSING_TEXT
|
|
39
|
-
Platform.assert_executable path
|
|
40
|
-
|
|
41
|
-
path
|
|
42
|
-
)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def self.executable_path=(path)
|
|
46
|
-
Platform.assert_executable path
|
|
47
|
-
@executable_path = path
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def self.default_service(*extra_args)
|
|
51
|
-
new executable_path, DEFAULT_PORT, *extra_args
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def initialize(executable_path, port, *extra_args)
|
|
55
|
-
@executable_path = executable_path
|
|
56
|
-
@host = Platform.localhost
|
|
57
|
-
@port = Integer(port)
|
|
58
|
-
|
|
59
|
-
raise Error::WebDriverError, "invalid port: #{@port}" if @port < 1
|
|
60
|
-
|
|
61
|
-
@extra_args = extra_args
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def start
|
|
65
|
-
Platform.exit_hook { stop } # make sure we don't leave the server running
|
|
66
|
-
|
|
67
|
-
socket_lock.locked do
|
|
68
|
-
find_free_port
|
|
69
|
-
start_process
|
|
70
|
-
connect_until_stable
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def stop
|
|
75
|
-
return if @process.nil? || @process.exited?
|
|
76
|
-
|
|
77
|
-
Net::HTTP.start(@host, @port) do |http|
|
|
78
|
-
http.open_timeout = STOP_TIMEOUT / 2
|
|
79
|
-
http.read_timeout = STOP_TIMEOUT / 2
|
|
80
|
-
|
|
81
|
-
http.get("/shutdown")
|
|
82
|
-
end
|
|
83
|
-
ensure
|
|
84
|
-
stop_process
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
def uri
|
|
88
|
-
URI.parse "http://#{@host}:#{@port}"
|
|
89
|
-
end
|
|
25
|
+
class Service < WebDriver::Service
|
|
26
|
+
DEFAULT_PORT = 9515
|
|
27
|
+
@executable = 'chromedriver'.freeze
|
|
28
|
+
@missing_text = <<-ERROR.gsub(/\n +| {2,}/, ' ').freeze
|
|
29
|
+
Unable to find chromedriver. Please download the server from
|
|
30
|
+
http://chromedriver.storage.googleapis.com/index.html and place it somewhere on your PATH.
|
|
31
|
+
More info at https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver.
|
|
32
|
+
ERROR
|
|
90
33
|
|
|
91
34
|
private
|
|
92
35
|
|
|
93
|
-
def find_free_port
|
|
94
|
-
@port = PortProber.above @port
|
|
95
|
-
end
|
|
96
|
-
|
|
97
36
|
def start_process
|
|
98
|
-
|
|
99
|
-
@process
|
|
100
|
-
|
|
101
|
-
@process.io.inherit! if $DEBUG == true
|
|
37
|
+
@process = build_process(@executable_path, "--port=#{@port}", *@extra_args)
|
|
38
|
+
@process.leader = true unless Platform.windows?
|
|
102
39
|
@process.start
|
|
103
40
|
end
|
|
104
41
|
|
|
105
|
-
def
|
|
106
|
-
@
|
|
107
|
-
rescue ChildProcess::TimeoutError
|
|
108
|
-
@process.stop STOP_TIMEOUT
|
|
42
|
+
def cannot_connect_error_text
|
|
43
|
+
"unable to connect to chromedriver #{@host}:#{@port}"
|
|
109
44
|
end
|
|
110
45
|
|
|
111
|
-
def
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
46
|
+
def extract_service_args(driver_opts)
|
|
47
|
+
driver_args = super
|
|
48
|
+
driver_args << "--log-path=#{driver_opts.delete(:log_path)}" if driver_opts.key?(:log_path)
|
|
49
|
+
driver_args << "--url-base=#{driver_opts.delete(:url_base)}" if driver_opts.key?(:url_base)
|
|
50
|
+
driver_args << "--port-server=#{driver_opts.delete(:port_server)}" if driver_opts.key?(:port_server)
|
|
51
|
+
driver_args << "--whitelisted-ips=#{driver_opts.delete(:whitelisted_ips)}" if driver_opts.key?(:whitelisted_ips)
|
|
52
|
+
driver_args << "--verbose" if driver_opts.key?(:verbose)
|
|
53
|
+
driver_args << "--silent" if driver_opts.key?(:silent)
|
|
54
|
+
driver_args
|
|
117
55
|
end
|
|
118
|
-
|
|
119
|
-
def socket_lock
|
|
120
|
-
@socket_lock ||= SocketLock.new(@port - 1, SOCKET_LOCK_TIMEOUT)
|
|
121
|
-
end
|
|
122
|
-
|
|
123
56
|
end # Service
|
|
124
57
|
end # Chrome
|
|
125
58
|
end # WebDriver
|
|
126
|
-
end #
|
|
59
|
+
end # Selenium
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
#
|
|
3
1
|
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
4
2
|
# or more contributor license agreements. See the NOTICE file
|
|
5
3
|
# distributed with this work for additional information
|
|
@@ -17,14 +15,12 @@
|
|
|
17
15
|
# specific language governing permissions and limitations
|
|
18
16
|
# under the License.
|
|
19
17
|
|
|
20
|
-
require 'selenium/webdriver/common/core_ext/dir'
|
|
21
|
-
require 'selenium/webdriver/common/core_ext/base64'
|
|
22
|
-
require 'selenium/webdriver/common/w3c_error'
|
|
23
18
|
require 'selenium/webdriver/common/error'
|
|
24
19
|
require 'selenium/webdriver/common/platform'
|
|
25
20
|
require 'selenium/webdriver/common/proxy'
|
|
26
21
|
require 'selenium/webdriver/common/log_entry'
|
|
27
22
|
require 'selenium/webdriver/common/file_reaper'
|
|
23
|
+
require 'selenium/webdriver/common/service'
|
|
28
24
|
require 'selenium/webdriver/common/socket_lock'
|
|
29
25
|
require 'selenium/webdriver/common/socket_poller'
|
|
30
26
|
require 'selenium/webdriver/common/port_prober'
|
|
@@ -38,17 +34,21 @@ require 'selenium/webdriver/common/target_locator'
|
|
|
38
34
|
require 'selenium/webdriver/common/navigation'
|
|
39
35
|
require 'selenium/webdriver/common/timeouts'
|
|
40
36
|
require 'selenium/webdriver/common/window'
|
|
37
|
+
require 'selenium/webdriver/common/logger'
|
|
41
38
|
require 'selenium/webdriver/common/logs'
|
|
42
39
|
require 'selenium/webdriver/common/options'
|
|
40
|
+
require 'selenium/webdriver/common/w3c_options'
|
|
43
41
|
require 'selenium/webdriver/common/search_context'
|
|
44
42
|
require 'selenium/webdriver/common/action_builder'
|
|
43
|
+
require 'selenium/webdriver/common/interactions/key_actions'
|
|
44
|
+
require 'selenium/webdriver/common/interactions/pointer_actions'
|
|
45
|
+
require 'selenium/webdriver/common/w3c_action_builder'
|
|
45
46
|
require 'selenium/webdriver/common/touch_action_builder'
|
|
46
47
|
require 'selenium/webdriver/common/html5/shared_web_storage'
|
|
47
48
|
require 'selenium/webdriver/common/html5/local_storage'
|
|
48
49
|
require 'selenium/webdriver/common/html5/session_storage'
|
|
49
50
|
require 'selenium/webdriver/common/driver_extensions/takes_screenshot'
|
|
50
51
|
require 'selenium/webdriver/common/driver_extensions/rotatable'
|
|
51
|
-
require 'selenium/webdriver/common/driver_extensions/has_input_devices'
|
|
52
52
|
require 'selenium/webdriver/common/driver_extensions/has_web_storage'
|
|
53
53
|
require 'selenium/webdriver/common/driver_extensions/has_location'
|
|
54
54
|
require 'selenium/webdriver/common/driver_extensions/has_session_id'
|
|
@@ -56,6 +56,13 @@ require 'selenium/webdriver/common/driver_extensions/has_touch_screen'
|
|
|
56
56
|
require 'selenium/webdriver/common/driver_extensions/has_remote_status'
|
|
57
57
|
require 'selenium/webdriver/common/driver_extensions/has_network_connection'
|
|
58
58
|
require 'selenium/webdriver/common/driver_extensions/uploads_files'
|
|
59
|
+
require 'selenium/webdriver/common/driver_extensions/has_addons'
|
|
60
|
+
require 'selenium/webdriver/common/interactions/interactions'
|
|
61
|
+
require 'selenium/webdriver/common/interactions/input_device'
|
|
62
|
+
require 'selenium/webdriver/common/interactions/interaction'
|
|
63
|
+
require 'selenium/webdriver/common/interactions/none_input'
|
|
64
|
+
require 'selenium/webdriver/common/interactions/key_input'
|
|
65
|
+
require 'selenium/webdriver/common/interactions/pointer_input'
|
|
59
66
|
require 'selenium/webdriver/common/keys'
|
|
60
67
|
require 'selenium/webdriver/common/bridge_helper'
|
|
61
68
|
require 'selenium/webdriver/common/profile_helper'
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
#
|
|
3
1
|
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
4
2
|
# or more contributor license agreements. See the NOTICE file
|
|
5
3
|
# distributed with this work for additional information
|
|
@@ -19,14 +17,11 @@
|
|
|
19
17
|
|
|
20
18
|
module Selenium
|
|
21
19
|
module WebDriver
|
|
22
|
-
|
|
23
20
|
#
|
|
24
21
|
# The ActionBuilder provides the user a way to set up and perform
|
|
25
22
|
# complex user interactions.
|
|
26
23
|
#
|
|
27
|
-
# This class should not be instantiated directly, but is created by
|
|
28
|
-
# Selenium::WebDriver::DriverExtensions::HasInputDevices#action, which
|
|
29
|
-
# is available on Driver instances that support the user interaction API.
|
|
24
|
+
# This class should not be instantiated directly, but is created by Driver#action
|
|
30
25
|
#
|
|
31
26
|
# @example
|
|
32
27
|
#
|
|
@@ -39,18 +34,17 @@ module Selenium
|
|
|
39
34
|
#
|
|
40
35
|
|
|
41
36
|
class ActionBuilder
|
|
42
|
-
|
|
43
37
|
#
|
|
44
38
|
# @api private
|
|
45
39
|
#
|
|
46
40
|
|
|
47
41
|
def initialize(mouse, keyboard)
|
|
48
|
-
@devices
|
|
49
|
-
:
|
|
50
|
-
:
|
|
42
|
+
@devices = {
|
|
43
|
+
mouse: mouse,
|
|
44
|
+
keyboard: keyboard
|
|
51
45
|
}
|
|
52
46
|
|
|
53
|
-
@actions
|
|
47
|
+
@actions = []
|
|
54
48
|
end
|
|
55
49
|
|
|
56
50
|
#
|
|
@@ -70,19 +64,19 @@ module Selenium
|
|
|
70
64
|
#
|
|
71
65
|
# @example Press a key on an element
|
|
72
66
|
#
|
|
73
|
-
# el = driver.find_element(:
|
|
67
|
+
# el = driver.find_element(id: "some_id")
|
|
74
68
|
# driver.action.key_down(el, :shift).perform
|
|
75
69
|
#
|
|
76
|
-
# @
|
|
77
|
-
#
|
|
70
|
+
# @overload key_down(key)
|
|
71
|
+
# @param [:shift, :alt, :control, :command, :meta] key The modifier key to press
|
|
72
|
+
# @overload key_down(element, key)
|
|
73
|
+
# @param [Element] element An optional element to move to first
|
|
74
|
+
# @param [:shift, :alt, :control, :command, :meta] key The modifier key to press
|
|
78
75
|
# @raise [ArgumentError] if the given key is not a modifier
|
|
79
|
-
# @return [ActionBuilder] A self reference
|
|
80
|
-
#
|
|
76
|
+
# @return [ActionBuilder] A self reference
|
|
81
77
|
|
|
82
78
|
def key_down(*args)
|
|
83
|
-
if args.first.
|
|
84
|
-
@actions << [:mouse, :click, [args.shift]]
|
|
85
|
-
end
|
|
79
|
+
@actions << [:mouse, :click, [args.shift]] if args.first.is_a? Element
|
|
86
80
|
|
|
87
81
|
@actions << [:keyboard, :press, args]
|
|
88
82
|
self
|
|
@@ -98,19 +92,20 @@ module Selenium
|
|
|
98
92
|
#
|
|
99
93
|
# @example Release a key from an element
|
|
100
94
|
#
|
|
101
|
-
# el = driver.find_element(:
|
|
95
|
+
# el = driver.find_element(id: "some_id")
|
|
102
96
|
# driver.action.key_up(el, :alt).perform
|
|
103
97
|
#
|
|
104
|
-
# @
|
|
105
|
-
#
|
|
106
|
-
# @
|
|
107
|
-
#
|
|
98
|
+
# @overload key_up(key)
|
|
99
|
+
# @param [:shift, :alt, :control, :command, :meta] key The modifier key to release
|
|
100
|
+
# @overload key_up(element, key)
|
|
101
|
+
# @param [Element] element An optional element to move to first
|
|
102
|
+
# @param [:shift, :alt, :control, :command, :meta] key The modifier key to release
|
|
103
|
+
# @raise [ArgumentError] if the given key is not a modifier
|
|
104
|
+
# @return [ActionBuilder] A self reference
|
|
108
105
|
#
|
|
109
106
|
|
|
110
107
|
def key_up(*args)
|
|
111
|
-
if args.first.
|
|
112
|
-
@actions << [:mouse, :click, [args.shift]]
|
|
113
|
-
end
|
|
108
|
+
@actions << [:mouse, :click, [args.shift]] if args.first.is_a? Element
|
|
114
109
|
|
|
115
110
|
@actions << [:keyboard, :release, args]
|
|
116
111
|
self
|
|
@@ -125,22 +120,23 @@ module Selenium
|
|
|
125
120
|
#
|
|
126
121
|
# @example Send the text "help" to an element
|
|
127
122
|
#
|
|
128
|
-
# el = driver.find_element(:
|
|
123
|
+
# el = driver.find_element(id: "some_id")
|
|
129
124
|
# driver.action.send_keys(el, "help").perform
|
|
130
125
|
#
|
|
131
126
|
# @example Send the text "help" to the currently focused element
|
|
132
127
|
#
|
|
133
128
|
# driver.action.send_keys("help").perform
|
|
134
129
|
#
|
|
135
|
-
# @
|
|
136
|
-
#
|
|
137
|
-
# @
|
|
130
|
+
# @overload send_keys(keys)
|
|
131
|
+
# @param [Array, Symbol, String] keys The key(s) to press and release
|
|
132
|
+
# @overload send_keys(element, keys)
|
|
133
|
+
# @param [Element] element An optional element to move to first
|
|
134
|
+
# @param [Array, Symbol, String] keys The key(s) to press and release
|
|
135
|
+
# @return [ActionBuilder] A self reference
|
|
138
136
|
#
|
|
139
137
|
|
|
140
138
|
def send_keys(*args)
|
|
141
|
-
if args.first.
|
|
142
|
-
@actions << [:mouse, :click, [args.shift]]
|
|
143
|
-
end
|
|
139
|
+
@actions << [:mouse, :click, [args.shift]] if args.first.is_a? Element
|
|
144
140
|
|
|
145
141
|
@actions << [:keyboard, :send_keys, args]
|
|
146
142
|
self
|
|
@@ -154,10 +150,10 @@ module Selenium
|
|
|
154
150
|
#
|
|
155
151
|
# @example Clicking and holding on some element
|
|
156
152
|
#
|
|
157
|
-
# el = driver.find_element(:
|
|
153
|
+
# el = driver.find_element(id: "some_id")
|
|
158
154
|
# driver.action.click_and_hold(el).perform
|
|
159
155
|
#
|
|
160
|
-
# @param [
|
|
156
|
+
# @param [Element] element the element to move to and click.
|
|
161
157
|
# @return [ActionBuilder] A self reference.
|
|
162
158
|
#
|
|
163
159
|
|
|
@@ -171,7 +167,7 @@ module Selenium
|
|
|
171
167
|
#
|
|
172
168
|
# @example Releasing an element after clicking and holding it
|
|
173
169
|
#
|
|
174
|
-
# el = driver.find_element(:
|
|
170
|
+
# el = driver.find_element(id: "some_id")
|
|
175
171
|
# driver.action.click_and_hold(el).release.perform
|
|
176
172
|
#
|
|
177
173
|
# @return [ActionBuilder] A self reference.
|
|
@@ -191,7 +187,7 @@ module Selenium
|
|
|
191
187
|
#
|
|
192
188
|
# @example Clicking on an element
|
|
193
189
|
#
|
|
194
|
-
# el = driver.find_element(:
|
|
190
|
+
# el = driver.find_element(id: "some_id")
|
|
195
191
|
# driver.action.click(el).perform
|
|
196
192
|
#
|
|
197
193
|
# @example Clicking at the current mouse position
|
|
@@ -214,7 +210,7 @@ module Selenium
|
|
|
214
210
|
#
|
|
215
211
|
# @example Double click an element
|
|
216
212
|
#
|
|
217
|
-
# el = driver.find_element(:
|
|
213
|
+
# el = driver.find_element(id: "some_id")
|
|
218
214
|
# driver.action.double_click(el).perform
|
|
219
215
|
#
|
|
220
216
|
# @param [Selenium::WebDriver::Element] element An optional element to move to.
|
|
@@ -235,12 +231,12 @@ module Selenium
|
|
|
235
231
|
#
|
|
236
232
|
# @example Scroll element into view and move the mouse to it
|
|
237
233
|
#
|
|
238
|
-
# el = driver.find_element(:
|
|
234
|
+
# el = driver.find_element(id: "some_id")
|
|
239
235
|
# driver.action.move_to(el).perform
|
|
240
236
|
#
|
|
241
237
|
# @example
|
|
242
238
|
#
|
|
243
|
-
# el = driver.find_element(:
|
|
239
|
+
# el = driver.find_element(id: "some_id")
|
|
244
240
|
# driver.action.move_to(el, 100, 100).perform
|
|
245
241
|
#
|
|
246
242
|
# @param [Selenium::WebDriver::Element] element to move to.
|
|
@@ -252,11 +248,11 @@ module Selenium
|
|
|
252
248
|
#
|
|
253
249
|
|
|
254
250
|
def move_to(element, right_by = nil, down_by = nil)
|
|
255
|
-
if right_by && down_by
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
251
|
+
@actions << if right_by && down_by
|
|
252
|
+
[:mouse, :move_to, [element, Integer(right_by), Integer(down_by)]]
|
|
253
|
+
else
|
|
254
|
+
[:mouse, :move_to, [element]]
|
|
255
|
+
end
|
|
260
256
|
|
|
261
257
|
self
|
|
262
258
|
end
|
|
@@ -281,7 +277,7 @@ module Selenium
|
|
|
281
277
|
#
|
|
282
278
|
|
|
283
279
|
def move_by(right_by, down_by)
|
|
284
|
-
@actions << [:mouse, :move_by, [right_by, down_by]]
|
|
280
|
+
@actions << [:mouse, :move_by, [Integer(right_by), Integer(down_by)]]
|
|
285
281
|
self
|
|
286
282
|
end
|
|
287
283
|
|
|
@@ -291,7 +287,7 @@ module Selenium
|
|
|
291
287
|
#
|
|
292
288
|
# @example Context-click at middle of given element
|
|
293
289
|
#
|
|
294
|
-
# el = driver.find_element(:
|
|
290
|
+
# el = driver.find_element(id: "some_id")
|
|
295
291
|
# driver.action.context_click(el).perform
|
|
296
292
|
#
|
|
297
293
|
# @param [Selenium::WebDriver::Element] element An element to context click.
|
|
@@ -310,8 +306,8 @@ module Selenium
|
|
|
310
306
|
#
|
|
311
307
|
# @example Drag and drop one element onto another
|
|
312
308
|
#
|
|
313
|
-
# el1 = driver.find_element(:
|
|
314
|
-
# el2 = driver.find_element(:
|
|
309
|
+
# el1 = driver.find_element(id: "some_id1")
|
|
310
|
+
# el2 = driver.find_element(id: "some_id2")
|
|
315
311
|
# driver.action.drag_and_drop(el1, el2).perform
|
|
316
312
|
#
|
|
317
313
|
# @param [Selenium::WebDriver::Element] source element to emulate button down at.
|
|
@@ -334,14 +330,12 @@ module Selenium
|
|
|
334
330
|
#
|
|
335
331
|
# @example Drag and drop an element by offset
|
|
336
332
|
#
|
|
337
|
-
# el = driver.find_element(:
|
|
333
|
+
# el = driver.find_element(id: "some_id1")
|
|
338
334
|
# driver.action.drag_and_drop_by(el, 100, 100).perform
|
|
339
335
|
#
|
|
340
336
|
# @param [Selenium::WebDriver::Element] source Element to emulate button down at.
|
|
341
337
|
# @param [Integer] right_by horizontal move offset.
|
|
342
338
|
# @param [Integer] down_by vertical move offset.
|
|
343
|
-
# @param [Selenium::WebDriver::Element] target Element to move to and release the
|
|
344
|
-
# mouse at.
|
|
345
339
|
# @return [ActionBuilder] A self reference.
|
|
346
340
|
#
|
|
347
341
|
|
|
@@ -353,19 +347,17 @@ module Selenium
|
|
|
353
347
|
self
|
|
354
348
|
end
|
|
355
349
|
|
|
356
|
-
|
|
357
350
|
#
|
|
358
351
|
# Executes the actions added to the builder.
|
|
359
352
|
#
|
|
360
353
|
|
|
361
354
|
def perform
|
|
362
|
-
@actions.each
|
|
355
|
+
@actions.each do |receiver, method, args|
|
|
363
356
|
@devices.fetch(receiver).__send__(method, *args)
|
|
364
|
-
|
|
357
|
+
end
|
|
365
358
|
|
|
366
359
|
nil
|
|
367
360
|
end
|
|
368
|
-
|
|
369
361
|
end # ActionBuilder
|
|
370
362
|
end # WebDriver
|
|
371
363
|
end # Selenium
|