playwright-ruby-client 0.7.1 → 1.14.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.
- checksums.yaml +4 -4
- data/README.md +26 -0
- data/documentation/docs/api/accessibility.md +52 -1
- data/documentation/docs/api/browser.md +8 -2
- data/documentation/docs/api/browser_context.md +28 -0
- data/documentation/docs/api/browser_type.md +1 -0
- data/documentation/docs/api/download.md +97 -0
- data/documentation/docs/api/element_handle.md +38 -4
- data/documentation/docs/api/experimental/android_device.md +1 -0
- data/documentation/docs/api/frame.md +89 -17
- data/documentation/docs/api/keyboard.md +11 -20
- data/documentation/docs/api/locator.md +650 -0
- data/documentation/docs/api/page.md +135 -19
- data/documentation/docs/api/response.md +16 -0
- data/documentation/docs/api/touchscreen.md +8 -0
- data/documentation/docs/api/worker.md +37 -0
- data/documentation/docs/article/guides/inspector.md +31 -0
- data/documentation/docs/article/guides/playwright_on_alpine_linux.md +91 -0
- data/documentation/docs/article/guides/semi_automation.md +5 -1
- data/documentation/docs/include/api_coverage.md +77 -14
- data/lib/playwright.rb +36 -4
- data/lib/playwright/accessibility_impl.rb +50 -0
- data/lib/playwright/channel_owners/artifact.rb +4 -0
- data/lib/playwright/channel_owners/browser_context.rb +77 -3
- data/lib/playwright/channel_owners/element_handle.rb +11 -4
- data/lib/playwright/channel_owners/frame.rb +107 -34
- data/lib/playwright/channel_owners/page.rb +163 -55
- data/lib/playwright/channel_owners/response.rb +8 -0
- data/lib/playwright/channel_owners/worker.rb +23 -0
- data/lib/playwright/connection.rb +2 -4
- data/lib/playwright/{download.rb → download_impl.rb} +5 -1
- data/lib/playwright/javascript/expression.rb +5 -4
- data/lib/playwright/locator_impl.rb +314 -0
- data/lib/playwright/route_handler_entry.rb +3 -2
- data/lib/playwright/timeout_settings.rb +4 -4
- data/lib/playwright/touchscreen_impl.rb +7 -0
- data/lib/playwright/transport.rb +0 -1
- data/lib/playwright/url_matcher.rb +12 -2
- data/lib/playwright/version.rb +2 -2
- data/lib/playwright/web_socket_client.rb +164 -0
- data/lib/playwright/web_socket_transport.rb +104 -0
- data/lib/playwright_api/accessibility.rb +1 -1
- data/lib/playwright_api/android_device.rb +6 -5
- data/lib/playwright_api/browser.rb +10 -4
- data/lib/playwright_api/browser_context.rb +12 -7
- data/lib/playwright_api/browser_type.rb +2 -1
- data/lib/playwright_api/cdp_session.rb +6 -6
- data/lib/playwright_api/download.rb +70 -0
- data/lib/playwright_api/element_handle.rb +38 -18
- data/lib/playwright_api/frame.rb +95 -44
- data/lib/playwright_api/locator.rb +509 -0
- data/lib/playwright_api/page.rb +102 -49
- data/lib/playwright_api/response.rb +10 -0
- data/lib/playwright_api/touchscreen.rb +1 -1
- data/lib/playwright_api/worker.rb +13 -3
- metadata +17 -7
@@ -104,6 +104,7 @@ def check(
|
|
104
104
|
force: nil,
|
105
105
|
noWaitAfter: nil,
|
106
106
|
position: nil,
|
107
|
+
strict: nil,
|
107
108
|
timeout: nil,
|
108
109
|
trial: nil)
|
109
110
|
```
|
@@ -136,6 +137,7 @@ def click(
|
|
136
137
|
modifiers: nil,
|
137
138
|
noWaitAfter: nil,
|
138
139
|
position: nil,
|
140
|
+
strict: nil,
|
139
141
|
timeout: nil,
|
140
142
|
trial: nil)
|
141
143
|
```
|
@@ -194,6 +196,7 @@ def dblclick(
|
|
194
196
|
modifiers: nil,
|
195
197
|
noWaitAfter: nil,
|
196
198
|
position: nil,
|
199
|
+
strict: nil,
|
197
200
|
timeout: nil,
|
198
201
|
trial: nil)
|
199
202
|
```
|
@@ -217,7 +220,12 @@ Shortcut for main frame's [Frame#dblclick](./frame#dblclick).
|
|
217
220
|
## dispatch_event
|
218
221
|
|
219
222
|
```
|
220
|
-
def dispatch_event(
|
223
|
+
def dispatch_event(
|
224
|
+
selector,
|
225
|
+
type,
|
226
|
+
eventInit: nil,
|
227
|
+
strict: nil,
|
228
|
+
timeout: nil)
|
221
229
|
```
|
222
230
|
|
223
231
|
The snippet below dispatches the `click` event on the element. Regardless of the visibility state of the element,
|
@@ -253,6 +261,21 @@ page.dispatch_event("#source", "dragstart", eventInit: { dataTransfer: data_tran
|
|
253
261
|
|
254
262
|
|
255
263
|
|
264
|
+
## drag_and_drop
|
265
|
+
|
266
|
+
```
|
267
|
+
def drag_and_drop(
|
268
|
+
source,
|
269
|
+
target,
|
270
|
+
force: nil,
|
271
|
+
noWaitAfter: nil,
|
272
|
+
strict: nil,
|
273
|
+
timeout: nil,
|
274
|
+
trial: nil)
|
275
|
+
```
|
276
|
+
|
277
|
+
|
278
|
+
|
256
279
|
## emulate_media
|
257
280
|
|
258
281
|
```
|
@@ -287,7 +310,7 @@ page.evaluate("matchMedia('(prefers-color-scheme: no-preference)').matches") # =
|
|
287
310
|
## eval_on_selector
|
288
311
|
|
289
312
|
```
|
290
|
-
def eval_on_selector(selector, expression, arg: nil)
|
313
|
+
def eval_on_selector(selector, expression, arg: nil, strict: nil)
|
291
314
|
```
|
292
315
|
|
293
316
|
The method finds an element matching the specified selector within the page and passes it as a first argument to
|
@@ -499,7 +522,13 @@ page.click("button")
|
|
499
522
|
## fill
|
500
523
|
|
501
524
|
```
|
502
|
-
def fill(
|
525
|
+
def fill(
|
526
|
+
selector,
|
527
|
+
value,
|
528
|
+
force: nil,
|
529
|
+
noWaitAfter: nil,
|
530
|
+
strict: nil,
|
531
|
+
timeout: nil)
|
503
532
|
```
|
504
533
|
|
505
534
|
This method waits for an element matching `selector`, waits for [actionability](https://playwright.dev/python/docs/actionability) checks, focuses the
|
@@ -518,7 +547,7 @@ Shortcut for main frame's [Frame#fill](./frame#fill).
|
|
518
547
|
## focus
|
519
548
|
|
520
549
|
```
|
521
|
-
def focus(selector, timeout: nil)
|
550
|
+
def focus(selector, strict: nil, timeout: nil)
|
522
551
|
```
|
523
552
|
|
524
553
|
This method fetches an element with `selector` and focuses it. If there's no element matching `selector`, the method
|
@@ -555,7 +584,7 @@ An array of all frames attached to the page.
|
|
555
584
|
## get_attribute
|
556
585
|
|
557
586
|
```
|
558
|
-
def get_attribute(selector, name, timeout: nil)
|
587
|
+
def get_attribute(selector, name, strict: nil, timeout: nil)
|
559
588
|
```
|
560
589
|
|
561
590
|
Returns element attribute value.
|
@@ -617,6 +646,7 @@ def hover(
|
|
617
646
|
force: nil,
|
618
647
|
modifiers: nil,
|
619
648
|
position: nil,
|
649
|
+
strict: nil,
|
620
650
|
timeout: nil,
|
621
651
|
trial: nil)
|
622
652
|
```
|
@@ -637,7 +667,7 @@ Shortcut for main frame's [Frame#hover](./frame#hover).
|
|
637
667
|
## inner_html
|
638
668
|
|
639
669
|
```
|
640
|
-
def inner_html(selector, timeout: nil)
|
670
|
+
def inner_html(selector, strict: nil, timeout: nil)
|
641
671
|
```
|
642
672
|
|
643
673
|
Returns `element.innerHTML`.
|
@@ -645,15 +675,23 @@ Returns `element.innerHTML`.
|
|
645
675
|
## inner_text
|
646
676
|
|
647
677
|
```
|
648
|
-
def inner_text(selector, timeout: nil)
|
678
|
+
def inner_text(selector, strict: nil, timeout: nil)
|
649
679
|
```
|
650
680
|
|
651
681
|
Returns `element.innerText`.
|
652
682
|
|
683
|
+
## input_value
|
684
|
+
|
685
|
+
```
|
686
|
+
def input_value(selector, strict: nil, timeout: nil)
|
687
|
+
```
|
688
|
+
|
689
|
+
Returns `input.value` for the selected `<input>` or `<textarea>` element. Throws for non-input elements.
|
690
|
+
|
653
691
|
## checked?
|
654
692
|
|
655
693
|
```
|
656
|
-
def checked?(selector, timeout: nil)
|
694
|
+
def checked?(selector, strict: nil, timeout: nil)
|
657
695
|
```
|
658
696
|
|
659
697
|
Returns whether the element is checked. Throws if the element is not a checkbox or radio input.
|
@@ -669,7 +707,7 @@ Indicates that the page has been closed.
|
|
669
707
|
## disabled?
|
670
708
|
|
671
709
|
```
|
672
|
-
def disabled?(selector, timeout: nil)
|
710
|
+
def disabled?(selector, strict: nil, timeout: nil)
|
673
711
|
```
|
674
712
|
|
675
713
|
Returns whether the element is disabled, the opposite of [enabled](https://playwright.dev/python/docs/actionability).
|
@@ -677,7 +715,7 @@ Returns whether the element is disabled, the opposite of [enabled](https://playw
|
|
677
715
|
## editable?
|
678
716
|
|
679
717
|
```
|
680
|
-
def editable?(selector, timeout: nil)
|
718
|
+
def editable?(selector, strict: nil, timeout: nil)
|
681
719
|
```
|
682
720
|
|
683
721
|
Returns whether the element is [editable](https://playwright.dev/python/docs/actionability).
|
@@ -685,7 +723,7 @@ Returns whether the element is [editable](https://playwright.dev/python/docs/act
|
|
685
723
|
## enabled?
|
686
724
|
|
687
725
|
```
|
688
|
-
def enabled?(selector, timeout: nil)
|
726
|
+
def enabled?(selector, strict: nil, timeout: nil)
|
689
727
|
```
|
690
728
|
|
691
729
|
Returns whether the element is [enabled](https://playwright.dev/python/docs/actionability).
|
@@ -693,7 +731,7 @@ Returns whether the element is [enabled](https://playwright.dev/python/docs/acti
|
|
693
731
|
## hidden?
|
694
732
|
|
695
733
|
```
|
696
|
-
def hidden?(selector, timeout: nil)
|
734
|
+
def hidden?(selector, strict: nil, timeout: nil)
|
697
735
|
```
|
698
736
|
|
699
737
|
Returns whether the element is hidden, the opposite of [visible](https://playwright.dev/python/docs/actionability). `selector` that does not
|
@@ -702,12 +740,26 @@ match any elements is considered hidden.
|
|
702
740
|
## visible?
|
703
741
|
|
704
742
|
```
|
705
|
-
def visible?(selector, timeout: nil)
|
743
|
+
def visible?(selector, strict: nil, timeout: nil)
|
706
744
|
```
|
707
745
|
|
708
746
|
Returns whether the element is [visible](https://playwright.dev/python/docs/actionability). `selector` that does not match any elements is
|
709
747
|
considered not visible.
|
710
748
|
|
749
|
+
## locator
|
750
|
+
|
751
|
+
```
|
752
|
+
def locator(selector)
|
753
|
+
```
|
754
|
+
|
755
|
+
The method returns an element locator that can be used to perform actions on the page. Locator is resolved to the
|
756
|
+
element immediately before performing an action, so a series of actions on the same locator can in fact be performed on
|
757
|
+
different DOM elements. That would happen if the DOM structure between those actions has changed.
|
758
|
+
|
759
|
+
Note that locator always implies visibility, so it will always be locating visible elements.
|
760
|
+
|
761
|
+
Shortcut for main frame's [Frame#locator](./frame#locator).
|
762
|
+
|
711
763
|
## main_frame
|
712
764
|
|
713
765
|
```
|
@@ -724,6 +776,21 @@ def opener
|
|
724
776
|
|
725
777
|
Returns the opener for popup pages and `null` for others. If the opener has been closed already the returns `null`.
|
726
778
|
|
779
|
+
## pause
|
780
|
+
|
781
|
+
```
|
782
|
+
def pause
|
783
|
+
```
|
784
|
+
|
785
|
+
Pauses script execution. Playwright will stop executing the script and wait for the user to either press 'Resume' button
|
786
|
+
in the page overlay or to call `playwright.resume()` in the DevTools console.
|
787
|
+
|
788
|
+
User can inspect selectors or perform manual steps while paused. Resume will continue running the original script from
|
789
|
+
the place it was paused.
|
790
|
+
|
791
|
+
> NOTE: This method requires Playwright to be started in a headed mode, with a falsy `headless` value in the
|
792
|
+
[BrowserType#launch](./browser_type#launch).
|
793
|
+
|
727
794
|
## pdf
|
728
795
|
|
729
796
|
```
|
@@ -797,6 +864,7 @@ def press(
|
|
797
864
|
key,
|
798
865
|
delay: nil,
|
799
866
|
noWaitAfter: nil,
|
867
|
+
strict: nil,
|
800
868
|
timeout: nil)
|
801
869
|
```
|
802
870
|
|
@@ -834,7 +902,7 @@ page.screenshot(path: "o.png")
|
|
834
902
|
## query_selector
|
835
903
|
|
836
904
|
```
|
837
|
-
def query_selector(selector)
|
905
|
+
def query_selector(selector, strict: nil)
|
838
906
|
```
|
839
907
|
|
840
908
|
The method finds an element matching the specified selector within the page. If no elements match the selector, the
|
@@ -934,7 +1002,9 @@ def select_option(
|
|
934
1002
|
index: nil,
|
935
1003
|
value: nil,
|
936
1004
|
label: nil,
|
1005
|
+
force: nil,
|
937
1006
|
noWaitAfter: nil,
|
1007
|
+
strict: nil,
|
938
1008
|
timeout: nil)
|
939
1009
|
```
|
940
1010
|
|
@@ -1013,7 +1083,12 @@ The extra HTTP headers will be sent with every request the page initiates.
|
|
1013
1083
|
## set_input_files
|
1014
1084
|
|
1015
1085
|
```
|
1016
|
-
def set_input_files(
|
1086
|
+
def set_input_files(
|
1087
|
+
selector,
|
1088
|
+
files,
|
1089
|
+
noWaitAfter: nil,
|
1090
|
+
strict: nil,
|
1091
|
+
timeout: nil)
|
1017
1092
|
```
|
1018
1093
|
|
1019
1094
|
This method expects `selector` to point to an
|
@@ -1051,6 +1126,7 @@ def tap_point(
|
|
1051
1126
|
modifiers: nil,
|
1052
1127
|
noWaitAfter: nil,
|
1053
1128
|
position: nil,
|
1129
|
+
strict: nil,
|
1054
1130
|
timeout: nil,
|
1055
1131
|
trial: nil)
|
1056
1132
|
```
|
@@ -1073,7 +1149,7 @@ Shortcut for main frame's [Frame#tap_point](./frame#tap_point).
|
|
1073
1149
|
## text_content
|
1074
1150
|
|
1075
1151
|
```
|
1076
|
-
def text_content(selector, timeout: nil)
|
1152
|
+
def text_content(selector, strict: nil, timeout: nil)
|
1077
1153
|
```
|
1078
1154
|
|
1079
1155
|
Returns `element.textContent`.
|
@@ -1094,6 +1170,7 @@ def type(
|
|
1094
1170
|
text,
|
1095
1171
|
delay: nil,
|
1096
1172
|
noWaitAfter: nil,
|
1173
|
+
strict: nil,
|
1097
1174
|
timeout: nil)
|
1098
1175
|
```
|
1099
1176
|
|
@@ -1117,6 +1194,7 @@ def uncheck(
|
|
1117
1194
|
force: nil,
|
1118
1195
|
noWaitAfter: nil,
|
1119
1196
|
position: nil,
|
1197
|
+
strict: nil,
|
1120
1198
|
timeout: nil,
|
1121
1199
|
trial: nil)
|
1122
1200
|
```
|
@@ -1185,7 +1263,7 @@ throw an error if the page is closed before the [`event: Page.console`] event is
|
|
1185
1263
|
def expect_download(predicate: nil, timeout: nil, &block)
|
1186
1264
|
```
|
1187
1265
|
|
1188
|
-
Performs action and waits for a new
|
1266
|
+
Performs action and waits for a new [Download](./download). If predicate is provided, it passes [Download](./download) value into the
|
1189
1267
|
`predicate` function and waits for `predicate(download)` to return a truthy value. Will throw an error if the page is
|
1190
1268
|
closed before the download event is fired.
|
1191
1269
|
|
@@ -1306,7 +1384,7 @@ Performs action and waits for a popup [Page](./page). If predicate is provided,
|
|
1306
1384
|
def expect_request(urlOrPredicate, timeout: nil, &block)
|
1307
1385
|
```
|
1308
1386
|
|
1309
|
-
Waits for the matching request and returns it.
|
1387
|
+
Waits for the matching request and returns it. See [waiting for event](https://playwright.dev/python/docs/events) for more details
|
1310
1388
|
about events.
|
1311
1389
|
|
1312
1390
|
```ruby
|
@@ -1366,7 +1444,7 @@ puts response.body
|
|
1366
1444
|
## wait_for_selector
|
1367
1445
|
|
1368
1446
|
```
|
1369
|
-
def wait_for_selector(selector, state: nil, timeout: nil)
|
1447
|
+
def wait_for_selector(selector, state: nil, strict: nil, timeout: nil)
|
1370
1448
|
```
|
1371
1449
|
|
1372
1450
|
Returns when element specified by selector satisfies `state` option. Returns `null` if waiting for `hidden` or
|
@@ -1388,6 +1466,23 @@ end
|
|
1388
1466
|
|
1389
1467
|
|
1390
1468
|
|
1469
|
+
## wait_for_timeout
|
1470
|
+
|
1471
|
+
```
|
1472
|
+
def wait_for_timeout(timeout)
|
1473
|
+
```
|
1474
|
+
|
1475
|
+
Waits for the given `timeout` in milliseconds.
|
1476
|
+
|
1477
|
+
Note that `page.waitForTimeout()` should only be used for debugging. Tests using the timer in production are going to be
|
1478
|
+
flaky. Use signals such as network events, selectors becoming visible and others instead.
|
1479
|
+
|
1480
|
+
```ruby
|
1481
|
+
page.wait_for_timeout(1000)
|
1482
|
+
```
|
1483
|
+
|
1484
|
+
Shortcut for main frame's [Frame#wait_for_timeout](./frame#wait_for_timeout).
|
1485
|
+
|
1391
1486
|
## wait_for_url
|
1392
1487
|
|
1393
1488
|
```
|
@@ -1411,6 +1506,27 @@ def expect_websocket(predicate: nil, timeout: nil, &block)
|
|
1411
1506
|
|
1412
1507
|
Performs action and waits for a new [WebSocket](./web_socket). If predicate is provided, it passes [WebSocket](./web_socket) value into the `predicate` function and waits for `predicate.call(web_socket)` to return a truthy value. Will throw an error if the page is closed before the WebSocket event is fired.
|
1413
1508
|
|
1509
|
+
## expect_worker
|
1510
|
+
|
1511
|
+
```
|
1512
|
+
def expect_worker(predicate: nil, timeout: nil, &block)
|
1513
|
+
```
|
1514
|
+
|
1515
|
+
Performs action and waits for a new [Worker](./worker). If predicate is provided, it passes [Worker](./worker) value into the `predicate`
|
1516
|
+
function and waits for `predicate(worker)` to return a truthy value. Will throw an error if the page is closed before
|
1517
|
+
the worker event is fired.
|
1518
|
+
|
1519
|
+
## workers
|
1520
|
+
|
1521
|
+
```
|
1522
|
+
def workers
|
1523
|
+
```
|
1524
|
+
|
1525
|
+
This method returns all of the dedicated [WebWorkers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API)
|
1526
|
+
associated with the page.
|
1527
|
+
|
1528
|
+
> NOTE: This does not contain ServiceWorkers
|
1529
|
+
|
1414
1530
|
## accessibility
|
1415
1531
|
|
1416
1532
|
## keyboard
|
@@ -64,6 +64,22 @@ def request
|
|
64
64
|
|
65
65
|
Returns the matching [Request](./request) object.
|
66
66
|
|
67
|
+
## security_details
|
68
|
+
|
69
|
+
```
|
70
|
+
def security_details
|
71
|
+
```
|
72
|
+
|
73
|
+
Returns SSL and other security information.
|
74
|
+
|
75
|
+
## server_addr
|
76
|
+
|
77
|
+
```
|
78
|
+
def server_addr
|
79
|
+
```
|
80
|
+
|
81
|
+
Returns the IP address and port of the server.
|
82
|
+
|
67
83
|
## status
|
68
84
|
|
69
85
|
```
|
@@ -6,3 +6,11 @@ sidebar_position: 10
|
|
6
6
|
|
7
7
|
The Touchscreen class operates in main-frame CSS pixels relative to the top-left corner of the viewport. Methods on the
|
8
8
|
touchscreen can only be used in browser contexts that have been initialized with `hasTouch` set to true.
|
9
|
+
|
10
|
+
## tap_point
|
11
|
+
|
12
|
+
```
|
13
|
+
def tap_point(x, y)
|
14
|
+
```
|
15
|
+
|
16
|
+
Dispatches a `touchstart` and `touchend` event with a single touch at the position (`x`,`y`).
|
@@ -22,3 +22,40 @@ for worker in page.workers:
|
|
22
22
|
```
|
23
23
|
|
24
24
|
|
25
|
+
|
26
|
+
## evaluate
|
27
|
+
|
28
|
+
```
|
29
|
+
def evaluate(expression, arg: nil)
|
30
|
+
```
|
31
|
+
|
32
|
+
Returns the return value of `expression`.
|
33
|
+
|
34
|
+
If the function passed to the [Worker#evaluate](./worker#evaluate) returns a [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise), then [Worker#evaluate](./worker#evaluate) would
|
35
|
+
wait for the promise to resolve and return its value.
|
36
|
+
|
37
|
+
If the function passed to the [Worker#evaluate](./worker#evaluate) returns a non-[Serializable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#description) value, then
|
38
|
+
[Worker#evaluate](./worker#evaluate) returns `undefined`. Playwright also supports transferring some additional values that are
|
39
|
+
not serializable by `JSON`: `-0`, `NaN`, `Infinity`, `-Infinity`.
|
40
|
+
|
41
|
+
## evaluate_handle
|
42
|
+
|
43
|
+
```
|
44
|
+
def evaluate_handle(expression, arg: nil)
|
45
|
+
```
|
46
|
+
|
47
|
+
Returns the return value of `expression` as a [JSHandle](./js_handle).
|
48
|
+
|
49
|
+
The only difference between [Worker#evaluate](./worker#evaluate) and [Worker#evaluate_handle](./worker#evaluate_handle) is that
|
50
|
+
[Worker#evaluate_handle](./worker#evaluate_handle) returns [JSHandle](./js_handle).
|
51
|
+
|
52
|
+
If the function passed to the [Worker#evaluate_handle](./worker#evaluate_handle) returns a [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise), then
|
53
|
+
[Worker#evaluate_handle](./worker#evaluate_handle) would wait for the promise to resolve and return its value.
|
54
|
+
|
55
|
+
## url
|
56
|
+
|
57
|
+
```
|
58
|
+
def url
|
59
|
+
```
|
60
|
+
|
61
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
---
|
2
|
+
sidebar_position: 6
|
3
|
+
---
|
4
|
+
|
5
|
+
# Playwright inspector
|
6
|
+
|
7
|
+
Playwright provides an useful inspector.
|
8
|
+
https://playwright.dev/docs/inspector/
|
9
|
+
|
10
|
+
## Overview
|
11
|
+
|
12
|
+
```ruby {4,8}
|
13
|
+
playwright.chromium.launch(headless: false) do |browser|
|
14
|
+
browser.new_context do |context|
|
15
|
+
# This method call should be put just after creating BrowserContext.
|
16
|
+
context.enable_debug_console!
|
17
|
+
|
18
|
+
page = context.new_pagè
|
19
|
+
page.goto('http://example.com/')
|
20
|
+
page.pause
|
21
|
+
end
|
22
|
+
end
|
23
|
+
```
|
24
|
+
|
25
|
+
`page.pause` requires Playwright debug session, and it can be enabled by calling `BrowserContext#enable_debug_console!` in advance.
|
26
|
+
|
27
|
+
Note that since Ruby is not officially supported in Playwright, many limitations exist. We CANNOT
|
28
|
+
|
29
|
+
* Launch inspector via `PWDEBUG=1`
|
30
|
+
* Debug without inspector UI (`PWDEBUG=console` is not working well)
|
31
|
+
* Show Ruby code in inspector
|