selenium-webdriver 2.53.4 → 3.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (152) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES +363 -10
  3. data/LICENSE +1 -1
  4. data/README.md +2 -3
  5. data/lib/selenium-webdriver.rb +0 -2
  6. data/lib/selenium/server.rb +69 -70
  7. data/lib/selenium/webdriver.rb +32 -23
  8. data/lib/selenium/webdriver/atoms.rb +18 -0
  9. data/lib/selenium/webdriver/atoms/getAttribute.js +8 -0
  10. data/lib/selenium/webdriver/chrome.rb +8 -6
  11. data/lib/selenium/webdriver/chrome/driver.rb +112 -0
  12. data/lib/selenium/webdriver/chrome/options.rb +168 -0
  13. data/lib/selenium/webdriver/chrome/profile.rb +17 -17
  14. data/lib/selenium/webdriver/chrome/service.rb +22 -89
  15. data/lib/selenium/webdriver/common.rb +13 -6
  16. data/lib/selenium/webdriver/common/action_builder.rb +49 -57
  17. data/lib/selenium/webdriver/common/alert.rb +5 -15
  18. data/lib/selenium/webdriver/common/bridge_helper.rb +10 -17
  19. data/lib/selenium/webdriver/common/driver.rb +53 -68
  20. data/lib/selenium/webdriver/common/driver_extensions/{has_input_devices.rb → has_addons.rb} +13 -23
  21. data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +4 -8
  22. data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +4 -7
  23. data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +0 -4
  24. data/lib/selenium/webdriver/common/driver_extensions/has_session_id.rb +0 -4
  25. data/lib/selenium/webdriver/common/driver_extensions/has_touch_screen.rb +1 -5
  26. data/lib/selenium/webdriver/common/driver_extensions/has_web_storage.rb +0 -5
  27. data/lib/selenium/webdriver/common/driver_extensions/rotatable.rb +4 -9
  28. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +7 -7
  29. data/lib/selenium/webdriver/common/driver_extensions/uploads_files.rb +2 -7
  30. data/lib/selenium/webdriver/common/element.rb +57 -39
  31. data/lib/selenium/webdriver/common/error.rb +204 -106
  32. data/lib/selenium/webdriver/common/file_reaper.rb +3 -11
  33. data/lib/selenium/webdriver/common/html5/local_storage.rb +6 -10
  34. data/lib/selenium/webdriver/common/html5/session_storage.rb +6 -10
  35. data/lib/selenium/webdriver/common/html5/shared_web_storage.rb +7 -18
  36. data/lib/selenium/webdriver/{safari/options.rb → common/interactions/input_device.rb} +20 -31
  37. data/lib/selenium/webdriver/common/interactions/interaction.rb +50 -0
  38. data/lib/selenium/webdriver/{safari/browser.rb → common/interactions/interactions.rb} +16 -15
  39. data/lib/selenium/webdriver/common/interactions/key_actions.rb +143 -0
  40. data/lib/selenium/webdriver/common/interactions/key_input.rb +62 -0
  41. data/lib/selenium/webdriver/{android.rb → common/interactions/none_input.rb} +11 -6
  42. data/lib/selenium/webdriver/common/interactions/pointer_actions.rb +353 -0
  43. data/lib/selenium/webdriver/common/interactions/pointer_input.rb +132 -0
  44. data/lib/selenium/webdriver/common/keyboard.rb +7 -14
  45. data/lib/selenium/webdriver/common/keys.rb +99 -82
  46. data/lib/selenium/webdriver/common/log_entry.rb +3 -6
  47. data/lib/selenium/webdriver/common/logger.rb +140 -0
  48. data/lib/selenium/webdriver/common/logs.rb +2 -6
  49. data/lib/selenium/webdriver/common/mouse.rb +9 -14
  50. data/lib/selenium/webdriver/common/navigation.rb +2 -6
  51. data/lib/selenium/webdriver/common/options.rb +20 -23
  52. data/lib/selenium/webdriver/common/platform.rb +70 -97
  53. data/lib/selenium/webdriver/common/port_prober.rb +3 -4
  54. data/lib/selenium/webdriver/common/profile_helper.rb +6 -11
  55. data/lib/selenium/webdriver/common/proxy.rb +58 -72
  56. data/lib/selenium/webdriver/common/search_context.rb +22 -29
  57. data/lib/selenium/webdriver/common/service.rb +161 -0
  58. data/lib/selenium/webdriver/common/socket_lock.rb +6 -14
  59. data/lib/selenium/webdriver/common/socket_poller.rb +5 -12
  60. data/lib/selenium/webdriver/common/target_locator.rb +11 -15
  61. data/lib/selenium/webdriver/common/timeouts.rb +4 -8
  62. data/lib/selenium/webdriver/common/touch_action_builder.rb +2 -6
  63. data/lib/selenium/webdriver/common/touch_screen.rb +19 -23
  64. data/lib/selenium/webdriver/common/w3c_action_builder.rb +209 -0
  65. data/lib/selenium/webdriver/{phantomjs.rb → common/w3c_options.rb} +16 -14
  66. data/lib/selenium/webdriver/common/wait.rb +6 -13
  67. data/lib/selenium/webdriver/common/window.rb +48 -17
  68. data/lib/selenium/webdriver/common/zipper.rb +6 -10
  69. data/lib/selenium/webdriver/edge.rb +5 -12
  70. data/lib/selenium/webdriver/edge/bridge.rb +32 -63
  71. data/lib/selenium/webdriver/edge/driver.rb +73 -0
  72. data/lib/selenium/webdriver/edge/service.rb +18 -87
  73. data/lib/selenium/webdriver/firefox.rb +20 -11
  74. data/lib/selenium/webdriver/firefox/binary.rb +40 -56
  75. data/lib/selenium/webdriver/firefox/driver.rb +48 -0
  76. data/lib/selenium/webdriver/firefox/extension.rb +18 -8
  77. data/lib/selenium/webdriver/firefox/extension/prefs.json +3 -11
  78. data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
  79. data/lib/selenium/webdriver/firefox/launcher.rb +13 -22
  80. data/lib/selenium/webdriver/firefox/legacy/driver.rb +79 -0
  81. data/lib/selenium/webdriver/{iphone.rb → firefox/marionette/bridge.rb} +25 -6
  82. data/lib/selenium/webdriver/firefox/marionette/driver.rb +96 -0
  83. data/lib/selenium/webdriver/firefox/options.rb +149 -0
  84. data/lib/selenium/webdriver/firefox/profile.rb +46 -46
  85. data/lib/selenium/webdriver/firefox/profiles_ini.rb +8 -18
  86. data/lib/selenium/webdriver/firefox/service.rb +23 -83
  87. data/lib/selenium/webdriver/firefox/util.rb +0 -4
  88. data/lib/selenium/webdriver/ie.rb +4 -8
  89. data/lib/selenium/webdriver/ie/driver.rb +90 -0
  90. data/lib/selenium/webdriver/ie/options.rb +136 -0
  91. data/lib/selenium/webdriver/ie/service.rb +58 -0
  92. data/lib/selenium/webdriver/remote.rb +8 -16
  93. data/lib/selenium/webdriver/remote/bridge.rb +96 -565
  94. data/lib/selenium/webdriver/remote/capabilities.rb +76 -94
  95. data/lib/selenium/webdriver/remote/driver.rb +49 -0
  96. data/lib/selenium/webdriver/remote/http/common.rb +22 -20
  97. data/lib/selenium/webdriver/remote/http/curb.rb +9 -12
  98. data/lib/selenium/webdriver/remote/http/default.rb +54 -41
  99. data/lib/selenium/webdriver/remote/http/persistent.rb +9 -8
  100. data/lib/selenium/webdriver/remote/oss/bridge.rb +586 -0
  101. data/lib/selenium/webdriver/remote/oss/commands.rb +221 -0
  102. data/lib/selenium/webdriver/remote/response.rb +39 -27
  103. data/lib/selenium/webdriver/remote/server_error.rb +1 -5
  104. data/lib/selenium/webdriver/remote/w3c/bridge.rb +573 -0
  105. data/lib/selenium/webdriver/remote/w3c/capabilities.rb +290 -0
  106. data/lib/selenium/webdriver/remote/w3c/commands.rb +148 -0
  107. data/lib/selenium/webdriver/safari.rb +20 -29
  108. data/lib/selenium/webdriver/{firefox/w3c_bridge.rb → safari/driver.rb} +21 -30
  109. data/lib/selenium/webdriver/safari/service.rb +57 -0
  110. data/lib/selenium/webdriver/support.rb +1 -2
  111. data/lib/selenium/webdriver/support/abstract_event_listener.rb +17 -4
  112. data/lib/selenium/webdriver/support/block_event_listener.rb +1 -5
  113. data/lib/selenium/webdriver/support/color.rb +57 -42
  114. data/lib/selenium/webdriver/support/escaper.rb +41 -0
  115. data/lib/selenium/webdriver/support/event_firing_bridge.rb +36 -40
  116. data/lib/selenium/webdriver/support/select.rb +33 -86
  117. data/selenium-webdriver.gemspec +22 -25
  118. metadata +254 -261
  119. data/lib/selenium-client.rb +0 -21
  120. data/lib/selenium/client.rb +0 -57
  121. data/lib/selenium/client/base.rb +0 -151
  122. data/lib/selenium/client/driver.rb +0 -29
  123. data/lib/selenium/client/errors.rb +0 -28
  124. data/lib/selenium/client/extensions.rb +0 -132
  125. data/lib/selenium/client/idiomatic.rb +0 -507
  126. data/lib/selenium/client/javascript_expression_builder.rb +0 -135
  127. data/lib/selenium/client/javascript_frameworks/jquery.rb +0 -32
  128. data/lib/selenium/client/javascript_frameworks/prototype.rb +0 -32
  129. data/lib/selenium/client/legacy_driver.rb +0 -1722
  130. data/lib/selenium/client/protocol.rb +0 -123
  131. data/lib/selenium/client/selenium_helper.rb +0 -49
  132. data/lib/selenium/rake/server_task.rb +0 -176
  133. data/lib/selenium/webdriver/android/bridge.rb +0 -68
  134. data/lib/selenium/webdriver/chrome/bridge.rb +0 -139
  135. data/lib/selenium/webdriver/common/core_ext/base64.rb +0 -28
  136. data/lib/selenium/webdriver/common/core_ext/dir.rb +0 -61
  137. data/lib/selenium/webdriver/common/html5/location.rb +0 -19
  138. data/lib/selenium/webdriver/common/w3c_error.rb +0 -194
  139. data/lib/selenium/webdriver/edge/legacy_support.rb +0 -117
  140. data/lib/selenium/webdriver/firefox/bridge.rb +0 -89
  141. data/lib/selenium/webdriver/ie/bridge.rb +0 -88
  142. data/lib/selenium/webdriver/ie/server.rb +0 -133
  143. data/lib/selenium/webdriver/iphone/bridge.rb +0 -64
  144. data/lib/selenium/webdriver/phantomjs/bridge.rb +0 -78
  145. data/lib/selenium/webdriver/phantomjs/service.rb +0 -130
  146. data/lib/selenium/webdriver/remote/commands.rb +0 -211
  147. data/lib/selenium/webdriver/remote/w3c_bridge.rb +0 -668
  148. data/lib/selenium/webdriver/remote/w3c_capabilities.rb +0 -236
  149. data/lib/selenium/webdriver/remote/w3c_commands.rb +0 -132
  150. data/lib/selenium/webdriver/safari/bridge.rb +0 -135
  151. data/lib/selenium/webdriver/safari/resources/client.js +0 -7255
  152. 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.sendKeysToActiveElement Keys.encode(keys)
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.sendKeysToActiveElement Keys.encode([key])
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.sendKeysToActiveElement Keys.encode([key])
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
- unless MODIFIERS.include? key
67
- raise ArgumentError,
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 # Selenium
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&btnG=Search
23
+ # @see http://www.google.com.au/search?&q=unicode+pua&btnK=Search
27
24
  #
28
25
 
29
26
  KEYS = {
30
- # \x works on both 1.8.6/1.9
31
- :null => "\xEE\x80\x80",
32
- :cancel => "\xEE\x80\x81",
33
- :help => "\xEE\x80\x82",
34
- :backspace => "\xEE\x80\x83",
35
- :tab => "\xEE\x80\x84",
36
- :clear => "\xEE\x80\x85",
37
- :return => "\xEE\x80\x86",
38
- :enter => "\xEE\x80\x87",
39
- :shift => "\xEE\x80\x88",
40
- :left_shift => "\xEE\x80\x88",
41
- :control => "\xEE\x80\x89",
42
- :left_control => "\xEE\x80\x89",
43
- :alt => "\xEE\x80\x8A",
44
- :left_alt => "\xEE\x80\x8A",
45
- :pause => "\xEE\x80\x8B",
46
- :escape => "\xEE\x80\x8C",
47
- :space => "\xEE\x80\x8D",
48
- :page_up => "\xEE\x80\x8E",
49
- :page_down => "\xEE\x80\x8F",
50
- :end => "\xEE\x80\x90",
51
- :home => "\xEE\x80\x91",
52
- :left => "\xEE\x80\x92",
53
- :arrow_left => "\xEE\x80\x92",
54
- :up => "\xEE\x80\x93",
55
- :arrow_up => "\xEE\x80\x93",
56
- :right => "\xEE\x80\x94",
57
- :arrow_right => "\xEE\x80\x94",
58
- :down => "\xEE\x80\x95",
59
- :arrow_down => "\xEE\x80\x95",
60
- :insert => "\xEE\x80\x96",
61
- :delete => "\xEE\x80\x97",
62
- :semicolon => "\xEE\x80\x98",
63
- :equals => "\xEE\x80\x99",
64
- :numpad0 => "\xEE\x80\x9A",
65
- :numpad1 => "\xEE\x80\x9B",
66
- :numpad2 => "\xEE\x80\x9C",
67
- :numpad3 => "\xEE\x80\x9D",
68
- :numpad4 => "\xEE\x80\x9E",
69
- :numpad5 => "\xEE\x80\x9F",
70
- :numpad6 => "\xEE\x80\xA0",
71
- :numpad7 => "\xEE\x80\xA1",
72
- :numpad8 => "\xEE\x80\xA2",
73
- :numpad9 => "\xEE\x80\xA3",
74
- :multiply => "\xEE\x80\xA4",
75
- :add => "\xEE\x80\xA5",
76
- :separator => "\xEE\x80\xA6",
77
- :subtract => "\xEE\x80\xA7",
78
- :decimal => "\xEE\x80\xA8",
79
- :divide => "\xEE\x80\xA9",
80
- :f1 => "\xEE\x80\xB1",
81
- :f2 => "\xEE\x80\xB2",
82
- :f3 => "\xEE\x80\xB3",
83
- :f4 => "\xEE\x80\xB4",
84
- :f5 => "\xEE\x80\xB5",
85
- :f6 => "\xEE\x80\xB6",
86
- :f7 => "\xEE\x80\xB7",
87
- :f8 => "\xEE\x80\xB8",
88
- :f9 => "\xEE\x80\xB9",
89
- :f10 => "\xEE\x80\xBA",
90
- :f11 => "\xEE\x80\xBB",
91
- :f12 => "\xEE\x80\xBC",
92
- :meta => "\xEE\x80\xBD",
93
- :command => "\xEE\x80\xBD" # alias
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] or raise Error::UnsupportedOperationError, "no such key #{key.inspect}"
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 do |arg|
110
- case arg
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
- arg
118
- else
119
- arg.to_s
120
- end
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 = level
24
+ @level = level
27
25
  @timestamp = timestamp
28
- @message = message
26
+ @message = message
29
27
  end
30
28
 
31
- def as_json(opts = nil)
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.getLog type
30
+ @bridge.log type
34
31
  end
35
32
 
36
33
  def available_types
37
- @bridge.getAvailableLogTypes
34
+ @bridge.available_log_types
38
35
  end
39
-
40
36
  end # Logs
41
37
  end # WebDriver
42
38
  end # Selenium