playwright-ruby-client 1.17.1 → 1.18.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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