playwright-ruby-client 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -3
- data/docs/api_coverage.md +15 -7
- data/lib/playwright/channel_owner.rb +3 -5
- data/lib/playwright/channel_owners/android.rb +1 -1
- data/lib/playwright/channel_owners/android_device.rb +11 -11
- data/lib/playwright/channel_owners/browser.rb +1 -1
- data/lib/playwright/channel_owners/browser_context.rb +1 -1
- data/lib/playwright/channel_owners/element_handle.rb +13 -2
- data/lib/playwright/channel_owners/frame.rb +15 -3
- data/lib/playwright/channel_owners/js_handle.rb +1 -1
- data/lib/playwright/channel_owners/page.rb +33 -28
- data/lib/playwright/channel_owners/request.rb +1 -1
- data/lib/playwright/select_option_values.rb +14 -4
- data/lib/playwright/utils.rb +2 -2
- data/lib/playwright/version.rb +1 -1
- data/lib/playwright_api/android.rb +0 -5
- data/lib/playwright_api/android_device.rb +2 -7
- data/lib/playwright_api/browser.rb +12 -19
- data/lib/playwright_api/browser_context.rb +41 -10
- data/lib/playwright_api/browser_type.rb +6 -50
- data/lib/playwright_api/download.rb +0 -5
- data/lib/playwright_api/element_handle.rb +8 -2
- data/lib/playwright_api/frame.rb +9 -7
- data/lib/playwright_api/js_handle.rb +0 -5
- data/lib/playwright_api/page.rb +79 -18
- data/lib/playwright_api/playwright.rb +22 -43
- data/lib/playwright_api/request.rb +8 -10
- data/lib/playwright_api/response.rb +7 -0
- data/lib/playwright_api/route.rb +0 -1
- data/lib/playwright_api/selectors.rb +1 -1
- data/lib/playwright_api/web_socket.rb +15 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eecde37d8ee0ad9fdb1f0df5a64a5a646f2706915a24a2a2d83a8f176bcc8519
|
4
|
+
data.tar.gz: cb97a5926b3a25c8c3b2fe8c88946747ec89d3d579f71d36350c7cf2839c83e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e1bb8eee779773afd9e3b165a03f3c91bb25ae076ae00d6d1603e34afe8eaf3876f847559841c68403588a79b766f3e4afe680f7056286c64ba16ce5be149bc
|
7
|
+
data.tar.gz: e55e7895a26b5a579cae82101cd9ae0bf3cebd4f9ecc0c18692b4a18fa5a7e649b4121d9ac5c6029101131cdd56c59af64ba8b65d6c325cfbe7ffe56c8ee632c
|
data/README.md
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
[![Gem Version](https://badge.fury.io/rb/playwright-ruby-client.svg)](https://badge.fury.io/rb/playwright-ruby-client)
|
2
2
|
|
3
|
-
#
|
4
|
-
|
5
|
-
A Ruby client for Playwright driver.
|
3
|
+
# 🎭 Playwright client for Ruby
|
6
4
|
|
7
5
|
Note: Currently, this Gem is just a PoC (Proof of Concept). If you want to develop browser-automation for Chrome with Ruby, consider using [puppeteer-ruby](https://github.com/YusukeIwaki/puppeteer-ruby). The list of the available APIs of playwright-ruby-client is [here](./docs/api_coverage.md)
|
8
6
|
|
@@ -17,6 +15,8 @@ npm install playwright
|
|
17
15
|
|
18
16
|
and then, set `playwright_cli_executable_path: ./node_modules/.bin/playwright` at `Playwright.create`.
|
19
17
|
|
18
|
+
**Prefer playwrighting without Node.js?**
|
19
|
+
|
20
20
|
Instead of npm install, you can also directly download playwright driver from playwright.azureedge.net/builds/. The URL can be easily detected from [here](https://github.com/microsoft/playwright-python/blob/79f6ce0a6a69c480573372706df84af5ef99c4a4/setup.py#L56-L61)
|
21
21
|
|
22
22
|
### Capture a site
|
data/docs/api_coverage.md
CHANGED
@@ -9,6 +9,7 @@
|
|
9
9
|
* method
|
10
10
|
* post_data
|
11
11
|
* post_data_buffer
|
12
|
+
* post_data_json
|
12
13
|
* redirected_from
|
13
14
|
* redirected_to
|
14
15
|
* resource_type
|
@@ -22,6 +23,7 @@
|
|
22
23
|
* ~~finished~~
|
23
24
|
* ~~frame~~
|
24
25
|
* ~~headers~~
|
26
|
+
* ~~json~~
|
25
27
|
* ~~ok~~
|
26
28
|
* ~~request~~
|
27
29
|
* ~~status~~
|
@@ -40,6 +42,8 @@
|
|
40
42
|
|
41
43
|
* ~~closed?~~
|
42
44
|
* ~~url~~
|
45
|
+
* ~~expect_event~~
|
46
|
+
* ~~wait_for_event~~
|
43
47
|
|
44
48
|
## Keyboard
|
45
49
|
|
@@ -197,7 +201,6 @@
|
|
197
201
|
|
198
202
|
## Download
|
199
203
|
|
200
|
-
* ~~create_read_stream~~
|
201
204
|
* delete
|
202
205
|
* failure
|
203
206
|
* path
|
@@ -273,6 +276,7 @@
|
|
273
276
|
* url
|
274
277
|
* ~~video~~
|
275
278
|
* viewport_size
|
279
|
+
* expect_event
|
276
280
|
* wait_for_function
|
277
281
|
* wait_for_load_state
|
278
282
|
* expect_navigation
|
@@ -281,8 +285,13 @@
|
|
281
285
|
* wait_for_selector
|
282
286
|
* ~~wait_for_timeout~~
|
283
287
|
* ~~workers~~
|
288
|
+
* ~~expect_download~~
|
289
|
+
* ~~expect_popup~~
|
290
|
+
* ~~expect_worker~~
|
291
|
+
* ~~expect_console_message~~
|
292
|
+
* ~~expect_file_chooser~~
|
293
|
+
* ~~wait_for_event~~
|
284
294
|
* accessibility
|
285
|
-
* ~~coverage~~
|
286
295
|
* keyboard
|
287
296
|
* mouse
|
288
297
|
* touchscreen
|
@@ -306,10 +315,12 @@
|
|
306
315
|
* ~~set_default_timeout~~
|
307
316
|
* ~~set_extra_http_headers~~
|
308
317
|
* ~~set_geolocation~~
|
309
|
-
* ~~set_http_credentials~~
|
310
318
|
* ~~set_offline~~
|
311
319
|
* ~~storage_state~~
|
312
320
|
* ~~unroute~~
|
321
|
+
* ~~expect_event~~
|
322
|
+
* ~~expect_page~~
|
323
|
+
* ~~wait_for_event~~
|
313
324
|
|
314
325
|
## ~~CDPSession~~
|
315
326
|
|
@@ -333,19 +344,16 @@
|
|
333
344
|
|
334
345
|
## BrowserType
|
335
346
|
|
336
|
-
* ~~connect~~
|
337
347
|
* executable_path
|
338
348
|
* launch
|
339
349
|
* ~~launch_persistent_context~~
|
340
|
-
* ~~launch_server~~
|
341
350
|
* name
|
342
351
|
|
343
352
|
## Playwright
|
344
353
|
|
345
|
-
* ~~
|
354
|
+
* ~~stop~~
|
346
355
|
* chromium
|
347
356
|
* devices
|
348
|
-
* ~~errors~~
|
349
357
|
* firefox
|
350
358
|
* ~~selectors~~
|
351
359
|
* webkit
|
@@ -59,16 +59,14 @@ module Playwright
|
|
59
59
|
"#<#{@guid}>"
|
60
60
|
end
|
61
61
|
|
62
|
-
private
|
63
|
-
|
64
|
-
def after_initialize
|
62
|
+
private def after_initialize
|
65
63
|
end
|
66
64
|
|
67
|
-
def update_object_from_child(guid, child)
|
65
|
+
private def update_object_from_child(guid, child)
|
68
66
|
@objects[guid] = child
|
69
67
|
end
|
70
68
|
|
71
|
-
def delete_object_from_child(guid)
|
69
|
+
private def delete_object_from_child(guid)
|
72
70
|
@objects.delete(guid)
|
73
71
|
end
|
74
72
|
end
|
@@ -2,7 +2,7 @@ module Playwright
|
|
2
2
|
define_channel_owner :AndroidDevice do
|
3
3
|
include Utils::PrepareBrowserContextOptions
|
4
4
|
|
5
|
-
def after_initialize
|
5
|
+
private def after_initialize
|
6
6
|
@input = AndroidInputImpl.new(@channel)
|
7
7
|
end
|
8
8
|
|
@@ -104,17 +104,17 @@ module Playwright
|
|
104
104
|
isMobile: nil,
|
105
105
|
javaScriptEnabled: nil,
|
106
106
|
locale: nil,
|
107
|
-
|
107
|
+
noViewport: nil,
|
108
108
|
offline: nil,
|
109
109
|
permissions: nil,
|
110
110
|
proxy: nil,
|
111
|
-
|
112
|
-
|
111
|
+
record_har_omit_content: nil,
|
112
|
+
record_har_path: nil,
|
113
|
+
record_video_dir: nil,
|
114
|
+
record_video_size: nil,
|
113
115
|
storageState: nil,
|
114
116
|
timezoneId: nil,
|
115
117
|
userAgent: nil,
|
116
|
-
videoSize: nil,
|
117
|
-
videosPath: nil,
|
118
118
|
viewport: nil,
|
119
119
|
&block)
|
120
120
|
params = {
|
@@ -131,17 +131,17 @@ module Playwright
|
|
131
131
|
isMobile: isMobile,
|
132
132
|
javaScriptEnabled: javaScriptEnabled,
|
133
133
|
locale: locale,
|
134
|
-
|
134
|
+
noViewport: noViewport,
|
135
135
|
offline: offline,
|
136
136
|
permissions: permissions,
|
137
137
|
proxy: proxy,
|
138
|
-
|
139
|
-
|
138
|
+
record_har_omit_content: record_har_omit_content,
|
139
|
+
record_har_path: record_har_path,
|
140
|
+
record_video_dir: record_video_dir,
|
141
|
+
record_video_size: record_video_size,
|
140
142
|
storageState: storageState,
|
141
143
|
timezoneId: timezoneId,
|
142
144
|
userAgent: userAgent,
|
143
|
-
videoSize: videoSize,
|
144
|
-
videosPath: videosPath,
|
145
145
|
viewport: viewport,
|
146
146
|
}.compact
|
147
147
|
prepare_browser_context_options(params)
|
@@ -136,8 +136,19 @@ module Playwright
|
|
136
136
|
nil
|
137
137
|
end
|
138
138
|
|
139
|
-
def select_option(
|
140
|
-
|
139
|
+
def select_option(
|
140
|
+
element: nil,
|
141
|
+
index: nil,
|
142
|
+
value: nil,
|
143
|
+
label: nil,
|
144
|
+
noWaitAfter: nil,
|
145
|
+
timeout: nil)
|
146
|
+
base_params = SelectOptionValues.new(
|
147
|
+
element: element,
|
148
|
+
index: index,
|
149
|
+
value: value,
|
150
|
+
label: label,
|
151
|
+
).as_params
|
141
152
|
params = base_params + { noWaitAfter: noWaitAfter, timeout: timeout }.compact
|
142
153
|
@channel.send_message_to_server('selectOption', params)
|
143
154
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Playwright
|
2
2
|
# @ref https://github.com/microsoft/playwright-python/blob/master/playwright/_impl/_frame.py
|
3
3
|
define_channel_owner :Frame do
|
4
|
-
def after_initialize
|
4
|
+
private def after_initialize
|
5
5
|
if @initializer['parentFrame']
|
6
6
|
@parent_frame = ChannelOwners::Frame.from(@initializer['parentFrame'])
|
7
7
|
@parent_frame.send(:append_child_frame_from_child, self)
|
@@ -398,8 +398,20 @@ module Playwright
|
|
398
398
|
nil
|
399
399
|
end
|
400
400
|
|
401
|
-
def select_option(
|
402
|
-
|
401
|
+
def select_option(
|
402
|
+
selector,
|
403
|
+
element: nil,
|
404
|
+
index: nil,
|
405
|
+
value: nil,
|
406
|
+
label: nil,
|
407
|
+
noWaitAfter: nil,
|
408
|
+
timeout: nil)
|
409
|
+
base_params = SelectOptionValues.new(
|
410
|
+
element: element,
|
411
|
+
index: index,
|
412
|
+
value: value,
|
413
|
+
label: label,
|
414
|
+
).as_params
|
403
415
|
params = base_params + { selector: selector, noWaitAfter: noWaitAfter, timeout: timeout }.compact
|
404
416
|
@channel.send_message_to_server('selectOption', params)
|
405
417
|
|
@@ -6,7 +6,7 @@ module Playwright
|
|
6
6
|
include Utils::Errors::SafeCloseError
|
7
7
|
attr_writer :owned_context
|
8
8
|
|
9
|
-
def after_initialize
|
9
|
+
private def after_initialize
|
10
10
|
@browser_context = @parent
|
11
11
|
@timeout_settings = TimeoutSettings.new(@browser_context.send(:_timeout_settings))
|
12
12
|
@accessibility = Accessibility.new(@channel)
|
@@ -167,14 +167,7 @@ module Playwright
|
|
167
167
|
ChannelOwners::Page.from(resp)
|
168
168
|
end
|
169
169
|
|
170
|
-
def frame(
|
171
|
-
name, url =
|
172
|
-
if frameSelector.is_a?(Hash)
|
173
|
-
[frameSelector[:name], frameSelector[:url]]
|
174
|
-
else
|
175
|
-
[frameSelector, nil]
|
176
|
-
end
|
177
|
-
|
170
|
+
def frame(name: nil, url: nil)
|
178
171
|
if name
|
179
172
|
@frames.find { |f| f.name == name }
|
180
173
|
elsif url
|
@@ -351,9 +344,17 @@ module Playwright
|
|
351
344
|
nil
|
352
345
|
end
|
353
346
|
|
354
|
-
def add_init_script(
|
347
|
+
def add_init_script(path: nil, script: nil)
|
348
|
+
source =
|
349
|
+
if path
|
350
|
+
File.read(path, 'r')
|
351
|
+
elsif script
|
352
|
+
script
|
353
|
+
else
|
354
|
+
raise ArgumentError.new('Either path or script parameter must be specified')
|
355
|
+
end
|
356
|
+
|
355
357
|
@channel.send_message_to_server('addInitScript', source: script)
|
356
|
-
# FIXME: handling `arg` for function `script`
|
357
358
|
nil
|
358
359
|
end
|
359
360
|
|
@@ -502,8 +503,23 @@ module Playwright
|
|
502
503
|
)
|
503
504
|
end
|
504
505
|
|
505
|
-
def select_option(
|
506
|
-
|
506
|
+
def select_option(
|
507
|
+
selector,
|
508
|
+
element: nil,
|
509
|
+
index: nil,
|
510
|
+
value: nil,
|
511
|
+
label: nil,
|
512
|
+
noWaitAfter: nil,
|
513
|
+
timeout: nil)
|
514
|
+
@main_frame.select_option(
|
515
|
+
selector,
|
516
|
+
element: element,
|
517
|
+
index: index,
|
518
|
+
value: value,
|
519
|
+
label: label,
|
520
|
+
noWaitAfter: noWaitAfter,
|
521
|
+
timeout: timeout,
|
522
|
+
)
|
507
523
|
end
|
508
524
|
|
509
525
|
def set_input_files(selector, files, noWaitAfter: nil, timeout: nil)
|
@@ -599,20 +615,9 @@ module Playwright
|
|
599
615
|
end
|
600
616
|
end
|
601
617
|
|
602
|
-
def expect_event(event,
|
603
|
-
predicate, timeout =
|
604
|
-
case optionsOrPredicate
|
605
|
-
when Proc
|
606
|
-
[optionsOrPredicate, nil]
|
607
|
-
when Hash
|
608
|
-
[optionsOrPredicate[:predicate], optionsOrPredicate[:timeout]]
|
609
|
-
else
|
610
|
-
[nil, nil]
|
611
|
-
end
|
612
|
-
timeout ||= @timeout_settings.timeout
|
613
|
-
|
618
|
+
def expect_event(event, predicate: nil, timeout: nil, &block)
|
614
619
|
wait_helper = WaitHelper.new
|
615
|
-
wait_helper.reject_on_timeout(timeout, "Timeout while waiting for event \"#{event}\"")
|
620
|
+
wait_helper.reject_on_timeout(timeout || @timeout_settings.timeout, "Timeout while waiting for event \"#{event}\"")
|
616
621
|
|
617
622
|
unless event == Events::Page::Crash
|
618
623
|
wait_helper.reject_on_event(self, Events::Page::Crash, CrashedError.new)
|
@@ -649,7 +654,7 @@ module Playwright
|
|
649
654
|
-> (_) { true }
|
650
655
|
end
|
651
656
|
|
652
|
-
expect_event(Events::Page::Request,
|
657
|
+
expect_event(Events::Page::Request, predicate: predicate, timeout: timeout)
|
653
658
|
end
|
654
659
|
|
655
660
|
def expect_response(urlOrPredicate, timeout: nil)
|
@@ -664,7 +669,7 @@ module Playwright
|
|
664
669
|
-> (_) { true }
|
665
670
|
end
|
666
671
|
|
667
|
-
expect_event(Events::Page::Response,
|
672
|
+
expect_event(Events::Page::Response, predicate: predicate, timeout: timeout)
|
668
673
|
end
|
669
674
|
|
670
675
|
# called from BrowserContext#on_page with send(:update_browser_context, page), so keep private.
|
@@ -3,7 +3,7 @@ require 'base64'
|
|
3
3
|
module Playwright
|
4
4
|
# @ref https://github.com/microsoft/playwright-python/blob/master/playwright/_impl/_network.py
|
5
5
|
define_channel_owner :Request do
|
6
|
-
def after_initialize
|
6
|
+
private def after_initialize
|
7
7
|
@redirected_from = ChannelOwners::Request.from_nullable(@initializer['redirectedFrom'])
|
8
8
|
@redirected_from&.send(:update_redirected_to, self)
|
9
9
|
@timing = {
|
@@ -1,7 +1,18 @@
|
|
1
1
|
module Playwright
|
2
2
|
class SelectOptionValues
|
3
|
-
def initialize(
|
4
|
-
@params =
|
3
|
+
def initialize(element: nil, index: nil, value: nil, label: nil)
|
4
|
+
@params =
|
5
|
+
if element
|
6
|
+
convert(elmeent)
|
7
|
+
elsif index
|
8
|
+
convert(index)
|
9
|
+
elsif value
|
10
|
+
convert(value)
|
11
|
+
elsif label
|
12
|
+
convert(label)
|
13
|
+
else
|
14
|
+
{}
|
15
|
+
end
|
5
16
|
end
|
6
17
|
|
7
18
|
# @return [Hash]
|
@@ -10,8 +21,7 @@ module Playwright
|
|
10
21
|
end
|
11
22
|
|
12
23
|
private def convert(values)
|
13
|
-
return
|
14
|
-
return convert([values]) unless values.is_a?('Array')
|
24
|
+
return convert([values]) unless values.is_a?(Enumerable)
|
15
25
|
return {} if values.empty?
|
16
26
|
values.each_with_index do |value, index|
|
17
27
|
unless values
|
data/lib/playwright/utils.rb
CHANGED
@@ -3,8 +3,8 @@ module Playwright
|
|
3
3
|
module PrepareBrowserContextOptions
|
4
4
|
# @see https://github.com/microsoft/playwright/blob/5a2cfdbd47ed3c3deff77bb73e5fac34241f649d/src/client/browserContext.ts#L265
|
5
5
|
private def prepare_browser_context_options(params)
|
6
|
-
if params[:
|
7
|
-
params.delete(:
|
6
|
+
if params[:noViewport] == 0
|
7
|
+
params.delete(:noViewport)
|
8
8
|
params[:noDefaultViewport] = true
|
9
9
|
end
|
10
10
|
if params[:extraHTTPHeaders]
|
data/lib/playwright/version.rb
CHANGED
@@ -12,11 +12,6 @@ module Playwright
|
|
12
12
|
wrap_impl(@impl.close)
|
13
13
|
end
|
14
14
|
|
15
|
-
# @nodoc
|
16
|
-
def after_initialize
|
17
|
-
wrap_impl(@impl.after_initialize)
|
18
|
-
end
|
19
|
-
|
20
15
|
# @nodoc
|
21
16
|
def tap_on(selector, duration: nil, timeout: nil)
|
22
17
|
wrap_impl(@impl.tap_on(unwrap_impl(selector), duration: unwrap_impl(duration), timeout: unwrap_impl(timeout)))
|
@@ -38,8 +33,8 @@ module Playwright
|
|
38
33
|
end
|
39
34
|
|
40
35
|
# @nodoc
|
41
|
-
def launch_browser(pkg: nil, acceptDownloads: nil, bypassCSP: nil, colorScheme: nil, deviceScaleFactor: nil, extraHTTPHeaders: nil, geolocation: nil, hasTouch: nil, httpCredentials: nil, ignoreHTTPSErrors: nil, isMobile: nil, javaScriptEnabled: nil, locale: nil,
|
42
|
-
wrap_impl(@impl.launch_browser(pkg: unwrap_impl(pkg), acceptDownloads: unwrap_impl(acceptDownloads), bypassCSP: unwrap_impl(bypassCSP), colorScheme: unwrap_impl(colorScheme), deviceScaleFactor: unwrap_impl(deviceScaleFactor), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), geolocation: unwrap_impl(geolocation), hasTouch: unwrap_impl(hasTouch), httpCredentials: unwrap_impl(httpCredentials), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale),
|
36
|
+
def launch_browser(pkg: nil, acceptDownloads: nil, bypassCSP: nil, colorScheme: nil, deviceScaleFactor: nil, extraHTTPHeaders: nil, geolocation: nil, hasTouch: nil, httpCredentials: nil, ignoreHTTPSErrors: nil, isMobile: nil, javaScriptEnabled: nil, locale: nil, noViewport: nil, offline: nil, permissions: nil, proxy: nil, record_har_omit_content: nil, record_har_path: nil, record_video_dir: nil, record_video_size: nil, storageState: nil, timezoneId: nil, userAgent: nil, viewport: nil, &block)
|
37
|
+
wrap_impl(@impl.launch_browser(pkg: unwrap_impl(pkg), acceptDownloads: unwrap_impl(acceptDownloads), bypassCSP: unwrap_impl(bypassCSP), colorScheme: unwrap_impl(colorScheme), deviceScaleFactor: unwrap_impl(deviceScaleFactor), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), geolocation: unwrap_impl(geolocation), hasTouch: unwrap_impl(hasTouch), httpCredentials: unwrap_impl(httpCredentials), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale), noViewport: unwrap_impl(noViewport), offline: unwrap_impl(offline), permissions: unwrap_impl(permissions), proxy: unwrap_impl(proxy), record_har_omit_content: unwrap_impl(record_har_omit_content), record_har_path: unwrap_impl(record_har_path), record_video_dir: unwrap_impl(record_video_dir), record_video_size: unwrap_impl(record_video_size), storageState: unwrap_impl(storageState), timezoneId: unwrap_impl(timezoneId), userAgent: unwrap_impl(userAgent), viewport: unwrap_impl(viewport), &wrap_block_call(block)))
|
43
38
|
end
|
44
39
|
|
45
40
|
# @nodoc
|
@@ -135,21 +135,20 @@ module Playwright
|
|
135
135
|
isMobile: nil,
|
136
136
|
javaScriptEnabled: nil,
|
137
137
|
locale: nil,
|
138
|
-
|
138
|
+
noViewport: nil,
|
139
139
|
offline: nil,
|
140
140
|
permissions: nil,
|
141
141
|
proxy: nil,
|
142
|
-
|
143
|
-
|
142
|
+
record_har_omit_content: nil,
|
143
|
+
record_har_path: nil,
|
144
|
+
record_video_dir: nil,
|
145
|
+
record_video_size: nil,
|
144
146
|
storageState: nil,
|
145
|
-
storageStatePath: nil,
|
146
147
|
timezoneId: nil,
|
147
148
|
userAgent: nil,
|
148
|
-
videoSize: nil,
|
149
|
-
videosPath: nil,
|
150
149
|
viewport: nil,
|
151
150
|
&block)
|
152
|
-
wrap_impl(@impl.new_context(acceptDownloads: unwrap_impl(acceptDownloads), bypassCSP: unwrap_impl(bypassCSP), colorScheme: unwrap_impl(colorScheme), deviceScaleFactor: unwrap_impl(deviceScaleFactor), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), geolocation: unwrap_impl(geolocation), hasTouch: unwrap_impl(hasTouch), httpCredentials: unwrap_impl(httpCredentials), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale),
|
151
|
+
wrap_impl(@impl.new_context(acceptDownloads: unwrap_impl(acceptDownloads), bypassCSP: unwrap_impl(bypassCSP), colorScheme: unwrap_impl(colorScheme), deviceScaleFactor: unwrap_impl(deviceScaleFactor), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), geolocation: unwrap_impl(geolocation), hasTouch: unwrap_impl(hasTouch), httpCredentials: unwrap_impl(httpCredentials), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale), noViewport: unwrap_impl(noViewport), offline: unwrap_impl(offline), permissions: unwrap_impl(permissions), proxy: unwrap_impl(proxy), record_har_omit_content: unwrap_impl(record_har_omit_content), record_har_path: unwrap_impl(record_har_path), record_video_dir: unwrap_impl(record_video_dir), record_video_size: unwrap_impl(record_video_size), storageState: unwrap_impl(storageState), timezoneId: unwrap_impl(timezoneId), userAgent: unwrap_impl(userAgent), viewport: unwrap_impl(viewport), &wrap_block_call(block)))
|
153
152
|
end
|
154
153
|
|
155
154
|
# Creates a new page in a new browser context. Closing this page will close the context as well.
|
@@ -170,20 +169,19 @@ module Playwright
|
|
170
169
|
isMobile: nil,
|
171
170
|
javaScriptEnabled: nil,
|
172
171
|
locale: nil,
|
173
|
-
|
172
|
+
noViewport: nil,
|
174
173
|
offline: nil,
|
175
174
|
permissions: nil,
|
176
175
|
proxy: nil,
|
177
|
-
|
178
|
-
|
176
|
+
record_har_omit_content: nil,
|
177
|
+
record_har_path: nil,
|
178
|
+
record_video_dir: nil,
|
179
|
+
record_video_size: nil,
|
179
180
|
storageState: nil,
|
180
|
-
storageStatePath: nil,
|
181
181
|
timezoneId: nil,
|
182
182
|
userAgent: nil,
|
183
|
-
videoSize: nil,
|
184
|
-
videosPath: nil,
|
185
183
|
viewport: nil)
|
186
|
-
wrap_impl(@impl.new_page(acceptDownloads: unwrap_impl(acceptDownloads), bypassCSP: unwrap_impl(bypassCSP), colorScheme: unwrap_impl(colorScheme), deviceScaleFactor: unwrap_impl(deviceScaleFactor), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), geolocation: unwrap_impl(geolocation), hasTouch: unwrap_impl(hasTouch), httpCredentials: unwrap_impl(httpCredentials), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale),
|
184
|
+
wrap_impl(@impl.new_page(acceptDownloads: unwrap_impl(acceptDownloads), bypassCSP: unwrap_impl(bypassCSP), colorScheme: unwrap_impl(colorScheme), deviceScaleFactor: unwrap_impl(deviceScaleFactor), extraHTTPHeaders: unwrap_impl(extraHTTPHeaders), geolocation: unwrap_impl(geolocation), hasTouch: unwrap_impl(hasTouch), httpCredentials: unwrap_impl(httpCredentials), ignoreHTTPSErrors: unwrap_impl(ignoreHTTPSErrors), isMobile: unwrap_impl(isMobile), javaScriptEnabled: unwrap_impl(javaScriptEnabled), locale: unwrap_impl(locale), noViewport: unwrap_impl(noViewport), offline: unwrap_impl(offline), permissions: unwrap_impl(permissions), proxy: unwrap_impl(proxy), record_har_omit_content: unwrap_impl(record_har_omit_content), record_har_path: unwrap_impl(record_har_path), record_video_dir: unwrap_impl(record_video_dir), record_video_size: unwrap_impl(record_video_size), storageState: unwrap_impl(storageState), timezoneId: unwrap_impl(timezoneId), userAgent: unwrap_impl(userAgent), viewport: unwrap_impl(viewport)))
|
187
185
|
end
|
188
186
|
|
189
187
|
# Returns the browser version.
|
@@ -191,11 +189,6 @@ module Playwright
|
|
191
189
|
wrap_impl(@impl.version)
|
192
190
|
end
|
193
191
|
|
194
|
-
# @nodoc
|
195
|
-
def after_initialize
|
196
|
-
wrap_impl(@impl.after_initialize)
|
197
|
-
end
|
198
|
-
|
199
192
|
# -- inherited from EventEmitter --
|
200
193
|
# @nodoc
|
201
194
|
def once(event, callback)
|
@@ -96,7 +96,7 @@ module Playwright
|
|
96
96
|
#
|
97
97
|
# > NOTE: The order of evaluation of multiple scripts installed via [`method: BrowserContext.addInitScript`] and
|
98
98
|
# [`method: Page.addInitScript`] is not defined.
|
99
|
-
def add_init_script(
|
99
|
+
def add_init_script(path: nil, script: nil)
|
100
100
|
raise NotImplementedError.new('add_init_script is not implemented yet.')
|
101
101
|
end
|
102
102
|
|
@@ -523,12 +523,6 @@ module Playwright
|
|
523
523
|
end
|
524
524
|
alias_method :geolocation=, :set_geolocation
|
525
525
|
|
526
|
-
# **DEPRECATED** Browsers may cache credentials after successful authentication. Create a new browser context instead.
|
527
|
-
def set_http_credentials(httpCredentials)
|
528
|
-
raise NotImplementedError.new('set_http_credentials is not implemented yet.')
|
529
|
-
end
|
530
|
-
alias_method :http_credentials=, :set_http_credentials
|
531
|
-
|
532
526
|
def set_offline(offline)
|
533
527
|
raise NotImplementedError.new('set_offline is not implemented yet.')
|
534
528
|
end
|
@@ -545,9 +539,46 @@ module Playwright
|
|
545
539
|
raise NotImplementedError.new('unroute is not implemented yet.')
|
546
540
|
end
|
547
541
|
|
548
|
-
#
|
549
|
-
|
550
|
-
|
542
|
+
# Waits for event to fire and passes its value into the predicate function. Returns when the predicate returns truthy
|
543
|
+
# value. Will throw an error if the context closes before the event is fired. Returns the event data value.
|
544
|
+
#
|
545
|
+
#
|
546
|
+
# ```js
|
547
|
+
# const [page, _] = await Promise.all([
|
548
|
+
# context.waitForEvent('page'),
|
549
|
+
# page.click('button')
|
550
|
+
# ]);
|
551
|
+
# ```
|
552
|
+
#
|
553
|
+
# ```python async
|
554
|
+
# async with context.expect_event("page") as event_info:
|
555
|
+
# await page.click("button")
|
556
|
+
# page = await event_info.value
|
557
|
+
# ```
|
558
|
+
#
|
559
|
+
# ```python sync
|
560
|
+
# with context.expect_event("page") as event_info:
|
561
|
+
# page.click("button")
|
562
|
+
# page = event_info.value
|
563
|
+
# ```
|
564
|
+
def expect_event(event, predicate: nil, timeout: nil)
|
565
|
+
raise NotImplementedError.new('expect_event is not implemented yet.')
|
566
|
+
end
|
567
|
+
|
568
|
+
# Performs action and waits for `page` event to fire. If predicate is provided, it passes `Page` value into the
|
569
|
+
# `predicate` function and waits for `predicate(event)` to return a truthy value. Will throw an error if the page is
|
570
|
+
# closed before the worker event is fired.
|
571
|
+
def expect_page(predicate: nil, timeout: nil)
|
572
|
+
raise NotImplementedError.new('expect_page is not implemented yet.')
|
573
|
+
end
|
574
|
+
|
575
|
+
# > NOTE: In most cases, you should use [`method: BrowserContext.waitForEvent`].
|
576
|
+
#
|
577
|
+
# Waits for given `event` to fire. If predicate is provided, it passes event's value into the `predicate` function and
|
578
|
+
# waits for `predicate(event)` to return a truthy value. Will throw an error if the socket is closed before the `event` is
|
579
|
+
# fired.
|
580
|
+
def wait_for_event(event, predicate: nil, timeout: nil)
|
581
|
+
raise NotImplementedError.new('wait_for_event is not implemented yet.')
|
551
582
|
end
|
552
583
|
|
553
584
|
# @nodoc
|
@@ -49,11 +49,6 @@ module Playwright
|
|
49
49
|
# ```
|
50
50
|
class BrowserType < PlaywrightApi
|
51
51
|
|
52
|
-
# This methods attaches Playwright to an existing browser instance.
|
53
|
-
def connect(params)
|
54
|
-
raise NotImplementedError.new('connect is not implemented yet.')
|
55
|
-
end
|
56
|
-
|
57
52
|
# A path where Playwright expects to find a bundled browser executable.
|
58
53
|
def executable_path
|
59
54
|
wrap_impl(@impl.executable_path)
|
@@ -108,14 +103,12 @@ module Playwright
|
|
108
103
|
handleSIGINT: nil,
|
109
104
|
handleSIGTERM: nil,
|
110
105
|
headless: nil,
|
111
|
-
ignoreAllDefaultArgs: nil,
|
112
106
|
ignoreDefaultArgs: nil,
|
113
|
-
logger: nil,
|
114
107
|
proxy: nil,
|
115
108
|
slowMo: nil,
|
116
109
|
timeout: nil,
|
117
110
|
&block)
|
118
|
-
wrap_impl(@impl.launch(args: unwrap_impl(args), chromiumSandbox: unwrap_impl(chromiumSandbox), devtools: unwrap_impl(devtools), downloadsPath: unwrap_impl(downloadsPath), env: unwrap_impl(env), executablePath: unwrap_impl(executablePath), firefoxUserPrefs: unwrap_impl(firefoxUserPrefs), handleSIGHUP: unwrap_impl(handleSIGHUP), handleSIGINT: unwrap_impl(handleSIGINT), handleSIGTERM: unwrap_impl(handleSIGTERM), headless: unwrap_impl(headless),
|
111
|
+
wrap_impl(@impl.launch(args: unwrap_impl(args), chromiumSandbox: unwrap_impl(chromiumSandbox), devtools: unwrap_impl(devtools), downloadsPath: unwrap_impl(downloadsPath), env: unwrap_impl(env), executablePath: unwrap_impl(executablePath), firefoxUserPrefs: unwrap_impl(firefoxUserPrefs), handleSIGHUP: unwrap_impl(handleSIGHUP), handleSIGINT: unwrap_impl(handleSIGINT), handleSIGTERM: unwrap_impl(handleSIGTERM), headless: unwrap_impl(headless), ignoreDefaultArgs: unwrap_impl(ignoreDefaultArgs), proxy: unwrap_impl(proxy), slowMo: unwrap_impl(slowMo), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
|
119
112
|
end
|
120
113
|
|
121
114
|
# Returns the persistent browser context instance.
|
@@ -142,64 +135,27 @@ module Playwright
|
|
142
135
|
hasTouch: nil,
|
143
136
|
headless: nil,
|
144
137
|
httpCredentials: nil,
|
145
|
-
ignoreAllDefaultArgs: nil,
|
146
138
|
ignoreDefaultArgs: nil,
|
147
139
|
ignoreHTTPSErrors: nil,
|
148
140
|
isMobile: nil,
|
149
141
|
javaScriptEnabled: nil,
|
150
142
|
locale: nil,
|
151
|
-
|
143
|
+
noViewport: nil,
|
152
144
|
offline: nil,
|
153
145
|
permissions: nil,
|
154
146
|
proxy: nil,
|
155
|
-
|
156
|
-
|
147
|
+
record_har_omit_content: nil,
|
148
|
+
record_har_path: nil,
|
149
|
+
record_video_dir: nil,
|
150
|
+
record_video_size: nil,
|
157
151
|
slowMo: nil,
|
158
152
|
timeout: nil,
|
159
153
|
timezoneId: nil,
|
160
154
|
userAgent: nil,
|
161
|
-
videoSize: nil,
|
162
|
-
videosPath: nil,
|
163
155
|
viewport: nil)
|
164
156
|
raise NotImplementedError.new('launch_persistent_context is not implemented yet.')
|
165
157
|
end
|
166
158
|
|
167
|
-
# Returns the browser app instance.
|
168
|
-
#
|
169
|
-
# Launches browser server that client can connect to. An example of launching a browser executable and connecting to it
|
170
|
-
# later:
|
171
|
-
#
|
172
|
-
#
|
173
|
-
# ```js
|
174
|
-
# const { chromium } = require('playwright'); // Or 'webkit' or 'firefox'.
|
175
|
-
#
|
176
|
-
# (async () => {
|
177
|
-
# const browserServer = await chromium.launchServer();
|
178
|
-
# const wsEndpoint = browserServer.wsEndpoint();
|
179
|
-
# // Use web socket endpoint later to establish a connection.
|
180
|
-
# const browser = await chromium.connect({ wsEndpoint });
|
181
|
-
# // Close browser instance.
|
182
|
-
# await browserServer.close();
|
183
|
-
# })();
|
184
|
-
# ```
|
185
|
-
def launch_server(
|
186
|
-
args: nil,
|
187
|
-
chromiumSandbox: nil,
|
188
|
-
devtools: nil,
|
189
|
-
downloadsPath: nil,
|
190
|
-
executablePath: nil,
|
191
|
-
firefoxUserPrefs: nil,
|
192
|
-
handleSIGHUP: nil,
|
193
|
-
handleSIGINT: nil,
|
194
|
-
handleSIGTERM: nil,
|
195
|
-
headless: nil,
|
196
|
-
logger: nil,
|
197
|
-
port: nil,
|
198
|
-
proxy: nil,
|
199
|
-
timeout: nil)
|
200
|
-
raise NotImplementedError.new('launch_server is not implemented yet.')
|
201
|
-
end
|
202
|
-
|
203
159
|
# Returns browser name. For example: `'chromium'`, `'webkit'` or `'firefox'`.
|
204
160
|
def name
|
205
161
|
wrap_impl(@impl.name)
|
@@ -37,11 +37,6 @@ module Playwright
|
|
37
37
|
# performed and user has no access to the downloaded files.
|
38
38
|
class Download < PlaywrightApi
|
39
39
|
|
40
|
-
# Returns readable stream for current download or `null` if download failed.
|
41
|
-
def create_read_stream
|
42
|
-
raise NotImplementedError.new('create_read_stream is not implemented yet.')
|
43
|
-
end
|
44
|
-
|
45
40
|
# Deletes the downloaded file.
|
46
41
|
def delete
|
47
42
|
wrap_impl(@impl.delete)
|
@@ -467,8 +467,14 @@ module Playwright
|
|
467
467
|
# # multiple selection for blue, red and second option
|
468
468
|
# handle.select_option(value="blue", { index: 2 }, "red")
|
469
469
|
# ```
|
470
|
-
def select_option(
|
471
|
-
|
470
|
+
def select_option(
|
471
|
+
element: nil,
|
472
|
+
index: nil,
|
473
|
+
value: nil,
|
474
|
+
label: nil,
|
475
|
+
noWaitAfter: nil,
|
476
|
+
timeout: nil)
|
477
|
+
wrap_impl(@impl.select_option(element: unwrap_impl(element), index: unwrap_impl(index), value: unwrap_impl(value), label: unwrap_impl(label), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
|
472
478
|
end
|
473
479
|
|
474
480
|
# This method waits for [actionability](./actionability.md) checks, then focuses the element and selects all its text
|
data/lib/playwright_api/frame.rb
CHANGED
@@ -645,8 +645,15 @@ module Playwright
|
|
645
645
|
# # multiple selection
|
646
646
|
# frame.select_option("select#colors", value=["red", "green", "blue"])
|
647
647
|
# ```
|
648
|
-
def select_option(
|
649
|
-
|
648
|
+
def select_option(
|
649
|
+
selector,
|
650
|
+
element: nil,
|
651
|
+
index: nil,
|
652
|
+
value: nil,
|
653
|
+
label: nil,
|
654
|
+
noWaitAfter: nil,
|
655
|
+
timeout: nil)
|
656
|
+
wrap_impl(@impl.select_option(unwrap_impl(selector), element: unwrap_impl(element), index: unwrap_impl(index), value: unwrap_impl(value), label: unwrap_impl(label), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
|
650
657
|
end
|
651
658
|
|
652
659
|
def set_content(html, timeout: nil, waitUntil: nil)
|
@@ -953,11 +960,6 @@ module Playwright
|
|
953
960
|
wrap_impl(@impl.detached=(unwrap_impl(req)))
|
954
961
|
end
|
955
962
|
|
956
|
-
# @nodoc
|
957
|
-
def after_initialize
|
958
|
-
wrap_impl(@impl.after_initialize)
|
959
|
-
end
|
960
|
-
|
961
963
|
# -- inherited from EventEmitter --
|
962
964
|
# @nodoc
|
963
965
|
def once(event, callback)
|
data/lib/playwright_api/page.rb
CHANGED
@@ -96,12 +96,6 @@ module Playwright
|
|
96
96
|
wrap_impl(@impl.accessibility)
|
97
97
|
end
|
98
98
|
|
99
|
-
# Browser-specific Coverage implementation, only available for Chromium atm. See
|
100
|
-
# `ChromiumCoverage`(#class-chromiumcoverage) for more details.
|
101
|
-
def coverage # property
|
102
|
-
raise NotImplementedError.new('coverage is not implemented yet.')
|
103
|
-
end
|
104
|
-
|
105
99
|
def keyboard # property
|
106
100
|
wrap_impl(@impl.keyboard)
|
107
101
|
end
|
@@ -148,8 +142,8 @@ module Playwright
|
|
148
142
|
#
|
149
143
|
# > NOTE: The order of evaluation of multiple scripts installed via [`method: BrowserContext.addInitScript`] and
|
150
144
|
# [`method: Page.addInitScript`] is not defined.
|
151
|
-
def add_init_script(
|
152
|
-
wrap_impl(@impl.add_init_script(unwrap_impl(
|
145
|
+
def add_init_script(path: nil, script: nil)
|
146
|
+
wrap_impl(@impl.add_init_script(path: unwrap_impl(path), script: unwrap_impl(script)))
|
153
147
|
end
|
154
148
|
|
155
149
|
# Adds a `<script>` tag into the page with the desired url or content. Returns the added tag when the script's onload
|
@@ -880,8 +874,8 @@ module Playwright
|
|
880
874
|
# ```py
|
881
875
|
# frame = page.frame(url=r".*domain.*")
|
882
876
|
# ```
|
883
|
-
def frame(
|
884
|
-
wrap_impl(@impl.frame(unwrap_impl(
|
877
|
+
def frame(name: nil, url: nil)
|
878
|
+
wrap_impl(@impl.frame(name: unwrap_impl(name), url: unwrap_impl(url)))
|
885
879
|
end
|
886
880
|
|
887
881
|
# An array of all frames attached to the page.
|
@@ -1299,8 +1293,15 @@ module Playwright
|
|
1299
1293
|
# ```
|
1300
1294
|
#
|
1301
1295
|
# Shortcut for main frame's [`method: Frame.selectOption`]
|
1302
|
-
def select_option(
|
1303
|
-
|
1296
|
+
def select_option(
|
1297
|
+
selector,
|
1298
|
+
element: nil,
|
1299
|
+
index: nil,
|
1300
|
+
value: nil,
|
1301
|
+
label: nil,
|
1302
|
+
noWaitAfter: nil,
|
1303
|
+
timeout: nil)
|
1304
|
+
wrap_impl(@impl.select_option(unwrap_impl(selector), element: unwrap_impl(element), index: unwrap_impl(index), value: unwrap_impl(value), label: unwrap_impl(label), noWaitAfter: unwrap_impl(noWaitAfter), timeout: unwrap_impl(timeout)))
|
1304
1305
|
end
|
1305
1306
|
|
1306
1307
|
def set_content(html, timeout: nil, waitUntil: nil)
|
@@ -1483,6 +1484,32 @@ module Playwright
|
|
1483
1484
|
wrap_impl(@impl.viewport_size)
|
1484
1485
|
end
|
1485
1486
|
|
1487
|
+
# Waits for event to fire and passes its value into the predicate function. Returns when the predicate returns truthy
|
1488
|
+
# value. Will throw an error if the page is closed before the event is fired. Returns the event data value.
|
1489
|
+
#
|
1490
|
+
#
|
1491
|
+
# ```js
|
1492
|
+
# const [frame, _] = await Promise.all([
|
1493
|
+
# page.waitForEvent('framenavigated'),
|
1494
|
+
# page.click('button')
|
1495
|
+
# ]);
|
1496
|
+
# ```
|
1497
|
+
#
|
1498
|
+
# ```python async
|
1499
|
+
# async with page.expect_event("framenavigated") as event_info:
|
1500
|
+
# await page.click("button")
|
1501
|
+
# frame = await event_info.value
|
1502
|
+
# ```
|
1503
|
+
#
|
1504
|
+
# ```python sync
|
1505
|
+
# with page.expect_event("framenavigated") as event_info:
|
1506
|
+
# page.click("button")
|
1507
|
+
# frame = event_info.value
|
1508
|
+
# ```
|
1509
|
+
def expect_event(event, predicate: nil, timeout: nil, &block)
|
1510
|
+
wrap_impl(@impl.expect_event(unwrap_impl(event), predicate: unwrap_impl(predicate), timeout: unwrap_impl(timeout), &wrap_block_call(block)))
|
1511
|
+
end
|
1512
|
+
|
1486
1513
|
# Returns when the `expression` returns a truthy value. It resolves to a JSHandle of the truthy value.
|
1487
1514
|
#
|
1488
1515
|
# The [`method: Page.waitForFunction`] can be used to observe viewport size change:
|
@@ -1807,14 +1834,48 @@ module Playwright
|
|
1807
1834
|
raise NotImplementedError.new('workers is not implemented yet.')
|
1808
1835
|
end
|
1809
1836
|
|
1810
|
-
#
|
1811
|
-
|
1812
|
-
|
1837
|
+
# Performs action and waits for `download` event to fire. If predicate is provided, it passes `Download` value into the
|
1838
|
+
# `predicate` function and waits for `predicate(event)` to return a truthy value. Will throw an error if the page is
|
1839
|
+
# closed before the download event is fired.
|
1840
|
+
def expect_download(predicate: nil, timeout: nil)
|
1841
|
+
raise NotImplementedError.new('expect_download is not implemented yet.')
|
1813
1842
|
end
|
1814
1843
|
|
1815
|
-
#
|
1816
|
-
|
1817
|
-
|
1844
|
+
# Performs action and waits for `popup` event to fire. If predicate is provided, it passes [Popup] value into the
|
1845
|
+
# `predicate` function and waits for `predicate(event)` to return a truthy value. Will throw an error if the page is
|
1846
|
+
# closed before the popup event is fired.
|
1847
|
+
def expect_popup(predicate: nil, timeout: nil)
|
1848
|
+
raise NotImplementedError.new('expect_popup is not implemented yet.')
|
1849
|
+
end
|
1850
|
+
|
1851
|
+
# Performs action and waits for `worker` event to fire. If predicate is provided, it passes `Worker` value into the
|
1852
|
+
# `predicate` function and waits for `predicate(event)` to return a truthy value. Will throw an error if the page is
|
1853
|
+
# closed before the worker event is fired.
|
1854
|
+
def expect_worker(predicate: nil, timeout: nil)
|
1855
|
+
raise NotImplementedError.new('expect_worker is not implemented yet.')
|
1856
|
+
end
|
1857
|
+
|
1858
|
+
# Performs action and waits for `console` event to fire. If predicate is provided, it passes `ConsoleMessage` value into
|
1859
|
+
# the `predicate` function and waits for `predicate(event)` to return a truthy value. Will throw an error if the page is
|
1860
|
+
# closed before the worker event is fired.
|
1861
|
+
def expect_console_message(predicate: nil, timeout: nil)
|
1862
|
+
raise NotImplementedError.new('expect_console_message is not implemented yet.')
|
1863
|
+
end
|
1864
|
+
|
1865
|
+
# Performs action and waits for `filechooser` event to fire. If predicate is provided, it passes `FileChooser` value into
|
1866
|
+
# the `predicate` function and waits for `predicate(event)` to return a truthy value. Will throw an error if the page is
|
1867
|
+
# closed before the worker event is fired.
|
1868
|
+
def expect_file_chooser(predicate: nil, timeout: nil)
|
1869
|
+
raise NotImplementedError.new('expect_file_chooser is not implemented yet.')
|
1870
|
+
end
|
1871
|
+
|
1872
|
+
# > NOTE: In most cases, you should use [`method: Page.waitForEvent`].
|
1873
|
+
#
|
1874
|
+
# Waits for given `event` to fire. If predicate is provided, it passes event's value into the `predicate` function and
|
1875
|
+
# waits for `predicate(event)` to return a truthy value. Will throw an error if the socket is closed before the `event` is
|
1876
|
+
# fired.
|
1877
|
+
def wait_for_event(event, predicate: nil, timeout: nil)
|
1878
|
+
raise NotImplementedError.new('wait_for_event is not implemented yet.')
|
1818
1879
|
end
|
1819
1880
|
|
1820
1881
|
# @nodoc
|
@@ -113,42 +113,6 @@ module Playwright
|
|
113
113
|
wrap_impl(@impl.devices)
|
114
114
|
end
|
115
115
|
|
116
|
-
# Playwright methods might throw errors if they are unable to fulfill a request. For example,
|
117
|
-
# [`method: Page.waitForSelector`] might fail if the selector doesn't match any nodes during the given timeframe.
|
118
|
-
#
|
119
|
-
# For certain types of errors Playwright uses specific error classes. These classes are available via
|
120
|
-
# [`playwright.errors`](#playwrighterrors).
|
121
|
-
#
|
122
|
-
# An example of handling a timeout error:
|
123
|
-
#
|
124
|
-
#
|
125
|
-
# ```js
|
126
|
-
# try {
|
127
|
-
# await page.waitForSelector('.foo');
|
128
|
-
# } catch (e) {
|
129
|
-
# if (e instanceof playwright.errors.TimeoutError) {
|
130
|
-
# // Do something if this is a timeout.
|
131
|
-
# }
|
132
|
-
# }
|
133
|
-
# ```
|
134
|
-
#
|
135
|
-
# ```python async
|
136
|
-
# try:
|
137
|
-
# await page.wait_for_selector(".foo")
|
138
|
-
# except TimeoutError as e:
|
139
|
-
# # do something if this is a timeout.
|
140
|
-
# ```
|
141
|
-
#
|
142
|
-
# ```python sync
|
143
|
-
# try:
|
144
|
-
# page.wait_for_selector(".foo")
|
145
|
-
# except TimeoutError as e:
|
146
|
-
# # do something if this is a timeout.
|
147
|
-
# ```
|
148
|
-
def errors # property
|
149
|
-
raise NotImplementedError.new('errors is not implemented yet.')
|
150
|
-
end
|
151
|
-
|
152
116
|
# This object can be used to launch or connect to Firefox, returning instances of `FirefoxBrowser`.
|
153
117
|
def firefox # property
|
154
118
|
wrap_impl(@impl.firefox)
|
@@ -165,19 +129,34 @@ module Playwright
|
|
165
129
|
wrap_impl(@impl.webkit)
|
166
130
|
end
|
167
131
|
|
168
|
-
# Terminates this instance of Playwright
|
169
|
-
|
170
|
-
|
132
|
+
# Terminates this instance of Playwright in case it was created bypassing the Python context manager. This is useful in
|
133
|
+
# REPL applications.
|
134
|
+
#
|
135
|
+
# ```py
|
136
|
+
# >>> from playwright.sync_api import sync_playwright
|
137
|
+
#
|
138
|
+
# >>> playwright = sync_playwright().start()
|
139
|
+
#
|
140
|
+
# >>> browser = playwright.chromium.launch()
|
141
|
+
# >>> page = browser.new_page()
|
142
|
+
# >>> page.goto("http://whatsmyuseragent.org/")
|
143
|
+
# >>> page.screenshot(path="example.png")
|
144
|
+
# >>> browser.close()
|
145
|
+
#
|
146
|
+
# >>> playwright.stop()
|
147
|
+
# ```
|
148
|
+
def stop
|
149
|
+
raise NotImplementedError.new('stop is not implemented yet.')
|
171
150
|
end
|
172
151
|
|
173
152
|
# @nodoc
|
174
|
-
def
|
175
|
-
wrap_impl(@impl.
|
153
|
+
def android
|
154
|
+
wrap_impl(@impl.android)
|
176
155
|
end
|
177
156
|
|
178
157
|
# @nodoc
|
179
|
-
def
|
180
|
-
wrap_impl(@impl.
|
158
|
+
def electron
|
159
|
+
wrap_impl(@impl.electron)
|
181
160
|
end
|
182
161
|
|
183
162
|
# -- inherited from EventEmitter --
|
@@ -62,6 +62,14 @@ module Playwright
|
|
62
62
|
wrap_impl(@impl.post_data_buffer)
|
63
63
|
end
|
64
64
|
|
65
|
+
# Returns parsed request's body for `form-urlencoded` and JSON as a fallback if any.
|
66
|
+
#
|
67
|
+
# When the response is `application/x-www-form-urlencoded` then a key/value object of the values will be returned.
|
68
|
+
# Otherwise it will be parsed as JSON.
|
69
|
+
def post_data_json
|
70
|
+
wrap_impl(@impl.post_data_json)
|
71
|
+
end
|
72
|
+
|
65
73
|
# Request that was redirected by the server to this one, if any.
|
66
74
|
#
|
67
75
|
# When the server responds with a redirect, Playwright creates a new `Request` object. The two requests are connected by
|
@@ -170,16 +178,6 @@ module Playwright
|
|
170
178
|
wrap_impl(@impl.url)
|
171
179
|
end
|
172
180
|
|
173
|
-
# @nodoc
|
174
|
-
def post_data_json
|
175
|
-
wrap_impl(@impl.post_data_json)
|
176
|
-
end
|
177
|
-
|
178
|
-
# @nodoc
|
179
|
-
def after_initialize
|
180
|
-
wrap_impl(@impl.after_initialize)
|
181
|
-
end
|
182
|
-
|
183
181
|
# -- inherited from EventEmitter --
|
184
182
|
# @nodoc
|
185
183
|
def once(event, callback)
|
@@ -22,6 +22,13 @@ module Playwright
|
|
22
22
|
raise NotImplementedError.new('headers is not implemented yet.')
|
23
23
|
end
|
24
24
|
|
25
|
+
# Returns the JSON representation of response body.
|
26
|
+
#
|
27
|
+
# This method will throw if the response body is not parsable via `JSON.parse`.
|
28
|
+
def json
|
29
|
+
raise NotImplementedError.new('json is not implemented yet.')
|
30
|
+
end
|
31
|
+
|
25
32
|
# Contains a boolean stating whether the response was successful (status in the range 200-299) or not.
|
26
33
|
def ok
|
27
34
|
raise NotImplementedError.new('ok is not implemented yet.')
|
data/lib/playwright_api/route.rb
CHANGED
@@ -48,7 +48,7 @@ module Playwright
|
|
48
48
|
# ```python sync
|
49
49
|
# # FIXME: add snippet
|
50
50
|
# ```
|
51
|
-
def register(name,
|
51
|
+
def register(name, contentScript: nil, path: nil, script: nil)
|
52
52
|
raise NotImplementedError.new('register is not implemented yet.')
|
53
53
|
end
|
54
54
|
|
@@ -11,5 +11,20 @@ module Playwright
|
|
11
11
|
def url
|
12
12
|
raise NotImplementedError.new('url is not implemented yet.')
|
13
13
|
end
|
14
|
+
|
15
|
+
# Waits for event to fire and passes its value into the predicate function. Returns when the predicate returns truthy
|
16
|
+
# value. Will throw an error if the webSocket is closed before the event is fired. Returns the event data value.
|
17
|
+
def expect_event(event, predicate: nil, timeout: nil)
|
18
|
+
raise NotImplementedError.new('expect_event is not implemented yet.')
|
19
|
+
end
|
20
|
+
|
21
|
+
# > NOTE: In most cases, you should use [`method: WebSocket.waitForEvent`].
|
22
|
+
#
|
23
|
+
# Waits for given `event` to fire. If predicate is provided, it passes event's value into the `predicate` function and
|
24
|
+
# waits for `predicate(event)` to return a truthy value. Will throw an error if the socket is closed before the `event` is
|
25
|
+
# fired.
|
26
|
+
def wait_for_event(event, predicate: nil, timeout: nil)
|
27
|
+
raise NotImplementedError.new('wait_for_event is not implemented yet.')
|
28
|
+
end
|
14
29
|
end
|
15
30
|
end
|
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: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- YusukeIwaki
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-02-
|
11
|
+
date: 2021-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|