playwright-ruby-client 0.9.0 → 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/documentation/docs/api/accessibility.md +52 -1
- data/documentation/docs/api/browser_context.md +28 -0
- data/documentation/docs/api/frame.md +11 -0
- data/documentation/docs/api/page.md +38 -0
- data/documentation/docs/api/touchscreen.md +8 -0
- data/documentation/docs/api/worker.md +37 -0
- data/documentation/docs/include/api_coverage.md +13 -13
- data/lib/playwright/accessibility_impl.rb +50 -0
- data/lib/playwright/channel_owners/browser_context.rb +45 -0
- data/lib/playwright/channel_owners/frame.rb +4 -0
- data/lib/playwright/channel_owners/page.rb +27 -2
- data/lib/playwright/channel_owners/worker.rb +23 -0
- data/lib/playwright/touchscreen_impl.rb +7 -0
- data/lib/playwright/version.rb +1 -1
- data/lib/playwright_api/accessibility.rb +1 -1
- data/lib/playwright_api/browser_context.rb +8 -8
- data/lib/playwright_api/frame.rb +1 -1
- data/lib/playwright_api/page.rb +4 -4
- data/lib/playwright_api/touchscreen.rb +1 -1
- data/lib/playwright_api/worker.rb +13 -3
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 301191e26a4aa496f59d5feb5bed3c8438d5de5dfaa3e769dea1dae12dfe091c
|
4
|
+
data.tar.gz: 19fb694b3528977da5f934eff87432fff83a89072de874531fae3ab489f30e41
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b0c3f28732256000b39c835cc6d38cd1f942c6e9defaa6e1aaf2f4269ba3e121422c0feebb76653ec323b64420bc24418b73ca1fc1fa98a7188e257f6e0ab359
|
7
|
+
data.tar.gz: 1c7ba51eef58fe196bee1411fd9b3da95f3f1a66cf150ce69a614e51511aad081fb7a18b8befdcc9ce2f7ebacae82e8ecb90f0a099b01530d3b7897f22c12142
|
@@ -4,4 +4,55 @@ sidebar_position: 10
|
|
4
4
|
|
5
5
|
# Accessibility
|
6
6
|
|
7
|
-
|
7
|
+
The Accessibility class provides methods for inspecting Chromium's accessibility tree. The accessibility tree is used by
|
8
|
+
assistive technology such as [screen readers](https://en.wikipedia.org/wiki/Screen_reader) or
|
9
|
+
[switches](https://en.wikipedia.org/wiki/Switch_access).
|
10
|
+
|
11
|
+
Accessibility is a very platform-specific thing. On different platforms, there are different screen readers that might
|
12
|
+
have wildly different output.
|
13
|
+
|
14
|
+
Rendering engines of Chromium, Firefox and WebKit have a concept of "accessibility tree", which is then translated into
|
15
|
+
different platform-specific APIs. Accessibility namespace gives access to this Accessibility Tree.
|
16
|
+
|
17
|
+
Most of the accessibility tree gets filtered out when converting from internal browser AX Tree to Platform-specific
|
18
|
+
AX-Tree or by assistive technologies themselves. By default, Playwright tries to approximate this filtering, exposing
|
19
|
+
only the "interesting" nodes of the tree.
|
20
|
+
|
21
|
+
## snapshot
|
22
|
+
|
23
|
+
```
|
24
|
+
def snapshot(interestingOnly: nil, root: nil)
|
25
|
+
```
|
26
|
+
|
27
|
+
Captures the current state of the accessibility tree. The returned object represents the root accessible node of the
|
28
|
+
page.
|
29
|
+
|
30
|
+
> NOTE: The Chromium accessibility tree contains nodes that go unused on most platforms and by most screen readers.
|
31
|
+
Playwright will discard them as well for an easier to process tree, unless `interestingOnly` is set to `false`.
|
32
|
+
|
33
|
+
An example of dumping the entire accessibility tree:
|
34
|
+
|
35
|
+
```python sync title=example_2e5019929403491cde0c78bed1e0e18e0c86ab423d7ac8715876c4de4814f483.py
|
36
|
+
snapshot = page.accessibility.snapshot()
|
37
|
+
print(snapshot)
|
38
|
+
|
39
|
+
```
|
40
|
+
|
41
|
+
An example of logging the focused node's name:
|
42
|
+
|
43
|
+
```python sync title=example_df2acadf9e261a7624d83399f0d8b0910293a6a7081c812474715f22f8af7a4a.py
|
44
|
+
def find_focused_node(node):
|
45
|
+
if (node.get("focused"))
|
46
|
+
return node
|
47
|
+
for child in (node.get("children") or []):
|
48
|
+
found_node = find_focused_node(child)
|
49
|
+
return found_node
|
50
|
+
return None
|
51
|
+
|
52
|
+
snapshot = page.accessibility.snapshot()
|
53
|
+
node = find_focused_node(snapshot)
|
54
|
+
if node:
|
55
|
+
print(node["name"])
|
56
|
+
|
57
|
+
```
|
58
|
+
|
@@ -67,6 +67,16 @@ browser_context.add_init_script(path: "preload.js")
|
|
67
67
|
> NOTE: The order of evaluation of multiple scripts installed via [BrowserContext#add_init_script](./browser_context#add_init_script) and
|
68
68
|
[Page#add_init_script](./page#add_init_script) is not defined.
|
69
69
|
|
70
|
+
## background_pages
|
71
|
+
|
72
|
+
```
|
73
|
+
def background_pages
|
74
|
+
```
|
75
|
+
|
76
|
+
> NOTE: Background pages are only supported on Chromium-based browsers.
|
77
|
+
|
78
|
+
All existing background pages in the context.
|
79
|
+
|
70
80
|
## browser
|
71
81
|
|
72
82
|
```
|
@@ -301,6 +311,16 @@ To remove a route with its handler you can use [BrowserContext#unroute](./browse
|
|
301
311
|
|
302
312
|
> NOTE: Enabling routing disables http cache.
|
303
313
|
|
314
|
+
## service_workers
|
315
|
+
|
316
|
+
```
|
317
|
+
def service_workers
|
318
|
+
```
|
319
|
+
|
320
|
+
> NOTE: Service workers are only supported on Chromium-based browsers.
|
321
|
+
|
322
|
+
All existing service workers in the context.
|
323
|
+
|
304
324
|
## set_default_navigation_timeout
|
305
325
|
|
306
326
|
```
|
@@ -369,6 +389,14 @@ alias: `offline=`
|
|
369
389
|
|
370
390
|
|
371
391
|
|
392
|
+
## storage_state
|
393
|
+
|
394
|
+
```
|
395
|
+
def storage_state(path: nil)
|
396
|
+
```
|
397
|
+
|
398
|
+
Returns storage state for this browser context, contains current cookies and local storage snapshot.
|
399
|
+
|
372
400
|
## unroute
|
373
401
|
|
374
402
|
```
|
@@ -910,6 +910,17 @@ with sync_playwright() as playwright:
|
|
910
910
|
|
911
911
|
|
912
912
|
|
913
|
+
## wait_for_timeout
|
914
|
+
|
915
|
+
```
|
916
|
+
def wait_for_timeout(timeout)
|
917
|
+
```
|
918
|
+
|
919
|
+
Waits for the given `timeout` in milliseconds.
|
920
|
+
|
921
|
+
Note that `frame.waitForTimeout()` should only be used for debugging. Tests using the timer in production are going to
|
922
|
+
be flaky. Use signals such as network events, selectors becoming visible and others instead.
|
923
|
+
|
913
924
|
## wait_for_url
|
914
925
|
|
915
926
|
```
|
@@ -1466,6 +1466,23 @@ end
|
|
1466
1466
|
|
1467
1467
|
|
1468
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
|
+
|
1469
1486
|
## wait_for_url
|
1470
1487
|
|
1471
1488
|
```
|
@@ -1489,6 +1506,27 @@ def expect_websocket(predicate: nil, timeout: nil, &block)
|
|
1489
1506
|
|
1490
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.
|
1491
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
|
+
|
1492
1530
|
## accessibility
|
1493
1531
|
|
1494
1532
|
## keyboard
|
@@ -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
|
+
|
@@ -65,7 +65,7 @@
|
|
65
65
|
|
66
66
|
## Touchscreen
|
67
67
|
|
68
|
-
*
|
68
|
+
* tap_point
|
69
69
|
|
70
70
|
## JSHandle
|
71
71
|
|
@@ -116,9 +116,9 @@
|
|
116
116
|
* wait_for_element_state
|
117
117
|
* wait_for_selector
|
118
118
|
|
119
|
-
##
|
119
|
+
## Accessibility
|
120
120
|
|
121
|
-
*
|
121
|
+
* snapshot
|
122
122
|
|
123
123
|
## FileChooser
|
124
124
|
|
@@ -178,14 +178,14 @@
|
|
178
178
|
* wait_for_load_state
|
179
179
|
* expect_navigation
|
180
180
|
* wait_for_selector
|
181
|
-
*
|
181
|
+
* wait_for_timeout
|
182
182
|
* wait_for_url
|
183
183
|
|
184
184
|
## Worker
|
185
185
|
|
186
|
-
*
|
187
|
-
*
|
188
|
-
*
|
186
|
+
* evaluate
|
187
|
+
* evaluate_handle
|
188
|
+
* url
|
189
189
|
|
190
190
|
## Selectors
|
191
191
|
|
@@ -296,11 +296,11 @@
|
|
296
296
|
* expect_request_finished
|
297
297
|
* expect_response
|
298
298
|
* wait_for_selector
|
299
|
-
*
|
299
|
+
* wait_for_timeout
|
300
300
|
* wait_for_url
|
301
301
|
* expect_websocket
|
302
|
-
*
|
303
|
-
*
|
302
|
+
* expect_worker
|
303
|
+
* workers
|
304
304
|
* ~~wait_for_event~~
|
305
305
|
* accessibility
|
306
306
|
* keyboard
|
@@ -311,7 +311,7 @@
|
|
311
311
|
|
312
312
|
* add_cookies
|
313
313
|
* add_init_script
|
314
|
-
*
|
314
|
+
* background_pages
|
315
315
|
* browser
|
316
316
|
* clear_cookies
|
317
317
|
* clear_permissions
|
@@ -324,13 +324,13 @@
|
|
324
324
|
* new_page
|
325
325
|
* pages
|
326
326
|
* route
|
327
|
-
*
|
327
|
+
* service_workers
|
328
328
|
* set_default_navigation_timeout
|
329
329
|
* set_default_timeout
|
330
330
|
* set_extra_http_headers
|
331
331
|
* set_geolocation
|
332
332
|
* set_offline
|
333
|
-
*
|
333
|
+
* storage_state
|
334
334
|
* unroute
|
335
335
|
* expect_event
|
336
336
|
* expect_page
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Playwright
|
2
|
+
define_api_implementation :AccessibilityImpl do
|
3
|
+
def initialize(channel)
|
4
|
+
@channel = channel
|
5
|
+
end
|
6
|
+
|
7
|
+
def snapshot(interestingOnly: nil, root: nil)
|
8
|
+
params = {
|
9
|
+
interestingOnly: interestingOnly,
|
10
|
+
root: root&.channel,
|
11
|
+
}.compact
|
12
|
+
result = @channel.send_message_to_server('accessibilitySnapshot', params)
|
13
|
+
format_ax_node_from_protocol(result) if result
|
14
|
+
result
|
15
|
+
end
|
16
|
+
|
17
|
+
# original JS implementation create a new Hash from ax_node,
|
18
|
+
# but this implementation directly modify ax_node and don't return hash.
|
19
|
+
private def format_ax_node_from_protocol(ax_node)
|
20
|
+
value = ax_node.delete('valueNumber') || ax_node.delete('valueString')
|
21
|
+
ax_node['value'] = value unless value.nil?
|
22
|
+
|
23
|
+
checked =
|
24
|
+
case ax_node['checked']
|
25
|
+
when 'checked'
|
26
|
+
true
|
27
|
+
when 'unchecked'
|
28
|
+
false
|
29
|
+
else
|
30
|
+
ax_node['checked']
|
31
|
+
end
|
32
|
+
ax_node['checked'] = checked unless checked.nil?
|
33
|
+
|
34
|
+
pressed =
|
35
|
+
case ax_node['pressed']
|
36
|
+
when 'pressed'
|
37
|
+
true
|
38
|
+
when 'released'
|
39
|
+
false
|
40
|
+
else
|
41
|
+
ax_node['pressed']
|
42
|
+
end
|
43
|
+
ax_node['pressed'] = pressed unless pressed.nil?
|
44
|
+
|
45
|
+
ax_node['children']&.each do |child|
|
46
|
+
format_ax_node_from_protocol(child)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -11,6 +11,8 @@ module Playwright
|
|
11
11
|
@routes = []
|
12
12
|
@bindings = {}
|
13
13
|
@timeout_settings = TimeoutSettings.new
|
14
|
+
@service_workers = Set.new
|
15
|
+
@background_pages = Set.new
|
14
16
|
|
15
17
|
@tracing = TracingImpl.new(@channel, self)
|
16
18
|
@channel.on('bindingCall', ->(params) { on_binding(ChannelOwners::BindingCall.from(params['binding'])) })
|
@@ -19,6 +21,12 @@ module Playwright
|
|
19
21
|
@channel.on('route', ->(params) {
|
20
22
|
on_route(ChannelOwners::Route.from(params['route']), ChannelOwners::Request.from(params['request']))
|
21
23
|
})
|
24
|
+
@channel.on('backgroundPage', ->(params) {
|
25
|
+
on_background_page(ChannelOwners::Page.from(params['page']))
|
26
|
+
})
|
27
|
+
@channel.on('serviceWorker', ->(params) {
|
28
|
+
on_service_worker(ChannelOwners::Worker.from(params['worker']))
|
29
|
+
})
|
22
30
|
@channel.on('request', ->(params) {
|
23
31
|
on_request(
|
24
32
|
ChannelOwners::Request.from(params['request']),
|
@@ -56,6 +64,11 @@ module Playwright
|
|
56
64
|
page.send(:emit_popup_event_from_browser_context)
|
57
65
|
end
|
58
66
|
|
67
|
+
private def on_background_page(page)
|
68
|
+
@background_pages << page
|
69
|
+
emit(Events::BrowserContext::BackgroundPage, page)
|
70
|
+
end
|
71
|
+
|
59
72
|
private def on_route(route, request)
|
60
73
|
# It is not desired to use PlaywrightApi.wrap directly.
|
61
74
|
# However it is a little difficult to define wrapper for `handler` parameter in generate_api.
|
@@ -98,6 +111,20 @@ module Playwright
|
|
98
111
|
page&.emit(Events::Page::Response, response)
|
99
112
|
end
|
100
113
|
|
114
|
+
private def on_service_worker(worker)
|
115
|
+
worker.context = self
|
116
|
+
@service_workers << worker
|
117
|
+
emit(Events::BrowserContext::ServiceWorker, worker)
|
118
|
+
end
|
119
|
+
|
120
|
+
def background_pages
|
121
|
+
@background_pages.to_a
|
122
|
+
end
|
123
|
+
|
124
|
+
def service_workers
|
125
|
+
@service_workers.to_a
|
126
|
+
end
|
127
|
+
|
101
128
|
def new_cdp_session(page)
|
102
129
|
resp = @channel.send_message_to_server('newCDPSession', page: page.channel)
|
103
130
|
ChannelOwners::CDPSession.from(resp)
|
@@ -279,6 +306,16 @@ module Playwright
|
|
279
306
|
@channel.send_message_to_server('pause')
|
280
307
|
end
|
281
308
|
|
309
|
+
def storage_state(path: nil)
|
310
|
+
@channel.send_message_to_server_result('storageState', {}).tap do |result|
|
311
|
+
if path
|
312
|
+
File.open(path, 'w') do |f|
|
313
|
+
f.write(JSON.dump(result))
|
314
|
+
end
|
315
|
+
end
|
316
|
+
end
|
317
|
+
end
|
318
|
+
|
282
319
|
def expect_page(predicate: nil, timeout: nil)
|
283
320
|
params = {
|
284
321
|
predicate: predicate,
|
@@ -292,6 +329,14 @@ module Playwright
|
|
292
329
|
@pages.delete(page)
|
293
330
|
end
|
294
331
|
|
332
|
+
private def remove_background_page(page)
|
333
|
+
@background_pages.delete(page)
|
334
|
+
end
|
335
|
+
|
336
|
+
private def remove_service_worker(worker)
|
337
|
+
@service_workers.delete(worker)
|
338
|
+
end
|
339
|
+
|
295
340
|
# called from Page with send(:_timeout_settings), so keep private.
|
296
341
|
private def _timeout_settings
|
297
342
|
@timeout_settings
|
@@ -579,6 +579,10 @@ module Playwright
|
|
579
579
|
nil
|
580
580
|
end
|
581
581
|
|
582
|
+
def wait_for_timeout(timeout)
|
583
|
+
sleep(timeout / 1000.0)
|
584
|
+
end
|
585
|
+
|
582
586
|
def wait_for_function(pageFunction, arg: nil, polling: nil, timeout: nil)
|
583
587
|
if polling.is_a?(String) && polling != 'raf'
|
584
588
|
raise ArgumentError.new("Unknown polling option: #{polling}")
|
@@ -9,7 +9,7 @@ module Playwright
|
|
9
9
|
private def after_initialize
|
10
10
|
@browser_context = @parent
|
11
11
|
@timeout_settings = TimeoutSettings.new(@browser_context.send(:_timeout_settings))
|
12
|
-
@accessibility =
|
12
|
+
@accessibility = AccessibilityImpl.new(@channel)
|
13
13
|
@keyboard = KeyboardImpl.new(@channel)
|
14
14
|
@mouse = MouseImpl.new(@channel)
|
15
15
|
@touchscreen = TouchscreenImpl.new(@channel)
|
@@ -21,6 +21,7 @@ module Playwright
|
|
21
21
|
}
|
22
22
|
end
|
23
23
|
@closed = false
|
24
|
+
@workers = Set.new
|
24
25
|
@bindings = {}
|
25
26
|
@routes = []
|
26
27
|
|
@@ -66,7 +67,7 @@ module Playwright
|
|
66
67
|
})
|
67
68
|
@channel.on('worker', ->(params) {
|
68
69
|
worker = ChannelOwners::Worker.from(params['worker'])
|
69
|
-
|
70
|
+
on_worker(worker)
|
70
71
|
})
|
71
72
|
end
|
72
73
|
|
@@ -110,9 +111,16 @@ module Playwright
|
|
110
111
|
@browser_context.send(:on_binding, binding_call)
|
111
112
|
end
|
112
113
|
|
114
|
+
private def on_worker(worker)
|
115
|
+
worker.page = self
|
116
|
+
@workers << worker
|
117
|
+
emit(Events::Page::Worker, worker)
|
118
|
+
end
|
119
|
+
|
113
120
|
private def on_close
|
114
121
|
@closed = true
|
115
122
|
@browser_context.send(:remove_page, self)
|
123
|
+
@browser_context.send(:remove_background_page, self)
|
116
124
|
emit(Events::Page::Close)
|
117
125
|
end
|
118
126
|
|
@@ -690,10 +698,18 @@ module Playwright
|
|
690
698
|
trial: trial)
|
691
699
|
end
|
692
700
|
|
701
|
+
def wait_for_timeout(timeout)
|
702
|
+
@main_frame.wait_for_timeout(timeout)
|
703
|
+
end
|
704
|
+
|
693
705
|
def wait_for_function(pageFunction, arg: nil, polling: nil, timeout: nil)
|
694
706
|
@main_frame.wait_for_function(pageFunction, arg: arg, polling: polling, timeout: timeout)
|
695
707
|
end
|
696
708
|
|
709
|
+
def workers
|
710
|
+
@workers.to_a
|
711
|
+
end
|
712
|
+
|
697
713
|
def pause
|
698
714
|
@browser_context.send(:pause)
|
699
715
|
end
|
@@ -865,6 +881,10 @@ module Playwright
|
|
865
881
|
expect_event(Events::Page::WebSocket, predicate: predicate, timeout: timeout, &block)
|
866
882
|
end
|
867
883
|
|
884
|
+
def expect_worker(predicate: nil, timeout: nil, &block)
|
885
|
+
expect_event(Events::Page::Worker, predicate: predicate, timeout: timeout, &block)
|
886
|
+
end
|
887
|
+
|
868
888
|
# called from Frame with send(:timeout_settings)
|
869
889
|
private def timeout_settings
|
870
890
|
@timeout_settings
|
@@ -875,6 +895,11 @@ module Playwright
|
|
875
895
|
@bindings.key?(name)
|
876
896
|
end
|
877
897
|
|
898
|
+
# called from Worker#on_close
|
899
|
+
private def remove_worker(worker)
|
900
|
+
@workers.delete(worker)
|
901
|
+
end
|
902
|
+
|
878
903
|
# Expose guid for library developers.
|
879
904
|
# Not intended to be used by users.
|
880
905
|
def guid
|
@@ -1,4 +1,27 @@
|
|
1
1
|
module Playwright
|
2
2
|
define_channel_owner :Worker do
|
3
|
+
attr_writer :context, :page
|
4
|
+
|
5
|
+
private def after_initialize
|
6
|
+
@channel.once('close', ->(_) { on_close })
|
7
|
+
end
|
8
|
+
|
9
|
+
private def on_close
|
10
|
+
@page&.send(:remove_worker, self)
|
11
|
+
@context&.send(:remove_service_worker, self)
|
12
|
+
emit(Events::Worker::Close, self)
|
13
|
+
end
|
14
|
+
|
15
|
+
def url
|
16
|
+
@initializer['url']
|
17
|
+
end
|
18
|
+
|
19
|
+
def evaluate(expression, arg: nil)
|
20
|
+
JavaScript::Expression.new(expression, arg).evaluate(@channel)
|
21
|
+
end
|
22
|
+
|
23
|
+
def evaluate_handle(expression, arg: nil)
|
24
|
+
JavaScript::Expression.new(expression, arg).evaluate_handle(@channel)
|
25
|
+
end
|
3
26
|
end
|
4
27
|
end
|
data/lib/playwright/version.rb
CHANGED
@@ -44,7 +44,7 @@ module Playwright
|
|
44
44
|
# print(node["name"])
|
45
45
|
# ```
|
46
46
|
def snapshot(interestingOnly: nil, root: nil)
|
47
|
-
|
47
|
+
wrap_impl(@impl.snapshot(interestingOnly: unwrap_impl(interestingOnly), root: unwrap_impl(root)))
|
48
48
|
end
|
49
49
|
end
|
50
50
|
end
|
@@ -59,7 +59,7 @@ module Playwright
|
|
59
59
|
#
|
60
60
|
# All existing background pages in the context.
|
61
61
|
def background_pages
|
62
|
-
|
62
|
+
wrap_impl(@impl.background_pages)
|
63
63
|
end
|
64
64
|
|
65
65
|
# Returns the browser instance of the context. If it was launched as a persistent context null gets returned.
|
@@ -268,7 +268,7 @@ module Playwright
|
|
268
268
|
#
|
269
269
|
# All existing service workers in the context.
|
270
270
|
def service_workers
|
271
|
-
|
271
|
+
wrap_impl(@impl.service_workers)
|
272
272
|
end
|
273
273
|
|
274
274
|
# This setting will change the default maximum navigation time for the following methods and related shortcuts:
|
@@ -325,7 +325,7 @@ module Playwright
|
|
325
325
|
|
326
326
|
# Returns storage state for this browser context, contains current cookies and local storage snapshot.
|
327
327
|
def storage_state(path: nil)
|
328
|
-
|
328
|
+
wrap_impl(@impl.storage_state(path: unwrap_impl(path)))
|
329
329
|
end
|
330
330
|
|
331
331
|
# Removes a route created with [`method: BrowserContext.route`]. When `handler` is not specified, removes all routes for
|
@@ -367,11 +367,6 @@ module Playwright
|
|
367
367
|
wrap_impl(@impl.enable_debug_console!)
|
368
368
|
end
|
369
369
|
|
370
|
-
# @nodoc
|
371
|
-
def pause
|
372
|
-
wrap_impl(@impl.pause)
|
373
|
-
end
|
374
|
-
|
375
370
|
# @nodoc
|
376
371
|
def browser=(req)
|
377
372
|
wrap_impl(@impl.browser=(unwrap_impl(req)))
|
@@ -382,6 +377,11 @@ module Playwright
|
|
382
377
|
wrap_impl(@impl.owner_page=(unwrap_impl(req)))
|
383
378
|
end
|
384
379
|
|
380
|
+
# @nodoc
|
381
|
+
def pause
|
382
|
+
wrap_impl(@impl.pause)
|
383
|
+
end
|
384
|
+
|
385
385
|
# @nodoc
|
386
386
|
def options=(req)
|
387
387
|
wrap_impl(@impl.options=(unwrap_impl(req)))
|
data/lib/playwright_api/frame.rb
CHANGED
@@ -720,7 +720,7 @@ module Playwright
|
|
720
720
|
# Note that `frame.waitForTimeout()` should only be used for debugging. Tests using the timer in production are going to
|
721
721
|
# be flaky. Use signals such as network events, selectors becoming visible and others instead.
|
722
722
|
def wait_for_timeout(timeout)
|
723
|
-
|
723
|
+
wrap_impl(@impl.wait_for_timeout(unwrap_impl(timeout)))
|
724
724
|
end
|
725
725
|
|
726
726
|
# Waits for the frame to navigate to the given URL.
|
data/lib/playwright_api/page.rb
CHANGED
@@ -1274,7 +1274,7 @@ module Playwright
|
|
1274
1274
|
#
|
1275
1275
|
# Shortcut for main frame's [`method: Frame.waitForTimeout`].
|
1276
1276
|
def wait_for_timeout(timeout)
|
1277
|
-
|
1277
|
+
wrap_impl(@impl.wait_for_timeout(unwrap_impl(timeout)))
|
1278
1278
|
end
|
1279
1279
|
|
1280
1280
|
# Waits for the main frame to navigate to the given URL.
|
@@ -1299,8 +1299,8 @@ module Playwright
|
|
1299
1299
|
# Performs action and waits for a new `Worker`. If predicate is provided, it passes `Worker` value into the `predicate`
|
1300
1300
|
# function and waits for `predicate(worker)` to return a truthy value. Will throw an error if the page is closed before
|
1301
1301
|
# the worker event is fired.
|
1302
|
-
def expect_worker(predicate: nil, timeout: nil)
|
1303
|
-
|
1302
|
+
def expect_worker(predicate: nil, timeout: nil, &block)
|
1303
|
+
wrap_impl(@impl.expect_worker(predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
|
1304
1304
|
end
|
1305
1305
|
|
1306
1306
|
# This method returns all of the dedicated [WebWorkers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API)
|
@@ -1308,7 +1308,7 @@ module Playwright
|
|
1308
1308
|
#
|
1309
1309
|
# > NOTE: This does not contain ServiceWorkers
|
1310
1310
|
def workers
|
1311
|
-
|
1311
|
+
wrap_impl(@impl.workers)
|
1312
1312
|
end
|
1313
1313
|
|
1314
1314
|
# > NOTE: In most cases, you should use [`method: Page.waitForEvent`].
|
@@ -5,7 +5,7 @@ module Playwright
|
|
5
5
|
|
6
6
|
# Dispatches a `touchstart` and `touchend` event with a single touch at the position (`x`,`y`).
|
7
7
|
def tap_point(x, y)
|
8
|
-
|
8
|
+
wrap_impl(@impl.tap_point(unwrap_impl(x), unwrap_impl(y)))
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
@@ -25,7 +25,7 @@ module Playwright
|
|
25
25
|
# [`method: Worker.evaluate`] returns `undefined`. Playwright also supports transferring some additional values that are
|
26
26
|
# not serializable by `JSON`: `-0`, `NaN`, `Infinity`, `-Infinity`.
|
27
27
|
def evaluate(expression, arg: nil)
|
28
|
-
|
28
|
+
wrap_impl(@impl.evaluate(unwrap_impl(expression), arg: unwrap_impl(arg)))
|
29
29
|
end
|
30
30
|
|
31
31
|
# Returns the return value of `expression` as a `JSHandle`.
|
@@ -36,11 +36,21 @@ module Playwright
|
|
36
36
|
# If the function passed to the [`method: Worker.evaluateHandle`] returns a [Promise], then
|
37
37
|
# [`method: Worker.evaluateHandle`] would wait for the promise to resolve and return its value.
|
38
38
|
def evaluate_handle(expression, arg: nil)
|
39
|
-
|
39
|
+
wrap_impl(@impl.evaluate_handle(unwrap_impl(expression), arg: unwrap_impl(arg)))
|
40
40
|
end
|
41
41
|
|
42
42
|
def url
|
43
|
-
|
43
|
+
wrap_impl(@impl.url)
|
44
|
+
end
|
45
|
+
|
46
|
+
# @nodoc
|
47
|
+
def context=(req)
|
48
|
+
wrap_impl(@impl.context=(unwrap_impl(req)))
|
49
|
+
end
|
50
|
+
|
51
|
+
# @nodoc
|
52
|
+
def page=(req)
|
53
|
+
wrap_impl(@impl.page=(unwrap_impl(req)))
|
44
54
|
end
|
45
55
|
|
46
56
|
# -- inherited from EventEmitter --
|
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:
|
4
|
+
version: 1.14.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- YusukeIwaki
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-08-
|
11
|
+
date: 2021-08-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -267,6 +267,7 @@ files:
|
|
267
267
|
- documentation/static/img/undraw_windows.svg
|
268
268
|
- documentation/yarn.lock
|
269
269
|
- lib/playwright.rb
|
270
|
+
- lib/playwright/accessibility_impl.rb
|
270
271
|
- lib/playwright/android_input_impl.rb
|
271
272
|
- lib/playwright/api_implementation.rb
|
272
273
|
- lib/playwright/channel.rb
|
@@ -370,9 +371,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
370
371
|
version: '2.4'
|
371
372
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
372
373
|
requirements:
|
373
|
-
- - "
|
374
|
+
- - ">"
|
374
375
|
- !ruby/object:Gem::Version
|
375
|
-
version:
|
376
|
+
version: 1.3.1
|
376
377
|
requirements: []
|
377
378
|
rubygems_version: 3.2.22
|
378
379
|
signing_key:
|