playwright-ruby-client 1.16.0 → 1.17.1

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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/documentation/docs/api/api_request.md +7 -0
  3. data/documentation/docs/api/api_request_context.md +137 -0
  4. data/documentation/docs/api/api_response.md +90 -0
  5. data/documentation/docs/api/browser_context.md +4 -0
  6. data/documentation/docs/api/element_handle.md +2 -3
  7. data/documentation/docs/api/frame.md +30 -0
  8. data/documentation/docs/api/frame_locator.md +70 -0
  9. data/documentation/docs/api/locator.md +17 -2
  10. data/documentation/docs/api/page.md +33 -3
  11. data/documentation/docs/api/request.md +3 -3
  12. data/documentation/docs/api/selectors.md +1 -1
  13. data/documentation/docs/api/tracing.md +2 -2
  14. data/documentation/docs/include/api_coverage.md +42 -12
  15. data/lib/playwright/api_response_impl.rb +73 -0
  16. data/lib/playwright/channel.rb +1 -1
  17. data/lib/playwright/channel_owners/api_request_context.rb +232 -0
  18. data/lib/playwright/channel_owners/artifact.rb +1 -6
  19. data/lib/playwright/channel_owners/browser.rb +6 -8
  20. data/lib/playwright/channel_owners/browser_context.rb +3 -4
  21. data/lib/playwright/channel_owners/browser_type.rb +0 -1
  22. data/lib/playwright/channel_owners/fetch_request.rb +2 -0
  23. data/lib/playwright/channel_owners/frame.rb +10 -6
  24. data/lib/playwright/channel_owners/page.rb +17 -10
  25. data/lib/playwright/connection.rb +9 -0
  26. data/lib/playwright/frame_locator_impl.rb +49 -0
  27. data/lib/playwright/locator_impl.rb +13 -5
  28. data/lib/playwright/tracing_impl.rb +6 -9
  29. data/lib/playwright/version.rb +2 -2
  30. data/lib/playwright/video.rb +3 -0
  31. data/lib/playwright.rb +2 -1
  32. data/lib/playwright_api/android_device.rb +4 -4
  33. data/lib/playwright_api/api_request.rb +18 -0
  34. data/lib/playwright_api/api_request_context.rb +11 -8
  35. data/lib/playwright_api/api_response.rb +68 -0
  36. data/lib/playwright_api/browser_context.rb +10 -5
  37. data/lib/playwright_api/element_handle.rb +2 -3
  38. data/lib/playwright_api/frame.rb +26 -1
  39. data/lib/playwright_api/frame_locator.rb +51 -0
  40. data/lib/playwright_api/locator.rb +12 -2
  41. data/lib/playwright_api/page.rb +34 -4
  42. data/lib/playwright_api/playwright.rb +9 -4
  43. data/lib/playwright_api/selectors.rb +2 -2
  44. data/lib/playwright_api/tracing.rb +4 -4
  45. data/playwright.gemspec +1 -1
  46. metadata +14 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d6230bd49d8e914d2ba9f4d23910e69fcc003f983cf51abb142d4361e1332fd6
4
- data.tar.gz: 9cf6be0bde1f294a50604f22f8be756040a02af94c61fff376354c5b1ec8d9fe
3
+ metadata.gz: 9407fc7093bb4cdb7539eec09b879e4bfd665626801594c764798ae41d3c7823
4
+ data.tar.gz: e6047ebe532d15fa5600986ae3fc9f42a23ea670923e1ec8fac6f6ecbb7f01c4
5
5
  SHA512:
6
- metadata.gz: 97bcd9185a7ac82910dcbae93c0131cf285b9c73d881705ae9b88b01fef388b999b4001e37f866f229dba2a0cb0d81af65bee34cb4301eaf16389b927aaba334
7
- data.tar.gz: 047dd6e73800e629a439341d720df9e9281e9456f5f94eeeeaf475de7d439c5b0bf97332242497937684ae919e8b603f1b532a97cf6880f16c77f4f42d400ab2
6
+ metadata.gz: 70b935777666f43236ec9df9b8462ebebf7fb883cde2d57e167d3342a18280a86e286e99e206f47e6ee2c739f23f6afe43daa2def9ea0a322b5e09f3b36bfc81
7
+ data.tar.gz: 3392ad01696c2c22ba411d7e4821e0bf0a2f641526481201927ff6510d7bb077c9fb6b20fcafabd55e5067ff7b1153b950d6b3c532c0bd14d77b9a0b3ac7c4c0
@@ -0,0 +1,7 @@
1
+ ---
2
+ sidebar_position: 10
3
+ ---
4
+
5
+ # APIRequest
6
+
7
+ Not Implemented
@@ -8,3 +8,140 @@ This API is used for the Web API testing. You can use it to trigger API endpoint
8
8
  environment or the service to your e2e test. When used on [Page](./page) or a [BrowserContext](./browser_context), this API will automatically use
9
9
  the cookies from the corresponding [BrowserContext](./browser_context). This means that if you log in using this API, your e2e test will be
10
10
  logged in and vice versa.
11
+
12
+ ## delete
13
+
14
+ ```
15
+ def delete(
16
+ url,
17
+ data: nil,
18
+ failOnStatusCode: nil,
19
+ form: nil,
20
+ headers: nil,
21
+ ignoreHTTPSErrors: nil,
22
+ multipart: nil,
23
+ params: nil,
24
+ timeout: nil)
25
+ ```
26
+
27
+ Sends HTTP(S) [DELETE](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/DELETE) request and returns its
28
+ response. The method will populate request cookies from the context and update context cookies from the response. The
29
+ method will automatically follow redirects.
30
+
31
+ ## dispose
32
+
33
+ ```
34
+ def dispose
35
+ ```
36
+
37
+ All responses returned by [APIRequestContext#get](./api_request_context#get) and similar methods are stored in the memory, so that you
38
+ can later call [APIResponse#body](./api_response#body). This method discards all stored responses, and makes
39
+ [APIResponse#body](./api_response#body) throw "Response disposed" error.
40
+
41
+ ## fetch
42
+
43
+ ```
44
+ def fetch(
45
+ urlOrRequest,
46
+ data: nil,
47
+ failOnStatusCode: nil,
48
+ form: nil,
49
+ headers: nil,
50
+ ignoreHTTPSErrors: nil,
51
+ method: nil,
52
+ multipart: nil,
53
+ params: nil,
54
+ timeout: nil)
55
+ ```
56
+
57
+ Sends HTTP(S) request and returns its response. The method will populate request cookies from the context and update
58
+ context cookies from the response. The method will automatically follow redirects.
59
+
60
+ ## get
61
+
62
+ ```
63
+ def get(
64
+ url,
65
+ failOnStatusCode: nil,
66
+ headers: nil,
67
+ ignoreHTTPSErrors: nil,
68
+ params: nil,
69
+ timeout: nil)
70
+ ```
71
+
72
+ Sends HTTP(S) [GET](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET) request and returns its response. The
73
+ method will populate request cookies from the context and update context cookies from the response. The method will
74
+ automatically follow redirects.
75
+
76
+ ## head
77
+
78
+ ```
79
+ def head(
80
+ url,
81
+ failOnStatusCode: nil,
82
+ headers: nil,
83
+ ignoreHTTPSErrors: nil,
84
+ params: nil,
85
+ timeout: nil)
86
+ ```
87
+
88
+ Sends HTTP(S) [HEAD](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/HEAD) request and returns its response.
89
+ The method will populate request cookies from the context and update context cookies from the response. The method will
90
+ automatically follow redirects.
91
+
92
+ ## patch
93
+
94
+ ```
95
+ def patch(
96
+ url,
97
+ data: nil,
98
+ failOnStatusCode: nil,
99
+ form: nil,
100
+ headers: nil,
101
+ ignoreHTTPSErrors: nil,
102
+ multipart: nil,
103
+ params: nil,
104
+ timeout: nil)
105
+ ```
106
+
107
+ Sends HTTP(S) [PATCH](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PATCH) request and returns its response.
108
+ The method will populate request cookies from the context and update context cookies from the response. The method will
109
+ automatically follow redirects.
110
+
111
+ ## post
112
+
113
+ ```
114
+ def post(
115
+ url,
116
+ data: nil,
117
+ failOnStatusCode: nil,
118
+ form: nil,
119
+ headers: nil,
120
+ ignoreHTTPSErrors: nil,
121
+ multipart: nil,
122
+ params: nil,
123
+ timeout: nil)
124
+ ```
125
+
126
+ Sends HTTP(S) [POST](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST) request and returns its response.
127
+ The method will populate request cookies from the context and update context cookies from the response. The method will
128
+ automatically follow redirects.
129
+
130
+ ## put
131
+
132
+ ```
133
+ def put(
134
+ url,
135
+ data: nil,
136
+ failOnStatusCode: nil,
137
+ form: nil,
138
+ headers: nil,
139
+ ignoreHTTPSErrors: nil,
140
+ multipart: nil,
141
+ params: nil,
142
+ timeout: nil)
143
+ ```
144
+
145
+ Sends HTTP(S) [PUT](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PUT) request and returns its response. The
146
+ method will populate request cookies from the context and update context cookies from the response. The method will
147
+ automatically follow redirects.
@@ -0,0 +1,90 @@
1
+ ---
2
+ sidebar_position: 10
3
+ ---
4
+
5
+ # APIResponse
6
+
7
+ [APIResponse](./api_response) class represents responses returned by [APIRequestContext#get](./api_request_context#get) and similar methods.
8
+
9
+ ## body
10
+
11
+ ```
12
+ def body
13
+ ```
14
+
15
+ Returns the buffer with response body.
16
+
17
+ ## dispose
18
+
19
+ ```
20
+ def dispose
21
+ ```
22
+
23
+ Disposes the body of this response. If not called then the body will stay in memory until the context closes.
24
+
25
+ ## headers
26
+
27
+ ```
28
+ def headers
29
+ ```
30
+
31
+ An object with all the response HTTP headers associated with this response.
32
+
33
+ ## headers_array
34
+
35
+ ```
36
+ def headers_array
37
+ ```
38
+
39
+ An array with all the request HTTP headers associated with this response. Header names are not lower-cased. Headers with
40
+ multiple entries, such as `Set-Cookie`, appear in the array multiple times.
41
+
42
+ ## json
43
+
44
+ ```
45
+ def json
46
+ ```
47
+
48
+ Returns the JSON representation of response body.
49
+
50
+ This method will throw if the response body is not parsable via `JSON.parse`.
51
+
52
+ ## ok
53
+
54
+ ```
55
+ def ok
56
+ ```
57
+
58
+ Contains a boolean stating whether the response was successful (status in the range 200-299) or not.
59
+
60
+ ## status
61
+
62
+ ```
63
+ def status
64
+ ```
65
+
66
+ Contains the status code of the response (e.g., 200 for a success).
67
+
68
+ ## status_text
69
+
70
+ ```
71
+ def status_text
72
+ ```
73
+
74
+ Contains the status text of the response (e.g. usually an "OK" for a success).
75
+
76
+ ## text
77
+
78
+ ```
79
+ def text
80
+ ```
81
+
82
+ Returns the text representation of response body.
83
+
84
+ ## url
85
+
86
+ ```
87
+ def url
88
+ ```
89
+
90
+ Contains the URL of the response.
@@ -436,4 +436,8 @@ def expect_page(predicate: nil, timeout: nil)
436
436
  Performs action and waits for a new [Page](./page) to be created in the context. If predicate is provided, it passes [Page](./page) value into the `predicate` and waits for `predicate.call(page)` to return a truthy value. Will throw an error if
437
437
  the context closes before new [Page](./page) is created.
438
438
 
439
+ ## request
440
+
441
+ API testing helper associated with this context. Requests made with this API will use context cookies.
442
+
439
443
  ## tracing
@@ -9,6 +9,8 @@ sidebar_position: 10
9
9
  ElementHandle represents an in-page DOM element. ElementHandles can be created with the [Page#query_selector](./page#query_selector)
10
10
  method.
11
11
 
12
+ > NOTE: The use of ElementHandle is discouraged, use [Locator](./locator) objects and web-first assertions instead.
13
+
12
14
  ```ruby
13
15
  href_element = page.query_selector("a")
14
16
  href_element.click
@@ -20,9 +22,6 @@ ElementHandle prevents DOM element from garbage collection unless the handle is
20
22
  ElementHandle instances can be used as an argument in [Page#eval_on_selector](./page#eval_on_selector) and [Page#evaluate](./page#evaluate)
21
23
  methods.
22
24
 
23
- > NOTE: In most cases, you would want to use the [Locator](./locator) object instead. You should only use [ElementHandle](./element_handle) if you
24
- want to retain a handle to a particular DOM Node that you intend to pass into [Page#evaluate](./page#evaluate) as an argument.
25
-
26
25
  The difference between the [Locator](./locator) and ElementHandle is that the ElementHandle points to a particular element, while
27
26
  [Locator](./locator) captures the logic of how to retrieve an element.
28
27
 
@@ -218,6 +218,9 @@ def eval_on_selector(selector, expression, arg: nil, strict: nil)
218
218
 
219
219
  Returns the return value of `expression`.
220
220
 
221
+ > NOTE: This method does not wait for the element to pass actionability checks and therefore can lead to the flaky
222
+ tests. Use [Locator#evaluate](./locator#evaluate), other [Locator](./locator) helper methods or web-first assertions instead.
223
+
221
224
  The method finds an element matching the specified selector within the frame and passes it as a first argument to
222
225
  `expression`. See [Working with selectors](https://playwright.dev/python/docs/selectors) for more details. If no elements match the selector, the
223
226
  method throws an error.
@@ -243,6 +246,9 @@ def eval_on_selector_all(selector, expression, arg: nil)
243
246
 
244
247
  Returns the return value of `expression`.
245
248
 
249
+ > NOTE: In most cases, [Locator#evaluate_all](./locator#evaluate_all), other [Locator](./locator) helper methods and web-first assertions do a
250
+ better job.
251
+
246
252
  The method finds all elements matching the specified selector within the frame and passes an array of matched elements
247
253
  as a first argument to `expression`. See [Working with selectors](https://playwright.dev/python/docs/selectors) for more details.
248
254
 
@@ -384,6 +390,23 @@ puts frame == content_frame # => true
384
390
 
385
391
 
386
392
 
393
+ ## frame_locator
394
+
395
+ ```
396
+ def frame_locator(selector)
397
+ ```
398
+
399
+ When working with iframes, you can create a frame locator that will enter the iframe and allow selecting elements in
400
+ that iframe. Following snippet locates element with text "Submit" in the iframe with id `my-frame`, like `<iframe
401
+ id="my-frame">`:
402
+
403
+ ```ruby
404
+ locator = frame.frame_locator("#my-iframe").locator("text=Submit")
405
+ locator.click
406
+ ```
407
+
408
+
409
+
387
410
  ## get_attribute
388
411
 
389
412
  ```
@@ -598,6 +621,8 @@ def query_selector(selector, strict: nil)
598
621
 
599
622
  Returns the ElementHandle pointing to the frame element.
600
623
 
624
+ > NOTE: The use of [ElementHandle](./element_handle) is discouraged, use [Locator](./locator) objects and web-first assertions instead.
625
+
601
626
  The method finds an element matching the specified selector within the frame. See
602
627
  [Working with selectors](https://playwright.dev/python/docs/selectors) for more details. If no elements match the selector, returns `null`.
603
628
 
@@ -609,6 +634,8 @@ def query_selector_all(selector)
609
634
 
610
635
  Returns the ElementHandles pointing to the frame elements.
611
636
 
637
+ > NOTE: The use of [ElementHandle](./element_handle) is discouraged, use [Locator](./locator) objects instead.
638
+
612
639
  The method finds all elements matching the specified selector within the frame. See
613
640
  [Working with selectors](https://playwright.dev/python/docs/selectors) for more details. If no elements match the selector, returns empty array.
614
641
 
@@ -878,6 +905,9 @@ def wait_for_selector(selector, state: nil, strict: nil, timeout: nil)
878
905
  Returns when element specified by selector satisfies `state` option. Returns `null` if waiting for `hidden` or
879
906
  `detached`.
880
907
 
908
+ > NOTE: Playwright automatically waits for element to be ready before performing an action. Using [Locator](./locator) objects and
909
+ web-first assertions make the code wait-for-selector-free.
910
+
881
911
  Wait for the `selector` to satisfy `state` option (either appear/disappear from dom, or become visible/hidden). If at
882
912
  the moment of calling the method `selector` already satisfies the condition, the method will return immediately. If the
883
913
  selector doesn't satisfy the condition for the `timeout` milliseconds, the function will throw.
@@ -0,0 +1,70 @@
1
+ ---
2
+ sidebar_position: 10
3
+ ---
4
+
5
+ # FrameLocator
6
+
7
+ FrameLocator represents a view to the `iframe` on the page. It captures the logic sufficient to retrieve the `iframe`
8
+ and locate elements in that iframe. FrameLocator can be created with either [Page#frame_locator](./page#frame_locator) or
9
+ [Locator#frame_locator](./locator#frame_locator) method.
10
+
11
+ ```ruby
12
+ locator = page.frame_locator("my-frame").locator("text=Submit")
13
+ locator.click
14
+ ```
15
+
16
+ **Strictness**
17
+
18
+ Frame locators are strict. This means that all operations on frame locators will throw if more than one element matches
19
+ given selector.
20
+
21
+ ```ruby
22
+ # Throws if there are several frames in DOM:
23
+ page.frame_locator('.result-frame').locator('button').click
24
+
25
+ # Works because we explicitly tell locator to pick the first frame:
26
+ page.frame_locator('.result-frame').first.locator('button').click
27
+ ```
28
+
29
+
30
+
31
+ ## first
32
+
33
+ ```
34
+ def first
35
+ ```
36
+
37
+ Returns locator to the first matching frame.
38
+
39
+ ## frame_locator
40
+
41
+ ```
42
+ def frame_locator(selector)
43
+ ```
44
+
45
+ When working with iframes, you can create a frame locator that will enter the iframe and allow selecting elements in
46
+ that iframe.
47
+
48
+ ## last
49
+
50
+ ```
51
+ def last
52
+ ```
53
+
54
+ Returns locator to the last matching frame.
55
+
56
+ ## locator
57
+
58
+ ```
59
+ def locator(selector)
60
+ ```
61
+
62
+ The method finds an element matching the specified selector in the FrameLocator's subtree.
63
+
64
+ ## nth
65
+
66
+ ```
67
+ def nth(index)
68
+ ```
69
+
70
+ Returns locator to the n-th matching frame.
@@ -329,6 +329,22 @@ def focus(timeout: nil)
329
329
 
330
330
  Calls [focus](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus) on the element.
331
331
 
332
+ ## frame_locator
333
+
334
+ ```
335
+ def frame_locator(selector)
336
+ ```
337
+
338
+ When working with iframes, you can create a frame locator that will enter the iframe and allow selecting elements in
339
+ that iframe:
340
+
341
+ ```ruby
342
+ locator = page.frame_locator("text=Submit").locator("text=Submit")
343
+ locator.click
344
+ ```
345
+
346
+
347
+
332
348
  ## get_attribute
333
349
 
334
350
  ```
@@ -445,8 +461,7 @@ Returns locator to the last matching element.
445
461
  def locator(selector)
446
462
  ```
447
463
 
448
- The method finds an element matching the specified selector in the [Locator](./locator)'s subtree. See
449
- [Working with selectors](https://playwright.dev/python/docs/selectors) for more details.
464
+ The method finds an element matching the specified selector in the [Locator](./locator)'s subtree.
450
465
 
451
466
  ## nth
452
467
 
@@ -315,6 +315,9 @@ page.evaluate("matchMedia('(prefers-color-scheme: no-preference)').matches") # =
315
315
  def eval_on_selector(selector, expression, arg: nil, strict: nil)
316
316
  ```
317
317
 
318
+ > NOTE: This method does not wait for the element to pass actionability checks and therefore can lead to the flaky
319
+ tests. Use [Locator#evaluate](./locator#evaluate), other [Locator](./locator) helper methods or web-first assertions instead.
320
+
318
321
  The method finds an element matching the specified selector within the page and passes it as a first argument to
319
322
  `expression`. If no elements match the selector, the method throws an error. Returns the value of `expression`.
320
323
 
@@ -337,6 +340,9 @@ Shortcut for main frame's [Frame#eval_on_selector](./frame#eval_on_selector).
337
340
  def eval_on_selector_all(selector, expression, arg: nil)
338
341
  ```
339
342
 
343
+ > NOTE: In most cases, [Locator#evaluate_all](./locator#evaluate_all), other [Locator](./locator) helper methods and web-first assertions do a
344
+ better job.
345
+
340
346
  The method finds all elements matching the specified selector within the page and passes an array of matched elements as
341
347
  a first argument to `expression`. Returns the result of `expression` invocation.
342
348
 
@@ -575,6 +581,23 @@ frame = page.frame(url: /.*domain.*/)
575
581
 
576
582
 
577
583
 
584
+ ## frame_locator
585
+
586
+ ```
587
+ def frame_locator(selector)
588
+ ```
589
+
590
+ When working with iframes, you can create a frame locator that will enter the iframe and allow selecting elements in
591
+ that iframe. Following snippet locates element with text "Submit" in the iframe with id `my-frame`, like `<iframe
592
+ id="my-frame">`:
593
+
594
+ ```ruby
595
+ locator = page.frame_locator("#my-iframe").locator("text=Submit")
596
+ locator.click
597
+ ```
598
+
599
+
600
+
578
601
  ## frames
579
602
 
580
603
  ```
@@ -905,8 +928,10 @@ page.screenshot(path: "o.png")
905
928
  def query_selector(selector, strict: nil)
906
929
  ```
907
930
 
931
+ > NOTE: The use of [ElementHandle](./element_handle) is discouraged, use [Locator](./locator) objects and web-first assertions instead.
932
+
908
933
  The method finds an element matching the specified selector within the page. If no elements match the selector, the
909
- return value resolves to `null`. To wait for an element on the page, use [Page#wait_for_selector](./page#wait_for_selector).
934
+ return value resolves to `null`. To wait for an element on the page, use [Locator#wait_for](./locator#wait_for).
910
935
 
911
936
  Shortcut for main frame's [Frame#query_selector](./frame#query_selector).
912
937
 
@@ -916,6 +941,8 @@ Shortcut for main frame's [Frame#query_selector](./frame#query_selector).
916
941
  def query_selector_all(selector)
917
942
  ```
918
943
 
944
+ > NOTE: The use of [ElementHandle](./element_handle) is discouraged, use [Locator](./locator) objects and web-first assertions instead.
945
+
919
946
  The method finds all elements matching the specified selector within the page. If no elements match the selector, the
920
947
  return value resolves to `[]`.
921
948
 
@@ -927,8 +954,8 @@ Shortcut for main frame's [Frame#query_selector_all](./frame#query_selector_all)
927
954
  def reload(timeout: nil, waitUntil: nil)
928
955
  ```
929
956
 
930
- Returns the main resource response. In case of multiple redirects, the navigation will resolve with the response of the
931
- last redirect.
957
+ This method reloads the current page, in the same way as if the user had triggered a browser refresh. Returns the main
958
+ resource response. In case of multiple redirects, the navigation will resolve with the response of the last redirect.
932
959
 
933
960
  ## route
934
961
 
@@ -1484,6 +1511,9 @@ def wait_for_selector(selector, state: nil, strict: nil, timeout: nil)
1484
1511
  Returns when element specified by selector satisfies `state` option. Returns `null` if waiting for `hidden` or
1485
1512
  `detached`.
1486
1513
 
1514
+ > NOTE: Playwright automatically waits for element to be ready before performing an action. Using [Locator](./locator) objects and
1515
+ web-first assertions make the code wait-for-selector-free.
1516
+
1487
1517
  Wait for the `selector` to satisfy `state` option (either appear/disappear from dom, or become visible/hidden). If at
1488
1518
  the moment of calling the method `selector` already satisfies the condition, the method will return immediately. If the
1489
1519
  selector doesn't satisfy the condition for the `timeout` milliseconds, the function will throw.
@@ -127,10 +127,10 @@ def redirected_from
127
127
  Request that was redirected by the server to this one, if any.
128
128
 
129
129
  When the server responds with a redirect, Playwright creates a new [Request](./request) object. The two requests are connected by
130
- `redirectedFrom()` and `redirectedTo()` methods. When multiple server redirects has happened, it is possible to
131
- construct the whole redirect chain by repeatedly calling `redirectedFrom()`.
130
+ [redirected_from](./request#redirected_from) and [redirected_to](./request#redirected_to) methods. When multiple server redirects has happened, it is possible to
131
+ construct the whole redirect chain by repeatedly calling [redirected_from](./request#redirected_from).
132
132
 
133
- For example, if the website `http://example.com` redirects to `https://example.com`:
133
+ For example, if the website `http://github.com` redirects to `https://github.com`:
134
134
 
135
135
  ```ruby
136
136
  response = page.goto("http://github.com")
@@ -41,7 +41,7 @@ playwright.chromium.launch do |browser|
41
41
  page.click('tag=div >> text="Click me"')
42
42
 
43
43
  # Can use it in any methods supporting selectors.
44
- button_count = page.eval_on_selector_all('tag=button', 'buttons => buttons.length')
44
+ button_count = page.locator('tag=button').count
45
45
  button_count # => 1
46
46
  end
47
47
  ```
@@ -23,7 +23,7 @@ end
23
23
  ## start
24
24
 
25
25
  ```
26
- def start(name: nil, screenshots: nil, snapshots: nil)
26
+ def start(name: nil, screenshots: nil, snapshots: nil, title: nil)
27
27
  ```
28
28
 
29
29
  Start tracing.
@@ -40,7 +40,7 @@ context.tracing.stop(path: 'trace.zip')
40
40
  ## start_chunk
41
41
 
42
42
  ```
43
- def start_chunk
43
+ def start_chunk(title: nil)
44
44
  ```
45
45
 
46
46
  Start a new trace chunk. If you'd like to record multiple traces on the same [BrowserContext](./browser_context), use
@@ -1,17 +1,5 @@
1
1
  # API coverages
2
2
 
3
- ## APIRequestContext
4
-
5
- * ~~delete~~
6
- * ~~dispose~~
7
- * ~~fetch~~
8
- * ~~get~~
9
- * ~~head~~
10
- * ~~patch~~
11
- * ~~post~~
12
- * ~~put~~
13
- * ~~storage_state~~
14
-
15
3
  ## Request
16
4
 
17
5
  * all_headers
@@ -167,6 +155,7 @@
167
155
  * fill
168
156
  * focus
169
157
  * frame_element
158
+ * frame_locator
170
159
  * get_attribute
171
160
  * goto
172
161
  * hover
@@ -264,6 +253,7 @@
264
253
  * fill
265
254
  * focus
266
255
  * frame
256
+ * frame_locator
267
257
  * frames
268
258
  * get_attribute
269
259
  * go_back
@@ -359,6 +349,7 @@
359
349
  * expect_event
360
350
  * expect_page
361
351
  * ~~wait_for_event~~
352
+ * request
362
353
  * tracing
363
354
 
364
355
  ## CDPSession
@@ -393,6 +384,7 @@
393
384
  * chromium
394
385
  * devices
395
386
  * firefox
387
+ * ~~request~~
396
388
  * selectors
397
389
  * webkit
398
390
 
@@ -421,6 +413,7 @@
421
413
  * fill
422
414
  * first
423
415
  * focus
416
+ * frame_locator
424
417
  * get_attribute
425
418
  * hover
426
419
  * inner_html
@@ -448,6 +441,43 @@
448
441
  * uncheck
449
442
  * wait_for
450
443
 
444
+ ## FrameLocator
445
+
446
+ * first
447
+ * frame_locator
448
+ * last
449
+ * locator
450
+ * nth
451
+
452
+ ## APIResponse
453
+
454
+ * body
455
+ * dispose
456
+ * headers
457
+ * headers_array
458
+ * json
459
+ * ok
460
+ * status
461
+ * status_text
462
+ * text
463
+ * url
464
+
465
+ ## APIRequestContext
466
+
467
+ * delete
468
+ * dispose
469
+ * fetch
470
+ * get
471
+ * head
472
+ * patch
473
+ * post
474
+ * put
475
+ * ~~storage_state~~
476
+
477
+ ## ~~APIRequest~~
478
+
479
+ * ~~new_context~~
480
+
451
481
  ## Android
452
482
 
453
483
  * devices