playwright-ruby-client 1.17.1 → 1.18.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/documentation/docs/api/api_request_context.md +45 -133
  3. data/documentation/docs/api/browser_context.md +0 -4
  4. data/documentation/docs/api/download.md +1 -3
  5. data/documentation/docs/api/frame.md +1 -1
  6. data/documentation/docs/api/frame_locator.md +10 -1
  7. data/documentation/docs/api/locator.md +19 -47
  8. data/documentation/docs/api/page.md +1 -1
  9. data/documentation/docs/include/api_coverage.md +16 -28
  10. data/lib/playwright/channel_owners/api_request_context.rb +0 -232
  11. data/lib/playwright/channel_owners/browser_context.rb +6 -3
  12. data/lib/playwright/channel_owners/frame.rb +2 -2
  13. data/lib/playwright/channel_owners/local_utils.rb +14 -0
  14. data/lib/playwright/channel_owners/page.rb +2 -6
  15. data/lib/playwright/frame_locator_impl.rb +2 -1
  16. data/lib/playwright/locator_impl.rb +62 -3
  17. data/lib/playwright/tracing_impl.rb +21 -7
  18. data/lib/playwright/version.rb +2 -2
  19. data/lib/playwright_api/api_request_context.rb +55 -8
  20. data/lib/playwright_api/browser_context.rb +6 -6
  21. data/lib/playwright_api/download.rb +0 -4
  22. data/lib/playwright_api/frame.rb +2 -2
  23. data/lib/playwright_api/frame_locator.rb +11 -2
  24. data/lib/playwright_api/local_utils.rb +9 -0
  25. data/lib/playwright_api/locator.rb +16 -46
  26. data/lib/playwright_api/page.rb +7 -7
  27. metadata +7 -10
  28. data/documentation/docs/api/api_request.md +0 -7
  29. data/documentation/docs/api/api_response.md +0 -90
  30. data/lib/playwright/api_response_impl.rb +0 -73
  31. data/lib/playwright_api/api_request.rb +0 -18
  32. data/lib/playwright_api/api_response.rb +0 -68
@@ -0,0 +1,14 @@
1
+ module Playwright
2
+ define_channel_owner :LocalUtils do
3
+ # @param zip_file [String]
4
+ # @param name_value_array [Array<Hash<{name: string, value: string}>>]
5
+ def zip(zip_file, name_value_array)
6
+ params = {
7
+ zipFile: zip_file,
8
+ entries: name_value_array,
9
+ }
10
+ @channel.send_message_to_server('zip', params)
11
+ nil
12
+ end
13
+ end
14
+ end
@@ -558,8 +558,8 @@ module Playwright
558
558
  timeout: timeout)
559
559
  end
560
560
 
561
- def locator(selector)
562
- @main_frame.locator(selector)
561
+ def locator(selector, hasText: nil)
562
+ @main_frame.locator(selector, hasText: hasText)
563
563
  end
564
564
 
565
565
  def frame_locator(selector)
@@ -733,10 +733,6 @@ module Playwright
733
733
  @workers.to_a
734
734
  end
735
735
 
736
- def request
737
- @browser_context.request
738
- end
739
-
740
736
  def pause
741
737
  @browser_context.send(:pause)
742
738
  end
@@ -6,11 +6,12 @@ module Playwright
6
6
  @frame_selector = frame_selector
7
7
  end
8
8
 
9
- def locator(selector)
9
+ def locator(selector, hasText: nil)
10
10
  LocatorImpl.new(
11
11
  frame: @frame,
12
12
  timeout_settings: @timeout_settings,
13
13
  selector: "#{@frame_selector} >> control=enter-frame >> #{selector}",
14
+ hasText: hasText,
14
15
  )
15
16
  end
16
17
 
@@ -1,9 +1,46 @@
1
+ require 'json'
2
+
1
3
  module Playwright
4
+ class EscapeWithQuotes
5
+ def initialize(text, char = "'")
6
+ stringified = text.to_json
7
+ escaped_text = stringified[1...-1].gsub(/\\"/, '"')
8
+
9
+ case char
10
+ when '"'
11
+ text = escaped_text.gsub(/["]/, '\\"')
12
+ @text = "\"#{text}\""
13
+ when "'"
14
+ text = escaped_text.gsub(/[']/, '\\\'')
15
+ @text = "'#{text}'"
16
+ else
17
+ raise ArgumentError.new('Invalid escape char')
18
+ end
19
+ end
20
+
21
+ def to_s
22
+ @text
23
+ end
24
+ end
25
+
2
26
  define_api_implementation :LocatorImpl do
3
- def initialize(frame:, timeout_settings:, selector:)
27
+ def initialize(frame:, timeout_settings:, selector:, hasText: nil)
4
28
  @frame = frame
5
29
  @timeout_settings = timeout_settings
6
- @selector = selector
30
+ @selector =
31
+ case hasText
32
+ when Regexp
33
+ source = EscapeWithQuotes.new(hasText.source, '"')
34
+ flags = []
35
+ flags << 'ms' if (hasText.options & Regexp::MULTILINE) != 0
36
+ flags << 'i' if (hasText.options & Regexp::IGNORECASE) != 0
37
+ "#{selector} >> :scope:text-matches(#{source}, \"#{flags.join('')}\")"
38
+ when String
39
+ text = EscapeWithQuotes.new(hasText, '"')
40
+ "#{selector} >> :scope:has-text(#{text})"
41
+ else
42
+ selector
43
+ end
7
44
  end
8
45
 
9
46
  def to_s
@@ -102,6 +139,27 @@ module Playwright
102
139
  @frame.dispatch_event(@selector, type, strict: true, eventInit: eventInit, timeout: timeout)
103
140
  end
104
141
 
142
+ def drag_to(target,
143
+ force: nil,
144
+ noWaitAfter: nil,
145
+ sourcePosition: nil,
146
+ targetPosition: nil,
147
+ timeout: nil,
148
+ trial: nil)
149
+
150
+ @frame.drag_and_drop(
151
+ @selector,
152
+ target.instance_variable_get(:@selector),
153
+ force: force,
154
+ noWaitAfter: noWaitAfter,
155
+ sourcePosition: sourcePosition,
156
+ targetPosition: targetPosition,
157
+ timeout: timeout,
158
+ trial: trial,
159
+ strict: true,
160
+ )
161
+ end
162
+
105
163
  def evaluate(expression, arg: nil, timeout: nil)
106
164
  with_element(timeout: timeout) do |handle|
107
165
  handle.evaluate(expression, arg: arg)
@@ -122,11 +180,12 @@ module Playwright
122
180
  @frame.fill(@selector, value, strict: true, force: force, noWaitAfter: noWaitAfter, timeout: timeout)
123
181
  end
124
182
 
125
- def locator(selector)
183
+ def locator(selector, hasText: nil)
126
184
  LocatorImpl.new(
127
185
  frame: @frame,
128
186
  timeout_settings: @timeout_settings,
129
187
  selector: "#{@selector} >> #{selector}",
188
+ hasText: hasText,
130
189
  )
131
190
  end
132
191
 
@@ -20,21 +20,35 @@ module Playwright
20
20
  end
21
21
 
22
22
  def stop_chunk(path: nil)
23
- do_stop_chunk(path: path)
23
+ do_stop_chunk(file_path: path)
24
24
  end
25
25
 
26
26
  def stop(path: nil)
27
- do_stop_chunk(path: path)
27
+ do_stop_chunk(file_path: path)
28
28
  @channel.send_message_to_server('tracingStop')
29
29
  end
30
30
 
31
- private def do_stop_chunk(path:)
32
- result = @channel.send_message_to_server_result('tracingStopChunk', save: !path.nil?, skipCompress: false)
33
- artifact = ChannelOwners::Artifact.from_nullable(result['artifact'])
34
- return unless artifact
31
+ private def do_stop_chunk(file_path:)
32
+ mode = 'doNotSave'
33
+ if file_path
34
+ if @context.send(:remote_connection?)
35
+ mode = 'compressTrace'
36
+ else
37
+ mode = 'compressTraceAndSources'
38
+ end
39
+ end
35
40
 
36
- artifact.save_as(path)
41
+ result = @channel.send_message_to_server_result('tracingStopChunk', mode: mode)
42
+ return unless file_path # Not interested in artifacts.
43
+ return unless result['artifact'] # The artifact may be missing if the browser closed while stopping tracing.
44
+
45
+ artifact = ChannelOwners::Artifact.from(result['artifact'])
46
+ artifact.save_as(file_path)
37
47
  artifact.delete
48
+
49
+ # // Add local sources to the remote trace if necessary.
50
+ # if (result.sourceEntries?.length)
51
+ # await this._context._localUtils.zip(filePath, result.sourceEntries);
38
52
  end
39
53
  end
40
54
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Playwright
4
- VERSION = '1.17.1'
5
- COMPATIBLE_PLAYWRIGHT_VERSION = '1.17.2'
4
+ VERSION = '1.18.beta1'
5
+ COMPATIBLE_PLAYWRIGHT_VERSION = '1.18.0'
6
6
  end
@@ -3,6 +3,53 @@ module Playwright
3
3
  # environment or the service to your e2e test. When used on `Page` or a `BrowserContext`, this API will automatically use
4
4
  # the cookies from the corresponding `BrowserContext`. This means that if you log in using this API, your e2e test will be
5
5
  # logged in and vice versa.
6
+ #
7
+ # ```python sync
8
+ # import os
9
+ # from playwright.sync_api import sync_playwright
10
+ #
11
+ # REPO = "test-repo-1"
12
+ # USER = "github-username"
13
+ # API_TOKEN = os.getenv("GITHUB_API_TOKEN")
14
+ #
15
+ # with sync_playwright() as p:
16
+ # # This will launch a new browser, create a context and page. When making HTTP
17
+ # # requests with the internal APIRequestContext (e.g. `context.request` or `page.request`)
18
+ # # it will automatically set the cookies to the browser page and vise versa.
19
+ # browser = playwright.chromium.launch()
20
+ # context = browser.new_context(base_url="https://api.github.com")
21
+ # api_request_context = context.request
22
+ # page = context.new_page()
23
+ #
24
+ # # Alternatively you can create a APIRequestContext manually without having a browser context attached:
25
+ # # api_request_context = playwright.request.new_context(base_url="https://api.github.com")
26
+ #
27
+ #
28
+ # # Create a repository.
29
+ # response = api_request_context.post(
30
+ # "/user/repos",
31
+ # headers={
32
+ # "Accept": "application/vnd.github.v3+json",
33
+ # # Add GitHub personal access token.
34
+ # "Authorization": f"token {API_TOKEN}",
35
+ # },
36
+ # data={"name": REPO},
37
+ # )
38
+ # assert response.ok
39
+ # assert response.json()["name"] == REPO
40
+ #
41
+ # # Delete a repository.
42
+ # response = api_request_context.delete(
43
+ # f"/repos/{USER}/{REPO}",
44
+ # headers={
45
+ # "Accept": "application/vnd.github.v3+json",
46
+ # # Add GitHub personal access token.
47
+ # "Authorization": f"token {API_TOKEN}",
48
+ # },
49
+ # )
50
+ # assert response.ok
51
+ # assert await response.body() == '{"status": "ok"}'
52
+ # ```
6
53
  class APIRequestContext < PlaywrightApi
7
54
 
8
55
  # Sends HTTP(S) [DELETE](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/DELETE) request and returns its
@@ -18,14 +65,14 @@ module Playwright
18
65
  multipart: nil,
19
66
  params: nil,
20
67
  timeout: nil)
21
- wrap_impl(@impl.delete(unwrap_impl(url), data: unwrap_impl(data), failOnStatusCode: unwrap_impl(failOnStatusCode), form: unwrap_impl(form), headers: unwrap_impl(headers), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), multipart: unwrap_impl(multipart), params: unwrap_impl(params), timeout: unwrap_impl(timeout)))
68
+ raise NotImplementedError.new('delete is not implemented yet.')
22
69
  end
23
70
 
24
71
  # All responses returned by [`method: APIRequestContext.get`] and similar methods are stored in the memory, so that you
25
72
  # can later call [`method: APIResponse.body`]. This method discards all stored responses, and makes
26
73
  # [`method: APIResponse.body`] throw "Response disposed" error.
27
74
  def dispose
28
- wrap_impl(@impl.dispose)
75
+ raise NotImplementedError.new('dispose is not implemented yet.')
29
76
  end
30
77
 
31
78
  # Sends HTTP(S) request and returns its response. The method will populate request cookies from the context and update
@@ -41,7 +88,7 @@ module Playwright
41
88
  multipart: nil,
42
89
  params: nil,
43
90
  timeout: nil)
44
- wrap_impl(@impl.fetch(unwrap_impl(urlOrRequest), data: unwrap_impl(data), failOnStatusCode: unwrap_impl(failOnStatusCode), form: unwrap_impl(form), headers: unwrap_impl(headers), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), method: unwrap_impl(method), multipart: unwrap_impl(multipart), params: unwrap_impl(params), timeout: unwrap_impl(timeout)))
91
+ raise NotImplementedError.new('fetch is not implemented yet.')
45
92
  end
46
93
 
47
94
  # Sends HTTP(S) [GET](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET) request and returns its response. The
@@ -54,7 +101,7 @@ module Playwright
54
101
  ignoreHTTPSErrors: nil,
55
102
  params: nil,
56
103
  timeout: nil)
57
- wrap_impl(@impl.get(unwrap_impl(url), failOnStatusCode: unwrap_impl(failOnStatusCode), headers: unwrap_impl(headers), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), params: unwrap_impl(params), timeout: unwrap_impl(timeout)))
104
+ raise NotImplementedError.new('get is not implemented yet.')
58
105
  end
59
106
 
60
107
  # Sends HTTP(S) [HEAD](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/HEAD) request and returns its response.
@@ -67,7 +114,7 @@ module Playwright
67
114
  ignoreHTTPSErrors: nil,
68
115
  params: nil,
69
116
  timeout: nil)
70
- wrap_impl(@impl.head(unwrap_impl(url), failOnStatusCode: unwrap_impl(failOnStatusCode), headers: unwrap_impl(headers), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), params: unwrap_impl(params), timeout: unwrap_impl(timeout)))
117
+ raise NotImplementedError.new('head is not implemented yet.')
71
118
  end
72
119
 
73
120
  # Sends HTTP(S) [PATCH](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PATCH) request and returns its response.
@@ -83,7 +130,7 @@ module Playwright
83
130
  multipart: nil,
84
131
  params: nil,
85
132
  timeout: nil)
86
- wrap_impl(@impl.patch(unwrap_impl(url), data: unwrap_impl(data), failOnStatusCode: unwrap_impl(failOnStatusCode), form: unwrap_impl(form), headers: unwrap_impl(headers), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), multipart: unwrap_impl(multipart), params: unwrap_impl(params), timeout: unwrap_impl(timeout)))
133
+ raise NotImplementedError.new('patch is not implemented yet.')
87
134
  end
88
135
 
89
136
  # Sends HTTP(S) [POST](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST) request and returns its response.
@@ -99,7 +146,7 @@ module Playwright
99
146
  multipart: nil,
100
147
  params: nil,
101
148
  timeout: nil)
102
- wrap_impl(@impl.post(unwrap_impl(url), data: unwrap_impl(data), failOnStatusCode: unwrap_impl(failOnStatusCode), form: unwrap_impl(form), headers: unwrap_impl(headers), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), multipart: unwrap_impl(multipart), params: unwrap_impl(params), timeout: unwrap_impl(timeout)))
149
+ raise NotImplementedError.new('post is not implemented yet.')
103
150
  end
104
151
 
105
152
  # Sends HTTP(S) [PUT](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PUT) request and returns its response. The
@@ -115,7 +162,7 @@ module Playwright
115
162
  multipart: nil,
116
163
  params: nil,
117
164
  timeout: nil)
118
- wrap_impl(@impl.put(unwrap_impl(url), data: unwrap_impl(data), failOnStatusCode: unwrap_impl(failOnStatusCode), form: unwrap_impl(form), headers: unwrap_impl(headers), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), multipart: unwrap_impl(multipart), params: unwrap_impl(params), timeout: unwrap_impl(timeout)))
165
+ raise NotImplementedError.new('put is not implemented yet.')
119
166
  end
120
167
 
121
168
  # Returns storage state for this request context, contains current cookies and local storage snapshot if it was passed to
@@ -22,7 +22,7 @@ module Playwright
22
22
 
23
23
  # API testing helper associated with this context. Requests made with this API will use context cookies.
24
24
  def request # property
25
- wrap_impl(@impl.request)
25
+ raise NotImplementedError.new('request is not implemented yet.')
26
26
  end
27
27
 
28
28
  def tracing # property
@@ -376,11 +376,6 @@ module Playwright
376
376
  wrap_impl(@impl.pause)
377
377
  end
378
378
 
379
- # @nodoc
380
- def enable_debug_console!
381
- wrap_impl(@impl.enable_debug_console!)
382
- end
383
-
384
379
  # @nodoc
385
380
  def browser=(req)
386
381
  wrap_impl(@impl.browser=(unwrap_impl(req)))
@@ -396,6 +391,11 @@ module Playwright
396
391
  wrap_impl(@impl.options=(unwrap_impl(req)))
397
392
  end
398
393
 
394
+ # @nodoc
395
+ def enable_debug_console!
396
+ wrap_impl(@impl.enable_debug_console!)
397
+ end
398
+
399
399
  # -- inherited from EventEmitter --
400
400
  # @nodoc
401
401
  def once(event, callback)
@@ -12,10 +12,6 @@ module Playwright
12
12
  # # wait for download to complete
13
13
  # path = download.path()
14
14
  # ```
15
- #
16
- # > NOTE: Browser context **must** be created with the `acceptDownloads` set to `true` when user needs access to the
17
- # downloaded content. If `acceptDownloads` is not set, download events are emitted, but the actual download is not
18
- # performed and user has no access to the downloaded files.
19
15
  class Download < PlaywrightApi
20
16
 
21
17
  # Cancels a download. Will not fail if the download is already finished or canceled. Upon successful cancellations,
@@ -445,8 +445,8 @@ module Playwright
445
445
  # The method returns an element locator that can be used to perform actions in the frame. Locator is resolved to the
446
446
  # element immediately before performing an action, so a series of actions on the same locator can in fact be performed on
447
447
  # different DOM elements. That would happen if the DOM structure between those actions has changed.
448
- def locator(selector)
449
- wrap_impl(@impl.locator(unwrap_impl(selector)))
448
+ def locator(selector, hasText: nil)
449
+ wrap_impl(@impl.locator(unwrap_impl(selector), hasText: unwrap_impl(hasText)))
450
450
  end
451
451
 
452
452
  # Returns frame's name attribute as specified in the tag.
@@ -20,6 +20,15 @@ module Playwright
20
20
  # # Works because we explicitly tell locator to pick the first frame:
21
21
  # page.frame_locator('.result-frame').first.locator('button').click()
22
22
  # ```
23
+ #
24
+ # **Converting Locator to FrameLocator**
25
+ #
26
+ # If you have a `Locator` object pointing to an `iframe` it can be converted to `FrameLocator` using
27
+ # [`:scope`](https://developer.mozilla.org/en-US/docs/Web/CSS/:scope) CSS selector:
28
+ #
29
+ # ```python sync
30
+ # frameLocator = locator.frame_locator(":scope");
31
+ # ```
23
32
  class FrameLocator < PlaywrightApi
24
33
 
25
34
  # Returns locator to the first matching frame.
@@ -39,8 +48,8 @@ module Playwright
39
48
  end
40
49
 
41
50
  # The method finds an element matching the specified selector in the FrameLocator's subtree.
42
- def locator(selector)
43
- wrap_impl(@impl.locator(unwrap_impl(selector)))
51
+ def locator(selector, hasText: nil)
52
+ wrap_impl(@impl.locator(unwrap_impl(selector), hasText: unwrap_impl(hasText)))
44
53
  end
45
54
 
46
55
  # Returns locator to the n-th matching frame.
@@ -0,0 +1,9 @@
1
+ module Playwright
2
+ class LocalUtils < PlaywrightApi
3
+
4
+ # @nodoc
5
+ def zip(zip_file, name_value_array)
6
+ wrap_impl(@impl.zip(unwrap_impl(zip_file), unwrap_impl(name_value_array)))
7
+ end
8
+ end
9
+ end
@@ -1,49 +1,8 @@
1
1
  module Playwright
2
- # Locator represents a view to the element(s) on the page. It captures the logic sufficient to retrieve the element at any
3
- # given moment. Locator can be created with the [`method: Page.locator`] method.
2
+ # Locators are the central piece of Playwright's auto-waiting and retry-ability. In a nutshell, locators represent a way
3
+ # to find element(s) on the page at any moment. Locator can be created with the [`method: Page.locator`] method.
4
4
  #
5
- # ```python sync
6
- # locator = page.locator("text=Submit")
7
- # locator.click()
8
- # ```
9
- #
10
- # The difference between the Locator and `ElementHandle` is that the latter points to a particular element, while Locator
11
- # captures the logic of how to retrieve that element.
12
- #
13
- # In the example below, handle points to a particular DOM element on page. If that element changes text or is used by
14
- # React to render an entirely different component, handle is still pointing to that very DOM element. This can lead to
15
- # unexpected behaviors.
16
- #
17
- # ```python sync
18
- # handle = page.query_selector("text=Submit")
19
- # handle.hover()
20
- # handle.click()
21
- # ```
22
- #
23
- # With the locator, every time the `element` is used, up-to-date DOM element is located in the page using the selector. So
24
- # in the snippet below, underlying DOM element is going to be located twice.
25
- #
26
- # ```python sync
27
- # locator = page.locator("text=Submit")
28
- # locator.hover()
29
- # locator.click()
30
- # ```
31
- #
32
- # **Strictness**
33
- #
34
- # Locators are strict. This means that all operations on locators that imply some target DOM element will throw if more
35
- # than one element matches given selector.
36
- #
37
- # ```python sync
38
- # # Throws if there are several buttons in DOM:
39
- # page.locator('button').click()
40
- #
41
- # # Works because we explicitly tell locator to pick the first element:
42
- # page.locator('button').first.click()
43
- #
44
- # # Works because count knows what to do with multiple matches:
45
- # page.locator('button').count()
46
- # ```
5
+ # [Learn more about locators](./locators.md).
47
6
  class Locator < PlaywrightApi
48
7
 
49
8
  # Returns an array of `node.innerText` values for all matching nodes.
@@ -183,6 +142,17 @@ module Playwright
183
142
  wrap_impl(@impl.dispatch_event(unwrap_impl(type), eventInit: unwrap_impl(eventInit), timeout: unwrap_impl(timeout)))
184
143
  end
185
144
 
145
+ def drag_to(
146
+ target,
147
+ force: nil,
148
+ noWaitAfter: nil,
149
+ sourcePosition: nil,
150
+ targetPosition: nil,
151
+ timeout: nil,
152
+ trial: nil)
153
+ wrap_impl(@impl.drag_to(unwrap_impl(target), force: unwrap_impl(force), noWaitAfter: unwrap_impl(noWaitAfter), sourcePosition: unwrap_impl(sourcePosition), targetPosition: unwrap_impl(targetPosition), timeout: unwrap_impl(timeout), trial: unwrap_impl(trial)))
154
+ end
155
+
186
156
  # Resolves given locator to the first matching DOM element. If no elements matching the query are visible, waits for them
187
157
  # up to a given timeout. If multiple elements match the selector, throws.
188
158
  def element_handle(timeout: nil)
@@ -350,8 +320,8 @@ module Playwright
350
320
  end
351
321
 
352
322
  # The method finds an element matching the specified selector in the `Locator`'s subtree.
353
- def locator(selector)
354
- wrap_impl(@impl.locator(unwrap_impl(selector)))
323
+ def locator(selector, hasText: nil)
324
+ wrap_impl(@impl.locator(unwrap_impl(selector), hasText: unwrap_impl(hasText)))
355
325
  end
356
326
 
357
327
  # Returns locator to the n-th matching element.
@@ -56,6 +56,11 @@ module Playwright
56
56
  wrap_impl(@impl.mouse)
57
57
  end
58
58
 
59
+ # API testing helper associated with this page. Requests made with this API will use page cookies.
60
+ def request # property
61
+ raise NotImplementedError.new('request is not implemented yet.')
62
+ end
63
+
59
64
  def touchscreen # property
60
65
  wrap_impl(@impl.touchscreen)
61
66
  end
@@ -681,8 +686,8 @@ module Playwright
681
686
  # different DOM elements. That would happen if the DOM structure between those actions has changed.
682
687
  #
683
688
  # Shortcut for main frame's [`method: Frame.locator`].
684
- def locator(selector)
685
- wrap_impl(@impl.locator(unwrap_impl(selector)))
689
+ def locator(selector, hasText: nil)
690
+ wrap_impl(@impl.locator(unwrap_impl(selector), hasText: unwrap_impl(hasText)))
686
691
  end
687
692
 
688
693
  # The page's main frame. Page is guaranteed to have a main frame which persists during navigations.
@@ -1381,11 +1386,6 @@ module Playwright
1381
1386
  wrap_impl(@impl.owned_context=(unwrap_impl(req)))
1382
1387
  end
1383
1388
 
1384
- # @nodoc
1385
- def request
1386
- wrap_impl(@impl.request)
1387
- end
1388
-
1389
1389
  # @nodoc
1390
1390
  def start_js_coverage(resetOnNavigation: nil, reportAnonymousScripts: nil)
1391
1391
  wrap_impl(@impl.start_js_coverage(resetOnNavigation: unwrap_impl(resetOnNavigation), reportAnonymousScripts: unwrap_impl(reportAnonymousScripts)))
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.17.1
4
+ version: 1.18.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - YusukeIwaki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-05 00:00:00.000000000 Z
11
+ date: 2022-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -210,9 +210,7 @@ files:
210
210
  - documentation/README.md
211
211
  - documentation/babel.config.js
212
212
  - documentation/docs/api/accessibility.md
213
- - documentation/docs/api/api_request.md
214
213
  - documentation/docs/api/api_request_context.md
215
- - documentation/docs/api/api_response.md
216
214
  - documentation/docs/api/browser.md
217
215
  - documentation/docs/api/browser_context.md
218
216
  - documentation/docs/api/browser_type.md
@@ -277,7 +275,6 @@ files:
277
275
  - lib/playwright/accessibility_impl.rb
278
276
  - lib/playwright/android_input_impl.rb
279
277
  - lib/playwright/api_implementation.rb
280
- - lib/playwright/api_response_impl.rb
281
278
  - lib/playwright/channel.rb
282
279
  - lib/playwright/channel_owner.rb
283
280
  - lib/playwright/channel_owners/android.rb
@@ -296,6 +293,7 @@ files:
296
293
  - lib/playwright/channel_owners/fetch_request.rb
297
294
  - lib/playwright/channel_owners/frame.rb
298
295
  - lib/playwright/channel_owners/js_handle.rb
296
+ - lib/playwright/channel_owners/local_utils.rb
299
297
  - lib/playwright/channel_owners/page.rb
300
298
  - lib/playwright/channel_owners/playwright.rb
301
299
  - lib/playwright/channel_owners/request.rb
@@ -343,9 +341,7 @@ files:
343
341
  - lib/playwright_api/android_input.rb
344
342
  - lib/playwright_api/android_socket.rb
345
343
  - lib/playwright_api/android_web_view.rb
346
- - lib/playwright_api/api_request.rb
347
344
  - lib/playwright_api/api_request_context.rb
348
- - lib/playwright_api/api_response.rb
349
345
  - lib/playwright_api/browser.rb
350
346
  - lib/playwright_api/browser_context.rb
351
347
  - lib/playwright_api/browser_type.rb
@@ -359,6 +355,7 @@ files:
359
355
  - lib/playwright_api/frame_locator.rb
360
356
  - lib/playwright_api/js_handle.rb
361
357
  - lib/playwright_api/keyboard.rb
358
+ - lib/playwright_api/local_utils.rb
362
359
  - lib/playwright_api/locator.rb
363
360
  - lib/playwright_api/mouse.rb
364
361
  - lib/playwright_api/page.rb
@@ -387,12 +384,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
387
384
  version: '2.4'
388
385
  required_rubygems_version: !ruby/object:Gem::Requirement
389
386
  requirements:
390
- - - ">="
387
+ - - ">"
391
388
  - !ruby/object:Gem::Version
392
- version: '0'
389
+ version: 1.3.1
393
390
  requirements: []
394
391
  rubygems_version: 3.3.3
395
392
  signing_key:
396
393
  specification_version: 4
397
- summary: The Ruby binding of playwright driver 1.17.2
394
+ summary: The Ruby binding of playwright driver 1.18.0
398
395
  test_files: []
@@ -1,7 +0,0 @@
1
- ---
2
- sidebar_position: 10
3
- ---
4
-
5
- # APIRequest
6
-
7
- Not Implemented