playwright-ruby-client 1.14.beta1 → 1.15.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/documentation/docs/api/accessibility.md +16 -17
  3. data/documentation/docs/api/browser.md +2 -0
  4. data/documentation/docs/api/browser_type.md +1 -0
  5. data/documentation/docs/api/element_handle.md +4 -5
  6. data/documentation/docs/api/experimental/android.md +15 -2
  7. data/documentation/docs/api/experimental/android_device.md +1 -0
  8. data/documentation/docs/api/frame.md +62 -106
  9. data/documentation/docs/api/locator.md +41 -41
  10. data/documentation/docs/api/mouse.md +3 -4
  11. data/documentation/docs/api/page.md +6 -6
  12. data/documentation/docs/api/request.md +15 -19
  13. data/documentation/docs/api/selectors.md +29 -3
  14. data/documentation/docs/api/tracing.md +13 -12
  15. data/documentation/docs/api/worker.md +12 -11
  16. data/documentation/docs/article/guides/inspector.md +1 -1
  17. data/documentation/docs/article/guides/playwright_on_alpine_linux.md +1 -1
  18. data/documentation/docs/article/guides/semi_automation.md +1 -1
  19. data/documentation/docs/article/guides/use_storage_state.md +78 -0
  20. data/lib/playwright.rb +44 -4
  21. data/lib/playwright/channel_owners/browser_type.rb +0 -1
  22. data/lib/playwright/channel_owners/frame.rb +5 -0
  23. data/lib/playwright/channel_owners/page.rb +4 -0
  24. data/lib/playwright/channel_owners/playwright.rb +9 -0
  25. data/lib/playwright/channel_owners/request.rb +8 -8
  26. data/lib/playwright/connection.rb +3 -8
  27. data/lib/playwright/locator_impl.rb +3 -3
  28. data/lib/playwright/tracing_impl.rb +9 -8
  29. data/lib/playwright/utils.rb +0 -1
  30. data/lib/playwright/version.rb +2 -2
  31. data/lib/playwright_api/android.rb +21 -8
  32. data/lib/playwright_api/android_device.rb +8 -7
  33. data/lib/playwright_api/browser.rb +10 -8
  34. data/lib/playwright_api/browser_context.rb +6 -6
  35. data/lib/playwright_api/browser_type.rb +8 -7
  36. data/lib/playwright_api/cdp_session.rb +6 -6
  37. data/lib/playwright_api/console_message.rb +6 -6
  38. data/lib/playwright_api/dialog.rb +6 -6
  39. data/lib/playwright_api/element_handle.rb +7 -7
  40. data/lib/playwright_api/frame.rb +14 -14
  41. data/lib/playwright_api/js_handle.rb +6 -6
  42. data/lib/playwright_api/locator.rb +16 -3
  43. data/lib/playwright_api/page.rb +13 -13
  44. data/lib/playwright_api/playwright.rb +6 -6
  45. data/lib/playwright_api/request.rb +6 -6
  46. data/lib/playwright_api/response.rb +6 -6
  47. data/lib/playwright_api/route.rb +6 -6
  48. data/lib/playwright_api/selectors.rb +38 -7
  49. data/lib/playwright_api/web_socket.rb +6 -6
  50. data/lib/playwright_api/worker.rb +6 -6
  51. metadata +4 -3
data/lib/playwright.rb CHANGED
@@ -35,16 +35,18 @@ Dir[File.join(__dir__, 'playwright_api', '*.rb')].each { |f| require f }
35
35
 
36
36
  module Playwright
37
37
  class Execution
38
- def initialize(connection, playwright)
38
+ def initialize(connection, playwright, browser = nil)
39
39
  @connection = connection
40
40
  @playwright = playwright
41
+ @browser = browser
41
42
  end
42
43
 
43
44
  def stop
45
+ @browser&.close
44
46
  @connection.stop
45
47
  end
46
48
 
47
- attr_reader :playwright
49
+ attr_reader :playwright, :browser
48
50
  end
49
51
 
50
52
  # Recommended to call this method with block.
@@ -64,7 +66,7 @@ module Playwright
64
66
 
65
67
  execution =
66
68
  begin
67
- playwright = connection.wait_for_object_with_known_name('Playwright')
69
+ playwright = connection.initialize_playwright
68
70
  Execution.new(connection, PlaywrightApi.wrap(playwright))
69
71
  rescue
70
72
  connection.stop
@@ -100,7 +102,7 @@ module Playwright
100
102
 
101
103
  execution =
102
104
  begin
103
- playwright = connection.wait_for_object_with_known_name('Playwright')
105
+ playwright = connection.initialize_playwright
104
106
  Execution.new(connection, PlaywrightApi.wrap(playwright))
105
107
  rescue
106
108
  connection.stop
@@ -117,4 +119,42 @@ module Playwright
117
119
  execution
118
120
  end
119
121
  end
122
+
123
+ # Connects to Playwright server, launched by `npx playwright launch-server chromium` or `playwright.chromium.launchServer()`
124
+ #
125
+ # Playwright.connect_to_browser_server('ws://....') do |browser|
126
+ # page = browser.new_page
127
+ # ...
128
+ # end
129
+ #
130
+ # @experimental
131
+ module_function def connect_to_browser_server(ws_endpoint, &block)
132
+ require 'playwright/web_socket_client'
133
+ require 'playwright/web_socket_transport'
134
+
135
+ transport = WebSocketTransport.new(ws_endpoint: ws_endpoint)
136
+ connection = Connection.new(transport)
137
+ connection.async_run
138
+
139
+ execution =
140
+ begin
141
+ playwright = connection.initialize_playwright
142
+ browser = playwright.send(:pre_launched_browser)
143
+ browser.send(:update_as_remote)
144
+ Execution.new(connection, PlaywrightApi.wrap(playwright), PlaywrightApi.wrap(browser))
145
+ rescue
146
+ connection.stop
147
+ raise
148
+ end
149
+
150
+ if block
151
+ begin
152
+ block.call(execution.browser)
153
+ ensure
154
+ execution.stop
155
+ end
156
+ else
157
+ execution
158
+ end
159
+ end
120
160
  end
@@ -42,7 +42,6 @@ module Playwright
42
42
  raise 'Connecting over CDP is only supported in Chromium.' unless name == 'chromium'
43
43
 
44
44
  params = {
45
- sdkLanguage: 'ruby',
46
45
  endpointURL: endpointURL,
47
46
  headers: headers,
48
47
  slowMo: slowMo,
@@ -309,15 +309,20 @@ module Playwright
309
309
  target,
310
310
  force: nil,
311
311
  noWaitAfter: nil,
312
+ sourcePosition: nil,
312
313
  strict: nil,
314
+ targetPosition: nil,
313
315
  timeout: nil,
314
316
  trial: nil)
317
+
315
318
  params = {
316
319
  source: source,
317
320
  target: target,
318
321
  force: force,
319
322
  noWaitAfter: noWaitAfter,
323
+ sourcePosition: sourcePosition,
320
324
  strict: strict,
325
+ targetPosition: targetPosition,
321
326
  timeout: timeout,
322
327
  trial: trial,
323
328
  }.compact
@@ -475,7 +475,9 @@ module Playwright
475
475
  target,
476
476
  force: nil,
477
477
  noWaitAfter: nil,
478
+ sourcePosition: nil,
478
479
  strict: nil,
480
+ targetPosition: nil,
479
481
  timeout: nil,
480
482
  trial: nil)
481
483
 
@@ -484,7 +486,9 @@ module Playwright
484
486
  target,
485
487
  force: force,
486
488
  noWaitAfter: noWaitAfter,
489
+ sourcePosition: sourcePosition,
487
490
  strict: strict,
491
+ targetPosition: targetPosition,
488
492
  timeout: timeout,
489
493
  trial: trial)
490
494
  end
@@ -30,6 +30,15 @@ module Playwright
30
30
  end.to_h
31
31
  end
32
32
 
33
+ # used only from Playwright#connect_to_browser_server
34
+ private def pre_launched_browser
35
+ unless @initializer['preLaunchedBrowser']
36
+ raise 'Malformed endpoint. Did you use launchServer method?'
37
+ end
38
+
39
+ ::Playwright::ChannelOwners::Browser.from(@initializer['preLaunchedBrowser'])
40
+ end
41
+
33
42
  private def parse_device_descriptor(descriptor)
34
43
  # This return value can be passed into Browser#new_context as it is.
35
44
  # ex:
@@ -100,14 +100,14 @@ module Playwright
100
100
  request_start:,
101
101
  response_start:)
102
102
 
103
- @timing["startTime"] = start_time
104
- @timing["domainLookupStart"] = domain_lookup_start
105
- @timing["domainLookupEnd"] = domain_lookup_end
106
- @timing["connectStart"] = connect_start
107
- @timing["secureConnectionStart"] = secure_connection_start
108
- @timing["connectEnd"] = connect_end
109
- @timing["requestStart"] = request_start
110
- @timing["responseStart"] = response_start
103
+ @timing[:startTime] = start_time
104
+ @timing[:domainLookupStart] = domain_lookup_start
105
+ @timing[:domainLookupEnd] = domain_lookup_end
106
+ @timing[:connectStart] = connect_start
107
+ @timing[:secureConnectionStart] = secure_connection_start
108
+ @timing[:connectEnd] = connect_end
109
+ @timing[:requestStart] = request_start
110
+ @timing[:responseStart] = response_start
111
111
  end
112
112
 
113
113
  private def update_headers(headers)
@@ -31,14 +31,9 @@ module Playwright
31
31
  @transport.stop
32
32
  end
33
33
 
34
- def wait_for_object_with_known_name(guid)
35
- if @objects[guid]
36
- return @objects[guid]
37
- end
38
-
39
- callback = Concurrent::Promises.resolvable_future
40
- @waiting_for_object[guid] = callback
41
- callback.value!
34
+ def initialize_playwright
35
+ result = send_message_to_server('', 'initialize', { sdkLanguage: 'ruby' })
36
+ ChannelOwners::Playwright.from(result['playwright'])
42
37
  end
43
38
 
44
39
  def async_send_message_to_server(guid, method, params)
@@ -142,7 +142,7 @@ module Playwright
142
142
  LocatorImpl.new(
143
143
  frame: @frame,
144
144
  timeout_settings: @timeout_settings,
145
- selector: "#{@selector} >> _nth=first",
145
+ selector: "#{@selector} >> nth=0",
146
146
  )
147
147
  end
148
148
 
@@ -150,7 +150,7 @@ module Playwright
150
150
  LocatorImpl.new(
151
151
  frame: @frame,
152
152
  timeout_settings: @timeout_settings,
153
- selector: "#{@selector} >> _nth=last",
153
+ selector: "#{@selector} >> nth=-1",
154
154
  )
155
155
  end
156
156
 
@@ -158,7 +158,7 @@ module Playwright
158
158
  LocatorImpl.new(
159
159
  frame: @frame,
160
160
  timeout_settings: @timeout_settings,
161
- selector: "#{@selector} >> _nth=#{index}",
161
+ selector: "#{@selector} >> nth=#{index}",
162
162
  )
163
163
  end
164
164
 
@@ -16,16 +16,17 @@ module Playwright
16
16
 
17
17
  # Stop tracing.
18
18
  def stop(path: nil)
19
+ export(path: path) if path
19
20
  @channel.send_message_to_server('tracingStop')
21
+ end
20
22
 
21
- if path
22
- resp = @channel.send_message_to_server('tracingExport')
23
- artifact = ChannelOwners::Artifact.from(resp)
24
- # if self._context._browser:
25
- # artifact._is_remote = self._context._browser._is_remote
26
- artifact.save_as(path)
27
- artifact.delete
28
- end
23
+ private def export(path:)
24
+ resp = @channel.send_message_to_server('tracingExport')
25
+ artifact = ChannelOwners::Artifact.from(resp)
26
+ # if self._context._browser:
27
+ # artifact._is_remote = self._context._browser._is_remote
28
+ artifact.save_as(path)
29
+ artifact.delete
29
30
  end
30
31
  end
31
32
  end
@@ -3,7 +3,6 @@ module Playwright
3
3
  module PrepareBrowserContextOptions
4
4
  # @see https://github.com/microsoft/playwright/blob/5a2cfdbd47ed3c3deff77bb73e5fac34241f649d/src/client/browserContext.ts#L265
5
5
  private def prepare_browser_context_options(params)
6
- params[:sdkLanguage] = 'ruby'
7
6
  if params[:noViewport] == 0
8
7
  params.delete(:noViewport)
9
8
  params[:noDefaultViewport] = true
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Playwright
4
- VERSION = '1.14.beta1'
5
- COMPATIBLE_PLAYWRIGHT_VERSION = '1.14.0'
4
+ VERSION = '1.15.beta1'
5
+ COMPATIBLE_PLAYWRIGHT_VERSION = '1.15.0'
6
6
  end
@@ -1,6 +1,19 @@
1
1
  module Playwright
2
- # Playwright has **experimental** support for Android automation. See [here](./mobile.md) for more information. You can
3
- # access android namespace via:
2
+ # Playwright has **experimental** support for Android automation. This includes Chrome for Android and Android WebView.
3
+ #
4
+ # *Requirements*
5
+ # - Android device or AVD Emulator.
6
+ # - [ADB daemon](https://developer.android.com/studio/command-line/adb) running and authenticated with your device.
7
+ # Typically running `adb devices` is all you need to do.
8
+ # - [`Chrome 87`](https://play.google.com/store/apps/details?id=com.android.chrome) or newer installed on the device
9
+ # - "Enable command line on non-rooted devices" enabled in `chrome://flags`.
10
+ #
11
+ # *Known limitations*
12
+ # - Raw USB operation is not yet supported, so you need ADB.
13
+ # - Device needs to be awake to produce screenshots. Enabling "Stay awake" developer mode will help.
14
+ # - We didn't run all the tests against the device, so not everything works.
15
+ #
16
+ # *How to run*
4
17
  #
5
18
  # An example of the Android automation script would be:
6
19
  #
@@ -23,12 +36,6 @@ module Playwright
23
36
  end
24
37
  alias_method :default_timeout=, :set_default_timeout
25
38
 
26
- # -- inherited from EventEmitter --
27
- # @nodoc
28
- def once(event, callback)
29
- event_emitter_proxy.once(event, callback)
30
- end
31
-
32
39
  # -- inherited from EventEmitter --
33
40
  # @nodoc
34
41
  def on(event, callback)
@@ -41,6 +48,12 @@ module Playwright
41
48
  event_emitter_proxy.off(event, callback)
42
49
  end
43
50
 
51
+ # -- inherited from EventEmitter --
52
+ # @nodoc
53
+ def once(event, callback)
54
+ event_emitter_proxy.once(event, callback)
55
+ end
56
+
44
57
  private def event_emitter_proxy
45
58
  @event_emitter_proxy ||= EventEmitterProxy.new(self, @impl)
46
59
  end
@@ -62,11 +62,12 @@ module Playwright
62
62
  record_video_size: nil,
63
63
  reducedMotion: nil,
64
64
  screen: nil,
65
+ strictSelectors: nil,
65
66
  timezoneId: nil,
66
67
  userAgent: nil,
67
68
  viewport: nil,
68
69
  &block)
69
- wrap_impl(@impl.launch_browser(acceptDownloads: unwrap_impl(acceptDownloads), baseURL: unwrap_impl(baseURL), bypassCSP: unwrap_impl(bypassCSP), colorScheme: unwrap_impl(colorScheme), command: unwrap_impl(command), deviceScaleFactor: unwrap_impl(deviceScaleFactor), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), geolocation: unwrap_impl(geolocation), hasTouch: unwrap_impl(hasTouch), httpCredentials: unwrap_impl(httpCredentials), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale), noViewport: unwrap_impl(noViewport), offline: unwrap_impl(offline), permissions: unwrap_impl(permissions), record_har_omit_content: unwrap_impl(record_har_omit_content), record_har_path: unwrap_impl(record_har_path), record_video_dir: unwrap_impl(record_video_dir), record_video_size: unwrap_impl(record_video_size), reducedMotion: unwrap_impl(reducedMotion), screen: unwrap_impl(screen), timezoneId: unwrap_impl(timezoneId), userAgent: unwrap_impl(userAgent), viewport: unwrap_impl(viewport), &wrap_block_call(block)))
70
+ wrap_impl(@impl.launch_browser(acceptDownloads: unwrap_impl(acceptDownloads), baseURL: unwrap_impl(baseURL), bypassCSP: unwrap_impl(bypassCSP), colorScheme: unwrap_impl(colorScheme), command: unwrap_impl(command), deviceScaleFactor: unwrap_impl(deviceScaleFactor), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), geolocation: unwrap_impl(geolocation), hasTouch: unwrap_impl(hasTouch), httpCredentials: unwrap_impl(httpCredentials), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale), noViewport: unwrap_impl(noViewport), offline: unwrap_impl(offline), permissions: unwrap_impl(permissions), record_har_omit_content: unwrap_impl(record_har_omit_content), record_har_path: unwrap_impl(record_har_path), record_video_dir: unwrap_impl(record_video_dir), record_video_size: unwrap_impl(record_video_size), reducedMotion: unwrap_impl(reducedMotion), screen: unwrap_impl(screen), strictSelectors: unwrap_impl(strictSelectors), timezoneId: unwrap_impl(timezoneId), userAgent: unwrap_impl(userAgent), viewport: unwrap_impl(viewport), &wrap_block_call(block)))
70
71
  end
71
72
 
72
73
  # Performs a long tap on the widget defined by `selector`.
@@ -172,12 +173,6 @@ module Playwright
172
173
  wrap_impl(@impl.tree)
173
174
  end
174
175
 
175
- # -- inherited from EventEmitter --
176
- # @nodoc
177
- def once(event, callback)
178
- event_emitter_proxy.once(event, callback)
179
- end
180
-
181
176
  # -- inherited from EventEmitter --
182
177
  # @nodoc
183
178
  def on(event, callback)
@@ -190,6 +185,12 @@ module Playwright
190
185
  event_emitter_proxy.off(event, callback)
191
186
  end
192
187
 
188
+ # -- inherited from EventEmitter --
189
+ # @nodoc
190
+ def once(event, callback)
191
+ event_emitter_proxy.once(event, callback)
192
+ end
193
+
193
194
  private def event_emitter_proxy
194
195
  @event_emitter_proxy ||= EventEmitterProxy.new(self, @impl)
195
196
  end
@@ -88,11 +88,12 @@ module Playwright
88
88
  reducedMotion: nil,
89
89
  screen: nil,
90
90
  storageState: nil,
91
+ strictSelectors: nil,
91
92
  timezoneId: nil,
92
93
  userAgent: nil,
93
94
  viewport: nil,
94
95
  &block)
95
- wrap_impl(@impl.new_context(acceptDownloads: unwrap_impl(acceptDownloads), baseURL: unwrap_impl(baseURL), bypassCSP: unwrap_impl(bypassCSP), colorScheme: unwrap_impl(colorScheme), deviceScaleFactor: unwrap_impl(deviceScaleFactor), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), geolocation: unwrap_impl(geolocation), hasTouch: unwrap_impl(hasTouch), httpCredentials: unwrap_impl(httpCredentials), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale), noViewport: unwrap_impl(noViewport), offline: unwrap_impl(offline), permissions: unwrap_impl(permissions), proxy: unwrap_impl(proxy), record_har_omit_content: unwrap_impl(record_har_omit_content), record_har_path: unwrap_impl(record_har_path), record_video_dir: unwrap_impl(record_video_dir), record_video_size: unwrap_impl(record_video_size), reducedMotion: unwrap_impl(reducedMotion), screen: unwrap_impl(screen), storageState: unwrap_impl(storageState), timezoneId: unwrap_impl(timezoneId), userAgent: unwrap_impl(userAgent), viewport: unwrap_impl(viewport), &wrap_block_call(block)))
96
+ wrap_impl(@impl.new_context(acceptDownloads: unwrap_impl(acceptDownloads), baseURL: unwrap_impl(baseURL), bypassCSP: unwrap_impl(bypassCSP), colorScheme: unwrap_impl(colorScheme), deviceScaleFactor: unwrap_impl(deviceScaleFactor), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), geolocation: unwrap_impl(geolocation), hasTouch: unwrap_impl(hasTouch), httpCredentials: unwrap_impl(httpCredentials), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale), noViewport: unwrap_impl(noViewport), offline: unwrap_impl(offline), permissions: unwrap_impl(permissions), proxy: unwrap_impl(proxy), record_har_omit_content: unwrap_impl(record_har_omit_content), record_har_path: unwrap_impl(record_har_path), record_video_dir: unwrap_impl(record_video_dir), record_video_size: unwrap_impl(record_video_size), reducedMotion: unwrap_impl(reducedMotion), screen: unwrap_impl(screen), storageState: unwrap_impl(storageState), strictSelectors: unwrap_impl(strictSelectors), timezoneId: unwrap_impl(timezoneId), userAgent: unwrap_impl(userAgent), viewport: unwrap_impl(viewport), &wrap_block_call(block)))
96
97
  end
97
98
 
98
99
  # Creates a new page in a new browser context. Closing this page will close the context as well.
@@ -125,11 +126,12 @@ module Playwright
125
126
  reducedMotion: nil,
126
127
  screen: nil,
127
128
  storageState: nil,
129
+ strictSelectors: nil,
128
130
  timezoneId: nil,
129
131
  userAgent: nil,
130
132
  viewport: nil,
131
133
  &block)
132
- wrap_impl(@impl.new_page(acceptDownloads: unwrap_impl(acceptDownloads), baseURL: unwrap_impl(baseURL), bypassCSP: unwrap_impl(bypassCSP), colorScheme: unwrap_impl(colorScheme), deviceScaleFactor: unwrap_impl(deviceScaleFactor), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), geolocation: unwrap_impl(geolocation), hasTouch: unwrap_impl(hasTouch), httpCredentials: unwrap_impl(httpCredentials), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale), noViewport: unwrap_impl(noViewport), offline: unwrap_impl(offline), permissions: unwrap_impl(permissions), proxy: unwrap_impl(proxy), record_har_omit_content: unwrap_impl(record_har_omit_content), record_har_path: unwrap_impl(record_har_path), record_video_dir: unwrap_impl(record_video_dir), record_video_size: unwrap_impl(record_video_size), reducedMotion: unwrap_impl(reducedMotion), screen: unwrap_impl(screen), storageState: unwrap_impl(storageState), timezoneId: unwrap_impl(timezoneId), userAgent: unwrap_impl(userAgent), viewport: unwrap_impl(viewport), &wrap_block_call(block)))
134
+ wrap_impl(@impl.new_page(acceptDownloads: unwrap_impl(acceptDownloads), baseURL: unwrap_impl(baseURL), bypassCSP: unwrap_impl(bypassCSP), colorScheme: unwrap_impl(colorScheme), deviceScaleFactor: unwrap_impl(deviceScaleFactor), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), geolocation: unwrap_impl(geolocation), hasTouch: unwrap_impl(hasTouch), httpCredentials: unwrap_impl(httpCredentials), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale), noViewport: unwrap_impl(noViewport), offline: unwrap_impl(offline), permissions: unwrap_impl(permissions), proxy: unwrap_impl(proxy), record_har_omit_content: unwrap_impl(record_har_omit_content), record_har_path: unwrap_impl(record_har_path), record_video_dir: unwrap_impl(record_video_dir), record_video_size: unwrap_impl(record_video_size), reducedMotion: unwrap_impl(reducedMotion), screen: unwrap_impl(screen), storageState: unwrap_impl(storageState), strictSelectors: unwrap_impl(strictSelectors), timezoneId: unwrap_impl(timezoneId), userAgent: unwrap_impl(userAgent), viewport: unwrap_impl(viewport), &wrap_block_call(block)))
133
135
  end
134
136
 
135
137
  # > NOTE: This API controls [Chromium Tracing](https://www.chromium.org/developers/how-tos/trace-event-profiling-tool)
@@ -162,12 +164,6 @@ module Playwright
162
164
  wrap_impl(@impl.version)
163
165
  end
164
166
 
165
- # -- inherited from EventEmitter --
166
- # @nodoc
167
- def once(event, callback)
168
- event_emitter_proxy.once(event, callback)
169
- end
170
-
171
167
  # -- inherited from EventEmitter --
172
168
  # @nodoc
173
169
  def on(event, callback)
@@ -180,6 +176,12 @@ module Playwright
180
176
  event_emitter_proxy.off(event, callback)
181
177
  end
182
178
 
179
+ # -- inherited from EventEmitter --
180
+ # @nodoc
181
+ def once(event, callback)
182
+ event_emitter_proxy.once(event, callback)
183
+ end
184
+
183
185
  private def event_emitter_proxy
184
186
  @event_emitter_proxy ||= EventEmitterProxy.new(self, @impl)
185
187
  end
@@ -387,12 +387,6 @@ module Playwright
387
387
  wrap_impl(@impl.options=(unwrap_impl(req)))
388
388
  end
389
389
 
390
- # -- inherited from EventEmitter --
391
- # @nodoc
392
- def once(event, callback)
393
- event_emitter_proxy.once(event, callback)
394
- end
395
-
396
390
  # -- inherited from EventEmitter --
397
391
  # @nodoc
398
392
  def on(event, callback)
@@ -405,6 +399,12 @@ module Playwright
405
399
  event_emitter_proxy.off(event, callback)
406
400
  end
407
401
 
402
+ # -- inherited from EventEmitter --
403
+ # @nodoc
404
+ def once(event, callback)
405
+ event_emitter_proxy.once(event, callback)
406
+ end
407
+
408
408
  private def event_emitter_proxy
409
409
  @event_emitter_proxy ||= EventEmitterProxy.new(self, @impl)
410
410
  end
@@ -130,13 +130,14 @@ module Playwright
130
130
  reducedMotion: nil,
131
131
  screen: nil,
132
132
  slowMo: nil,
133
+ strictSelectors: nil,
133
134
  timeout: nil,
134
135
  timezoneId: nil,
135
136
  tracesDir: nil,
136
137
  userAgent: nil,
137
138
  viewport: nil,
138
139
  &block)
139
- wrap_impl(@impl.launch_persistent_context(unwrap_impl(userDataDir), acceptDownloads: unwrap_impl(acceptDownloads), args: unwrap_impl(args), baseURL: unwrap_impl(baseURL), bypassCSP: unwrap_impl(bypassCSP), channel: unwrap_impl(channel), chromiumSandbox: unwrap_impl(chromiumSandbox), colorScheme: unwrap_impl(colorScheme), deviceScaleFactor: unwrap_impl(deviceScaleFactor), devtools: unwrap_impl(devtools), downloadsPath: unwrap_impl(downloadsPath), env: unwrap_impl(env), executablePath: unwrap_impl(executablePath), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), geolocation: unwrap_impl(geolocation), handleSIGHUP: unwrap_impl(handleSIGHUP), handleSIGINT: unwrap_impl(handleSIGINT), handleSIGTERM: unwrap_impl(handleSIGTERM), hasTouch: unwrap_impl(hasTouch), headless: unwrap_impl(headless), httpCredentials: unwrap_impl(httpCredentials), ignoreDefaultArgs: unwrap_impl(ignoreDefaultArgs), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale), noViewport: unwrap_impl(noViewport), offline: unwrap_impl(offline), permissions: unwrap_impl(permissions), proxy: unwrap_impl(proxy), record_har_omit_content: unwrap_impl(record_har_omit_content), record_har_path: unwrap_impl(record_har_path), record_video_dir: unwrap_impl(record_video_dir), record_video_size: unwrap_impl(record_video_size), reducedMotion: unwrap_impl(reducedMotion), screen: unwrap_impl(screen), slowMo: unwrap_impl(slowMo), timeout: unwrap_impl(timeout), timezoneId: unwrap_impl(timezoneId), tracesDir: unwrap_impl(tracesDir), userAgent: unwrap_impl(userAgent), viewport: unwrap_impl(viewport), &wrap_block_call(block)))
140
+ wrap_impl(@impl.launch_persistent_context(unwrap_impl(userDataDir), acceptDownloads: unwrap_impl(acceptDownloads), args: unwrap_impl(args), baseURL: unwrap_impl(baseURL), bypassCSP: unwrap_impl(bypassCSP), channel: unwrap_impl(channel), chromiumSandbox: unwrap_impl(chromiumSandbox), colorScheme: unwrap_impl(colorScheme), deviceScaleFactor: unwrap_impl(deviceScaleFactor), devtools: unwrap_impl(devtools), downloadsPath: unwrap_impl(downloadsPath), env: unwrap_impl(env), executablePath: unwrap_impl(executablePath), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), geolocation: unwrap_impl(geolocation), handleSIGHUP: unwrap_impl(handleSIGHUP), handleSIGINT: unwrap_impl(handleSIGINT), handleSIGTERM: unwrap_impl(handleSIGTERM), hasTouch: unwrap_impl(hasTouch), headless: unwrap_impl(headless), httpCredentials: unwrap_impl(httpCredentials), ignoreDefaultArgs: unwrap_impl(ignoreDefaultArgs), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale), noViewport: unwrap_impl(noViewport), offline: unwrap_impl(offline), permissions: unwrap_impl(permissions), proxy: unwrap_impl(proxy), record_har_omit_content: unwrap_impl(record_har_omit_content), record_har_path: unwrap_impl(record_har_path), record_video_dir: unwrap_impl(record_video_dir), record_video_size: unwrap_impl(record_video_size), reducedMotion: unwrap_impl(reducedMotion), screen: unwrap_impl(screen), slowMo: unwrap_impl(slowMo), strictSelectors: unwrap_impl(strictSelectors), timeout: unwrap_impl(timeout), timezoneId: unwrap_impl(timezoneId), tracesDir: unwrap_impl(tracesDir), userAgent: unwrap_impl(userAgent), viewport: unwrap_impl(viewport), &wrap_block_call(block)))
140
141
  end
141
142
 
142
143
  # Returns browser name. For example: `'chromium'`, `'webkit'` or `'firefox'`.
@@ -144,12 +145,6 @@ module Playwright
144
145
  wrap_impl(@impl.name)
145
146
  end
146
147
 
147
- # -- inherited from EventEmitter --
148
- # @nodoc
149
- def once(event, callback)
150
- event_emitter_proxy.once(event, callback)
151
- end
152
-
153
148
  # -- inherited from EventEmitter --
154
149
  # @nodoc
155
150
  def on(event, callback)
@@ -162,6 +157,12 @@ module Playwright
162
157
  event_emitter_proxy.off(event, callback)
163
158
  end
164
159
 
160
+ # -- inherited from EventEmitter --
161
+ # @nodoc
162
+ def once(event, callback)
163
+ event_emitter_proxy.once(event, callback)
164
+ end
165
+
165
166
  private def event_emitter_proxy
166
167
  @event_emitter_proxy ||= EventEmitterProxy.new(self, @impl)
167
168
  end