playwright-ruby-client 1.30.0 → 1.31.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aad6731aec0fa14767336de6c50ccb1242a39edf897fe891d324af9608e254a9
4
- data.tar.gz: b9fa0e7a0c050c20db856e57d3f4c04e605f0f6174430cc24bb36d018e68dc4b
3
+ metadata.gz: a07a47674b92ceb12d46b022a3c37fddd1a637b41de72df5c3e1cb040eb22490
4
+ data.tar.gz: 6ecf932e03fe4b2b7c155913d806ccd4013c57962e530bfda6dfa52f1137ba93
5
5
  SHA512:
6
- metadata.gz: c6a719dcb35d59c680ee7ff9cb290360d5e06d97b9f4cda7a15418fcb7e559c5117c0e5c637e51d80bd5966a0aff1a77d29f055107c13bc8b5a6554a3727de30
7
- data.tar.gz: 40b98d6f40febade8e2f733a135be4bf94e4a9858cac492a64d1cfe27d9fd30e92df9982a1465aaca181d21d3749656abdc710e451c2303ae4355f38d3fabb7e
6
+ metadata.gz: 06f348db3d405450347b09c7769682754cf6d2dfb14d60d1a0b15fbb092aff70e9e84dadc3376cd956a3f424f4c33e1c2839c2aaa64f8abd6cd6e14653de4a32
7
+ data.tar.gz: 5f57704d5329a591a88d3a174087ad304114860312437e440013cc16707511c614102bde3200a793480208a4d2f4f44c67f7eea624982a2c1cc28e7d762d735f
@@ -255,7 +255,7 @@ def dispatch_event(type, eventInit: nil, timeout: nil)
255
255
  ```
256
256
 
257
257
 
258
- Programmaticaly dispatch an event on the matching element.
258
+ Programmatically dispatch an event on the matching element.
259
259
 
260
260
  **Usage**
261
261
 
@@ -950,7 +950,7 @@ def press(key, delay: nil, noWaitAfter: nil, timeout: nil)
950
950
  ```
951
951
 
952
952
 
953
- Focuses the mathing element and presses a combintation of the keys.
953
+ Focuses the matching element and presses a combination of the keys.
954
954
 
955
955
  **Usage**
956
956
 
@@ -1464,7 +1464,7 @@ This method taps an element matching `selector` by performing the following step
1464
1464
  When all steps combined have not finished during the specified `timeout`, this method throws a
1465
1465
  `TimeoutError`. Passing zero timeout disables this.
1466
1466
 
1467
- **NOTE**: [Page#tap_point](./page#tap_point) requires that the `hasTouch` option of the browser context be set to true.
1467
+ **NOTE**: [Page#tap_point](./page#tap_point) the method will throw if `hasTouch` option of the browser context is false.
1468
1468
 
1469
1469
  ## text_content
1470
1470
 
@@ -43,6 +43,10 @@ end
43
43
  page.route("**/*", method(:handle))
44
44
  ```
45
45
 
46
+ **Details**
47
+
48
+ Note that any overrides such as `url` or `headers` only apply to the request being routed. If this request results in a redirect, overrides will not be applied to the new redirected request. If you want to propagate a header through redirects, use the combination of [Route#fetch](./route#fetch) and [Route#fulfill](./route#fulfill) instead.
49
+
46
50
  ## fallback
47
51
 
48
52
  ```
@@ -113,7 +117,12 @@ page.route("**/*", method(:handle))
113
117
  ## fetch
114
118
 
115
119
  ```
116
- def fetch(headers: nil, method: nil, postData: nil, url: nil)
120
+ def fetch(
121
+ headers: nil,
122
+ maxRedirects: nil,
123
+ method: nil,
124
+ postData: nil,
125
+ url: nil)
117
126
  ```
118
127
 
119
128
 
@@ -133,6 +142,10 @@ end
133
142
  page.route("https://dog.ceo/api/breeds/list/all", method(:handle))
134
143
  ```
135
144
 
145
+ **Details**
146
+
147
+ Note that `headers` option will apply to the fetched request as well as any redirects initiated by it. If you want to only apply `headers` to the original request, but not to redirects, look into [Route#continue](./route#continue) instead.
148
+
136
149
  ## fulfill
137
150
 
138
151
  ```
@@ -11,10 +11,12 @@ information.
11
11
  ## register
12
12
 
13
13
  ```
14
- def register(name, contentScript: nil, path: nil, script: nil)
14
+ def register(name, script: nil, contentScript: nil, path: nil)
15
15
  ```
16
16
 
17
17
 
18
+ Selectors must be registered before creating the page.
19
+
18
20
  **Usage**
19
21
 
20
22
  An example of registering selector engine that queries elements based on a tag name:
@@ -42,7 +44,7 @@ playwright.chromium.launch do |browser|
42
44
  # Use the selector prefixed with its name.
43
45
  button = page.locator('tag=button')
44
46
  # Combine it with other selector engines.
45
- page.locator('tag=div >> text="Click me"').click
47
+ page.locator('tag=div').get_by_text('Click me').click
46
48
 
47
49
  # Can use it in any methods supporting selectors.
48
50
  button_count = page.locator('tag=button').count
@@ -16,3 +16,5 @@ def tap_point(x, y)
16
16
 
17
17
 
18
18
  Dispatches a `touchstart` and `touchend` event with a single touch at the position (`x`,`y`).
19
+
20
+ **NOTE**: [Page#tap_point](./page#tap_point) the method will throw if `hasTouch` option of the browser context is false.
@@ -104,7 +104,7 @@ module Playwright
104
104
 
105
105
  @routes.reject!(&:expired?)
106
106
  if @routes.count == 0
107
- @channel.async_send_message_to_server('setNetworkInterceptionEnabled', enabled: false)
107
+ async_update_interception_patterns
108
108
  end
109
109
 
110
110
  unless handled
@@ -280,18 +280,14 @@ module Playwright
280
280
  def route(url, handler, times: nil)
281
281
  entry = RouteHandler.new(url, base_url, handler, times)
282
282
  @routes.unshift(entry)
283
- if @routes.count >= 1
284
- @channel.send_message_to_server('setNetworkInterceptionEnabled', enabled: true)
285
- end
283
+ update_interception_patterns
286
284
  end
287
285
 
288
286
  def unroute(url, handler: nil)
289
287
  @routes.reject! do |handler_entry|
290
288
  handler_entry.same_value?(url: url, handler: handler)
291
289
  end
292
- if @routes.count == 0
293
- @channel.send_message_to_server('setNetworkInterceptionEnabled', enabled: false)
294
- end
290
+ update_interception_patterns
295
291
  end
296
292
 
297
293
  private def record_into_har(har, page, notFound:, url:)
@@ -325,6 +321,16 @@ module Playwright
325
321
  router.add_context_route(self)
326
322
  end
327
323
 
324
+ private def async_update_interception_patterns
325
+ patterns = RouteHandler.prepare_interception_patterns(@routes)
326
+ @channel.async_send_message_to_server('setNetworkInterceptionPatterns', patterns: patterns)
327
+ end
328
+
329
+ private def update_interception_patterns
330
+ patterns = RouteHandler.prepare_interception_patterns(@routes)
331
+ @channel.send_message_to_server('setNetworkInterceptionPatterns', patterns: patterns)
332
+ end
333
+
328
334
  def expect_event(event, predicate: nil, timeout: nil, &block)
329
335
  wait_helper = WaitHelper.new
330
336
  wait_helper.reject_on_timeout(timeout || @timeout_settings.timeout, "Timeout while waiting for event \"#{event}\"")
@@ -119,7 +119,7 @@ module Playwright
119
119
 
120
120
  @routes.reject!(&:expired?)
121
121
  if @routes.count == 0
122
- @channel.async_send_message_to_server('setNetworkInterceptionEnabled', enabled: false)
122
+ async_update_interception_patterns
123
123
  end
124
124
 
125
125
  unless handled
@@ -407,18 +407,14 @@ module Playwright
407
407
  def route(url, handler, times: nil)
408
408
  entry = RouteHandler.new(url, @browser_context.send(:base_url), handler, times)
409
409
  @routes.unshift(entry)
410
- if @routes.count >= 1
411
- @channel.send_message_to_server('setNetworkInterceptionEnabled', enabled: true)
412
- end
410
+ update_interception_patterns
413
411
  end
414
412
 
415
413
  def unroute(url, handler: nil)
416
414
  @routes.reject! do |handler_entry|
417
415
  handler_entry.same_value?(url: url, handler: handler)
418
416
  end
419
- if @routes.count == 0
420
- @channel.send_message_to_server('setNetworkInterceptionEnabled', enabled: false)
421
- end
417
+ update_interception_patterns
422
418
  end
423
419
 
424
420
  def route_from_har(har, notFound: nil, update: nil, url: nil)
@@ -436,6 +432,16 @@ module Playwright
436
432
  router.add_page_route(self)
437
433
  end
438
434
 
435
+ private def async_update_interception_patterns
436
+ patterns = RouteHandler.prepare_interception_patterns(@routes)
437
+ @channel.async_send_message_to_server('setNetworkInterceptionPatterns', patterns: patterns)
438
+ end
439
+
440
+ private def update_interception_patterns
441
+ patterns = RouteHandler.prepare_interception_patterns(@routes)
442
+ @channel.send_message_to_server('setNetworkInterceptionPatterns', patterns: patterns)
443
+ end
444
+
439
445
  def screenshot(
440
446
  animations: nil,
441
447
  caret: nil,
@@ -109,7 +109,7 @@ module Playwright
109
109
  end
110
110
  end
111
111
 
112
- def fetch(headers: nil, method: nil, postData: nil, url: nil)
112
+ def fetch(headers: nil, method: nil, postData: nil, url: nil, maxRedirects: nil)
113
113
  api_request_context = request.frame.page.context.request
114
114
  api_request_context.send(:_inner_fetch,
115
115
  request,
@@ -117,6 +117,7 @@ module Playwright
117
117
  headers: headers,
118
118
  method: method,
119
119
  data: postData,
120
+ maxRedirects: maxRedirects,
120
121
  )
121
122
  end
122
123
 
@@ -111,6 +111,7 @@ module Playwright
111
111
 
112
112
  # @param text [Regexp|String]
113
113
  private def escape_for_attribute_selector_or_regex(text, exact)
114
+ puts "escape_for_attribute_selector_or_regex #{text}"
114
115
  if text.is_a?(Regexp)
115
116
  regex = JavaScript::Regex.new(text)
116
117
  "/#{regex.source}/#{regex.flag}"
@@ -125,7 +126,7 @@ module Playwright
125
126
  # cssEscape(value).replace(/\\ /g, ' ')
126
127
  # However, our attribute selectors do not conform to CSS parsing spec,
127
128
  # so we escape them differently.
128
- _text = text.gsub(/["]/, '\\"')
129
+ _text = text.gsub(/\\/) { "\\\\" }.gsub(/["]/, '\\"')
129
130
  if exact
130
131
  "\"#{_text}\""
131
132
  else
@@ -43,6 +43,10 @@ module Playwright
43
43
  end
44
44
  end
45
45
 
46
+ def as_pattern
47
+ @url_matcher.as_pattern
48
+ end
49
+
46
50
  def match?(url)
47
51
  @url_matcher.match?(url)
48
52
  end
@@ -66,5 +70,9 @@ module Playwright
66
70
  @url_value == url
67
71
  end
68
72
  end
73
+
74
+ def self.prepare_interception_patterns(handlers)
75
+ handlers.map(&:as_pattern).compact
76
+ end
69
77
  end
70
78
  end
@@ -7,6 +7,18 @@ module Playwright
7
7
  @base_url = base_url
8
8
  end
9
9
 
10
+ def as_pattern
11
+ case @url
12
+ when String
13
+ { glob: @url }
14
+ when Regexp
15
+ regex = JavaScript::Regex.new(@url)
16
+ { regexSource: regex.source, regexFlags: regex.flag }
17
+ else
18
+ nil
19
+ end
20
+ end
21
+
10
22
  def match?(target_url)
11
23
  case @url
12
24
  when String
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Playwright
4
- VERSION = '1.30.0'
5
- COMPATIBLE_PLAYWRIGHT_VERSION = '1.30.0'
4
+ VERSION = '1.31.0'
5
+ COMPATIBLE_PLAYWRIGHT_VERSION = '1.31.1'
6
6
  end
@@ -428,11 +428,6 @@ module Playwright
428
428
  wrap_impl(@impl.options=(unwrap_impl(req)))
429
429
  end
430
430
 
431
- # @nodoc
432
- def enable_debug_console!
433
- wrap_impl(@impl.enable_debug_console!)
434
- end
435
-
436
431
  # @nodoc
437
432
  def browser=(req)
438
433
  wrap_impl(@impl.browser=(unwrap_impl(req)))
@@ -443,6 +438,11 @@ module Playwright
443
438
  wrap_impl(@impl.owner_page=(unwrap_impl(req)))
444
439
  end
445
440
 
441
+ # @nodoc
442
+ def enable_debug_console!
443
+ wrap_impl(@impl.enable_debug_console!)
444
+ end
445
+
446
446
  # -- inherited from EventEmitter --
447
447
  # @nodoc
448
448
  def off(event, callback)
@@ -212,7 +212,7 @@ module Playwright
212
212
  end
213
213
 
214
214
  #
215
- # Programmaticaly dispatch an event on the matching element.
215
+ # Programmatically dispatch an event on the matching element.
216
216
  #
217
217
  # **Usage**
218
218
  #
@@ -792,7 +792,7 @@ module Playwright
792
792
  end
793
793
 
794
794
  #
795
- # Focuses the mathing element and presses a combintation of the keys.
795
+ # Focuses the matching element and presses a combination of the keys.
796
796
  #
797
797
  # **Usage**
798
798
  #
@@ -1292,7 +1292,7 @@ module Playwright
1292
1292
  # When all steps combined have not finished during the specified `timeout`, this method throws a
1293
1293
  # `TimeoutError`. Passing zero timeout disables this.
1294
1294
  #
1295
- # **NOTE**: [`method: Page.tap`] requires that the `hasTouch` option of the browser context be set to true.
1295
+ # **NOTE**: [`method: Page.tap`] the method will throw if `hasTouch` option of the browser context is false.
1296
1296
  def tap_point(
1297
1297
  selector,
1298
1298
  force: nil,
@@ -29,6 +29,10 @@ module Playwright
29
29
  #
30
30
  # page.route("**/*", handle)
31
31
  # ```
32
+ #
33
+ # **Details**
34
+ #
35
+ # Note that any overrides such as `url` or `headers` only apply to the request being routed. If this request results in a redirect, overrides will not be applied to the new redirected request. If you want to propagate a header through redirects, use the combination of [`method: Route.fetch`] and [`method: Route.fulfill`] instead.
32
36
  def continue(headers: nil, method: nil, postData: nil, url: nil)
33
37
  wrap_impl(@impl.continue(headers: unwrap_impl(headers), method: unwrap_impl(method), postData: unwrap_impl(postData), url: unwrap_impl(url)))
34
38
  end
@@ -106,8 +110,17 @@ module Playwright
106
110
  #
107
111
  # page.route("https://dog.ceo/api/breeds/list/all", handle)
108
112
  # ```
109
- def fetch(headers: nil, method: nil, postData: nil, url: nil)
110
- wrap_impl(@impl.fetch(headers: unwrap_impl(headers), method: unwrap_impl(method), postData: unwrap_impl(postData), url: unwrap_impl(url)))
113
+ #
114
+ # **Details**
115
+ #
116
+ # Note that `headers` option will apply to the fetched request as well as any redirects initiated by it. If you want to only apply `headers` to the original request, but not to redirects, look into [`method: Route.continue`] instead.
117
+ def fetch(
118
+ headers: nil,
119
+ maxRedirects: nil,
120
+ method: nil,
121
+ postData: nil,
122
+ url: nil)
123
+ wrap_impl(@impl.fetch(headers: unwrap_impl(headers), maxRedirects: unwrap_impl(maxRedirects), method: unwrap_impl(method), postData: unwrap_impl(postData), url: unwrap_impl(url)))
111
124
  end
112
125
 
113
126
  #
@@ -4,6 +4,8 @@ module Playwright
4
4
  # information.
5
5
  class Selectors < PlaywrightApi
6
6
 
7
+ #
8
+ # Selectors must be registered before creating the page.
7
9
  #
8
10
  # **Usage**
9
11
  #
@@ -33,8 +35,8 @@ module Playwright
33
35
  #
34
36
  # # Use the selector prefixed with its name.
35
37
  # button = page.locator('tag=button')
36
- # # Combine it with other selector engines.
37
- # page.locator('tag=div >> text="Click me"').click()
38
+ # # Combine it with built-in locators.
39
+ # page.locator('tag=div').get_by_text('Click me').click()
38
40
  # # Can use it in any methods supporting selectors.
39
41
  # button_count = page.locator('tag=button').count()
40
42
  # print(button_count)
@@ -43,8 +45,8 @@ module Playwright
43
45
  # with sync_playwright() as playwright:
44
46
  # run(playwright)
45
47
  # ```
46
- def register(name, contentScript: nil, path: nil, script: nil)
47
- wrap_impl(@impl.register(unwrap_impl(name), contentScript: unwrap_impl(contentScript), path: unwrap_impl(path), script: unwrap_impl(script)))
48
+ def register(name, script: nil, contentScript: nil, path: nil)
49
+ wrap_impl(@impl.register(unwrap_impl(name), script: unwrap_impl(script), contentScript: unwrap_impl(contentScript), path: unwrap_impl(path)))
48
50
  end
49
51
 
50
52
  #
@@ -6,6 +6,8 @@ module Playwright
6
6
 
7
7
  #
8
8
  # Dispatches a `touchstart` and `touchend` event with a single touch at the position (`x`,`y`).
9
+ #
10
+ # **NOTE**: [`method: Page.tap`] the method will throw if `hasTouch` option of the browser context is false.
9
11
  def tap_point(x, y)
10
12
  wrap_impl(@impl.tap_point(unwrap_impl(x), unwrap_impl(y)))
11
13
  end
data/sig/playwright.rbs CHANGED
@@ -47,7 +47,7 @@ module Playwright
47
47
  def abort: (?errorCode: String) -> void
48
48
  def continue: (?headers: Hash[untyped, untyped], ?method: String, ?postData: (String | String | untyped), ?url: String) -> void
49
49
  def fallback: (?headers: Hash[untyped, untyped], ?method: String, ?postData: (String | String | untyped), ?url: String) -> void
50
- def fetch: (?headers: Hash[untyped, untyped], ?method: String, ?postData: (String | String | untyped), ?url: String) -> APIResponse
50
+ def fetch: (?headers: Hash[untyped, untyped], ?maxRedirects: Integer, ?method: String, ?postData: (String | String | untyped), ?url: String) -> APIResponse
51
51
  def fulfill: (?body: (String | String), ?contentType: String, ?headers: Hash[untyped, untyped], ?json: untyped, ?path: (String | File), ?response: APIResponse, ?status: Integer) -> void
52
52
  def request: -> Request
53
53
  end
@@ -217,7 +217,7 @@ module Playwright
217
217
  end
218
218
 
219
219
  class Selectors
220
- def register: (String name, ?contentScript: bool, ?path: (String | File), ?script: String) -> void
220
+ def register: (String name, ?script: String, ?contentScript: bool, ?path: (String | File)) -> void
221
221
  end
222
222
 
223
223
  class ConsoleMessage
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: playwright-ruby-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.30.0
4
+ version: 1.31.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - YusukeIwaki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-01-25 00:00:00.000000000 Z
11
+ date: 2023-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -401,5 +401,5 @@ requirements: []
401
401
  rubygems_version: 3.3.26
402
402
  signing_key:
403
403
  specification_version: 4
404
- summary: The Ruby binding of playwright driver 1.30.0
404
+ summary: The Ruby binding of playwright driver 1.31.1
405
405
  test_files: []