selenium-webdriver 4.0.0.alpha3 → 4.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
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