selenium-webdriver 4.0.0.alpha3 → 4.0.0.beta1

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 (269) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGES +160 -5
  3. data/LICENSE +1 -1
  4. data/README.md +4 -5
  5. data/lib/selenium/server.rb +19 -27
  6. data/lib/selenium/webdriver.rb +3 -3
  7. data/lib/selenium/webdriver/atoms/findElements.js +123 -0
  8. data/lib/selenium/webdriver/atoms/getAttribute.js +104 -7
  9. data/lib/selenium/webdriver/atoms/isDisplayed.js +76 -78
  10. data/lib/selenium/webdriver/atoms/mutationListener.js +38 -0
  11. data/lib/selenium/webdriver/chrome.rb +4 -2
  12. data/lib/selenium/webdriver/chrome/bridge.rb +4 -6
  13. data/lib/selenium/webdriver/chrome/driver.rb +19 -17
  14. data/lib/selenium/webdriver/chrome/features.rb +66 -0
  15. data/lib/selenium/webdriver/chrome/options.rb +55 -38
  16. data/lib/selenium/webdriver/chrome/profile.rb +1 -1
  17. data/lib/selenium/webdriver/chrome/service.rb +1 -5
  18. data/lib/selenium/webdriver/common.rb +7 -2
  19. data/lib/selenium/webdriver/common/driver.rb +84 -21
  20. data/lib/selenium/webdriver/common/driver_extensions/has_authentication.rb +89 -0
  21. data/lib/selenium/webdriver/common/driver_extensions/has_devtools.rb +38 -0
  22. data/lib/selenium/webdriver/common/driver_extensions/has_location.rb +5 -8
  23. data/lib/selenium/webdriver/common/driver_extensions/has_log_events.rb +149 -0
  24. data/lib/selenium/webdriver/{edge_chrome/bridge.rb → common/driver_extensions/has_logs.rb} +7 -7
  25. data/lib/selenium/webdriver/common/driver_extensions/has_network_connection.rb +4 -27
  26. data/lib/selenium/webdriver/common/driver_extensions/has_remote_status.rb +1 -0
  27. data/lib/selenium/webdriver/common/driver_extensions/prints_page.rb +32 -0
  28. data/lib/selenium/webdriver/common/element.rb +5 -0
  29. data/lib/selenium/webdriver/common/logger.rb +48 -16
  30. data/lib/selenium/webdriver/common/manager.rb +11 -1
  31. data/lib/selenium/webdriver/common/options.rb +53 -12
  32. data/lib/selenium/webdriver/common/platform.rb +6 -1
  33. data/lib/selenium/webdriver/common/port_prober.rb +4 -6
  34. data/lib/selenium/webdriver/common/proxy.rb +0 -0
  35. data/lib/selenium/webdriver/common/search_context.rb +3 -2
  36. data/lib/selenium/webdriver/common/service.rb +12 -127
  37. data/lib/selenium/webdriver/common/service_manager.rb +151 -0
  38. data/lib/selenium/webdriver/common/socket_lock.rb +2 -2
  39. data/lib/selenium/webdriver/common/takes_screenshot.rb +63 -0
  40. data/lib/selenium/webdriver/common/target_locator.rb +4 -4
  41. data/lib/selenium/webdriver/common/wait.rb +1 -1
  42. data/lib/selenium/webdriver/devtools.rb +135 -0
  43. data/lib/selenium/webdriver/devtools/console_event.rb +38 -0
  44. data/lib/selenium/webdriver/devtools/exception_event.rb +36 -0
  45. data/lib/selenium/webdriver/devtools/mutation_event.rb +37 -0
  46. data/lib/selenium/webdriver/devtools/v85/accessibility.rb +64 -0
  47. data/lib/selenium/webdriver/devtools/v85/animation.rb +100 -0
  48. data/lib/selenium/webdriver/devtools/v85/application_cache.rb +66 -0
  49. data/lib/selenium/webdriver/devtools/v85/audits.rb +63 -0
  50. data/lib/selenium/webdriver/devtools/v85/background_service.rb +69 -0
  51. data/lib/selenium/webdriver/devtools/v85/browser.rb +125 -0
  52. data/lib/selenium/webdriver/devtools/v85/cache_storage.rb +75 -0
  53. data/lib/selenium/webdriver/devtools/v85/cast.rb +72 -0
  54. data/lib/selenium/webdriver/devtools/v85/console.rb +59 -0
  55. data/lib/selenium/webdriver/devtools/v85/css.rb +167 -0
  56. data/lib/selenium/webdriver/devtools/v85/database.rb +66 -0
  57. data/lib/selenium/webdriver/devtools/v85/debugger.rb +231 -0
  58. data/lib/selenium/webdriver/devtools/v85/device_orientation.rb +55 -0
  59. data/lib/selenium/webdriver/devtools/v85/dom.rb +322 -0
  60. data/lib/selenium/webdriver/devtools/v85/dom_debugger.rb +95 -0
  61. data/lib/selenium/webdriver/devtools/v85/dom_snapshot.rb +67 -0
  62. data/lib/selenium/webdriver/devtools/v85/dom_storage.rb +81 -0
  63. data/lib/selenium/webdriver/devtools/v85/emulation.rb +182 -0
  64. data/lib/selenium/webdriver/devtools/v85/fetch.rb +99 -0
  65. data/lib/selenium/webdriver/devtools/v85/headless_experimental.rb +63 -0
  66. data/lib/selenium/webdriver/devtools/v85/heap_profiler.rb +109 -0
  67. data/lib/selenium/webdriver/devtools/v85/indexed_db.rb +102 -0
  68. data/lib/selenium/webdriver/devtools/v85/input.rb +143 -0
  69. data/lib/selenium/webdriver/devtools/v85/inspector.rb +57 -0
  70. data/lib/selenium/webdriver/devtools/v85/io.rb +61 -0
  71. data/lib/selenium/webdriver/devtools/v85/layer_tree.rb +97 -0
  72. data/lib/selenium/webdriver/devtools/v85/log.rb +68 -0
  73. data/lib/selenium/webdriver/devtools/v85/media.rb +59 -0
  74. data/lib/selenium/webdriver/devtools/v85/memory.rb +88 -0
  75. data/lib/selenium/webdriver/devtools/v85/network.rb +230 -0
  76. data/lib/selenium/webdriver/devtools/v85/overlay.rb +160 -0
  77. data/lib/selenium/webdriver/devtools/v85/page.rb +376 -0
  78. data/lib/selenium/webdriver/devtools/v85/performance.rb +65 -0
  79. data/lib/selenium/webdriver/devtools/v85/profiler.rb +113 -0
  80. data/lib/selenium/webdriver/devtools/v85/runtime.rb +196 -0
  81. data/lib/selenium/webdriver/devtools/v85/schema.rb +48 -0
  82. data/lib/selenium/webdriver/devtools/v85/security.rb +73 -0
  83. data/lib/selenium/webdriver/devtools/v85/service_worker.rb +118 -0
  84. data/lib/selenium/webdriver/devtools/v85/storage.rb +97 -0
  85. data/lib/selenium/webdriver/devtools/v85/system_info.rb +52 -0
  86. data/lib/selenium/webdriver/devtools/v85/target.rb +145 -0
  87. data/lib/selenium/webdriver/devtools/v85/tethering.rb +57 -0
  88. data/lib/selenium/webdriver/devtools/v85/tracing.rb +78 -0
  89. data/lib/selenium/webdriver/devtools/v85/web_audio.rb +72 -0
  90. data/lib/selenium/webdriver/devtools/v85/web_authn.rb +96 -0
  91. data/lib/selenium/webdriver/devtools/v86/accessibility.rb +64 -0
  92. data/lib/selenium/webdriver/devtools/v86/animation.rb +100 -0
  93. data/lib/selenium/webdriver/devtools/v86/application_cache.rb +66 -0
  94. data/lib/selenium/webdriver/devtools/v86/audits.rb +63 -0
  95. data/lib/selenium/webdriver/devtools/v86/background_service.rb +69 -0
  96. data/lib/selenium/webdriver/devtools/v86/browser.rb +125 -0
  97. data/lib/selenium/webdriver/devtools/v86/cache_storage.rb +75 -0
  98. data/lib/selenium/webdriver/devtools/v86/cast.rb +72 -0
  99. data/lib/selenium/webdriver/devtools/v86/console.rb +59 -0
  100. data/lib/selenium/webdriver/devtools/v86/css.rb +181 -0
  101. data/lib/selenium/webdriver/devtools/v86/database.rb +66 -0
  102. data/lib/selenium/webdriver/devtools/v86/debugger.rb +233 -0
  103. data/lib/selenium/webdriver/devtools/v86/device_orientation.rb +55 -0
  104. data/lib/selenium/webdriver/devtools/v86/dom.rb +329 -0
  105. data/lib/selenium/webdriver/devtools/v86/dom_debugger.rb +95 -0
  106. data/lib/selenium/webdriver/devtools/v86/dom_snapshot.rb +67 -0
  107. data/lib/selenium/webdriver/devtools/v86/dom_storage.rb +81 -0
  108. data/lib/selenium/webdriver/devtools/v86/emulation.rb +193 -0
  109. data/lib/selenium/webdriver/devtools/v86/fetch.rb +99 -0
  110. data/lib/selenium/webdriver/devtools/v86/headless_experimental.rb +63 -0
  111. data/lib/selenium/webdriver/devtools/v86/heap_profiler.rb +109 -0
  112. data/lib/selenium/webdriver/devtools/v86/indexed_db.rb +102 -0
  113. data/lib/selenium/webdriver/devtools/v86/input.rb +143 -0
  114. data/lib/selenium/webdriver/devtools/v86/inspector.rb +57 -0
  115. data/lib/selenium/webdriver/devtools/v86/io.rb +61 -0
  116. data/lib/selenium/webdriver/devtools/v86/layer_tree.rb +97 -0
  117. data/lib/selenium/webdriver/devtools/v86/log.rb +68 -0
  118. data/lib/selenium/webdriver/devtools/v86/media.rb +59 -0
  119. data/lib/selenium/webdriver/devtools/v86/memory.rb +88 -0
  120. data/lib/selenium/webdriver/devtools/v86/network.rb +235 -0
  121. data/lib/selenium/webdriver/devtools/v86/overlay.rb +183 -0
  122. data/lib/selenium/webdriver/devtools/v86/page.rb +376 -0
  123. data/lib/selenium/webdriver/devtools/v86/performance.rb +65 -0
  124. data/lib/selenium/webdriver/devtools/v86/profiler.rb +113 -0
  125. data/lib/selenium/webdriver/devtools/v86/runtime.rb +196 -0
  126. data/lib/selenium/webdriver/devtools/v86/schema.rb +48 -0
  127. data/lib/selenium/webdriver/devtools/v86/security.rb +73 -0
  128. data/lib/selenium/webdriver/devtools/v86/service_worker.rb +118 -0
  129. data/lib/selenium/webdriver/devtools/v86/storage.rb +97 -0
  130. data/lib/selenium/webdriver/devtools/v86/system_info.rb +52 -0
  131. data/lib/selenium/webdriver/devtools/v86/target.rb +145 -0
  132. data/lib/selenium/webdriver/devtools/v86/tethering.rb +57 -0
  133. data/lib/selenium/webdriver/devtools/v86/tracing.rb +78 -0
  134. data/lib/selenium/webdriver/devtools/v86/web_audio.rb +72 -0
  135. data/lib/selenium/webdriver/devtools/v86/web_authn.rb +102 -0
  136. data/lib/selenium/webdriver/devtools/v87/accessibility.rb +73 -0
  137. data/lib/selenium/webdriver/devtools/v87/animation.rb +100 -0
  138. data/lib/selenium/webdriver/devtools/v87/application_cache.rb +66 -0
  139. data/lib/selenium/webdriver/devtools/v87/audits.rb +63 -0
  140. data/lib/selenium/webdriver/devtools/v87/background_service.rb +69 -0
  141. data/lib/selenium/webdriver/devtools/v87/browser.rb +125 -0
  142. data/lib/selenium/webdriver/devtools/v87/cache_storage.rb +75 -0
  143. data/lib/selenium/webdriver/devtools/v87/cast.rb +72 -0
  144. data/lib/selenium/webdriver/{edge_html/driver.rb → devtools/v87/console.rb} +36 -30
  145. data/lib/selenium/webdriver/devtools/v87/css.rb +181 -0
  146. data/lib/selenium/webdriver/devtools/v87/database.rb +66 -0
  147. data/lib/selenium/webdriver/devtools/v87/debugger.rb +233 -0
  148. data/lib/selenium/webdriver/devtools/v87/device_orientation.rb +55 -0
  149. data/lib/selenium/webdriver/devtools/v87/dom.rb +329 -0
  150. data/lib/selenium/webdriver/devtools/v87/dom_debugger.rb +95 -0
  151. data/lib/selenium/webdriver/devtools/v87/dom_snapshot.rb +67 -0
  152. data/lib/selenium/webdriver/devtools/v87/dom_storage.rb +81 -0
  153. data/lib/selenium/webdriver/devtools/v87/emulation.rb +193 -0
  154. data/lib/selenium/webdriver/devtools/v87/fetch.rb +99 -0
  155. data/lib/selenium/webdriver/devtools/v87/headless_experimental.rb +63 -0
  156. data/lib/selenium/webdriver/devtools/v87/heap_profiler.rb +109 -0
  157. data/lib/selenium/webdriver/devtools/v87/indexed_db.rb +102 -0
  158. data/lib/selenium/webdriver/devtools/v87/input.rb +143 -0
  159. data/lib/selenium/webdriver/devtools/v87/inspector.rb +57 -0
  160. data/lib/selenium/webdriver/devtools/v87/io.rb +61 -0
  161. data/lib/selenium/webdriver/devtools/v87/layer_tree.rb +97 -0
  162. data/lib/selenium/webdriver/devtools/v87/log.rb +68 -0
  163. data/lib/selenium/webdriver/devtools/v87/media.rb +59 -0
  164. data/lib/selenium/webdriver/devtools/v87/memory.rb +88 -0
  165. data/lib/selenium/webdriver/devtools/v87/network.rb +247 -0
  166. data/lib/selenium/webdriver/devtools/v87/overlay.rb +183 -0
  167. data/lib/selenium/webdriver/devtools/v87/page.rb +376 -0
  168. data/lib/selenium/webdriver/devtools/v87/performance.rb +65 -0
  169. data/lib/selenium/webdriver/devtools/v87/profiler.rb +125 -0
  170. data/lib/selenium/webdriver/devtools/v87/runtime.rb +196 -0
  171. data/lib/selenium/webdriver/devtools/v87/schema.rb +48 -0
  172. data/lib/selenium/webdriver/devtools/v87/security.rb +73 -0
  173. data/lib/selenium/webdriver/devtools/v87/service_worker.rb +118 -0
  174. data/lib/selenium/webdriver/devtools/v87/storage.rb +97 -0
  175. data/lib/selenium/webdriver/devtools/v87/system_info.rb +52 -0
  176. data/lib/selenium/webdriver/devtools/v87/target.rb +145 -0
  177. data/lib/selenium/webdriver/devtools/v87/tethering.rb +57 -0
  178. data/lib/selenium/webdriver/devtools/v87/tracing.rb +78 -0
  179. data/lib/selenium/webdriver/devtools/v87/web_audio.rb +72 -0
  180. data/lib/selenium/webdriver/devtools/v87/web_authn.rb +102 -0
  181. data/lib/selenium/webdriver/devtools/v88/accessibility.rb +73 -0
  182. data/lib/selenium/webdriver/devtools/v88/animation.rb +100 -0
  183. data/lib/selenium/webdriver/devtools/v88/application_cache.rb +66 -0
  184. data/lib/selenium/webdriver/devtools/v88/audits.rb +63 -0
  185. data/lib/selenium/webdriver/devtools/v88/background_service.rb +69 -0
  186. data/lib/selenium/webdriver/devtools/v88/browser.rb +130 -0
  187. data/lib/selenium/webdriver/devtools/v88/cache_storage.rb +75 -0
  188. data/lib/selenium/webdriver/devtools/v88/cast.rb +72 -0
  189. data/lib/selenium/webdriver/devtools/v88/console.rb +59 -0
  190. data/lib/selenium/webdriver/devtools/v88/css.rb +181 -0
  191. data/lib/selenium/webdriver/devtools/v88/database.rb +66 -0
  192. data/lib/selenium/webdriver/devtools/v88/debugger.rb +233 -0
  193. data/lib/selenium/webdriver/devtools/v88/device_orientation.rb +55 -0
  194. data/lib/selenium/webdriver/devtools/v88/dom.rb +329 -0
  195. data/lib/selenium/webdriver/devtools/v88/dom_debugger.rb +95 -0
  196. data/lib/selenium/webdriver/devtools/v88/dom_snapshot.rb +67 -0
  197. data/lib/selenium/webdriver/devtools/v88/dom_storage.rb +81 -0
  198. data/lib/selenium/webdriver/devtools/v88/emulation.rb +198 -0
  199. data/lib/selenium/webdriver/devtools/v88/fetch.rb +99 -0
  200. data/lib/selenium/webdriver/devtools/v88/headless_experimental.rb +63 -0
  201. data/lib/selenium/webdriver/devtools/v88/heap_profiler.rb +109 -0
  202. data/lib/selenium/webdriver/devtools/v88/indexed_db.rb +102 -0
  203. data/lib/selenium/webdriver/devtools/v88/input.rb +148 -0
  204. data/lib/selenium/webdriver/devtools/v88/inspector.rb +57 -0
  205. data/lib/selenium/webdriver/devtools/v88/io.rb +61 -0
  206. data/lib/selenium/webdriver/devtools/v88/layer_tree.rb +97 -0
  207. data/lib/selenium/webdriver/devtools/v88/log.rb +68 -0
  208. data/lib/selenium/webdriver/devtools/v88/media.rb +59 -0
  209. data/lib/selenium/webdriver/devtools/v88/memory.rb +88 -0
  210. data/lib/selenium/webdriver/devtools/v88/network.rb +247 -0
  211. data/lib/selenium/webdriver/devtools/v88/overlay.rb +183 -0
  212. data/lib/selenium/webdriver/devtools/v88/page.rb +376 -0
  213. data/lib/selenium/webdriver/devtools/v88/performance.rb +65 -0
  214. data/lib/selenium/webdriver/devtools/v88/profiler.rb +125 -0
  215. data/lib/selenium/webdriver/devtools/v88/runtime.rb +197 -0
  216. data/lib/selenium/webdriver/devtools/v88/schema.rb +48 -0
  217. data/lib/selenium/webdriver/devtools/v88/security.rb +73 -0
  218. data/lib/selenium/webdriver/devtools/v88/service_worker.rb +118 -0
  219. data/lib/selenium/webdriver/devtools/v88/storage.rb +103 -0
  220. data/lib/selenium/webdriver/devtools/v88/system_info.rb +52 -0
  221. data/lib/selenium/webdriver/devtools/v88/target.rb +145 -0
  222. data/lib/selenium/webdriver/devtools/v88/tethering.rb +57 -0
  223. data/lib/selenium/webdriver/devtools/v88/tracing.rb +79 -0
  224. data/lib/selenium/webdriver/devtools/v88/web_audio.rb +72 -0
  225. data/lib/selenium/webdriver/devtools/v88/web_authn.rb +102 -0
  226. data/lib/selenium/webdriver/edge.rb +7 -27
  227. data/lib/selenium/webdriver/edge/bridge.rb +37 -0
  228. data/lib/selenium/webdriver/{edge_chrome → edge}/driver.rb +14 -4
  229. data/lib/selenium/webdriver/edge/features.rb +39 -0
  230. data/lib/selenium/webdriver/{edge_chrome → edge}/options.rb +12 -3
  231. data/lib/selenium/webdriver/{edge_chrome → edge}/profile.rb +2 -2
  232. data/lib/selenium/webdriver/{edge_chrome → edge}/service.rb +2 -6
  233. data/lib/selenium/webdriver/firefox.rb +10 -4
  234. data/lib/selenium/webdriver/firefox/bridge.rb +1 -1
  235. data/lib/selenium/webdriver/firefox/driver.rb +14 -14
  236. data/lib/selenium/webdriver/firefox/features.rb +47 -0
  237. data/lib/selenium/webdriver/firefox/options.rb +26 -29
  238. data/lib/selenium/webdriver/firefox/profile.rb +13 -76
  239. data/lib/selenium/webdriver/firefox/service.rb +1 -5
  240. data/lib/selenium/webdriver/ie.rb +4 -2
  241. data/lib/selenium/webdriver/ie/driver.rb +0 -16
  242. data/lib/selenium/webdriver/ie/options.rb +7 -20
  243. data/lib/selenium/webdriver/ie/service.rb +6 -10
  244. data/lib/selenium/webdriver/remote/bridge.rb +43 -67
  245. data/lib/selenium/webdriver/remote/capabilities.rb +13 -19
  246. data/lib/selenium/webdriver/remote/commands.rb +1 -0
  247. data/lib/selenium/webdriver/remote/driver.rb +10 -12
  248. data/lib/selenium/webdriver/remote/http/default.rb +6 -7
  249. data/lib/selenium/webdriver/remote/http/persistent.rb +6 -0
  250. data/lib/selenium/webdriver/safari.rb +11 -2
  251. data/lib/selenium/webdriver/safari/bridge.rb +1 -1
  252. data/lib/selenium/webdriver/safari/driver.rb +4 -17
  253. data/lib/selenium/webdriver/{common/driver_extensions/rotatable.rb → safari/features.rb} +26 -36
  254. data/lib/selenium/webdriver/safari/options.rb +1 -33
  255. data/lib/selenium/webdriver/safari/service.rb +0 -4
  256. data/lib/selenium/webdriver/support.rb +1 -0
  257. data/lib/selenium/webdriver/support/block_event_listener.rb +1 -1
  258. data/lib/selenium/webdriver/support/color.rb +2 -2
  259. data/lib/selenium/webdriver/support/event_firing_bridge.rb +2 -2
  260. data/lib/selenium/webdriver/support/relative_locator.rb +51 -0
  261. data/lib/selenium/webdriver/version.rb +1 -1
  262. data/selenium-webdriver.gemspec +10 -7
  263. data/selenium_server_deploy.jar +0 -0
  264. metadata +254 -26
  265. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +0 -64
  266. data/lib/selenium/webdriver/edge_html/options.rb +0 -91
  267. data/lib/selenium/webdriver/edge_html/service.rb +0 -51
  268. data/lib/selenium/webdriver/firefox/binary.rb +0 -110
  269. data/lib/selenium/webdriver/firefox/extension/prefs.json +0 -69
@@ -29,22 +29,6 @@ module Selenium
29
29
 
30
30
  class Driver < WebDriver::Driver
31
31
  include DriverExtensions::HasWebStorage
32
- include DriverExtensions::TakesScreenshot
33
-
34
- def initialize(opts = {})
35
- opts[:desired_capabilities] ||= Remote::Capabilities.internet_explorer
36
-
37
- opts[:url] ||= service_url(opts)
38
-
39
- listener = opts.delete(:listener)
40
- desired_capabilities = opts.delete(:desired_capabilities)
41
- options = opts.delete(:options)
42
-
43
- @bridge = Remote::Bridge.new(opts)
44
- @bridge.create_session(desired_capabilities, options)
45
-
46
- super(@bridge, listener: listener)
47
- end
48
32
 
49
33
  def browser
50
34
  :internet_explorer
@@ -41,16 +41,7 @@ module Selenium
41
41
  use_per_process_proxy: 'ie.usePerProcessProxy',
42
42
  validate_cookie_document_type: 'ie.validateCookieDocumentType'
43
43
  }.freeze
44
-
45
- CAPABILITIES.each_key do |key|
46
- define_method key do
47
- @options[key]
48
- end
49
-
50
- define_method "#{key}=" do |value|
51
- @options[key] = value
52
- end
53
- end
44
+ BROWSER = 'internet explorer'
54
45
 
55
46
  attr_reader :args
56
47
 
@@ -85,10 +76,10 @@ module Selenium
85
76
  # @option opts [Boolean] validate_cookie_document_type
86
77
  #
87
78
 
88
- def initialize(args: nil, **opts)
89
- super(opts)
79
+ def initialize(**opts)
80
+ @args = (opts.delete(:args) || []).to_set
81
+ super(**opts)
90
82
 
91
- @args = (args || []).to_set
92
83
  @options[:native_events] = true if @options[:native_events].nil?
93
84
  end
94
85
 
@@ -102,15 +93,11 @@ module Selenium
102
93
  @args << arg
103
94
  end
104
95
 
105
- #
106
- # @api private
107
- #
96
+ private
108
97
 
109
- def as_json(*)
110
- options = super
98
+ def process_browser_options(browser_options)
99
+ options = browser_options[KEY]
111
100
  options['ie.browserCommandLineSwitches'] = @args.to_a.join(' ') if @args.any?
112
-
113
- {KEY => generate_as_json(options)}
114
101
  end
115
102
  end # Options
116
103
  end # IE
@@ -20,10 +20,6 @@
20
20
  module Selenium
21
21
  module WebDriver
22
22
  module IE
23
- #
24
- # @api private
25
- #
26
-
27
23
  class Service < WebDriver::Service
28
24
  DEFAULT_PORT = 5555
29
25
  EXECUTABLE = 'IEDriverServer'
@@ -36,15 +32,15 @@ module Selenium
36
32
 
37
33
  private
38
34
 
39
- # Note: This processing is deprecated
35
+ # NOTE: This processing is deprecated
40
36
  def extract_service_args(driver_opts)
41
37
  driver_args = super
42
38
  driver_opts = driver_opts.dup
43
- driver_args << "--log-level=#{driver_opts.delete(:log_level).to_s.upcase}" if driver_opts.key?(:log_level)
44
- driver_args << "--log-file=#{driver_opts.delete(:log_file)}" if driver_opts.key?(:log_file)
45
- driver_args << "--implementation=#{driver_opts.delete(:implementation).to_s.upcase}" if driver_opts.key?(:implementation)
46
- driver_args << "--host=#{driver_opts.delete(:host)}" if driver_opts.key?(:host)
47
- driver_args << "--extract_path=#{driver_opts.delete(:extract_path)}" if driver_opts.key?(:extract_path)
39
+ driver_args << "--log-level=#{driver_opts[:log_level].to_s.upcase}" if driver_opts.key?(:log_level)
40
+ driver_args << "--log-file=#{driver_opts[:log_file]}" if driver_opts.key?(:log_file)
41
+ driver_args << "--implementation=#{driver_opts[:implementation].to_s.upcase}" if driver_opts.key?(:implementation)
42
+ driver_args << "--host=#{driver_opts[:host]}" if driver_opts.key?(:host)
43
+ driver_args << "--extract_path=#{driver_opts[:extract_path]}" if driver_opts.key?(:extract_path)
48
44
  driver_args << "--silent" if driver_opts[:silent] == true
49
45
  driver_args
50
46
  end
@@ -30,30 +30,17 @@ module Selenium
30
30
 
31
31
  #
32
32
  # Initializes the bridge with the given server URL
33
- # @param [Hash] opts options for the driver
34
- # @option opts [String] :url url for the remote server
35
- # @option opts [Object] :http_client an HTTP client instance that implements the same protocol as Http::Default
36
- # @option opts [Capabilities] :desired_capabilities an instance of Remote::Capabilities describing the capabilities you want
33
+ # @param [String, URI] :url url for the remote server
34
+ # @param [Object] :http_client an HTTP client instance that implements the same protocol as Http::Default
37
35
  # @api private
38
36
  #
39
37
 
40
- def initialize(opts = {})
41
- opts = opts.dup
42
-
43
- http_client = opts.delete(:http_client) { Http::Default.new }
44
- url = opts.delete(:url) { "http://#{Platform.localhost}:#{PORT}/wd/hub" }
45
- opts.delete(:options)
46
-
47
- unless opts.empty?
48
- raise ArgumentError, "unknown option#{'s' if opts.size != 1}: #{opts.inspect}"
49
- end
50
-
38
+ def initialize(url:, http_client: nil)
51
39
  uri = url.is_a?(URI) ? url : URI.parse(url)
52
- uri.path += '/' unless %r{\/$}.match?(uri.path)
40
+ uri.path += '/' unless uri.path.end_with?('/')
53
41
 
54
- http_client.server_url = uri
55
-
56
- @http = http_client
42
+ @http = http_client || Http::Default.new
43
+ @http.server_url = uri
57
44
  @file_detector = nil
58
45
  end
59
46
 
@@ -61,8 +48,8 @@ module Selenium
61
48
  # Creates session.
62
49
  #
63
50
 
64
- def create_session(desired_capabilities, options = nil)
65
- response = execute(:new_session, {}, merged_capabilities(desired_capabilities, options))
51
+ def create_session(capabilities)
52
+ response = execute(:new_session, {}, {capabilities: {firstMatch: [capabilities]}})
66
53
 
67
54
  @session_id = response['sessionId']
68
55
  capabilities = response['capabilities']
@@ -264,6 +251,10 @@ module Selenium
264
251
  execute :take_screenshot
265
252
  end
266
253
 
254
+ def element_screenshot(element)
255
+ execute :take_element_screenshot, id: element.ref
256
+ end
257
+
267
258
  #
268
259
  # HTML 5
269
260
  #
@@ -316,22 +307,6 @@ module Selenium
316
307
  execute_script('return sessionStorage.length')
317
308
  end
318
309
 
319
- def location
320
- raise Error::UnsupportedOperationError, 'The W3C standard does not currently support getting location'
321
- end
322
-
323
- def set_location(_lat, _lon, _alt)
324
- raise Error::UnsupportedOperationError, 'The W3C standard does not currently support setting location'
325
- end
326
-
327
- def network_connection
328
- raise Error::UnsupportedOperationError, 'The W3C standard does not currently support getting network connection'
329
- end
330
-
331
- def network_connection=(_type)
332
- raise Error::UnsupportedOperationError, 'The W3C standard does not currently support setting network connection'
333
- end
334
-
335
310
  #
336
311
  # javascript execution
337
312
  #
@@ -402,6 +377,10 @@ module Selenium
402
377
  execute :release_actions
403
378
  end
404
379
 
380
+ def print_page(options = {})
381
+ execute :print_page, {}, {options: options}
382
+ end
383
+
405
384
  def click_element(element)
406
385
  execute :element_click, id: element
407
386
  end
@@ -441,14 +420,6 @@ module Selenium
441
420
  'if (arguments[0].dispatchEvent(e)) { arguments[0].submit() }', form.as_json)
442
421
  end
443
422
 
444
- def screen_orientation=(orientation)
445
- execute :set_screen_orientation, {}, {orientation: orientation}
446
- end
447
-
448
- def screen_orientation
449
- execute :get_screen_orientation
450
- end
451
-
452
423
  #
453
424
  # element properties
454
425
  #
@@ -525,23 +496,28 @@ module Selenium
525
496
  alias_method :switch_to_active_element, :active_element
526
497
 
527
498
  def find_element_by(how, what, parent = nil)
528
- how, what = convert_locators(how, what)
499
+ how, what = convert_locator(how, what)
500
+
501
+ return execute_atom(:findElements, Support::RelativeLocator.new(what).as_json).first if how == 'relative'
529
502
 
530
503
  id = if parent
531
- execute :find_child_element, {id: parent}, {using: how, value: what}
504
+ execute :find_child_element, {id: parent}, {using: how, value: what.to_s}
532
505
  else
533
- execute :find_element, {}, {using: how, value: what}
506
+ execute :find_element, {}, {using: how, value: what.to_s}
534
507
  end
508
+
535
509
  Element.new self, element_id_from(id)
536
510
  end
537
511
 
538
512
  def find_elements_by(how, what, parent = nil)
539
- how, what = convert_locators(how, what)
513
+ how, what = convert_locator(how, what)
514
+
515
+ return execute_atom :findElements, Support::RelativeLocator.new(what).as_json if how == 'relative'
540
516
 
541
517
  ids = if parent
542
- execute :find_child_elements, {id: parent}, {using: how, value: what}
518
+ execute :find_child_elements, {id: parent}, {using: how, value: what.to_s}
543
519
  else
544
- execute :find_elements, {}, {using: how, value: what}
520
+ execute :find_elements, {}, {using: how, value: what.to_s}
545
521
  end
546
522
 
547
523
  ids.map { |id| Element.new self, element_id_from(id) }
@@ -579,16 +555,6 @@ module Selenium
579
555
  COMMANDS[command]
580
556
  end
581
557
 
582
- def merged_capabilities(capabilities, options = nil)
583
- capabilities.merge!(options.as_json) if options
584
-
585
- {
586
- capabilities: {
587
- firstMatch: [capabilities]
588
- }
589
- }
590
- end
591
-
592
558
  def unwrap_script_result(arg)
593
559
  case arg
594
560
  when Array
@@ -607,31 +573,41 @@ module Selenium
607
573
  id['ELEMENT'] || id['element-6066-11e4-a52e-4f735466cecf']
608
574
  end
609
575
 
610
- def convert_locators(how, what)
576
+ def convert_locator(how, what)
577
+ how = SearchContext::FINDERS[how.to_sym] || how
578
+
611
579
  case how
612
580
  when 'class name'
613
581
  how = 'css selector'
614
- what = ".#{escape_css(what)}"
582
+ what = ".#{escape_css(what.to_s)}"
615
583
  when 'id'
616
584
  how = 'css selector'
617
- what = "##{escape_css(what)}"
585
+ what = "##{escape_css(what.to_s)}"
618
586
  when 'name'
619
587
  how = 'css selector'
620
- what = "*[name='#{escape_css(what)}']"
588
+ what = "*[name='#{escape_css(what.to_s)}']"
621
589
  when 'tag name'
622
590
  how = 'css selector'
623
591
  end
592
+
593
+ if what.is_a?(Hash)
594
+ what = what.each_with_object({}) do |(h, w), hash|
595
+ h, w = convert_locator(h.to_s, w)
596
+ hash[h] = w
597
+ end
598
+ end
599
+
624
600
  [how, what]
625
601
  end
626
602
 
627
- ESCAPE_CSS_REGEXP = /(['"\\#.:;,!?+<>=~*^$|%&@`{}\-\[\]\(\)])/.freeze
603
+ ESCAPE_CSS_REGEXP = /(['"\\#.:;,!?+<>=~*^$|%&@`{}\-\[\]()])/.freeze
628
604
  UNICODE_CODE_POINT = 30
629
605
 
630
606
  # Escapes invalid characters in CSS selector.
631
607
  # @see https://mathiasbynens.be/notes/css-escapes
632
608
  def escape_css(string)
633
609
  string = string.gsub(ESCAPE_CSS_REGEXP) { |match| "\\#{match}" }
634
- string = "\\#{UNICODE_CODE_POINT + Integer(string[0])} #{string[1..-1]}" if !string.empty? && string[0].match?(/[[:digit:]]/)
610
+ string = "\\#{UNICODE_CODE_POINT + Integer(string[0])} #{string[1..-1]}" if string[0]&.match?(/[[:digit:]]/)
635
611
 
636
612
  string
637
613
  end
@@ -82,17 +82,6 @@ module Selenium
82
82
  end
83
83
 
84
84
  def edge(opts = {})
85
- edge_html(opts)
86
- end
87
-
88
- def edge_html(opts = {})
89
- new({
90
- browser_name: 'MicrosoftEdge',
91
- platform_name: :windows
92
- }.merge(opts))
93
- end
94
-
95
- def edge_chrome(opts = {})
96
85
  new({
97
86
  browser_name: 'MicrosoftEdge'
98
87
  }.merge(opts))
@@ -105,6 +94,7 @@ module Selenium
105
94
  opts[:timeouts]['implicit'] = opts.delete(:implicit_timeout) if opts.key?(:implicit_timeout)
106
95
  opts[:timeouts]['pageLoad'] = opts.delete(:page_load_timeout) if opts.key?(:page_load_timeout)
107
96
  opts[:timeouts]['script'] = opts.delete(:script_timeout) if opts.key?(:script_timeout)
97
+ opts.delete(:timeouts) if opts[:timeouts].empty?
108
98
  new({browser_name: 'firefox'}.merge(opts))
109
99
  end
110
100
 
@@ -112,8 +102,7 @@ module Selenium
112
102
 
113
103
  def safari(opts = {})
114
104
  new({
115
- browser_name: 'safari',
116
- platform_name: :mac
105
+ browser_name: Selenium::WebDriver::Safari.technology_preview? ? "Safari Technology Preview" : 'safari'
117
106
  }.merge(opts))
118
107
  end
119
108
 
@@ -145,12 +134,7 @@ module Selenium
145
134
  caps.accept_insecure_certs = data.delete('acceptInsecureCerts') if data.key?('acceptInsecureCerts')
146
135
  caps.page_load_strategy = data.delete('pageLoadStrategy') if data.key?('pageLoadStrategy')
147
136
 
148
- if data.key?('timeouts')
149
- timeouts = data.delete('timeouts')
150
- caps.implicit_timeout = timeouts['implicit'] if timeouts
151
- caps.page_load_timeout = timeouts['pageLoad'] if timeouts
152
- caps.script_timeout = timeouts['script'] if timeouts
153
- end
137
+ process_timeouts(caps, data.delete('timeouts'))
154
138
 
155
139
  if data.key?('proxy')
156
140
  proxy = data.delete('proxy')
@@ -165,6 +149,16 @@ module Selenium
165
149
 
166
150
  caps
167
151
  end
152
+
153
+ private
154
+
155
+ def process_timeouts(caps, timeouts)
156
+ return if timeouts.nil?
157
+
158
+ caps.implicit_timeout = timeouts['implicit']
159
+ caps.page_load_timeout = timeouts['pageLoad']
160
+ caps.script_timeout = timeouts['script']
161
+ end
168
162
  end
169
163
 
170
164
  #
@@ -117,6 +117,7 @@ module Selenium
117
117
 
118
118
  actions: [:post, 'session/:session_id/actions'],
119
119
  release_actions: [:delete, 'session/:session_id/actions'],
120
+ print_page: [:post, 'session/:session_id/print'],
120
121
 
121
122
  #
122
123
  # Element Operations
@@ -28,30 +28,28 @@ module Selenium
28
28
 
29
29
  class Driver < WebDriver::Driver
30
30
  include DriverExtensions::UploadsFiles
31
- include DriverExtensions::TakesScreenshot
32
31
  include DriverExtensions::HasSessionId
33
- include DriverExtensions::Rotatable
34
32
  include DriverExtensions::HasRemoteStatus
35
33
  include DriverExtensions::HasWebStorage
36
34
 
37
- def initialize(opts = {})
38
- listener = opts.delete(:listener)
39
- desired_capabilities = opts.delete(:desired_capabilities) { Capabilities.new }
40
-
35
+ def initialize(bridge: nil, listener: nil, **opts)
36
+ desired_capabilities = opts[:desired_capabilities]
41
37
  if desired_capabilities.is_a?(Symbol)
42
- unless Capabilities.respond_to?(desired_capabilities)
38
+ unless Remote::Capabilities.respond_to?(desired_capabilities)
43
39
  raise Error::WebDriverError, "invalid desired capability: #{desired_capabilities.inspect}"
44
40
  end
45
41
 
46
- desired_capabilities = Capabilities.__send__(desired_capabilities)
42
+ opts[:desired_capabilities] = Remote::Capabilities.__send__(desired_capabilities)
47
43
  end
44
+ opts[:url] ||= "http://#{Platform.localhost}:4444/wd/hub"
45
+ super
46
+ end
48
47
 
49
- @bridge = Bridge.new(opts)
50
- @bridge.create_session(desired_capabilities, opts.delete(:options))
48
+ def print_page(**options)
49
+ options[:page_ranges] &&= Array(options[:page_ranges])
51
50
 
52
- super(@bridge, listener: listener)
51
+ @bridge.print_page(options)
53
52
  end
54
-
55
53
  end # Driver
56
54
  end # Remote
57
55
  end # WebDriver
@@ -28,8 +28,7 @@ module Selenium
28
28
  class Default < Common
29
29
  attr_writer :proxy
30
30
 
31
- attr_accessor :open_timeout
32
- attr_accessor :read_timeout
31
+ attr_accessor :open_timeout, :read_timeout
33
32
 
34
33
  # Initializes object.
35
34
  # Warning: Setting {#open_timeout} to non-nil values will cause a separate thread to spawn.
@@ -39,6 +38,7 @@ module Selenium
39
38
  def initialize(open_timeout: nil, read_timeout: nil)
40
39
  @open_timeout = open_timeout
41
40
  @read_timeout = read_timeout
41
+ super()
42
42
  end
43
43
 
44
44
  def close
@@ -89,15 +89,15 @@ module Selenium
89
89
  retries += 1
90
90
  sleep 2
91
91
  retry
92
- rescue Errno::EADDRNOTAVAIL => ex
92
+ rescue Errno::EADDRNOTAVAIL => e
93
93
  # a retry is sometimes needed when the port becomes temporarily unavailable
94
94
  raise if retries >= MAX_RETRIES
95
95
 
96
96
  retries += 1
97
97
  sleep 2
98
98
  retry
99
- rescue Errno::ECONNREFUSED => ex
100
- raise ex.class, "using proxy: #{proxy.http}" if use_proxy?
99
+ rescue Errno::ECONNREFUSED => e
100
+ raise e.class, "using proxy: #{proxy.http}" if use_proxy?
101
101
 
102
102
  raise
103
103
  end
@@ -132,8 +132,7 @@ module Selenium
132
132
 
133
133
  proxy = URI.parse(url)
134
134
 
135
- clazz = Net::HTTP::Proxy(proxy.host, proxy.port, proxy.user, proxy.password)
136
- clazz.new(server_url.host, server_url.port)
135
+ Net::HTTP.new(server_url.host, server_url.port, proxy.host, proxy.port, proxy.user, proxy.password)
137
136
  else
138
137
  Net::HTTP.new server_url.host, server_url.port
139
138
  end