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,19 +17,17 @@
|
|
|
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
|
class Keyboard
|
|
28
|
-
|
|
29
25
|
def initialize(bridge)
|
|
30
26
|
@bridge = bridge
|
|
31
27
|
end
|
|
32
28
|
|
|
33
29
|
def send_keys(*keys)
|
|
34
|
-
@bridge.
|
|
30
|
+
@bridge.send_keys_to_active_element Keys.encode(keys)
|
|
35
31
|
end
|
|
36
32
|
|
|
37
33
|
#
|
|
@@ -43,7 +39,7 @@ module Selenium
|
|
|
43
39
|
def press(key)
|
|
44
40
|
assert_modifier key
|
|
45
41
|
|
|
46
|
-
@bridge.
|
|
42
|
+
@bridge.send_keys_to_active_element Keys.encode([key])
|
|
47
43
|
end
|
|
48
44
|
|
|
49
45
|
#
|
|
@@ -55,20 +51,17 @@ module Selenium
|
|
|
55
51
|
def release(key)
|
|
56
52
|
assert_modifier key
|
|
57
53
|
|
|
58
|
-
@bridge.
|
|
54
|
+
@bridge.send_keys_to_active_element Keys.encode([key])
|
|
59
55
|
end
|
|
60
56
|
|
|
61
57
|
private
|
|
62
58
|
|
|
63
|
-
MODIFIERS = [:control, :shift, :alt, :command, :meta]
|
|
59
|
+
MODIFIERS = [:control, :shift, :alt, :command, :meta].freeze
|
|
64
60
|
|
|
65
61
|
def assert_modifier(key)
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
"#{key.inspect} is not a modifier key, expected one of #{MODIFIERS.inspect}"
|
|
69
|
-
end
|
|
62
|
+
return if MODIFIERS.include? key
|
|
63
|
+
raise ArgumentError, "#{key.inspect} is not a modifier key, expected one of #{MODIFIERS.inspect}"
|
|
70
64
|
end
|
|
71
|
-
|
|
72
65
|
end # Keyboard
|
|
73
66
|
end # WebDriver
|
|
74
|
-
end
|
|
67
|
+
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,85 +18,99 @@
|
|
|
20
18
|
module Selenium
|
|
21
19
|
module WebDriver
|
|
22
20
|
module Keys
|
|
23
|
-
|
|
24
21
|
#
|
|
25
22
|
# @see Element#send_keys
|
|
26
|
-
# @see http://www.google.com.au/search?&q=unicode+pua&
|
|
23
|
+
# @see http://www.google.com.au/search?&q=unicode+pua&btnK=Search
|
|
27
24
|
#
|
|
28
25
|
|
|
29
26
|
KEYS = {
|
|
30
|
-
|
|
31
|
-
:
|
|
32
|
-
:
|
|
33
|
-
:
|
|
34
|
-
:
|
|
35
|
-
:
|
|
36
|
-
:
|
|
37
|
-
:
|
|
38
|
-
:
|
|
39
|
-
:
|
|
40
|
-
:
|
|
41
|
-
:
|
|
42
|
-
:
|
|
43
|
-
:
|
|
44
|
-
:
|
|
45
|
-
:
|
|
46
|
-
:
|
|
47
|
-
:
|
|
48
|
-
:
|
|
49
|
-
:
|
|
50
|
-
:
|
|
51
|
-
:
|
|
52
|
-
:
|
|
53
|
-
:
|
|
54
|
-
:
|
|
55
|
-
:
|
|
56
|
-
:
|
|
57
|
-
:
|
|
58
|
-
:
|
|
59
|
-
:
|
|
60
|
-
:
|
|
61
|
-
:
|
|
62
|
-
:
|
|
63
|
-
:
|
|
64
|
-
:
|
|
65
|
-
:
|
|
66
|
-
:
|
|
67
|
-
:
|
|
68
|
-
:
|
|
69
|
-
:
|
|
70
|
-
:
|
|
71
|
-
:
|
|
72
|
-
:
|
|
73
|
-
:
|
|
74
|
-
:
|
|
75
|
-
:
|
|
76
|
-
:
|
|
77
|
-
:
|
|
78
|
-
:
|
|
79
|
-
:
|
|
80
|
-
:
|
|
81
|
-
:
|
|
82
|
-
:
|
|
83
|
-
:
|
|
84
|
-
:
|
|
85
|
-
:
|
|
86
|
-
:
|
|
87
|
-
:
|
|
88
|
-
:
|
|
89
|
-
:
|
|
90
|
-
:
|
|
91
|
-
:
|
|
92
|
-
:
|
|
93
|
-
:
|
|
94
|
-
|
|
27
|
+
null: "\ue000",
|
|
28
|
+
cancel: "\ue001",
|
|
29
|
+
help: "\ue002",
|
|
30
|
+
backspace: "\ue003",
|
|
31
|
+
tab: "\ue004",
|
|
32
|
+
clear: "\ue005",
|
|
33
|
+
return: "\ue006",
|
|
34
|
+
enter: "\ue007",
|
|
35
|
+
shift: "\ue008",
|
|
36
|
+
left_shift: "\ue008",
|
|
37
|
+
control: "\ue009",
|
|
38
|
+
left_control: "\ue009",
|
|
39
|
+
alt: "\ue00A",
|
|
40
|
+
left_alt: "\ue00A",
|
|
41
|
+
pause: "\ue00B",
|
|
42
|
+
escape: "\ue00C",
|
|
43
|
+
space: "\ue00D",
|
|
44
|
+
page_up: "\ue00E",
|
|
45
|
+
page_down: "\ue00F",
|
|
46
|
+
end: "\ue010",
|
|
47
|
+
home: "\ue011",
|
|
48
|
+
left: "\ue012",
|
|
49
|
+
arrow_left: "\ue012",
|
|
50
|
+
up: "\ue013",
|
|
51
|
+
arrow_up: "\ue013",
|
|
52
|
+
right: "\ue014",
|
|
53
|
+
arrow_right: "\ue014",
|
|
54
|
+
down: "\ue015",
|
|
55
|
+
arrow_down: "\ue015",
|
|
56
|
+
insert: "\ue016",
|
|
57
|
+
delete: "\ue017",
|
|
58
|
+
semicolon: "\ue018",
|
|
59
|
+
equals: "\ue019",
|
|
60
|
+
numpad0: "\ue01A",
|
|
61
|
+
numpad1: "\ue01B",
|
|
62
|
+
numpad2: "\ue01C",
|
|
63
|
+
numpad3: "\ue01D",
|
|
64
|
+
numpad4: "\ue01E",
|
|
65
|
+
numpad5: "\ue01F",
|
|
66
|
+
numpad6: "\ue020",
|
|
67
|
+
numpad7: "\ue021",
|
|
68
|
+
numpad8: "\ue022",
|
|
69
|
+
numpad9: "\ue023",
|
|
70
|
+
multiply: "\ue024",
|
|
71
|
+
add: "\ue025",
|
|
72
|
+
separator: "\ue026",
|
|
73
|
+
subtract: "\ue027",
|
|
74
|
+
decimal: "\ue028",
|
|
75
|
+
divide: "\ue029",
|
|
76
|
+
f1: "\ue031",
|
|
77
|
+
f2: "\ue032",
|
|
78
|
+
f3: "\ue033",
|
|
79
|
+
f4: "\ue034",
|
|
80
|
+
f5: "\ue035",
|
|
81
|
+
f6: "\ue036",
|
|
82
|
+
f7: "\ue037",
|
|
83
|
+
f8: "\ue038",
|
|
84
|
+
f9: "\ue039",
|
|
85
|
+
f10: "\ue03A",
|
|
86
|
+
f11: "\ue03B",
|
|
87
|
+
f12: "\ue03C",
|
|
88
|
+
meta: "\ue03D",
|
|
89
|
+
command: "\ue03D", # alias
|
|
90
|
+
left_meta: "\ue03D", # alias
|
|
91
|
+
right_shift: "\ue050",
|
|
92
|
+
right_control: "\ue051",
|
|
93
|
+
right_alt: "\ue052",
|
|
94
|
+
right_meta: "\ue053",
|
|
95
|
+
numpad_page_up: "\ue054",
|
|
96
|
+
numpad_page_down: "\ue055",
|
|
97
|
+
numpad_end: "\ue056",
|
|
98
|
+
numpad_home: "\ue057",
|
|
99
|
+
numpad_left: "\ue058",
|
|
100
|
+
numpad_up: "\ue059",
|
|
101
|
+
numpad_right: "\ue05A",
|
|
102
|
+
numpad_down: "\ue05B",
|
|
103
|
+
numpad_insert: "\ue05C",
|
|
104
|
+
numpad_delete: "\ue05D"
|
|
105
|
+
}.freeze
|
|
95
106
|
|
|
96
107
|
#
|
|
97
108
|
# @api private
|
|
98
109
|
#
|
|
99
110
|
|
|
100
111
|
def self.[](key)
|
|
101
|
-
KEYS[key]
|
|
112
|
+
return KEYS[key] if KEYS[key]
|
|
113
|
+
raise Error::UnsupportedOperationError, "no such key #{key.inspect}"
|
|
102
114
|
end
|
|
103
115
|
|
|
104
116
|
#
|
|
@@ -106,21 +118,26 @@ module Selenium
|
|
|
106
118
|
#
|
|
107
119
|
|
|
108
120
|
def self.encode(keys)
|
|
109
|
-
keys.map
|
|
110
|
-
|
|
111
|
-
when Symbol
|
|
112
|
-
Keys[arg]
|
|
113
|
-
when Array
|
|
114
|
-
arg = arg.map { |e| e.kind_of?(Symbol) ? Keys[e] : e }.join
|
|
115
|
-
arg << Keys[:null]
|
|
121
|
+
keys.map { |key| encode_key(key) }
|
|
122
|
+
end
|
|
116
123
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
124
|
+
#
|
|
125
|
+
# @api private
|
|
126
|
+
#
|
|
127
|
+
|
|
128
|
+
def self.encode_key(key)
|
|
129
|
+
case key
|
|
130
|
+
when Symbol
|
|
131
|
+
Keys[key]
|
|
132
|
+
when Array
|
|
133
|
+
key = key.map { |e| e.is_a?(Symbol) ? Keys[e] : e }.join
|
|
134
|
+
key << Keys[:null]
|
|
135
|
+
|
|
136
|
+
key
|
|
137
|
+
else
|
|
138
|
+
key.to_s
|
|
121
139
|
end
|
|
122
140
|
end
|
|
123
|
-
|
|
124
141
|
end # Keys
|
|
125
142
|
end # WebDriver
|
|
126
143
|
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
|
|
@@ -23,12 +21,12 @@ module Selenium
|
|
|
23
21
|
attr_reader :level, :timestamp, :message
|
|
24
22
|
|
|
25
23
|
def initialize(level, timestamp, message)
|
|
26
|
-
@level
|
|
24
|
+
@level = level
|
|
27
25
|
@timestamp = timestamp
|
|
28
|
-
@message
|
|
26
|
+
@message = message
|
|
29
27
|
end
|
|
30
28
|
|
|
31
|
-
def as_json(
|
|
29
|
+
def as_json(*)
|
|
32
30
|
{
|
|
33
31
|
'level' => level,
|
|
34
32
|
'timestamp' => timestamp,
|
|
@@ -43,7 +41,6 @@ module Selenium
|
|
|
43
41
|
def time
|
|
44
42
|
Time.at timestamp / 1000
|
|
45
43
|
end
|
|
46
|
-
|
|
47
44
|
end # LogEntry
|
|
48
45
|
end # WebDriver
|
|
49
46
|
end # Selenium
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# Licensed to the Software Freedom Conservancy (SFC) under one
|
|
2
|
+
# or more contributor license agreements. See the NOTICE file
|
|
3
|
+
# distributed with this work for additional information
|
|
4
|
+
# regarding copyright ownership. The SFC licenses this file
|
|
5
|
+
# to you under the Apache License, Version 2.0 (the
|
|
6
|
+
# "License"); you may not use this file except in compliance
|
|
7
|
+
# with the License. You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
|
12
|
+
# software distributed under the License is distributed on an
|
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
# KIND, either express or implied. See the License for the
|
|
15
|
+
# specific language governing permissions and limitations
|
|
16
|
+
# under the License.
|
|
17
|
+
|
|
18
|
+
require 'forwardable'
|
|
19
|
+
require 'logger'
|
|
20
|
+
|
|
21
|
+
module Selenium
|
|
22
|
+
module WebDriver
|
|
23
|
+
#
|
|
24
|
+
# @example Enable full logging
|
|
25
|
+
# Selenium::WebDriver.logger.level = :debug
|
|
26
|
+
#
|
|
27
|
+
# @example Log to file
|
|
28
|
+
# Selenium::WebDriver.logger.output = 'selenium.log'
|
|
29
|
+
#
|
|
30
|
+
# @example Use logger manually
|
|
31
|
+
# Selenium::WebDriver.logger.info('This is info message')
|
|
32
|
+
# Selenium::WebDriver.logger.warn('This is warning message')
|
|
33
|
+
#
|
|
34
|
+
class Logger
|
|
35
|
+
extend Forwardable
|
|
36
|
+
include ::Logger::Severity
|
|
37
|
+
|
|
38
|
+
def_delegators :@logger, :debug, :debug?,
|
|
39
|
+
:info, :info?,
|
|
40
|
+
:warn, :warn?,
|
|
41
|
+
:error, :error?,
|
|
42
|
+
:fatal, :fatal?,
|
|
43
|
+
:level
|
|
44
|
+
|
|
45
|
+
def initialize
|
|
46
|
+
@logger = create_logger($stdout)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def output=(io)
|
|
50
|
+
# `Logger#reopen` was added in Ruby 2.3
|
|
51
|
+
if @logger.respond_to?(:reopen)
|
|
52
|
+
@logger.reopen(io)
|
|
53
|
+
else
|
|
54
|
+
@logger = create_logger(io)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
#
|
|
59
|
+
# For Ruby < 2.3 compatibility
|
|
60
|
+
# Based on https://github.com/ruby/ruby/blob/ruby_2_3/lib/logger.rb#L250
|
|
61
|
+
#
|
|
62
|
+
|
|
63
|
+
def level=(severity)
|
|
64
|
+
if severity.is_a?(Integer)
|
|
65
|
+
@logger.level = severity
|
|
66
|
+
else
|
|
67
|
+
case severity.to_s.downcase
|
|
68
|
+
when 'debug'.freeze
|
|
69
|
+
@logger.level = DEBUG
|
|
70
|
+
when 'info'.freeze
|
|
71
|
+
@logger.level = INFO
|
|
72
|
+
when 'warn'.freeze
|
|
73
|
+
@logger.level = WARN
|
|
74
|
+
when 'error'.freeze
|
|
75
|
+
@logger.level = ERROR
|
|
76
|
+
when 'fatal'.freeze
|
|
77
|
+
@logger.level = FATAL
|
|
78
|
+
when 'unknown'.freeze
|
|
79
|
+
@logger.level = UNKNOWN
|
|
80
|
+
else
|
|
81
|
+
raise ArgumentError, "invalid log level: #{severity}"
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
#
|
|
87
|
+
# Returns IO object used by logger internally.
|
|
88
|
+
#
|
|
89
|
+
# Normally, we would have never needed it, but we want to
|
|
90
|
+
# use it as IO object for all child processes to ensure their
|
|
91
|
+
# output is redirected there.
|
|
92
|
+
#
|
|
93
|
+
# It is only used in debug level, in other cases output is suppressed.
|
|
94
|
+
#
|
|
95
|
+
# @api private
|
|
96
|
+
#
|
|
97
|
+
def io
|
|
98
|
+
@logger.instance_variable_get(:@logdev).instance_variable_get(:@dev)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
#
|
|
102
|
+
# Marks code as deprecated with/without replacement.
|
|
103
|
+
#
|
|
104
|
+
# @param [String] old
|
|
105
|
+
# @param [String, nil] new
|
|
106
|
+
#
|
|
107
|
+
def deprecate(old, new = nil)
|
|
108
|
+
message = "[DEPRECATION] #{old} is deprecated"
|
|
109
|
+
message << if new
|
|
110
|
+
". Use #{new} instead."
|
|
111
|
+
else
|
|
112
|
+
' and will be removed in the next releases.'
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
warn message
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
private
|
|
119
|
+
|
|
120
|
+
def create_logger(output)
|
|
121
|
+
logger = ::Logger.new(output)
|
|
122
|
+
logger.progname = 'Selenium'
|
|
123
|
+
logger.level = default_level
|
|
124
|
+
logger.formatter = proc do |severity, time, progname, msg|
|
|
125
|
+
"#{time.strftime('%F %T')} #{severity} #{progname} #{msg}\n"
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
logger
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def default_level
|
|
132
|
+
if $DEBUG || ENV.key?('DEBUG')
|
|
133
|
+
DEBUG
|
|
134
|
+
else
|
|
135
|
+
WARN
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end # Logger
|
|
139
|
+
end # WebDriver
|
|
140
|
+
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 Logs
|
|
23
|
-
|
|
24
21
|
#
|
|
25
22
|
# @api private
|
|
26
23
|
#
|
|
@@ -30,13 +27,12 @@ module Selenium
|
|
|
30
27
|
end
|
|
31
28
|
|
|
32
29
|
def get(type)
|
|
33
|
-
@bridge.
|
|
30
|
+
@bridge.log type
|
|
34
31
|
end
|
|
35
32
|
|
|
36
33
|
def available_types
|
|
37
|
-
@bridge.
|
|
34
|
+
@bridge.available_log_types
|
|
38
35
|
end
|
|
39
|
-
|
|
40
36
|
end # Logs
|
|
41
37
|
end # WebDriver
|
|
42
38
|
end # Selenium
|