playwright-ruby-client 0.0.3 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +119 -12
- data/docs/api_coverage.md +354 -0
- data/lib/playwright.rb +8 -0
- data/lib/playwright/channel_owner.rb +16 -2
- data/lib/playwright/channel_owners/android.rb +10 -1
- data/lib/playwright/channel_owners/android_device.rb +163 -0
- data/lib/playwright/channel_owners/browser.rb +22 -29
- data/lib/playwright/channel_owners/browser_context.rb +43 -0
- data/lib/playwright/channel_owners/console_message.rb +21 -0
- data/lib/playwright/channel_owners/element_handle.rb +314 -0
- data/lib/playwright/channel_owners/frame.rb +466 -7
- data/lib/playwright/channel_owners/js_handle.rb +55 -0
- data/lib/playwright/channel_owners/page.rb +353 -5
- data/lib/playwright/channel_owners/request.rb +90 -0
- data/lib/playwright/channel_owners/webkit_browser.rb +1 -1
- data/lib/playwright/connection.rb +15 -14
- data/lib/playwright/errors.rb +1 -1
- data/lib/playwright/event_emitter.rb +13 -0
- data/lib/playwright/input_files.rb +42 -0
- data/lib/playwright/input_type.rb +19 -0
- data/lib/playwright/input_types/android_input.rb +19 -0
- data/lib/playwright/input_types/keyboard.rb +32 -0
- data/lib/playwright/input_types/mouse.rb +4 -0
- data/lib/playwright/input_types/touchscreen.rb +4 -0
- data/lib/playwright/javascript.rb +13 -0
- data/lib/playwright/javascript/expression.rb +67 -0
- data/lib/playwright/javascript/function.rb +67 -0
- data/lib/playwright/javascript/value_parser.rb +75 -0
- data/lib/playwright/javascript/value_serializer.rb +54 -0
- data/lib/playwright/playwright_api.rb +45 -25
- data/lib/playwright/select_option_values.rb +32 -0
- data/lib/playwright/timeout_settings.rb +19 -0
- data/lib/playwright/url_matcher.rb +19 -0
- data/lib/playwright/utils.rb +37 -0
- data/lib/playwright/version.rb +1 -1
- data/lib/playwright/wait_helper.rb +73 -0
- data/lib/playwright_api/accessibility.rb +60 -6
- data/lib/playwright_api/android.rb +33 -0
- data/lib/playwright_api/android_device.rb +78 -0
- data/lib/playwright_api/android_input.rb +25 -0
- data/lib/playwright_api/binding_call.rb +18 -0
- data/lib/playwright_api/browser.rb +136 -44
- data/lib/playwright_api/browser_context.rb +378 -51
- data/lib/playwright_api/browser_type.rb +137 -55
- data/lib/playwright_api/cdp_session.rb +32 -7
- data/lib/playwright_api/chromium_browser_context.rb +31 -0
- data/lib/playwright_api/console_message.rb +27 -7
- data/lib/playwright_api/dialog.rb +47 -3
- data/lib/playwright_api/download.rb +29 -5
- data/lib/playwright_api/element_handle.rb +429 -143
- data/lib/playwright_api/file_chooser.rb +13 -2
- data/lib/playwright_api/frame.rb +633 -179
- data/lib/playwright_api/js_handle.rb +97 -17
- data/lib/playwright_api/keyboard.rb +152 -24
- data/lib/playwright_api/mouse.rb +28 -3
- data/lib/playwright_api/page.rb +1183 -317
- data/lib/playwright_api/playwright.rb +174 -13
- data/lib/playwright_api/request.rb +115 -30
- data/lib/playwright_api/response.rb +22 -3
- data/lib/playwright_api/route.rb +63 -4
- data/lib/playwright_api/selectors.rb +29 -7
- data/lib/playwright_api/touchscreen.rb +2 -1
- data/lib/playwright_api/video.rb +11 -1
- data/lib/playwright_api/web_socket.rb +5 -5
- data/lib/playwright_api/worker.rb +29 -5
- data/playwright.gemspec +3 -0
- metadata +68 -2
data/lib/playwright_api/route.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
module Playwright
|
2
|
-
# Whenever a network route is set up with `
|
2
|
+
# Whenever a network route is set up with [`method: Page.route`] or [`method: BrowserContext.route`], the `Route` object
|
3
|
+
# allows to handle the route.
|
3
4
|
class Route < PlaywrightApi
|
4
5
|
|
5
6
|
# Aborts the route's request.
|
@@ -8,6 +9,7 @@ module Playwright
|
|
8
9
|
end
|
9
10
|
|
10
11
|
# Continues route's request with optional overrides.
|
12
|
+
#
|
11
13
|
#
|
12
14
|
# ```js
|
13
15
|
# await page.route('**/*', (route, request) => {
|
@@ -20,12 +22,40 @@ module Playwright
|
|
20
22
|
# route.continue({headers});
|
21
23
|
# });
|
22
24
|
# ```
|
23
|
-
|
24
|
-
|
25
|
+
#
|
26
|
+
# ```python async
|
27
|
+
# async def handle(route, request):
|
28
|
+
# # override headers
|
29
|
+
# headers = {
|
30
|
+
# **request.headers,
|
31
|
+
# "foo": "bar" # set "foo" header
|
32
|
+
# "origin": None # remove "origin" header
|
33
|
+
# }
|
34
|
+
# await route.continue(headers=headers)
|
35
|
+
# }
|
36
|
+
# await page.route("**/*", handle)
|
37
|
+
# ```
|
38
|
+
#
|
39
|
+
# ```python sync
|
40
|
+
# def handle(route, request):
|
41
|
+
# # override headers
|
42
|
+
# headers = {
|
43
|
+
# **request.headers,
|
44
|
+
# "foo": "bar" # set "foo" header
|
45
|
+
# "origin": None # remove "origin" header
|
46
|
+
# }
|
47
|
+
# route.continue(headers=headers)
|
48
|
+
# }
|
49
|
+
# page.route("**/*", handle)
|
50
|
+
# ```
|
51
|
+
def continue_(headers: nil, method: nil, postData: nil, url: nil)
|
52
|
+
raise NotImplementedError.new('continue_ is not implemented yet.')
|
25
53
|
end
|
26
54
|
|
27
55
|
# Fulfills route's request with given response.
|
56
|
+
#
|
28
57
|
# An example of fulfilling all requests with 404 responses:
|
58
|
+
#
|
29
59
|
#
|
30
60
|
# ```js
|
31
61
|
# await page.route('**/*', route => {
|
@@ -36,12 +66,41 @@ module Playwright
|
|
36
66
|
# });
|
37
67
|
# });
|
38
68
|
# ```
|
69
|
+
#
|
70
|
+
# ```python async
|
71
|
+
# await page.route("**/*", lambda route: route.fulfill(
|
72
|
+
# status=404,
|
73
|
+
# content_type="text/plain",
|
74
|
+
# body="not found!"))
|
75
|
+
# ```
|
76
|
+
#
|
77
|
+
# ```python sync
|
78
|
+
# page.route("**/*", lambda route: route.fulfill(
|
79
|
+
# status=404,
|
80
|
+
# content_type="text/plain",
|
81
|
+
# body="not found!"))
|
82
|
+
# ```
|
83
|
+
#
|
39
84
|
# An example of serving static file:
|
85
|
+
#
|
40
86
|
#
|
41
87
|
# ```js
|
42
88
|
# await page.route('**/xhr_endpoint', route => route.fulfill({ path: 'mock_data.json' }));
|
43
89
|
# ```
|
44
|
-
|
90
|
+
#
|
91
|
+
# ```python async
|
92
|
+
# await page.route("**/xhr_endpoint", lambda route: route.fulfill(path="mock_data.json"))
|
93
|
+
# ```
|
94
|
+
#
|
95
|
+
# ```python sync
|
96
|
+
# page.route("**/xhr_endpoint", lambda route: route.fulfill(path="mock_data.json"))
|
97
|
+
# ```
|
98
|
+
def fulfill(
|
99
|
+
body: nil,
|
100
|
+
contentType: nil,
|
101
|
+
headers: nil,
|
102
|
+
path: nil,
|
103
|
+
status: nil)
|
45
104
|
raise NotImplementedError.new('fulfill is not implemented yet.')
|
46
105
|
end
|
47
106
|
|
@@ -1,8 +1,10 @@
|
|
1
1
|
module Playwright
|
2
|
-
# Selectors can be used to install custom selector engines. See
|
2
|
+
# Selectors can be used to install custom selector engines. See
|
3
|
+
# [Working with selectors](./selectors.md#working-with-selectors) for more information.
|
3
4
|
class Selectors < PlaywrightApi
|
4
5
|
|
5
6
|
# An example of registering selector engine that queries elements based on a tag name:
|
7
|
+
#
|
6
8
|
#
|
7
9
|
# ```js
|
8
10
|
# const { selectors, firefox } = require('playwright'); // Or 'chromium' or 'webkit'.
|
@@ -10,12 +12,6 @@ module Playwright
|
|
10
12
|
# (async () => {
|
11
13
|
# // Must be a function that evaluates to a selector engine instance.
|
12
14
|
# const createTagNameEngine = () => ({
|
13
|
-
# // Creates a selector that matches given target when queried at the root.
|
14
|
-
# // Can return undefined if unable to create one.
|
15
|
-
# create(root, target) {
|
16
|
-
# return root.querySelector(target.tagName) === target ? target.tagName : undefined;
|
17
|
-
# },
|
18
|
-
#
|
19
15
|
# // Returns the first element matching given selector in the root's subtree.
|
20
16
|
# query(root, selector) {
|
21
17
|
# return root.querySelector(selector);
|
@@ -44,8 +40,34 @@ module Playwright
|
|
44
40
|
# await browser.close();
|
45
41
|
# })();
|
46
42
|
# ```
|
43
|
+
#
|
44
|
+
# ```python async
|
45
|
+
# # FIXME: add snippet
|
46
|
+
# ```
|
47
|
+
#
|
48
|
+
# ```python sync
|
49
|
+
# # FIXME: add snippet
|
50
|
+
# ```
|
47
51
|
def register(name, script, contentScript: nil)
|
48
52
|
raise NotImplementedError.new('register is not implemented yet.')
|
49
53
|
end
|
54
|
+
|
55
|
+
# -- inherited from EventEmitter --
|
56
|
+
# @nodoc
|
57
|
+
def on(event, callback)
|
58
|
+
wrap_impl(@impl.on(unwrap_impl(event), unwrap_impl(callback)))
|
59
|
+
end
|
60
|
+
|
61
|
+
# -- inherited from EventEmitter --
|
62
|
+
# @nodoc
|
63
|
+
def off(event, callback)
|
64
|
+
wrap_impl(@impl.off(unwrap_impl(event), unwrap_impl(callback)))
|
65
|
+
end
|
66
|
+
|
67
|
+
# -- inherited from EventEmitter --
|
68
|
+
# @nodoc
|
69
|
+
def once(event, callback)
|
70
|
+
wrap_impl(@impl.once(unwrap_impl(event), unwrap_impl(callback)))
|
71
|
+
end
|
50
72
|
end
|
51
73
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
module Playwright
|
2
|
-
# The Touchscreen class operates in main-frame CSS pixels relative to the top-left corner of the viewport. Methods on the
|
2
|
+
# The Touchscreen class operates in main-frame CSS pixels relative to the top-left corner of the viewport. Methods on the
|
3
|
+
# touchscreen can only be used in browser contexts that have been intialized with `hasTouch` set to true.
|
3
4
|
class Touchscreen < PlaywrightApi
|
4
5
|
|
5
6
|
# Dispatches a `touchstart` and `touchend` event with a single touch at the position (`x`,`y`).
|
data/lib/playwright_api/video.rb
CHANGED
@@ -1,12 +1,22 @@
|
|
1
1
|
module Playwright
|
2
2
|
# When browser context is created with the `videosPath` option, each page has a video object associated with it.
|
3
|
+
#
|
3
4
|
#
|
4
5
|
# ```js
|
5
6
|
# console.log(await page.video().path());
|
6
7
|
# ```
|
8
|
+
#
|
9
|
+
# ```python async
|
10
|
+
# print(await page.video.path())
|
11
|
+
# ```
|
12
|
+
#
|
13
|
+
# ```python sync
|
14
|
+
# print(page.video.path())
|
15
|
+
# ```
|
7
16
|
class Video < PlaywrightApi
|
8
17
|
|
9
|
-
# Returns the file system path this video will be recorded to. The video is guaranteed to be written to the filesystem
|
18
|
+
# Returns the file system path this video will be recorded to. The video is guaranteed to be written to the filesystem
|
19
|
+
# upon closing the browser context.
|
10
20
|
def path
|
11
21
|
raise NotImplementedError.new('path is not implemented yet.')
|
12
22
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Playwright
|
2
|
-
# The WebSocket class represents websocket connections in the page.
|
2
|
+
# The `WebSocket` class represents websocket connections in the page.
|
3
3
|
class WebSocket < PlaywrightApi
|
4
4
|
|
5
5
|
# Indicates that the web socket has been closed.
|
@@ -12,10 +12,10 @@ module Playwright
|
|
12
12
|
raise NotImplementedError.new('url is not implemented yet.')
|
13
13
|
end
|
14
14
|
|
15
|
-
#
|
16
|
-
#
|
17
|
-
def
|
18
|
-
raise NotImplementedError.new('
|
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, optionsOrPredicate: nil)
|
18
|
+
raise NotImplementedError.new('expect_event is not implemented yet.')
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
@@ -1,5 +1,8 @@
|
|
1
1
|
module Playwright
|
2
|
-
# The Worker class represents a WebWorker. `worker`
|
2
|
+
# The Worker class represents a [WebWorker](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API). `worker`
|
3
|
+
# event is emitted on the page object to signal a worker creation. `close` event is emitted on the worker object when the
|
4
|
+
# worker is gone.
|
5
|
+
#
|
3
6
|
#
|
4
7
|
# ```js
|
5
8
|
# page.on('worker', worker => {
|
@@ -11,18 +14,39 @@ module Playwright
|
|
11
14
|
# for (const worker of page.workers())
|
12
15
|
# console.log(' ' + worker.url());
|
13
16
|
# ```
|
17
|
+
#
|
18
|
+
# ```py
|
19
|
+
# def handle_worker(worker):
|
20
|
+
# print("worker created: " + worker.url)
|
21
|
+
# worker.on("close", lambda: print("worker destroyed: " + worker.url))
|
22
|
+
#
|
23
|
+
# page.on('worker', handle_worker)
|
24
|
+
#
|
25
|
+
# print("current workers:")
|
26
|
+
# for worker in page.workers:
|
27
|
+
# print(" " + worker.url)
|
28
|
+
# ```
|
14
29
|
class Worker < PlaywrightApi
|
15
30
|
|
16
31
|
# Returns the return value of `pageFunction`
|
17
|
-
#
|
18
|
-
# If the function passed to the `worker.evaluate` returns a
|
32
|
+
#
|
33
|
+
# If the function passed to the `worker.evaluate` returns a [Promise], then `worker.evaluate` would wait for the promise
|
34
|
+
# to resolve and return its value.
|
35
|
+
#
|
36
|
+
# If the function passed to the `worker.evaluate` returns a non-[Serializable] value, then `worker.evaluate` returns
|
37
|
+
# `undefined`. DevTools Protocol also supports transferring some additional values that are not serializable by `JSON`:
|
38
|
+
# `-0`, `NaN`, `Infinity`, `-Infinity`, and bigint literals.
|
19
39
|
def evaluate(pageFunction, arg: nil)
|
20
40
|
raise NotImplementedError.new('evaluate is not implemented yet.')
|
21
41
|
end
|
22
42
|
|
23
43
|
# Returns the return value of `pageFunction` as in-page object (JSHandle).
|
24
|
-
#
|
25
|
-
#
|
44
|
+
#
|
45
|
+
# The only difference between `worker.evaluate` and `worker.evaluateHandle` is that `worker.evaluateHandle` returns
|
46
|
+
# in-page object (JSHandle).
|
47
|
+
#
|
48
|
+
# If the function passed to the `worker.evaluateHandle` returns a [Promise], then `worker.evaluateHandle` would wait for
|
49
|
+
# the promise to resolve and return its value.
|
26
50
|
def evaluate_handle(pageFunction, arg: nil)
|
27
51
|
raise NotImplementedError.new('evaluate_handle is not implemented yet.')
|
28
52
|
end
|
data/playwright.gemspec
CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.require_paths = ['lib']
|
26
26
|
|
27
27
|
spec.add_dependency 'concurrent-ruby'
|
28
|
+
spec.add_dependency 'mime-types', '>= 3.0'
|
28
29
|
spec.add_development_dependency 'bundler', '~> 2.2.3'
|
29
30
|
spec.add_development_dependency 'dry-inflector'
|
30
31
|
spec.add_development_dependency 'pry-byebug'
|
@@ -32,4 +33,6 @@ Gem::Specification.new do |spec|
|
|
32
33
|
spec.add_development_dependency 'rspec', '~> 3.10.0 '
|
33
34
|
spec.add_development_dependency 'rubocop', '~> 1.7.0'
|
34
35
|
spec.add_development_dependency 'rubocop-rspec'
|
36
|
+
spec.add_development_dependency 'sinatra'
|
37
|
+
spec.add_development_dependency 'webrick'
|
35
38
|
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.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- YusukeIwaki
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-02-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: mime-types
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,6 +136,34 @@ dependencies:
|
|
122
136
|
- - ">="
|
123
137
|
- !ruby/object:Gem::Version
|
124
138
|
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: sinatra
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: webrick
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
125
167
|
description:
|
126
168
|
email:
|
127
169
|
- q7w8e9w8q7w8e9@yahoo.co.jp
|
@@ -137,19 +179,24 @@ files:
|
|
137
179
|
- Rakefile
|
138
180
|
- bin/console
|
139
181
|
- bin/setup
|
182
|
+
- docs/api_coverage.md
|
140
183
|
- lib/playwright.rb
|
141
184
|
- lib/playwright/channel.rb
|
142
185
|
- lib/playwright/channel_owner.rb
|
143
186
|
- lib/playwright/channel_owners/android.rb
|
187
|
+
- lib/playwright/channel_owners/android_device.rb
|
144
188
|
- lib/playwright/channel_owners/binding_call.rb
|
145
189
|
- lib/playwright/channel_owners/browser.rb
|
146
190
|
- lib/playwright/channel_owners/browser_context.rb
|
147
191
|
- lib/playwright/channel_owners/browser_type.rb
|
148
192
|
- lib/playwright/channel_owners/chromium_browser.rb
|
149
193
|
- lib/playwright/channel_owners/chromium_browser_context.rb
|
194
|
+
- lib/playwright/channel_owners/console_message.rb
|
150
195
|
- lib/playwright/channel_owners/electron.rb
|
196
|
+
- lib/playwright/channel_owners/element_handle.rb
|
151
197
|
- lib/playwright/channel_owners/firefox_browser.rb
|
152
198
|
- lib/playwright/channel_owners/frame.rb
|
199
|
+
- lib/playwright/channel_owners/js_handle.rb
|
153
200
|
- lib/playwright/channel_owners/page.rb
|
154
201
|
- lib/playwright/channel_owners/playwright.rb
|
155
202
|
- lib/playwright/channel_owners/request.rb
|
@@ -160,10 +207,29 @@ files:
|
|
160
207
|
- lib/playwright/errors.rb
|
161
208
|
- lib/playwright/event_emitter.rb
|
162
209
|
- lib/playwright/events.rb
|
210
|
+
- lib/playwright/input_files.rb
|
211
|
+
- lib/playwright/input_type.rb
|
212
|
+
- lib/playwright/input_types/android_input.rb
|
213
|
+
- lib/playwright/input_types/keyboard.rb
|
214
|
+
- lib/playwright/input_types/mouse.rb
|
215
|
+
- lib/playwright/input_types/touchscreen.rb
|
216
|
+
- lib/playwright/javascript.rb
|
217
|
+
- lib/playwright/javascript/expression.rb
|
218
|
+
- lib/playwright/javascript/function.rb
|
219
|
+
- lib/playwright/javascript/value_parser.rb
|
220
|
+
- lib/playwright/javascript/value_serializer.rb
|
163
221
|
- lib/playwright/playwright_api.rb
|
222
|
+
- lib/playwright/select_option_values.rb
|
223
|
+
- lib/playwright/timeout_settings.rb
|
164
224
|
- lib/playwright/transport.rb
|
225
|
+
- lib/playwright/url_matcher.rb
|
226
|
+
- lib/playwright/utils.rb
|
165
227
|
- lib/playwright/version.rb
|
228
|
+
- lib/playwright/wait_helper.rb
|
166
229
|
- lib/playwright_api/accessibility.rb
|
230
|
+
- lib/playwright_api/android.rb
|
231
|
+
- lib/playwright_api/android_device.rb
|
232
|
+
- lib/playwright_api/android_input.rb
|
167
233
|
- lib/playwright_api/binding_call.rb
|
168
234
|
- lib/playwright_api/browser.rb
|
169
235
|
- lib/playwright_api/browser_context.rb
|