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
|
|
@@ -19,14 +17,12 @@
|
|
|
19
17
|
|
|
20
18
|
module Selenium
|
|
21
19
|
module WebDriver
|
|
22
|
-
|
|
23
20
|
#
|
|
24
21
|
# @api private
|
|
25
22
|
# @see ActionBuilder
|
|
26
23
|
#
|
|
27
24
|
|
|
28
25
|
class Mouse
|
|
29
|
-
|
|
30
26
|
def initialize(bridge)
|
|
31
27
|
@bridge = bridge
|
|
32
28
|
end
|
|
@@ -38,22 +34,22 @@ module Selenium
|
|
|
38
34
|
|
|
39
35
|
def double_click(element = nil)
|
|
40
36
|
move_if_needed element
|
|
41
|
-
@bridge.
|
|
37
|
+
@bridge.double_click
|
|
42
38
|
end
|
|
43
39
|
|
|
44
40
|
def context_click(element = nil)
|
|
45
41
|
move_if_needed element
|
|
46
|
-
@bridge.
|
|
42
|
+
@bridge.context_click
|
|
47
43
|
end
|
|
48
44
|
|
|
49
45
|
def down(element = nil)
|
|
50
46
|
move_if_needed element
|
|
51
|
-
@bridge.
|
|
47
|
+
@bridge.mouse_down
|
|
52
48
|
end
|
|
53
49
|
|
|
54
50
|
def up(element = nil)
|
|
55
51
|
move_if_needed element
|
|
56
|
-
@bridge.
|
|
52
|
+
@bridge.mouse_up
|
|
57
53
|
end
|
|
58
54
|
|
|
59
55
|
#
|
|
@@ -68,11 +64,11 @@ module Selenium
|
|
|
68
64
|
def move_to(element, right_by = nil, down_by = nil)
|
|
69
65
|
assert_element element
|
|
70
66
|
|
|
71
|
-
@bridge.
|
|
67
|
+
@bridge.mouse_move_to element.ref, right_by, down_by
|
|
72
68
|
end
|
|
73
69
|
|
|
74
70
|
def move_by(right_by, down_by)
|
|
75
|
-
@bridge.
|
|
71
|
+
@bridge.mouse_move_to nil, Integer(right_by), Integer(down_by)
|
|
76
72
|
end
|
|
77
73
|
|
|
78
74
|
private
|
|
@@ -82,10 +78,9 @@ module Selenium
|
|
|
82
78
|
end
|
|
83
79
|
|
|
84
80
|
def assert_element(element)
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
end
|
|
81
|
+
return if element.is_a? Element
|
|
82
|
+
raise TypeError, "expected #{Element}, got #{element.inspect}:#{element.class}"
|
|
88
83
|
end
|
|
89
84
|
end # Mouse
|
|
90
85
|
end # WebDriver
|
|
91
|
-
end
|
|
86
|
+
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
|
|
@@ -20,7 +18,6 @@
|
|
|
20
18
|
module Selenium
|
|
21
19
|
module WebDriver
|
|
22
20
|
class Navigation
|
|
23
|
-
|
|
24
21
|
def initialize(bridge)
|
|
25
22
|
@bridge = bridge
|
|
26
23
|
end
|
|
@@ -38,7 +35,7 @@ module Selenium
|
|
|
38
35
|
#
|
|
39
36
|
|
|
40
37
|
def back
|
|
41
|
-
@bridge.
|
|
38
|
+
@bridge.go_back
|
|
42
39
|
end
|
|
43
40
|
|
|
44
41
|
#
|
|
@@ -46,7 +43,7 @@ module Selenium
|
|
|
46
43
|
#
|
|
47
44
|
|
|
48
45
|
def forward
|
|
49
|
-
@bridge.
|
|
46
|
+
@bridge.go_forward
|
|
50
47
|
end
|
|
51
48
|
|
|
52
49
|
#
|
|
@@ -56,7 +53,6 @@ module Selenium
|
|
|
56
53
|
def refresh
|
|
57
54
|
@bridge.refresh
|
|
58
55
|
end
|
|
59
|
-
|
|
60
56
|
end # Navigation
|
|
61
57
|
end # WebDriver
|
|
62
58
|
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
|
|
@@ -20,7 +18,6 @@
|
|
|
20
18
|
module Selenium
|
|
21
19
|
module WebDriver
|
|
22
20
|
class Options
|
|
23
|
-
|
|
24
21
|
#
|
|
25
22
|
# @api private
|
|
26
23
|
#
|
|
@@ -43,17 +40,16 @@ module Selenium
|
|
|
43
40
|
#
|
|
44
41
|
|
|
45
42
|
def add_cookie(opts = {})
|
|
46
|
-
raise ArgumentError,
|
|
47
|
-
raise ArgumentError,
|
|
43
|
+
raise ArgumentError, 'name is required' unless opts[:name]
|
|
44
|
+
raise ArgumentError, 'value is required' unless opts[:value]
|
|
48
45
|
|
|
49
|
-
opts[:path] ||=
|
|
46
|
+
opts[:path] ||= '/'
|
|
50
47
|
opts[:secure] ||= false
|
|
51
48
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
end
|
|
49
|
+
obj = opts.delete(:expires)
|
|
50
|
+
opts[:expiry] = seconds_from(obj).to_i if obj
|
|
55
51
|
|
|
56
|
-
@bridge.
|
|
52
|
+
@bridge.add_cookie opts
|
|
57
53
|
end
|
|
58
54
|
|
|
59
55
|
#
|
|
@@ -74,7 +70,7 @@ module Selenium
|
|
|
74
70
|
#
|
|
75
71
|
|
|
76
72
|
def delete_cookie(name)
|
|
77
|
-
@bridge.
|
|
73
|
+
@bridge.delete_cookie name
|
|
78
74
|
end
|
|
79
75
|
|
|
80
76
|
#
|
|
@@ -82,7 +78,7 @@ module Selenium
|
|
|
82
78
|
#
|
|
83
79
|
|
|
84
80
|
def delete_all_cookies
|
|
85
|
-
@bridge.
|
|
81
|
+
@bridge.delete_all_cookies
|
|
86
82
|
end
|
|
87
83
|
|
|
88
84
|
#
|
|
@@ -92,16 +88,7 @@ module Selenium
|
|
|
92
88
|
#
|
|
93
89
|
|
|
94
90
|
def all_cookies
|
|
95
|
-
@bridge.
|
|
96
|
-
{
|
|
97
|
-
:name => cookie["name"],
|
|
98
|
-
:value => cookie["value"],
|
|
99
|
-
:path => cookie["path"],
|
|
100
|
-
:domain => cookie["domain"] && strip_port(cookie["domain"]),
|
|
101
|
-
:expires => cookie["expiry"] && datetime_at(cookie['expiry']),
|
|
102
|
-
:secure => cookie["secure"]
|
|
103
|
-
}
|
|
104
|
-
end
|
|
91
|
+
@bridge.cookies.map { |cookie| convert_cookie(cookie) }
|
|
105
92
|
end
|
|
106
93
|
|
|
107
94
|
def timeouts
|
|
@@ -146,9 +133,19 @@ module Selenium
|
|
|
146
133
|
end
|
|
147
134
|
|
|
148
135
|
def strip_port(str)
|
|
149
|
-
str.split(
|
|
136
|
+
str.split(':', 2).first
|
|
150
137
|
end
|
|
151
138
|
|
|
139
|
+
def convert_cookie(cookie)
|
|
140
|
+
{
|
|
141
|
+
name: cookie['name'],
|
|
142
|
+
value: cookie['value'],
|
|
143
|
+
path: cookie['path'],
|
|
144
|
+
domain: cookie['domain'] && strip_port(cookie['domain']),
|
|
145
|
+
expires: cookie['expiry'] && datetime_at(cookie['expiry']),
|
|
146
|
+
secure: cookie['secure']
|
|
147
|
+
}
|
|
148
|
+
end
|
|
152
149
|
end # Options
|
|
153
150
|
end # WebDriver
|
|
154
151
|
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
|
|
@@ -22,10 +20,8 @@ require 'socket'
|
|
|
22
20
|
|
|
23
21
|
module Selenium
|
|
24
22
|
module WebDriver
|
|
25
|
-
|
|
26
23
|
# @api private
|
|
27
24
|
module Platform
|
|
28
|
-
|
|
29
25
|
module_function
|
|
30
26
|
|
|
31
27
|
def home
|
|
@@ -34,53 +30,40 @@ module Selenium
|
|
|
34
30
|
end
|
|
35
31
|
|
|
36
32
|
def engine
|
|
37
|
-
@engine ||= (
|
|
38
|
-
if defined? RUBY_ENGINE
|
|
39
|
-
RUBY_ENGINE.to_sym
|
|
40
|
-
else
|
|
41
|
-
:ruby
|
|
42
|
-
end
|
|
43
|
-
)
|
|
33
|
+
@engine ||= defined?(RUBY_ENGINE) ? RUBY_ENGINE.to_sym : :ruby
|
|
44
34
|
end
|
|
45
35
|
|
|
46
36
|
def os
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
end
|
|
61
|
-
)
|
|
37
|
+
host_os = RbConfig::CONFIG['host_os']
|
|
38
|
+
@os ||= case host_os
|
|
39
|
+
when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
|
|
40
|
+
:windows
|
|
41
|
+
when /darwin|mac os/
|
|
42
|
+
:macosx
|
|
43
|
+
when /linux/
|
|
44
|
+
:linux
|
|
45
|
+
when /solaris|bsd/
|
|
46
|
+
:unix
|
|
47
|
+
else
|
|
48
|
+
raise Error::WebDriverError, "unknown os: #{host_os.inspect}"
|
|
49
|
+
end
|
|
62
50
|
end
|
|
63
51
|
|
|
64
52
|
def ci
|
|
65
|
-
if ENV['TRAVIS']
|
|
66
|
-
|
|
67
|
-
elsif ENV['JENKINS']
|
|
68
|
-
:jenkins
|
|
69
|
-
end
|
|
53
|
+
return :travis if ENV['TRAVIS']
|
|
54
|
+
:jenkins if ENV['JENKINS']
|
|
70
55
|
end
|
|
71
56
|
|
|
72
57
|
def bitsize
|
|
73
|
-
@bitsize ||= (
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
end
|
|
83
|
-
)
|
|
58
|
+
@bitsize ||= if defined?(FFI::Platform::ADDRESS_SIZE)
|
|
59
|
+
FFI::Platform::ADDRESS_SIZE
|
|
60
|
+
elsif defined?(FFI)
|
|
61
|
+
FFI.type_size(:pointer) == 4 ? 32 : 64
|
|
62
|
+
elsif jruby?
|
|
63
|
+
Integer(ENV_JAVA['sun.arch.data.model'])
|
|
64
|
+
else
|
|
65
|
+
1.size == 4 ? 32 : 64
|
|
66
|
+
end
|
|
84
67
|
end
|
|
85
68
|
|
|
86
69
|
def jruby?
|
|
@@ -91,12 +74,8 @@ module Selenium
|
|
|
91
74
|
engine == :ironruby
|
|
92
75
|
end
|
|
93
76
|
|
|
94
|
-
def
|
|
95
|
-
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
def ruby19?
|
|
99
|
-
!!(RUBY_VERSION =~ /^1\.9/)
|
|
77
|
+
def ruby_version
|
|
78
|
+
RUBY_VERSION
|
|
100
79
|
end
|
|
101
80
|
|
|
102
81
|
def windows?
|
|
@@ -112,67 +91,65 @@ module Selenium
|
|
|
112
91
|
end
|
|
113
92
|
|
|
114
93
|
def cygwin?
|
|
115
|
-
|
|
94
|
+
RUBY_PLATFORM =~ /cygwin/
|
|
95
|
+
!Regexp.last_match.nil?
|
|
116
96
|
end
|
|
117
97
|
|
|
118
98
|
def null_device
|
|
119
|
-
@null_device ||= (
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
end
|
|
125
|
-
)
|
|
99
|
+
@null_device ||= if defined?(File::NULL)
|
|
100
|
+
File::NULL
|
|
101
|
+
else
|
|
102
|
+
Platform.windows? ? 'NUL' : '/dev/null'
|
|
103
|
+
end
|
|
126
104
|
end
|
|
127
105
|
|
|
128
106
|
def wrap_in_quotes_if_necessary(str)
|
|
129
|
-
windows? && !cygwin? ? %
|
|
107
|
+
windows? && !cygwin? ? %("#{str}") : str
|
|
130
108
|
end
|
|
131
109
|
|
|
132
110
|
def cygwin_path(path, opts = {})
|
|
133
111
|
flags = []
|
|
134
|
-
opts.each { |k,v| flags << "--#{k}" if v }
|
|
112
|
+
opts.each { |k, v| flags << "--#{k}" if v }
|
|
135
113
|
|
|
136
114
|
`cygpath #{flags.join ' '} "#{path}"`.strip
|
|
137
115
|
end
|
|
138
116
|
|
|
139
117
|
def make_writable(file)
|
|
140
|
-
File.chmod
|
|
118
|
+
File.chmod 0o766, file
|
|
141
119
|
end
|
|
142
120
|
|
|
143
121
|
def assert_file(path)
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
end
|
|
122
|
+
return if File.file? path
|
|
123
|
+
raise Error::WebDriverError, "not a file: #{path.inspect}"
|
|
147
124
|
end
|
|
148
125
|
|
|
149
126
|
def assert_executable(path)
|
|
150
127
|
assert_file(path)
|
|
151
128
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
end
|
|
129
|
+
return if File.executable? path
|
|
130
|
+
raise Error::WebDriverError, "not executable: #{path.inspect}"
|
|
155
131
|
end
|
|
156
132
|
|
|
157
|
-
def exit_hook
|
|
133
|
+
def exit_hook
|
|
158
134
|
pid = Process.pid
|
|
159
135
|
|
|
160
|
-
at_exit
|
|
161
|
-
yield if Process.pid == pid
|
|
162
|
-
end
|
|
136
|
+
at_exit { yield if Process.pid == pid }
|
|
163
137
|
end
|
|
164
138
|
|
|
165
139
|
def find_binary(*binary_names)
|
|
166
140
|
paths = ENV['PATH'].split(File::PATH_SEPARATOR)
|
|
167
|
-
|
|
141
|
+
|
|
142
|
+
if windows?
|
|
143
|
+
binary_names.map! { |n| "#{n}.exe" }
|
|
144
|
+
binary_names.dup.each { |n| binary_names << n.gsub('exe', 'bat') }
|
|
145
|
+
end
|
|
168
146
|
|
|
169
147
|
binary_names.each do |binary_name|
|
|
170
148
|
paths.each do |path|
|
|
171
149
|
full_path = File.join(path, binary_name)
|
|
172
150
|
full_path.tr!('\\', '/') if windows?
|
|
173
|
-
exe = Dir.glob(full_path).
|
|
174
|
-
|
|
175
|
-
return exe if File.executable?(exe)
|
|
151
|
+
exe = Dir.glob(full_path).find { |f| File.executable?(f) }
|
|
152
|
+
return exe if exe
|
|
176
153
|
end
|
|
177
154
|
end
|
|
178
155
|
|
|
@@ -181,8 +158,9 @@ module Selenium
|
|
|
181
158
|
|
|
182
159
|
def find_in_program_files(*binary_names)
|
|
183
160
|
paths = [
|
|
184
|
-
ENV['PROGRAMFILES'] ||
|
|
185
|
-
ENV['ProgramFiles(x86)'] ||
|
|
161
|
+
ENV['PROGRAMFILES'] || '\\Program Files',
|
|
162
|
+
ENV['ProgramFiles(x86)'] || '\\Program Files (x86)',
|
|
163
|
+
ENV['ProgramW6432'] || '\\Program Files'
|
|
186
164
|
]
|
|
187
165
|
|
|
188
166
|
paths.each do |root|
|
|
@@ -196,13 +174,10 @@ module Selenium
|
|
|
196
174
|
end
|
|
197
175
|
|
|
198
176
|
def localhost
|
|
199
|
-
info = Socket.getaddrinfo
|
|
200
|
-
|
|
201
|
-
if info.empty?
|
|
202
|
-
raise Error::WebDriverError, "unable to translate 'localhost' for TCP + IPv4"
|
|
203
|
-
end
|
|
177
|
+
info = Socket.getaddrinfo 'localhost', 80, Socket::AF_INET, Socket::SOCK_STREAM
|
|
204
178
|
|
|
205
|
-
info[0][3]
|
|
179
|
+
return info[0][3] unless info.empty?
|
|
180
|
+
raise Error::WebDriverError, "unable to translate 'localhost' for TCP + IPv4"
|
|
206
181
|
end
|
|
207
182
|
|
|
208
183
|
def ip
|
|
@@ -222,27 +197,25 @@ module Selenium
|
|
|
222
197
|
end
|
|
223
198
|
|
|
224
199
|
def interfaces
|
|
225
|
-
interfaces = Socket.getaddrinfo(
|
|
226
|
-
interfaces += [
|
|
200
|
+
interfaces = Socket.getaddrinfo('localhost', 8080).map { |e| e[3] }
|
|
201
|
+
interfaces += ['0.0.0.0', Platform.ip]
|
|
227
202
|
|
|
228
203
|
interfaces.compact.uniq
|
|
229
204
|
end
|
|
230
|
-
|
|
231
205
|
end # Platform
|
|
232
206
|
end # WebDriver
|
|
233
207
|
end # Selenium
|
|
234
208
|
|
|
235
|
-
if
|
|
236
|
-
p :
|
|
237
|
-
:
|
|
238
|
-
:
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
:
|
|
242
|
-
:
|
|
243
|
-
:
|
|
244
|
-
:
|
|
245
|
-
:
|
|
246
|
-
:
|
|
247
|
-
:null_device => Selenium::WebDriver::Platform.null_device
|
|
209
|
+
if $PROGRAM_NAME == __FILE__
|
|
210
|
+
p engine: Selenium::WebDriver::Platform.engine,
|
|
211
|
+
os: Selenium::WebDriver::Platform.os,
|
|
212
|
+
ruby_version: Selenium::WebDriver::Platform.ruby_version,
|
|
213
|
+
jruby?: Selenium::WebDriver::Platform.jruby?,
|
|
214
|
+
windows?: Selenium::WebDriver::Platform.windows?,
|
|
215
|
+
home: Selenium::WebDriver::Platform.home,
|
|
216
|
+
bitsize: Selenium::WebDriver::Platform.bitsize,
|
|
217
|
+
localhost: Selenium::WebDriver::Platform.localhost,
|
|
218
|
+
ip: Selenium::WebDriver::Platform.ip,
|
|
219
|
+
interfaces: Selenium::WebDriver::Platform.interfaces,
|
|
220
|
+
null_device: Selenium::WebDriver::Platform.null_device
|
|
248
221
|
end
|