selenium-webdriver 4.0.0.alpha5 → 4.0.0.alpha6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +38 -0
  3. data/LICENSE +1 -1
  4. data/lib/selenium/webdriver/atoms/findElements.js +1 -1
  5. data/lib/selenium/webdriver/chrome/bridge.rb +4 -6
  6. data/lib/selenium/webdriver/chrome/driver.rb +4 -0
  7. data/lib/selenium/webdriver/chrome/options.rb +24 -19
  8. data/lib/selenium/webdriver/common.rb +1 -0
  9. data/lib/selenium/webdriver/common/driver.rb +55 -23
  10. data/lib/selenium/webdriver/common/logger.rb +1 -1
  11. data/lib/selenium/webdriver/common/manager.rb +5 -0
  12. data/lib/selenium/webdriver/common/options.rb +32 -9
  13. data/lib/selenium/webdriver/common/port_prober.rb +4 -6
  14. data/lib/selenium/webdriver/common/service.rb +12 -106
  15. data/lib/selenium/webdriver/common/service_manager.rb +151 -0
  16. data/lib/selenium/webdriver/devtools.rb +118 -0
  17. data/lib/selenium/webdriver/devtools/accessibility.rb +62 -0
  18. data/lib/selenium/webdriver/devtools/animation.rb +98 -0
  19. data/lib/selenium/webdriver/devtools/application_cache.rb +64 -0
  20. data/lib/selenium/webdriver/devtools/audits.rb +61 -0
  21. data/lib/selenium/webdriver/devtools/background_service.rb +67 -0
  22. data/lib/selenium/webdriver/devtools/browser.rb +123 -0
  23. data/lib/selenium/webdriver/devtools/cache_storage.rb +73 -0
  24. data/lib/selenium/webdriver/devtools/cast.rb +70 -0
  25. data/lib/selenium/webdriver/devtools/console.rb +57 -0
  26. data/lib/selenium/webdriver/devtools/css.rb +165 -0
  27. data/lib/selenium/webdriver/devtools/database.rb +64 -0
  28. data/lib/selenium/webdriver/devtools/debugger.rb +229 -0
  29. data/lib/selenium/webdriver/devtools/device_orientation.rb +53 -0
  30. data/lib/selenium/webdriver/devtools/dom.rb +320 -0
  31. data/lib/selenium/webdriver/devtools/domdebugger.rb +93 -0
  32. data/lib/selenium/webdriver/devtools/domsnapshot.rb +65 -0
  33. data/lib/selenium/webdriver/devtools/domstorage.rb +79 -0
  34. data/lib/selenium/webdriver/devtools/emulation.rb +180 -0
  35. data/lib/selenium/webdriver/devtools/fetch.rb +97 -0
  36. data/lib/selenium/webdriver/devtools/headless_experimental.rb +61 -0
  37. data/lib/selenium/webdriver/devtools/heap_profiler.rb +107 -0
  38. data/lib/selenium/webdriver/devtools/indexed_db.rb +100 -0
  39. data/lib/selenium/webdriver/devtools/input.rb +140 -0
  40. data/lib/selenium/webdriver/devtools/inspector.rb +55 -0
  41. data/lib/selenium/webdriver/devtools/io.rb +59 -0
  42. data/lib/selenium/webdriver/devtools/layer_tree.rb +95 -0
  43. data/lib/selenium/webdriver/devtools/log.rb +66 -0
  44. data/lib/selenium/webdriver/devtools/media.rb +57 -0
  45. data/lib/selenium/webdriver/devtools/memory.rb +86 -0
  46. data/lib/selenium/webdriver/devtools/network.rb +228 -0
  47. data/lib/selenium/webdriver/devtools/overlay.rb +157 -0
  48. data/lib/selenium/webdriver/devtools/page.rb +374 -0
  49. data/lib/selenium/webdriver/devtools/performance.rb +63 -0
  50. data/lib/selenium/webdriver/devtools/profiler.rb +111 -0
  51. data/lib/selenium/webdriver/devtools/runtime.rb +193 -0
  52. data/lib/selenium/webdriver/devtools/schema.rb +46 -0
  53. data/lib/selenium/webdriver/devtools/security.rb +71 -0
  54. data/lib/selenium/webdriver/devtools/service_worker.rb +116 -0
  55. data/lib/selenium/webdriver/devtools/storage.rb +95 -0
  56. data/lib/selenium/webdriver/devtools/system_info.rb +50 -0
  57. data/lib/selenium/webdriver/devtools/target.rb +141 -0
  58. data/lib/selenium/webdriver/devtools/tethering.rb +55 -0
  59. data/lib/selenium/webdriver/devtools/tracing.rb +76 -0
  60. data/lib/selenium/webdriver/devtools/web_audio.rb +70 -0
  61. data/lib/selenium/webdriver/devtools/web_authn.rb +94 -0
  62. data/lib/selenium/webdriver/edge_chrome/bridge.rb +9 -2
  63. data/lib/selenium/webdriver/edge_chrome/driver.rb +4 -0
  64. data/lib/selenium/webdriver/edge_chrome/options.rb +2 -0
  65. data/lib/selenium/webdriver/edge_html/options.rb +2 -9
  66. data/lib/selenium/webdriver/firefox/bridge.rb +1 -1
  67. data/lib/selenium/webdriver/firefox/driver.rb +4 -0
  68. data/lib/selenium/webdriver/firefox/options.rb +5 -10
  69. data/lib/selenium/webdriver/ie/options.rb +7 -10
  70. data/lib/selenium/webdriver/remote/bridge.rb +3 -13
  71. data/lib/selenium/webdriver/remote/capabilities.rb +11 -6
  72. data/lib/selenium/webdriver/safari/bridge.rb +1 -1
  73. data/lib/selenium/webdriver/safari/driver.rb +4 -0
  74. data/lib/selenium/webdriver/safari/options.rb +1 -8
  75. data/lib/selenium/webdriver/support/cdp_client_generator.rb +77 -0
  76. data/lib/selenium/webdriver/support/color.rb +2 -2
  77. data/lib/selenium/webdriver/version.rb +1 -1
  78. data/selenium-webdriver.gemspec +2 -2
  79. metadata +53 -5
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed to the Software Freedom Conservancy (SFC) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The SFC licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
20
+ # This file is automatically generated. Any changes will be lost!
21
+ module Selenium
22
+ module WebDriver
23
+ class DevTools
24
+ def domsnapshot
25
+ @domsnapshot ||= DOMSnapshot.new(self)
26
+ end
27
+
28
+ class DOMSnapshot
29
+
30
+ def initialize(devtools)
31
+ @devtools = devtools
32
+ end
33
+
34
+ def on(event, &block)
35
+ event = EVENTS[event] if event.is_a?(Symbol)
36
+ @devtools.callbacks["DOMSnapshot.#{event}"] << block
37
+ end
38
+
39
+ def disable
40
+ @devtools.send_cmd('DOMSnapshot.disable')
41
+ end
42
+
43
+ def enable
44
+ @devtools.send_cmd('DOMSnapshot.enable')
45
+ end
46
+
47
+ def get_snapshot(computed_style_whitelist:, include_event_listeners: nil, include_paint_order: nil, include_user_agent_shadow_tree: nil)
48
+ @devtools.send_cmd('DOMSnapshot.getSnapshot',
49
+ computedStyleWhitelist: computed_style_whitelist,
50
+ includeEventListeners: include_event_listeners,
51
+ includePaintOrder: include_paint_order,
52
+ includeUserAgentShadowTree: include_user_agent_shadow_tree)
53
+ end
54
+
55
+ def capture_snapshot(computed_styles:, include_paint_order: nil, include_domrects: nil)
56
+ @devtools.send_cmd('DOMSnapshot.captureSnapshot',
57
+ computedStyles: computed_styles,
58
+ includePaintOrder: include_paint_order,
59
+ includeDOMRects: include_domrects)
60
+ end
61
+
62
+ end # DOMSnapshot
63
+ end # DevTools
64
+ end # WebDriver
65
+ end # Selenium
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed to the Software Freedom Conservancy (SFC) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The SFC licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
20
+ # This file is automatically generated. Any changes will be lost!
21
+ module Selenium
22
+ module WebDriver
23
+ class DevTools
24
+ def domstorage
25
+ @domstorage ||= DOMStorage.new(self)
26
+ end
27
+
28
+ class DOMStorage
29
+ EVENTS = {
30
+ dom_storage_item_added: 'domStorageItemAdded',
31
+ dom_storage_item_removed: 'domStorageItemRemoved',
32
+ dom_storage_item_updated: 'domStorageItemUpdated',
33
+ dom_storage_items_cleared: 'domStorageItemsCleared',
34
+ }
35
+
36
+ def initialize(devtools)
37
+ @devtools = devtools
38
+ end
39
+
40
+ def on(event, &block)
41
+ event = EVENTS[event] if event.is_a?(Symbol)
42
+ @devtools.callbacks["DOMStorage.#{event}"] << block
43
+ end
44
+
45
+ def clear(storage_id:)
46
+ @devtools.send_cmd('DOMStorage.clear',
47
+ storageId: storage_id)
48
+ end
49
+
50
+ def disable
51
+ @devtools.send_cmd('DOMStorage.disable')
52
+ end
53
+
54
+ def enable
55
+ @devtools.send_cmd('DOMStorage.enable')
56
+ end
57
+
58
+ def get_domstorage_items(storage_id:)
59
+ @devtools.send_cmd('DOMStorage.getDOMStorageItems',
60
+ storageId: storage_id)
61
+ end
62
+
63
+ def remove_domstorage_item(storage_id:, key:)
64
+ @devtools.send_cmd('DOMStorage.removeDOMStorageItem',
65
+ storageId: storage_id,
66
+ key: key)
67
+ end
68
+
69
+ def set_domstorage_item(storage_id:, key:, value:)
70
+ @devtools.send_cmd('DOMStorage.setDOMStorageItem',
71
+ storageId: storage_id,
72
+ key: key,
73
+ value: value)
74
+ end
75
+
76
+ end # DOMStorage
77
+ end # DevTools
78
+ end # WebDriver
79
+ end # Selenium
@@ -0,0 +1,180 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed to the Software Freedom Conservancy (SFC) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The SFC licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
20
+ # This file is automatically generated. Any changes will be lost!
21
+ module Selenium
22
+ module WebDriver
23
+ class DevTools
24
+ def emulation
25
+ @emulation ||= Emulation.new(self)
26
+ end
27
+
28
+ class Emulation
29
+ EVENTS = {
30
+ virtual_time_budget_expired: 'virtualTimeBudgetExpired',
31
+ }
32
+
33
+ def initialize(devtools)
34
+ @devtools = devtools
35
+ end
36
+
37
+ def on(event, &block)
38
+ event = EVENTS[event] if event.is_a?(Symbol)
39
+ @devtools.callbacks["Emulation.#{event}"] << block
40
+ end
41
+
42
+ def can_emulate
43
+ @devtools.send_cmd('Emulation.canEmulate')
44
+ end
45
+
46
+ def clear_device_metrics_override
47
+ @devtools.send_cmd('Emulation.clearDeviceMetricsOverride')
48
+ end
49
+
50
+ def clear_geolocation_override
51
+ @devtools.send_cmd('Emulation.clearGeolocationOverride')
52
+ end
53
+
54
+ def reset_page_scale_factor
55
+ @devtools.send_cmd('Emulation.resetPageScaleFactor')
56
+ end
57
+
58
+ def set_focus_emulation_enabled(enabled:)
59
+ @devtools.send_cmd('Emulation.setFocusEmulationEnabled',
60
+ enabled: enabled)
61
+ end
62
+
63
+ def set_cputhrottling_rate(rate:)
64
+ @devtools.send_cmd('Emulation.setCPUThrottlingRate',
65
+ rate: rate)
66
+ end
67
+
68
+ def set_default_background_color_override(color: nil)
69
+ @devtools.send_cmd('Emulation.setDefaultBackgroundColorOverride',
70
+ color: color)
71
+ end
72
+
73
+ def set_device_metrics_override(width:, height:, device_scale_factor:, mobile:, scale: nil, screen_width: nil, screen_height: nil, position_x: nil, position_y: nil, dont_set_visible_size: nil, screen_orientation: nil, viewport: nil)
74
+ @devtools.send_cmd('Emulation.setDeviceMetricsOverride',
75
+ width: width,
76
+ height: height,
77
+ deviceScaleFactor: device_scale_factor,
78
+ mobile: mobile,
79
+ scale: scale,
80
+ screenWidth: screen_width,
81
+ screenHeight: screen_height,
82
+ positionX: position_x,
83
+ positionY: position_y,
84
+ dontSetVisibleSize: dont_set_visible_size,
85
+ screenOrientation: screen_orientation,
86
+ viewport: viewport)
87
+ end
88
+
89
+ def set_scrollbars_hidden(hidden:)
90
+ @devtools.send_cmd('Emulation.setScrollbarsHidden',
91
+ hidden: hidden)
92
+ end
93
+
94
+ def set_document_cookie_disabled(disabled:)
95
+ @devtools.send_cmd('Emulation.setDocumentCookieDisabled',
96
+ disabled: disabled)
97
+ end
98
+
99
+ def set_emit_touch_events_for_mouse(enabled:, configuration: nil)
100
+ @devtools.send_cmd('Emulation.setEmitTouchEventsForMouse',
101
+ enabled: enabled,
102
+ configuration: configuration)
103
+ end
104
+
105
+ def set_emulated_media(media: nil, features: nil)
106
+ @devtools.send_cmd('Emulation.setEmulatedMedia',
107
+ media: media,
108
+ features: features)
109
+ end
110
+
111
+ def set_emulated_vision_deficiency(type:)
112
+ @devtools.send_cmd('Emulation.setEmulatedVisionDeficiency',
113
+ type: type)
114
+ end
115
+
116
+ def set_geolocation_override(latitude: nil, longitude: nil, accuracy: nil)
117
+ @devtools.send_cmd('Emulation.setGeolocationOverride',
118
+ latitude: latitude,
119
+ longitude: longitude,
120
+ accuracy: accuracy)
121
+ end
122
+
123
+ def set_navigator_overrides(platform:)
124
+ @devtools.send_cmd('Emulation.setNavigatorOverrides',
125
+ platform: platform)
126
+ end
127
+
128
+ def set_page_scale_factor(page_scale_factor:)
129
+ @devtools.send_cmd('Emulation.setPageScaleFactor',
130
+ pageScaleFactor: page_scale_factor)
131
+ end
132
+
133
+ def set_script_execution_disabled(value:)
134
+ @devtools.send_cmd('Emulation.setScriptExecutionDisabled',
135
+ value: value)
136
+ end
137
+
138
+ def set_touch_emulation_enabled(enabled:, max_touch_points: nil)
139
+ @devtools.send_cmd('Emulation.setTouchEmulationEnabled',
140
+ enabled: enabled,
141
+ maxTouchPoints: max_touch_points)
142
+ end
143
+
144
+ def set_virtual_time_policy(policy:, budget: nil, max_virtual_time_task_starvation_count: nil, wait_for_navigation: nil, initial_virtual_time: nil)
145
+ @devtools.send_cmd('Emulation.setVirtualTimePolicy',
146
+ policy: policy,
147
+ budget: budget,
148
+ maxVirtualTimeTaskStarvationCount: max_virtual_time_task_starvation_count,
149
+ waitForNavigation: wait_for_navigation,
150
+ initialVirtualTime: initial_virtual_time)
151
+ end
152
+
153
+ def set_locale_override(locale: nil)
154
+ @devtools.send_cmd('Emulation.setLocaleOverride',
155
+ locale: locale)
156
+ end
157
+
158
+ def set_timezone_override(timezone_id:)
159
+ @devtools.send_cmd('Emulation.setTimezoneOverride',
160
+ timezoneId: timezone_id)
161
+ end
162
+
163
+ def set_visible_size(width:, height:)
164
+ @devtools.send_cmd('Emulation.setVisibleSize',
165
+ width: width,
166
+ height: height)
167
+ end
168
+
169
+ def set_user_agent_override(user_agent:, accept_language: nil, platform: nil, user_agent_metadata: nil)
170
+ @devtools.send_cmd('Emulation.setUserAgentOverride',
171
+ userAgent: user_agent,
172
+ acceptLanguage: accept_language,
173
+ platform: platform,
174
+ userAgentMetadata: user_agent_metadata)
175
+ end
176
+
177
+ end # Emulation
178
+ end # DevTools
179
+ end # WebDriver
180
+ end # Selenium
@@ -0,0 +1,97 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed to the Software Freedom Conservancy (SFC) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The SFC licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
20
+ # This file is automatically generated. Any changes will be lost!
21
+ module Selenium
22
+ module WebDriver
23
+ class DevTools
24
+ def fetch
25
+ @fetch ||= Fetch.new(self)
26
+ end
27
+
28
+ class Fetch
29
+ EVENTS = {
30
+ request_paused: 'requestPaused',
31
+ auth_required: 'authRequired',
32
+ }
33
+
34
+ def initialize(devtools)
35
+ @devtools = devtools
36
+ end
37
+
38
+ def on(event, &block)
39
+ event = EVENTS[event] if event.is_a?(Symbol)
40
+ @devtools.callbacks["Fetch.#{event}"] << block
41
+ end
42
+
43
+ def disable
44
+ @devtools.send_cmd('Fetch.disable')
45
+ end
46
+
47
+ def enable(patterns: nil, handle_auth_requests: nil)
48
+ @devtools.send_cmd('Fetch.enable',
49
+ patterns: patterns,
50
+ handleAuthRequests: handle_auth_requests)
51
+ end
52
+
53
+ def fail_request(request_id:, error_reason:)
54
+ @devtools.send_cmd('Fetch.failRequest',
55
+ requestId: request_id,
56
+ errorReason: error_reason)
57
+ end
58
+
59
+ def fulfill_request(request_id:, response_code:, response_headers: nil, binary_response_headers: nil, body: nil, response_phrase: nil)
60
+ @devtools.send_cmd('Fetch.fulfillRequest',
61
+ requestId: request_id,
62
+ responseCode: response_code,
63
+ responseHeaders: response_headers,
64
+ binaryResponseHeaders: binary_response_headers,
65
+ body: body,
66
+ responsePhrase: response_phrase)
67
+ end
68
+
69
+ def continue_request(request_id:, url: nil, method: nil, post_data: nil, headers: nil)
70
+ @devtools.send_cmd('Fetch.continueRequest',
71
+ requestId: request_id,
72
+ url: url,
73
+ method: method,
74
+ postData: post_data,
75
+ headers: headers)
76
+ end
77
+
78
+ def continue_with_auth(request_id:, auth_challenge_response:)
79
+ @devtools.send_cmd('Fetch.continueWithAuth',
80
+ requestId: request_id,
81
+ authChallengeResponse: auth_challenge_response)
82
+ end
83
+
84
+ def get_response_body(request_id:)
85
+ @devtools.send_cmd('Fetch.getResponseBody',
86
+ requestId: request_id)
87
+ end
88
+
89
+ def take_response_body_as_stream(request_id:)
90
+ @devtools.send_cmd('Fetch.takeResponseBodyAsStream',
91
+ requestId: request_id)
92
+ end
93
+
94
+ end # Fetch
95
+ end # DevTools
96
+ end # WebDriver
97
+ end # Selenium
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Licensed to the Software Freedom Conservancy (SFC) under one
4
+ # or more contributor license agreements. See the NOTICE file
5
+ # distributed with this work for additional information
6
+ # regarding copyright ownership. The SFC licenses this file
7
+ # to you under the Apache License, Version 2.0 (the
8
+ # "License"); you may not use this file except in compliance
9
+ # with the License. You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing,
14
+ # software distributed under the License is distributed on an
15
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ # KIND, either express or implied. See the License for the
17
+ # specific language governing permissions and limitations
18
+ # under the License.
19
+
20
+ # This file is automatically generated. Any changes will be lost!
21
+ module Selenium
22
+ module WebDriver
23
+ class DevTools
24
+ def headless_experimental
25
+ @headless_experimental ||= HeadlessExperimental.new(self)
26
+ end
27
+
28
+ class HeadlessExperimental
29
+ EVENTS = {
30
+ needs_begin_frames_changed: 'needsBeginFramesChanged',
31
+ }
32
+
33
+ def initialize(devtools)
34
+ @devtools = devtools
35
+ end
36
+
37
+ def on(event, &block)
38
+ event = EVENTS[event] if event.is_a?(Symbol)
39
+ @devtools.callbacks["HeadlessExperimental.#{event}"] << block
40
+ end
41
+
42
+ def begin_frame(frame_time_ticks: nil, interval: nil, no_display_updates: nil, screenshot: nil)
43
+ @devtools.send_cmd('HeadlessExperimental.beginFrame',
44
+ frameTimeTicks: frame_time_ticks,
45
+ interval: interval,
46
+ noDisplayUpdates: no_display_updates,
47
+ screenshot: screenshot)
48
+ end
49
+
50
+ def disable
51
+ @devtools.send_cmd('HeadlessExperimental.disable')
52
+ end
53
+
54
+ def enable
55
+ @devtools.send_cmd('HeadlessExperimental.enable')
56
+ end
57
+
58
+ end # HeadlessExperimental
59
+ end # DevTools
60
+ end # WebDriver
61
+ end # Selenium