playwright-ruby-client 0.6.3 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/documentation/docs/api/browser.md +12 -1
  3. data/documentation/docs/api/browser_context.md +11 -1
  4. data/documentation/docs/api/browser_type.md +54 -1
  5. data/documentation/docs/api/cdp_session.md +41 -1
  6. data/documentation/docs/api/experimental/android.md +3 -2
  7. data/documentation/docs/api/page.md +18 -0
  8. data/documentation/docs/api/route.md +20 -21
  9. data/documentation/docs/api/tracing.md +8 -15
  10. data/documentation/docs/api/web_socket.md +38 -1
  11. data/documentation/docs/article/guides/launch_browser.md +2 -0
  12. data/documentation/docs/article/guides/rails_integration.md +45 -2
  13. data/documentation/docs/article/guides/recording_video.md +79 -0
  14. data/documentation/docs/article/guides/semi_automation.md +67 -0
  15. data/documentation/docs/include/api_coverage.md +13 -14
  16. data/documentation/package.json +1 -1
  17. data/documentation/yarn.lock +478 -498
  18. data/lib/playwright/channel_owners/browser.rb +19 -10
  19. data/lib/playwright/channel_owners/browser_context.rb +14 -2
  20. data/lib/playwright/channel_owners/browser_type.rb +23 -8
  21. data/lib/playwright/channel_owners/cdp_session.rb +19 -0
  22. data/lib/playwright/channel_owners/page.rb +8 -0
  23. data/lib/playwright/channel_owners/response.rb +1 -1
  24. data/lib/playwright/channel_owners/web_socket.rb +87 -0
  25. data/lib/playwright/tracing_impl.rb +9 -9
  26. data/lib/playwright/version.rb +1 -1
  27. data/lib/playwright_api/android.rb +3 -2
  28. data/lib/playwright_api/browser.rb +4 -3
  29. data/lib/playwright_api/browser_context.rb +3 -3
  30. data/lib/playwright_api/browser_type.rb +6 -5
  31. data/lib/playwright_api/cdp_session.rb +24 -2
  32. data/lib/playwright_api/page.rb +9 -9
  33. data/lib/playwright_api/response.rb +0 -5
  34. data/lib/playwright_api/tracing.rb +6 -12
  35. data/lib/playwright_api/web_socket.rb +28 -6
  36. data/playwright.gemspec +2 -1
  37. metadata +34 -16
@@ -30,24 +30,28 @@ module Playwright
30
30
  @contexts << context
31
31
  context.browser = self
32
32
  context.options = params
33
+ return context unless block
33
34
 
34
- if block
35
- begin
36
- block.call(context)
37
- ensure
38
- context.close
39
- end
40
- else
41
- context
35
+ begin
36
+ block.call(context)
37
+ ensure
38
+ context.close
42
39
  end
43
40
  end
44
41
 
45
- def new_page(**options)
42
+ def new_page(**options, &block)
46
43
  context = new_context(**options)
47
44
  page = context.new_page
48
45
  page.owned_context = context
49
46
  context.owner_page = page
50
- page
47
+
48
+ return page unless block
49
+
50
+ begin
51
+ block.call(page)
52
+ ensure
53
+ page.close
54
+ end
51
55
  end
52
56
 
53
57
  def close
@@ -63,6 +67,11 @@ module Playwright
63
67
  @initializer['version']
64
68
  end
65
69
 
70
+ def new_browser_cdp_session
71
+ resp = @channel.send_message_to_server('newBrowserCDPSession')
72
+ ChannelOwners::CDPSession.from(resp)
73
+ end
74
+
66
75
  def start_tracing(page: nil, categories: nil, path: nil, screenshots: nil)
67
76
  params = {
68
77
  page: page&.channel,
@@ -98,6 +98,11 @@ module Playwright
98
98
  page&.emit(Events::Page::Response, response)
99
99
  end
100
100
 
101
+ def new_cdp_session(page)
102
+ resp = @channel.send_message_to_server('newCDPSession', page: page.channel)
103
+ ChannelOwners::CDPSession.from(resp)
104
+ end
105
+
101
106
  def set_default_navigation_timeout(timeout)
102
107
  @timeout_settings.default_navigation_timeout = timeout
103
108
  @channel.send_message_to_server('setDefaultNavigationTimeoutNoReply', timeout: timeout)
@@ -113,10 +118,17 @@ module Playwright
113
118
  end
114
119
 
115
120
  # @returns [Playwright::Page]
116
- def new_page
121
+ def new_page(&block)
117
122
  raise 'Please use browser.new_context' if @owner_page
118
123
  resp = @channel.send_message_to_server('newPage')
119
- ChannelOwners::Page.from(resp)
124
+ page = ChannelOwners::Page.from(resp)
125
+ return page unless block
126
+
127
+ begin
128
+ block.call(page)
129
+ ensure
130
+ page.close
131
+ end
120
132
  end
121
133
 
122
134
  def cookies(urls: nil)
@@ -1,5 +1,7 @@
1
1
  module Playwright
2
2
  define_channel_owner :BrowserType do
3
+ include Utils::PrepareBrowserContextOptions
4
+
3
5
  def name
4
6
  @initializer['name']
5
7
  end
@@ -11,15 +13,28 @@ module Playwright
11
13
  def launch(options, &block)
12
14
  resp = @channel.send_message_to_server('launch', options.compact)
13
15
  browser = ChannelOwners::Browser.from(resp)
16
+ return browser unless block
14
17
 
15
- if block
16
- begin
17
- block.call(browser)
18
- ensure
19
- browser.close
20
- end
21
- else
22
- browser
18
+ begin
19
+ block.call(browser)
20
+ ensure
21
+ browser.close
22
+ end
23
+ end
24
+
25
+ def launch_persistent_context(userDataDir, **options, &block)
26
+ params = options.dup
27
+ prepare_browser_context_options(params)
28
+ params['userDataDir'] = userDataDir
29
+
30
+ resp = @channel.send_message_to_server('launchPersistentContext', params.compact)
31
+ context = ChannelOwners::Browser.from(resp)
32
+ return context unless block
33
+
34
+ begin
35
+ block.call(context)
36
+ ensure
37
+ context.close
23
38
  end
24
39
  end
25
40
 
@@ -0,0 +1,19 @@
1
+ module Playwright
2
+ define_channel_owner :CDPSession do
3
+ private def after_initialize
4
+ @channel.on('event', method(:on_event))
5
+ end
6
+
7
+ private def on_event(params)
8
+ emit(params['method'], params['params'])
9
+ end
10
+
11
+ def send_message(method, params: {})
12
+ @channel.send_message_to_server('send', method: method, params: params)
13
+ end
14
+
15
+ def detach
16
+ @channel.send_message_to_server('detach')
17
+ end
18
+ end
19
+ end
@@ -759,6 +759,10 @@ module Playwright
759
759
  expect_event(Events::Page::Request, predicate: predicate, timeout: timeout, &block)
760
760
  end
761
761
 
762
+ def expect_request_finished(predicate: nil, timeout: nil, &block)
763
+ expect_event(Events::Page::RequestFinished, predicate: predicate, timeout: timeout, &block)
764
+ end
765
+
762
766
  def expect_response(urlOrPredicate, timeout: nil, &block)
763
767
  predicate =
764
768
  case urlOrPredicate
@@ -774,6 +778,10 @@ module Playwright
774
778
  expect_event(Events::Page::Response, predicate: predicate, timeout: timeout, &block)
775
779
  end
776
780
 
781
+ def expect_websocket(predicate: nil, timeout: nil, &block)
782
+ expect_event(Events::Page::WebSocket, predicate: predicate, timeout: timeout, &block)
783
+ end
784
+
777
785
  # called from Frame with send(:timeout_settings)
778
786
  private def timeout_settings
779
787
  @timeout_settings
@@ -4,7 +4,7 @@ require 'json'
4
4
  module Playwright
5
5
  # @ref https://github.com/microsoft/playwright-python/blob/master/playwright/_impl/_network.py
6
6
  define_channel_owner :Response do
7
- def after_initialize
7
+ private def after_initialize
8
8
  @request = ChannelOwners::Request.from(@initializer['request'])
9
9
  timing = @initializer['timing']
10
10
  @request.send(:update_timings,
@@ -0,0 +1,87 @@
1
+ require 'base64'
2
+
3
+ module Playwright
4
+ define_channel_owner :WebSocket do
5
+ private def after_initialize
6
+ @closed = false
7
+
8
+ @channel.on('frameSent', -> (params) {
9
+ on_frame_sent(params['opcode'], params['data'])
10
+ })
11
+ @channel.on('frameReceived', -> (params) {
12
+ on_frame_received(params['opcode'], params['data'])
13
+ })
14
+ @channel.on('socketError', -> (params) {
15
+ emit(Events::WebSocket::Error, params['error'])
16
+ })
17
+ @channel.on('close', -> (_) { on_close })
18
+ end
19
+
20
+ def url
21
+ @initializer['url']
22
+ end
23
+
24
+ class SocketClosedError < StandardError
25
+ def initialize
26
+ super('Socket closed')
27
+ end
28
+ end
29
+
30
+ class SocketError < StandardError
31
+ def initialize
32
+ super('Socket error')
33
+ end
34
+ end
35
+
36
+ class PageClosedError < StandardError
37
+ def initialize
38
+ super('Page closed')
39
+ end
40
+ end
41
+
42
+ def expect_event(event, predicate: nil, timeout: nil, &block)
43
+ wait_helper = WaitHelper.new
44
+ wait_helper.reject_on_timeout(timeout || @parent.send(:timeout_settings).timeout, "Timeout while waiting for event \"#{event}\"")
45
+
46
+ unless event == Events::WebSocket::Close
47
+ wait_helper.reject_on_event(self, Events::WebSocket::Close, SocketClosedError.new)
48
+ end
49
+
50
+ unless event == Events::WebSocket::Error
51
+ wait_helper.reject_on_event(self, Events::WebSocket::Error, SocketError.new)
52
+ end
53
+
54
+ wait_helper.reject_on_event(@parent, 'close', PageClosedError.new)
55
+ wait_helper.wait_for_event(self, event, predicate: predicate)
56
+ block&.call
57
+
58
+ wait_helper.promise.value!
59
+ end
60
+ alias_method :wait_for_event, :expect_event
61
+
62
+ private def on_frame_sent(opcode, data)
63
+ if opcode == 2
64
+ emit(Events::WebSocket::FrameSent, Base64.strict_decode64(data))
65
+ else
66
+ emit(Events::WebSocket::FrameSent, data)
67
+ end
68
+ end
69
+
70
+ private def on_frame_received(opcode, data)
71
+ if opcode == 2
72
+ emit(Events::WebSocket::FrameReceived, Base64.strict_decode64(data))
73
+ else
74
+ emit(Events::WebSocket::FrameReceived, data)
75
+ end
76
+ end
77
+
78
+ def closed?
79
+ @closed
80
+ end
81
+
82
+ private def on_close
83
+ @closed = true
84
+ emit(Events::WebSocket::Close)
85
+ end
86
+ end
87
+ end
@@ -15,17 +15,17 @@ module Playwright
15
15
  end
16
16
 
17
17
  # Stop tracing.
18
- def stop
18
+ def stop(path: nil)
19
19
  @channel.send_message_to_server('tracingStop')
20
- end
21
20
 
22
- def export(path)
23
- resp = @channel.send_message_to_server('tracingExport')
24
- artifact = ChannelOwners::Artifact.from(resp)
25
- # if self._context._browser:
26
- # artifact._is_remote = self._context._browser._is_remote
27
- artifact.save_as(path)
28
- artifact.delete
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
29
29
  end
30
30
  end
31
31
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Playwright
4
- VERSION = '0.6.3'
4
+ VERSION = '0.7.1'
5
5
  COMPATIBLE_PLAYWRIGHT_VERSION = '1.12.0'
6
6
  end
@@ -1,12 +1,13 @@
1
1
  module Playwright
2
- # Playwright has **experimental** support for Android automation. You can access android namespace via:
2
+ # Playwright has **experimental** support for Android automation. See [here](./mobile.md) for more information. You can
3
+ # access android namespace via:
3
4
  #
4
5
  # An example of the Android automation script would be:
5
6
  #
6
7
  # Note that since you don't need Playwright to install web browsers when testing Android, you can omit browser download
7
8
  # via setting the following environment variable when installing Playwright:
8
9
  #
9
- # ```sh js
10
+ # ```bash js
10
11
  # PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm i -D playwright
11
12
  # ```
12
13
  class Android < PlaywrightApi
@@ -50,7 +50,7 @@ module Playwright
50
50
  #
51
51
  # Returns the newly created browser session.
52
52
  def new_browser_cdp_session
53
- raise NotImplementedError.new('new_browser_cdp_session is not implemented yet.')
53
+ wrap_impl(@impl.new_browser_cdp_session)
54
54
  end
55
55
 
56
56
  # Creates a new browser context. It won't share cookies/cache with other browser contexts.
@@ -125,8 +125,9 @@ module Playwright
125
125
  storageState: nil,
126
126
  timezoneId: nil,
127
127
  userAgent: nil,
128
- viewport: nil)
129
- wrap_impl(@impl.new_page(acceptDownloads: unwrap_impl(acceptDownloads), 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)))
128
+ viewport: nil,
129
+ &block)
130
+ wrap_impl(@impl.new_page(acceptDownloads: unwrap_impl(acceptDownloads), 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)))
130
131
  end
131
132
 
132
133
  # > NOTE: Tracing is only supported on Chromium-based browsers.
@@ -204,12 +204,12 @@ module Playwright
204
204
  #
205
205
  # Returns the newly created session.
206
206
  def new_cdp_session(page)
207
- raise NotImplementedError.new('new_cdp_session is not implemented yet.')
207
+ wrap_impl(@impl.new_cdp_session(unwrap_impl(page)))
208
208
  end
209
209
 
210
210
  # Creates a new page in the browser context.
211
- def new_page
212
- wrap_impl(@impl.new_page)
211
+ def new_page(&block)
212
+ wrap_impl(@impl.new_page(&wrap_block_call(block)))
213
213
  end
214
214
 
215
215
  # Returns all open pages in the context.
@@ -83,9 +83,9 @@ module Playwright
83
83
  proxy: nil,
84
84
  slowMo: nil,
85
85
  timeout: nil,
86
- traceDir: nil,
86
+ tracesDir: nil,
87
87
  &block)
88
- wrap_impl(@impl.launch(args: unwrap_impl(args), channel: unwrap_impl(channel), chromiumSandbox: unwrap_impl(chromiumSandbox), devtools: unwrap_impl(devtools), downloadsPath: unwrap_impl(downloadsPath), env: unwrap_impl(env), executablePath: unwrap_impl(executablePath), firefoxUserPrefs: unwrap_impl(firefoxUserPrefs), handleSIGHUP: unwrap_impl(handleSIGHUP), handleSIGINT: unwrap_impl(handleSIGINT), handleSIGTERM: unwrap_impl(handleSIGTERM), headless: unwrap_impl(headless), ignoreDefaultArgs: unwrap_impl(ignoreDefaultArgs), proxy: unwrap_impl(proxy), slowMo: unwrap_impl(slowMo), timeout: unwrap_impl(timeout), traceDir: unwrap_impl(traceDir), &wrap_block_call(block)))
88
+ wrap_impl(@impl.launch(args: unwrap_impl(args), channel: unwrap_impl(channel), chromiumSandbox: unwrap_impl(chromiumSandbox), devtools: unwrap_impl(devtools), downloadsPath: unwrap_impl(downloadsPath), env: unwrap_impl(env), executablePath: unwrap_impl(executablePath), firefoxUserPrefs: unwrap_impl(firefoxUserPrefs), handleSIGHUP: unwrap_impl(handleSIGHUP), handleSIGINT: unwrap_impl(handleSIGINT), handleSIGTERM: unwrap_impl(handleSIGTERM), headless: unwrap_impl(headless), ignoreDefaultArgs: unwrap_impl(ignoreDefaultArgs), proxy: unwrap_impl(proxy), slowMo: unwrap_impl(slowMo), timeout: unwrap_impl(timeout), tracesDir: unwrap_impl(tracesDir), &wrap_block_call(block)))
89
89
  end
90
90
 
91
91
  # Returns the persistent browser context instance.
@@ -131,10 +131,11 @@ module Playwright
131
131
  slowMo: nil,
132
132
  timeout: nil,
133
133
  timezoneId: nil,
134
- traceDir: nil,
134
+ tracesDir: nil,
135
135
  userAgent: nil,
136
- viewport: nil)
137
- raise NotImplementedError.new('launch_persistent_context is not implemented yet.')
136
+ viewport: nil,
137
+ &block)
138
+ wrap_impl(@impl.launch_persistent_context(unwrap_impl(userDataDir), acceptDownloads: unwrap_impl(acceptDownloads), args: unwrap_impl(args), 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)))
138
139
  end
139
140
 
140
141
  # Returns browser name. For example: `'chromium'`, `'webkit'` or `'firefox'`.
@@ -26,11 +26,33 @@ module Playwright
26
26
  # Detaches the CDPSession from the target. Once detached, the CDPSession object won't emit any events and can't be used to
27
27
  # send messages.
28
28
  def detach
29
- raise NotImplementedError.new('detach is not implemented yet.')
29
+ wrap_impl(@impl.detach)
30
30
  end
31
31
 
32
32
  def send_message(method, params: nil)
33
- raise NotImplementedError.new('send_message is not implemented yet.')
33
+ wrap_impl(@impl.send_message(unwrap_impl(method), params: unwrap_impl(params)))
34
+ end
35
+
36
+ # -- inherited from EventEmitter --
37
+ # @nodoc
38
+ def once(event, callback)
39
+ event_emitter_proxy.once(event, callback)
40
+ end
41
+
42
+ # -- inherited from EventEmitter --
43
+ # @nodoc
44
+ def on(event, callback)
45
+ event_emitter_proxy.on(event, callback)
46
+ end
47
+
48
+ # -- inherited from EventEmitter --
49
+ # @nodoc
50
+ def off(event, callback)
51
+ event_emitter_proxy.off(event, callback)
52
+ end
53
+
54
+ private def event_emitter_proxy
55
+ @event_emitter_proxy ||= EventEmitterProxy.new(self, @impl)
34
56
  end
35
57
  end
36
58
  end
@@ -1158,8 +1158,8 @@ module Playwright
1158
1158
  # Performs action and waits for a `Request` to finish loading. If predicate is provided, it passes `Request` value into
1159
1159
  # the `predicate` function and waits for `predicate(request)` to return a truthy value. Will throw an error if the page is
1160
1160
  # closed before the [`event: Page.requestFinished`] event is fired.
1161
- def expect_request_finished(predicate: nil, timeout: nil)
1162
- raise NotImplementedError.new('expect_request_finished is not implemented yet.')
1161
+ def expect_request_finished(predicate: nil, timeout: nil, &block)
1162
+ wrap_impl(@impl.expect_request_finished(predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
1163
1163
  end
1164
1164
 
1165
1165
  # Returns the matched response. See [waiting for event](./events.md#waiting-for-event) for more details about events.
@@ -1239,8 +1239,8 @@ module Playwright
1239
1239
  # Performs action and waits for a new `WebSocket`. If predicate is provided, it passes `WebSocket` value into the
1240
1240
  # `predicate` function and waits for `predicate(webSocket)` to return a truthy value. Will throw an error if the page is
1241
1241
  # closed before the WebSocket event is fired.
1242
- def expect_websocket(predicate: nil, timeout: nil)
1243
- raise NotImplementedError.new('expect_websocket is not implemented yet.')
1242
+ def expect_websocket(predicate: nil, timeout: nil, &block)
1243
+ wrap_impl(@impl.expect_websocket(predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
1244
1244
  end
1245
1245
 
1246
1246
  # Performs action and waits for a new `Worker`. If predicate is provided, it passes `Worker` value into the `predicate`
@@ -1277,6 +1277,11 @@ module Playwright
1277
1277
  wrap_impl(@impl.start_js_coverage(resetOnNavigation: unwrap_impl(resetOnNavigation), reportAnonymousScripts: unwrap_impl(reportAnonymousScripts)))
1278
1278
  end
1279
1279
 
1280
+ # @nodoc
1281
+ def stop_js_coverage
1282
+ wrap_impl(@impl.stop_js_coverage)
1283
+ end
1284
+
1280
1285
  # @nodoc
1281
1286
  def start_css_coverage(resetOnNavigation: nil, reportAnonymousScripts: nil)
1282
1287
  wrap_impl(@impl.start_css_coverage(resetOnNavigation: unwrap_impl(resetOnNavigation), reportAnonymousScripts: unwrap_impl(reportAnonymousScripts)))
@@ -1287,11 +1292,6 @@ module Playwright
1287
1292
  wrap_impl(@impl.stop_css_coverage)
1288
1293
  end
1289
1294
 
1290
- # @nodoc
1291
- def stop_js_coverage
1292
- wrap_impl(@impl.stop_js_coverage)
1293
- end
1294
-
1295
1295
  # @nodoc
1296
1296
  def guid
1297
1297
  wrap_impl(@impl.guid)