playwright-ruby-client 0.1.0 → 0.5.3
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 +20 -8
- data/docs/api_coverage.md +123 -73
- data/lib/playwright.rb +48 -9
- data/lib/playwright/channel.rb +12 -2
- 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/artifact.rb +30 -0
- data/lib/playwright/channel_owners/binding_call.rb +3 -0
- data/lib/playwright/channel_owners/browser.rb +22 -1
- data/lib/playwright/channel_owners/browser_context.rb +155 -4
- data/lib/playwright/channel_owners/browser_type.rb +28 -0
- data/lib/playwright/channel_owners/dialog.rb +28 -0
- data/lib/playwright/channel_owners/element_handle.rb +18 -5
- data/lib/playwright/channel_owners/frame.rb +40 -5
- data/lib/playwright/channel_owners/js_handle.rb +3 -3
- data/lib/playwright/channel_owners/page.rb +172 -51
- data/lib/playwright/channel_owners/playwright.rb +24 -27
- data/lib/playwright/channel_owners/request.rb +27 -3
- data/lib/playwright/channel_owners/response.rb +60 -0
- data/lib/playwright/channel_owners/route.rb +78 -0
- data/lib/playwright/channel_owners/selectors.rb +19 -1
- data/lib/playwright/channel_owners/stream.rb +15 -0
- data/lib/playwright/connection.rb +11 -32
- data/lib/playwright/download.rb +27 -0
- data/lib/playwright/errors.rb +6 -0
- data/lib/playwright/events.rb +2 -5
- data/lib/playwright/keyboard_impl.rb +1 -1
- data/lib/playwright/mouse_impl.rb +41 -0
- data/lib/playwright/playwright_api.rb +3 -1
- data/lib/playwright/route_handler_entry.rb +28 -0
- data/lib/playwright/select_option_values.rb +14 -4
- data/lib/playwright/transport.rb +28 -7
- data/lib/playwright/url_matcher.rb +1 -1
- data/lib/playwright/utils.rb +11 -2
- data/lib/playwright/version.rb +1 -1
- data/lib/playwright/video.rb +51 -0
- data/lib/playwright/wait_helper.rb +2 -2
- data/lib/playwright_api/accessibility.rb +39 -1
- data/lib/playwright_api/android.rb +72 -5
- data/lib/playwright_api/android_device.rb +139 -26
- data/lib/playwright_api/android_input.rb +17 -13
- data/lib/playwright_api/android_socket.rb +16 -0
- data/lib/playwright_api/android_web_view.rb +21 -0
- data/lib/playwright_api/browser.rb +87 -19
- data/lib/playwright_api/browser_context.rb +216 -32
- data/lib/playwright_api/browser_type.rb +45 -58
- data/lib/playwright_api/dialog.rb +54 -7
- data/lib/playwright_api/element_handle.rb +113 -33
- data/lib/playwright_api/file_chooser.rb +6 -1
- data/lib/playwright_api/frame.rb +238 -43
- data/lib/playwright_api/js_handle.rb +20 -2
- data/lib/playwright_api/keyboard.rb +48 -1
- data/lib/playwright_api/mouse.rb +26 -5
- data/lib/playwright_api/page.rb +534 -63
- data/lib/playwright_api/playwright.rb +43 -47
- data/lib/playwright_api/request.rb +38 -12
- data/lib/playwright_api/response.rb +27 -10
- data/lib/playwright_api/route.rb +51 -6
- data/lib/playwright_api/selectors.rb +28 -2
- data/lib/playwright_api/touchscreen.rb +1 -1
- data/lib/playwright_api/web_socket.rb +15 -0
- data/lib/playwright_api/worker.rb +25 -1
- data/playwright.gemspec +4 -2
- metadata +42 -14
- data/lib/playwright/channel_owners/chromium_browser.rb +0 -8
- data/lib/playwright/channel_owners/chromium_browser_context.rb +0 -8
- data/lib/playwright/channel_owners/download.rb +0 -27
- data/lib/playwright/channel_owners/firefox_browser.rb +0 -8
- data/lib/playwright/channel_owners/webkit_browser.rb +0 -8
- data/lib/playwright_api/binding_call.rb +0 -27
- data/lib/playwright_api/chromium_browser_context.rb +0 -59
- data/lib/playwright_api/download.rb +0 -100
- data/lib/playwright_api/video.rb +0 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 81be247e4fe8a3bf351cf8ead156c490657547f89a1ae5f8a1536ad72a1c30e4
|
4
|
+
data.tar.gz: '0398932fd2d3eae453668624bad5271990bc426168caa56e71be773e87e9504a'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b77d93002b1395839dc4f9cf2c62bb40e9abaca0008aaf2a52c83498b811018782144686c7a83acdc8ae2b9bc3287b21e2808fcb996d6b270deb7fdf04c2dddb
|
7
|
+
data.tar.gz: 72c787d2dc63a2b78e09ae5660d1774a390e65ceb322529807965a0da95f27ca5f6ffd23dbcf1b81fb8ac4bb44f17ac58e508075c5cae959b1d1e233ed7c09e1
|
data/README.md
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
[](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
|
|
@@ -11,20 +9,34 @@ Note: Currently, this Gem is just a PoC (Proof of Concept). If you want to devel
|
|
11
9
|
At this point, playwright-ruby-client doesn't include the downloader of playwright driver, so **we have to install [playwright](https://github.com/microsoft/playwright) in advance**.
|
12
10
|
|
13
11
|
```sh
|
12
|
+
npx playwright install
|
13
|
+
```
|
14
|
+
|
15
|
+
and then, set `playwright_cli_executable_path: "npx playwright"` at `Playwright.create`.
|
16
|
+
|
17
|
+
**Prefer npm install instead of npx?**
|
18
|
+
|
19
|
+
Actually `npx playwright` is a bit slow. We can also use `npm install` to setup.
|
20
|
+
|
21
|
+
Instead of `npx playwright install`:
|
22
|
+
|
23
|
+
```
|
14
24
|
npm install playwright
|
15
25
|
./node_modules/.bin/playwright install
|
16
26
|
```
|
17
27
|
|
18
|
-
|
28
|
+
And set `playwright_cli_executable_path: './node_modules/.bin/playwright'`
|
29
|
+
|
30
|
+
**Prefer playwrighting without Node.js?**
|
19
31
|
|
20
|
-
Instead of npm
|
32
|
+
Instead of npm, 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
33
|
|
22
34
|
### Capture a site
|
23
35
|
|
24
36
|
```ruby
|
25
37
|
require 'playwright'
|
26
38
|
|
27
|
-
Playwright.create(playwright_cli_executable_path: '
|
39
|
+
Playwright.create(playwright_cli_executable_path: 'npx playwright') do |playwright|
|
28
40
|
playwright.chromium.launch(headless: false) do |browser|
|
29
41
|
page = browser.new_page
|
30
42
|
page.goto('https://github.com/YusukeIwaki')
|
@@ -40,7 +52,7 @@ end
|
|
40
52
|
```ruby
|
41
53
|
require 'playwright'
|
42
54
|
|
43
|
-
Playwright.create(playwright_cli_executable_path: '
|
55
|
+
Playwright.create(playwright_cli_executable_path: 'npx playwright') do |playwright|
|
44
56
|
playwright.chromium.launch(headless: false) do |browser|
|
45
57
|
page = browser.new_page
|
46
58
|
page.goto('https://github.com/')
|
@@ -82,7 +94,7 @@ $ bundle exec ruby main.rb
|
|
82
94
|
```ruby
|
83
95
|
require 'playwright'
|
84
96
|
|
85
|
-
Playwright.create(playwright_cli_executable_path: '
|
97
|
+
Playwright.create(playwright_cli_executable_path: 'npx playwright') do |playwright|
|
86
98
|
devices = playwright.android.devices
|
87
99
|
unless devices.empty?
|
88
100
|
device = devices.last
|
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
|
@@ -18,28 +19,31 @@
|
|
18
19
|
|
19
20
|
## Response
|
20
21
|
|
21
|
-
*
|
22
|
-
*
|
23
|
-
*
|
24
|
-
*
|
25
|
-
*
|
26
|
-
*
|
27
|
-
*
|
28
|
-
*
|
29
|
-
*
|
30
|
-
*
|
22
|
+
* body
|
23
|
+
* finished
|
24
|
+
* frame
|
25
|
+
* headers
|
26
|
+
* json
|
27
|
+
* ok
|
28
|
+
* request
|
29
|
+
* status
|
30
|
+
* status_text
|
31
|
+
* text
|
32
|
+
* url
|
31
33
|
|
32
|
-
##
|
34
|
+
## Route
|
33
35
|
|
34
|
-
*
|
35
|
-
*
|
36
|
-
*
|
37
|
-
*
|
36
|
+
* abort
|
37
|
+
* continue
|
38
|
+
* fulfill
|
39
|
+
* request
|
38
40
|
|
39
41
|
## ~~WebSocket~~
|
40
42
|
|
41
43
|
* ~~closed?~~
|
42
44
|
* ~~url~~
|
45
|
+
* ~~expect_event~~
|
46
|
+
* ~~wait_for_event~~
|
43
47
|
|
44
48
|
## Keyboard
|
45
49
|
|
@@ -51,11 +55,11 @@
|
|
51
55
|
|
52
56
|
## Mouse
|
53
57
|
|
54
|
-
*
|
55
|
-
*
|
56
|
-
*
|
57
|
-
*
|
58
|
-
*
|
58
|
+
* click
|
59
|
+
* dblclick
|
60
|
+
* down
|
61
|
+
* move
|
62
|
+
* up
|
59
63
|
|
60
64
|
## Touchscreen
|
61
65
|
|
@@ -169,6 +173,7 @@
|
|
169
173
|
* expect_navigation
|
170
174
|
* wait_for_selector
|
171
175
|
* ~~wait_for_timeout~~
|
176
|
+
* wait_for_url
|
172
177
|
|
173
178
|
## ~~Worker~~
|
174
179
|
|
@@ -178,7 +183,7 @@
|
|
178
183
|
|
179
184
|
## Selectors
|
180
185
|
|
181
|
-
*
|
186
|
+
* register
|
182
187
|
|
183
188
|
## ConsoleMessage
|
184
189
|
|
@@ -187,27 +192,13 @@
|
|
187
192
|
* text
|
188
193
|
* type
|
189
194
|
|
190
|
-
##
|
191
|
-
|
192
|
-
* ~~accept~~
|
193
|
-
* ~~default_value~~
|
194
|
-
* ~~dismiss~~
|
195
|
-
* ~~message~~
|
196
|
-
* ~~type~~
|
197
|
-
|
198
|
-
## Download
|
199
|
-
|
200
|
-
* ~~create_read_stream~~
|
201
|
-
* delete
|
202
|
-
* failure
|
203
|
-
* path
|
204
|
-
* save_as
|
205
|
-
* suggested_filename
|
206
|
-
* url
|
207
|
-
|
208
|
-
## ~~Video~~
|
195
|
+
## Dialog
|
209
196
|
|
210
|
-
*
|
197
|
+
* accept
|
198
|
+
* default_value
|
199
|
+
* dismiss
|
200
|
+
* message
|
201
|
+
* type
|
211
202
|
|
212
203
|
## Page
|
213
204
|
|
@@ -255,7 +246,7 @@
|
|
255
246
|
* query_selector
|
256
247
|
* query_selector_all
|
257
248
|
* reload
|
258
|
-
*
|
249
|
+
* route
|
259
250
|
* screenshot
|
260
251
|
* select_option
|
261
252
|
* set_content
|
@@ -269,83 +260,142 @@
|
|
269
260
|
* title
|
270
261
|
* type
|
271
262
|
* uncheck
|
272
|
-
*
|
263
|
+
* unroute
|
273
264
|
* url
|
274
|
-
*
|
265
|
+
* video
|
275
266
|
* viewport_size
|
267
|
+
* expect_console_message
|
268
|
+
* expect_download
|
269
|
+
* expect_event
|
270
|
+
* expect_file_chooser
|
276
271
|
* wait_for_function
|
277
272
|
* wait_for_load_state
|
278
273
|
* expect_navigation
|
274
|
+
* expect_popup
|
279
275
|
* expect_request
|
280
276
|
* expect_response
|
281
277
|
* wait_for_selector
|
282
278
|
* ~~wait_for_timeout~~
|
279
|
+
* wait_for_url
|
280
|
+
* ~~expect_worker~~
|
283
281
|
* ~~workers~~
|
282
|
+
* ~~wait_for_event~~
|
284
283
|
* accessibility
|
285
|
-
* ~~coverage~~
|
286
284
|
* keyboard
|
287
285
|
* mouse
|
288
286
|
* touchscreen
|
289
287
|
|
290
288
|
## BrowserContext
|
291
289
|
|
292
|
-
*
|
293
|
-
*
|
294
|
-
* ~~
|
295
|
-
*
|
296
|
-
*
|
290
|
+
* add_cookies
|
291
|
+
* add_init_script
|
292
|
+
* ~~background_pages~~
|
293
|
+
* browser
|
294
|
+
* clear_cookies
|
295
|
+
* clear_permissions
|
297
296
|
* close
|
298
|
-
*
|
299
|
-
*
|
300
|
-
*
|
301
|
-
*
|
297
|
+
* cookies
|
298
|
+
* expose_binding
|
299
|
+
* expose_function
|
300
|
+
* grant_permissions
|
301
|
+
* ~~new_cdp_session~~
|
302
302
|
* new_page
|
303
303
|
* pages
|
304
|
-
*
|
305
|
-
* ~~
|
306
|
-
*
|
307
|
-
*
|
308
|
-
*
|
309
|
-
*
|
310
|
-
*
|
304
|
+
* route
|
305
|
+
* ~~service_workers~~
|
306
|
+
* set_default_navigation_timeout
|
307
|
+
* set_default_timeout
|
308
|
+
* set_extra_http_headers
|
309
|
+
* set_geolocation
|
310
|
+
* set_offline
|
311
311
|
* ~~storage_state~~
|
312
|
-
*
|
312
|
+
* unroute
|
313
|
+
* expect_event
|
314
|
+
* expect_page
|
315
|
+
* ~~wait_for_event~~
|
313
316
|
|
314
317
|
## ~~CDPSession~~
|
315
318
|
|
316
319
|
* ~~detach~~
|
317
320
|
* ~~send_message~~
|
318
321
|
|
319
|
-
## ChromiumBrowserContext
|
320
|
-
|
321
|
-
* ~~background_pages~~
|
322
|
-
* ~~new_cdp_session~~
|
323
|
-
* ~~service_workers~~
|
324
|
-
|
325
322
|
## Browser
|
326
323
|
|
327
324
|
* close
|
328
325
|
* contexts
|
329
326
|
* connected?
|
327
|
+
* ~~new_browser_cdp_session~~
|
330
328
|
* new_context
|
331
329
|
* new_page
|
330
|
+
* start_tracing
|
331
|
+
* stop_tracing
|
332
332
|
* version
|
333
333
|
|
334
334
|
## BrowserType
|
335
335
|
|
336
|
-
* ~~connect~~
|
337
336
|
* executable_path
|
338
337
|
* launch
|
339
338
|
* ~~launch_persistent_context~~
|
340
|
-
* ~~launch_server~~
|
341
339
|
* name
|
342
340
|
|
343
341
|
## Playwright
|
344
342
|
|
345
|
-
* ~~
|
343
|
+
* ~~stop~~
|
346
344
|
* chromium
|
347
345
|
* devices
|
348
|
-
* ~~errors~~
|
349
346
|
* firefox
|
350
|
-
*
|
347
|
+
* selectors
|
351
348
|
* webkit
|
349
|
+
|
350
|
+
## Android
|
351
|
+
|
352
|
+
* devices
|
353
|
+
* ~~set_default_timeout~~
|
354
|
+
|
355
|
+
## AndroidDevice
|
356
|
+
|
357
|
+
* close
|
358
|
+
* ~~drag~~
|
359
|
+
* ~~fill~~
|
360
|
+
* ~~fling~~
|
361
|
+
* info
|
362
|
+
* ~~install_apk~~
|
363
|
+
* launch_browser
|
364
|
+
* ~~long_tap~~
|
365
|
+
* model
|
366
|
+
* ~~open~~
|
367
|
+
* ~~pinch_close~~
|
368
|
+
* ~~pinch_open~~
|
369
|
+
* ~~press~~
|
370
|
+
* ~~push~~
|
371
|
+
* screenshot
|
372
|
+
* ~~scroll~~
|
373
|
+
* serial
|
374
|
+
* ~~set_default_timeout~~
|
375
|
+
* shell
|
376
|
+
* ~~swipe~~
|
377
|
+
* ~~tap_point~~
|
378
|
+
* ~~wait~~
|
379
|
+
* ~~wait_for_event~~
|
380
|
+
* ~~web_view~~
|
381
|
+
* ~~web_views~~
|
382
|
+
* input
|
383
|
+
|
384
|
+
## AndroidInput
|
385
|
+
|
386
|
+
* drag
|
387
|
+
* press
|
388
|
+
* ~~swipe~~
|
389
|
+
* tap_point
|
390
|
+
* type
|
391
|
+
|
392
|
+
## ~~AndroidSocket~~
|
393
|
+
|
394
|
+
* ~~close~~
|
395
|
+
* ~~write~~
|
396
|
+
|
397
|
+
## ~~AndroidWebView~~
|
398
|
+
|
399
|
+
* ~~page~~
|
400
|
+
* ~~pid~~
|
401
|
+
* ~~pkg~~
|
data/lib/playwright.rb
CHANGED
@@ -17,14 +17,17 @@ require 'playwright/utils'
|
|
17
17
|
require 'playwright/api_implementation'
|
18
18
|
require 'playwright/channel'
|
19
19
|
require 'playwright/channel_owner'
|
20
|
+
require 'playwright/download'
|
20
21
|
require 'playwright/http_headers'
|
21
22
|
require 'playwright/input_files'
|
22
23
|
require 'playwright/connection'
|
24
|
+
require 'playwright/route_handler_entry'
|
23
25
|
require 'playwright/select_option_values'
|
24
26
|
require 'playwright/timeout_settings'
|
25
27
|
require 'playwright/transport'
|
26
28
|
require 'playwright/url_matcher'
|
27
29
|
require 'playwright/version'
|
30
|
+
require 'playwright/video'
|
28
31
|
require 'playwright/wait_helper'
|
29
32
|
|
30
33
|
require 'playwright/playwright_api'
|
@@ -32,18 +35,54 @@ require 'playwright/playwright_api'
|
|
32
35
|
Dir[File.join(__dir__, 'playwright_api', '*.rb')].each { |f| require f }
|
33
36
|
|
34
37
|
module Playwright
|
35
|
-
|
36
|
-
|
38
|
+
class Execution
|
39
|
+
def initialize(connection, playwright)
|
40
|
+
@connection = connection
|
41
|
+
@playwright = playwright
|
42
|
+
end
|
43
|
+
|
44
|
+
def stop
|
45
|
+
@connection.stop
|
46
|
+
end
|
47
|
+
|
48
|
+
attr_reader :playwright
|
49
|
+
end
|
37
50
|
|
51
|
+
# Recommended to call this method with block.
|
52
|
+
#
|
53
|
+
# Playwright.create(...) do |playwright|
|
54
|
+
# browser = playwright.chromium.launch
|
55
|
+
# ...
|
56
|
+
# end
|
57
|
+
#
|
58
|
+
# When we use this method without block, an instance of Puppeteer::Execution is returned
|
59
|
+
# and we *must* call execution.stop on the end.
|
60
|
+
# The instance of playwright is available by calling execution.playwright
|
61
|
+
module_function def create(playwright_cli_executable_path:, &block)
|
38
62
|
connection = Connection.new(playwright_cli_executable_path: playwright_cli_executable_path)
|
63
|
+
connection.async_run
|
64
|
+
|
65
|
+
execution =
|
66
|
+
begin
|
67
|
+
playwright = connection.wait_for_object_with_known_name('Playwright')
|
68
|
+
Execution.new(connection, PlaywrightApi.wrap(playwright))
|
69
|
+
rescue
|
70
|
+
connection.stop
|
71
|
+
raise
|
72
|
+
end
|
39
73
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
74
|
+
if block
|
75
|
+
begin
|
76
|
+
block.call(execution.playwright)
|
77
|
+
ensure
|
78
|
+
execution.stop
|
79
|
+
end
|
80
|
+
else
|
81
|
+
execution
|
47
82
|
end
|
48
83
|
end
|
84
|
+
|
85
|
+
module_function def instance
|
86
|
+
@playwright_instance
|
87
|
+
end
|
49
88
|
end
|