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.
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