playwright-ruby-client 0.0.7 → 0.2.1
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 +38 -3
- data/docs/api_coverage.md +89 -84
- data/lib/playwright.rb +4 -2
- data/lib/playwright/android_input_impl.rb +23 -0
- data/lib/playwright/api_implementation.rb +18 -0
- data/lib/playwright/channel.rb +7 -0
- 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 +83 -13
- data/lib/playwright/channel_owners/browser.rb +1 -1
- data/lib/playwright/channel_owners/browser_context.rb +10 -2
- data/lib/playwright/channel_owners/download.rb +27 -0
- data/lib/playwright/channel_owners/element_handle.rb +15 -4
- data/lib/playwright/channel_owners/frame.rb +228 -19
- data/lib/playwright/channel_owners/js_handle.rb +1 -1
- data/lib/playwright/channel_owners/page.rb +350 -27
- data/lib/playwright/channel_owners/request.rb +9 -1
- data/lib/playwright/errors.rb +1 -1
- data/lib/playwright/event_emitter.rb +8 -1
- data/lib/playwright/event_emitter_proxy.rb +49 -0
- data/lib/playwright/file_chooser_impl.rb +23 -0
- data/lib/playwright/http_headers.rb +20 -0
- data/lib/playwright/input_files.rb +1 -1
- data/lib/playwright/javascript/expression.rb +15 -0
- data/lib/playwright/javascript/function.rb +15 -0
- data/lib/playwright/javascript/value_parser.rb +1 -1
- data/lib/playwright/javascript/value_serializer.rb +1 -1
- data/lib/playwright/{input_types/keyboard.rb → keyboard_impl.rb} +5 -1
- data/lib/playwright/mouse_impl.rb +7 -0
- data/lib/playwright/playwright_api.rb +59 -20
- data/lib/playwright/select_option_values.rb +14 -4
- data/lib/playwright/timeout_settings.rb +1 -1
- data/lib/playwright/touchscreen_impl.rb +7 -0
- data/lib/playwright/utils.rb +3 -3
- data/lib/playwright/version.rb +1 -1
- data/lib/playwright/wait_helper.rb +1 -1
- data/lib/playwright_api/android.rb +9 -10
- data/lib/playwright_api/android_device.rb +43 -14
- data/lib/playwright_api/android_input.rb +25 -0
- data/lib/playwright_api/binding_call.rb +10 -6
- data/lib/playwright_api/browser.rb +20 -21
- data/lib/playwright_api/browser_context.rb +29 -20
- data/lib/playwright_api/browser_type.rb +16 -56
- data/lib/playwright_api/chromium_browser_context.rb +10 -8
- data/lib/playwright_api/console_message.rb +10 -6
- data/lib/playwright_api/dialog.rb +5 -1
- data/lib/playwright_api/download.rb +28 -11
- data/lib/playwright_api/element_handle.rb +107 -96
- data/lib/playwright_api/file_chooser.rb +17 -9
- data/lib/playwright_api/frame.rb +136 -132
- data/lib/playwright_api/js_handle.rb +18 -20
- data/lib/playwright_api/keyboard.rb +5 -5
- data/lib/playwright_api/page.rb +204 -149
- data/lib/playwright_api/playwright.rb +32 -44
- data/lib/playwright_api/request.rb +7 -8
- data/lib/playwright_api/response.rb +10 -6
- data/lib/playwright_api/selectors.rb +13 -9
- data/lib/playwright_api/web_socket.rb +10 -1
- data/lib/playwright_api/worker.rb +13 -13
- metadata +12 -6
- data/lib/playwright/input_type.rb +0 -19
- data/lib/playwright/input_types/mouse.rb +0 -4
- data/lib/playwright/input_types/touchscreen.rb +0 -4
@@ -113,49 +113,13 @@ 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)
|
155
119
|
end
|
156
120
|
|
157
|
-
# Selectors can be used to install custom selector engines. See
|
158
|
-
#
|
121
|
+
# Selectors can be used to install custom selector engines. See [Working with selectors](./selectors.md) for more
|
122
|
+
# information.
|
159
123
|
def selectors # property
|
160
124
|
raise NotImplementedError.new('selectors is not implemented yet.')
|
161
125
|
end
|
@@ -165,6 +129,26 @@ module Playwright
|
|
165
129
|
wrap_impl(@impl.webkit)
|
166
130
|
end
|
167
131
|
|
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.')
|
150
|
+
end
|
151
|
+
|
168
152
|
# @nodoc
|
169
153
|
def android
|
170
154
|
wrap_impl(@impl.android)
|
@@ -177,20 +161,24 @@ module Playwright
|
|
177
161
|
|
178
162
|
# -- inherited from EventEmitter --
|
179
163
|
# @nodoc
|
180
|
-
def
|
181
|
-
|
164
|
+
def once(event, callback)
|
165
|
+
event_emitter_proxy.once(event, callback)
|
182
166
|
end
|
183
167
|
|
184
168
|
# -- inherited from EventEmitter --
|
185
169
|
# @nodoc
|
186
|
-
def
|
187
|
-
|
170
|
+
def on(event, callback)
|
171
|
+
event_emitter_proxy.on(event, callback)
|
188
172
|
end
|
189
173
|
|
190
174
|
# -- inherited from EventEmitter --
|
191
175
|
# @nodoc
|
192
|
-
def
|
193
|
-
|
176
|
+
def off(event, callback)
|
177
|
+
event_emitter_proxy.off(event, callback)
|
178
|
+
end
|
179
|
+
|
180
|
+
private def event_emitter_proxy
|
181
|
+
@event_emitter_proxy ||= EventEmitterProxy.new(self, @impl)
|
194
182
|
end
|
195
183
|
end
|
196
184
|
end
|
@@ -178,27 +178,26 @@ module Playwright
|
|
178
178
|
wrap_impl(@impl.url)
|
179
179
|
end
|
180
180
|
|
181
|
+
# -- inherited from EventEmitter --
|
181
182
|
# @nodoc
|
182
|
-
def
|
183
|
-
|
183
|
+
def once(event, callback)
|
184
|
+
event_emitter_proxy.once(event, callback)
|
184
185
|
end
|
185
186
|
|
186
187
|
# -- inherited from EventEmitter --
|
187
188
|
# @nodoc
|
188
189
|
def on(event, callback)
|
189
|
-
|
190
|
+
event_emitter_proxy.on(event, callback)
|
190
191
|
end
|
191
192
|
|
192
193
|
# -- inherited from EventEmitter --
|
193
194
|
# @nodoc
|
194
195
|
def off(event, callback)
|
195
|
-
|
196
|
+
event_emitter_proxy.off(event, callback)
|
196
197
|
end
|
197
198
|
|
198
|
-
|
199
|
-
|
200
|
-
def once(event, callback)
|
201
|
-
wrap_impl(@impl.once(unwrap_impl(event), unwrap_impl(callback)))
|
199
|
+
private def event_emitter_proxy
|
200
|
+
@event_emitter_proxy ||= EventEmitterProxy.new(self, @impl)
|
202
201
|
end
|
203
202
|
end
|
204
203
|
end
|
@@ -61,20 +61,24 @@ module Playwright
|
|
61
61
|
|
62
62
|
# -- inherited from EventEmitter --
|
63
63
|
# @nodoc
|
64
|
-
def
|
65
|
-
|
64
|
+
def once(event, callback)
|
65
|
+
event_emitter_proxy.once(event, callback)
|
66
66
|
end
|
67
67
|
|
68
68
|
# -- inherited from EventEmitter --
|
69
69
|
# @nodoc
|
70
|
-
def
|
71
|
-
|
70
|
+
def on(event, callback)
|
71
|
+
event_emitter_proxy.on(event, callback)
|
72
72
|
end
|
73
73
|
|
74
74
|
# -- inherited from EventEmitter --
|
75
75
|
# @nodoc
|
76
|
-
def
|
77
|
-
|
76
|
+
def off(event, callback)
|
77
|
+
event_emitter_proxy.off(event, callback)
|
78
|
+
end
|
79
|
+
|
80
|
+
private def event_emitter_proxy
|
81
|
+
@event_emitter_proxy ||= EventEmitterProxy.new(self, @impl)
|
78
82
|
end
|
79
83
|
end
|
80
84
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Playwright
|
2
|
-
# Selectors can be used to install custom selector engines. See
|
3
|
-
#
|
2
|
+
# Selectors can be used to install custom selector engines. See [Working with selectors](./selectors.md) for more
|
3
|
+
# information.
|
4
4
|
class Selectors < PlaywrightApi
|
5
5
|
|
6
6
|
# An example of registering selector engine that queries elements based on a tag name:
|
@@ -48,26 +48,30 @@ 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
|
|
55
55
|
# -- inherited from EventEmitter --
|
56
56
|
# @nodoc
|
57
|
-
def
|
58
|
-
|
57
|
+
def once(event, callback)
|
58
|
+
event_emitter_proxy.once(event, callback)
|
59
59
|
end
|
60
60
|
|
61
61
|
# -- inherited from EventEmitter --
|
62
62
|
# @nodoc
|
63
|
-
def
|
64
|
-
|
63
|
+
def on(event, callback)
|
64
|
+
event_emitter_proxy.on(event, callback)
|
65
65
|
end
|
66
66
|
|
67
67
|
# -- inherited from EventEmitter --
|
68
68
|
# @nodoc
|
69
|
-
def
|
70
|
-
|
69
|
+
def off(event, callback)
|
70
|
+
event_emitter_proxy.off(event, callback)
|
71
|
+
end
|
72
|
+
|
73
|
+
private def event_emitter_proxy
|
74
|
+
@event_emitter_proxy ||= EventEmitterProxy.new(self, @impl)
|
71
75
|
end
|
72
76
|
end
|
73
77
|
end
|
@@ -14,8 +14,17 @@ module Playwright
|
|
14
14
|
|
15
15
|
# Waits for event to fire and passes its value into the predicate function. Returns when the predicate returns truthy
|
16
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,
|
17
|
+
def expect_event(event, predicate: nil, timeout: nil)
|
18
18
|
raise NotImplementedError.new('expect_event is not implemented yet.')
|
19
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
|
20
29
|
end
|
21
30
|
end
|
@@ -28,26 +28,26 @@ module Playwright
|
|
28
28
|
# ```
|
29
29
|
class Worker < PlaywrightApi
|
30
30
|
|
31
|
-
# Returns the return value of `
|
31
|
+
# Returns the return value of `expression`.
|
32
32
|
#
|
33
|
-
# If the function passed to the `
|
34
|
-
# to resolve and return its value.
|
33
|
+
# If the function passed to the [`method: Worker.evaluate`] returns a [Promise], then [`method: Worker.evaluate`] would
|
34
|
+
# wait for the promise to resolve and return its value.
|
35
35
|
#
|
36
|
-
# If the function passed to the `
|
37
|
-
# `undefined`.
|
38
|
-
# `-0`, `NaN`, `Infinity`, `-Infinity
|
39
|
-
def evaluate(
|
36
|
+
# If the function passed to the [`method: Worker.evaluate`] returns a non-[Serializable] value, then
|
37
|
+
# [`method: Worker.evaluate`] returns `undefined`. Playwright also supports transferring some additional values that are
|
38
|
+
# not serializable by `JSON`: `-0`, `NaN`, `Infinity`, `-Infinity`.
|
39
|
+
def evaluate(expression, arg: nil)
|
40
40
|
raise NotImplementedError.new('evaluate is not implemented yet.')
|
41
41
|
end
|
42
42
|
|
43
|
-
# Returns the return value of `
|
43
|
+
# Returns the return value of `expression` as a `JSHandle`.
|
44
44
|
#
|
45
|
-
# The only difference between `
|
46
|
-
#
|
45
|
+
# The only difference between [`method: Worker.evaluate`] and [`method: Worker.evaluateHandle`] is that
|
46
|
+
# [`method: Worker.evaluateHandle`] returns `JSHandle`.
|
47
47
|
#
|
48
|
-
# If the function passed to the `
|
49
|
-
# the promise to resolve and return its value.
|
50
|
-
def evaluate_handle(
|
48
|
+
# If the function passed to the [`method: Worker.evaluateHandle`] returns a [Promise], then
|
49
|
+
# [`method: Worker.evaluateHandle`] would wait for the promise to resolve and return its value.
|
50
|
+
def evaluate_handle(expression, arg: nil)
|
51
51
|
raise NotImplementedError.new('evaluate_handle is not implemented yet.')
|
52
52
|
end
|
53
53
|
|
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.1
|
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-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -181,6 +181,8 @@ files:
|
|
181
181
|
- bin/setup
|
182
182
|
- docs/api_coverage.md
|
183
183
|
- lib/playwright.rb
|
184
|
+
- lib/playwright/android_input_impl.rb
|
185
|
+
- lib/playwright/api_implementation.rb
|
184
186
|
- lib/playwright/channel.rb
|
185
187
|
- lib/playwright/channel_owner.rb
|
186
188
|
- lib/playwright/channel_owners/android.rb
|
@@ -192,6 +194,7 @@ files:
|
|
192
194
|
- lib/playwright/channel_owners/chromium_browser.rb
|
193
195
|
- lib/playwright/channel_owners/chromium_browser_context.rb
|
194
196
|
- lib/playwright/channel_owners/console_message.rb
|
197
|
+
- lib/playwright/channel_owners/download.rb
|
195
198
|
- lib/playwright/channel_owners/electron.rb
|
196
199
|
- lib/playwright/channel_owners/element_handle.rb
|
197
200
|
- lib/playwright/channel_owners/firefox_browser.rb
|
@@ -206,20 +209,22 @@ files:
|
|
206
209
|
- lib/playwright/connection.rb
|
207
210
|
- lib/playwright/errors.rb
|
208
211
|
- lib/playwright/event_emitter.rb
|
212
|
+
- lib/playwright/event_emitter_proxy.rb
|
209
213
|
- lib/playwright/events.rb
|
214
|
+
- lib/playwright/file_chooser_impl.rb
|
215
|
+
- lib/playwright/http_headers.rb
|
210
216
|
- lib/playwright/input_files.rb
|
211
|
-
- lib/playwright/input_type.rb
|
212
|
-
- lib/playwright/input_types/keyboard.rb
|
213
|
-
- lib/playwright/input_types/mouse.rb
|
214
|
-
- lib/playwright/input_types/touchscreen.rb
|
215
217
|
- lib/playwright/javascript.rb
|
216
218
|
- lib/playwright/javascript/expression.rb
|
217
219
|
- lib/playwright/javascript/function.rb
|
218
220
|
- lib/playwright/javascript/value_parser.rb
|
219
221
|
- lib/playwright/javascript/value_serializer.rb
|
222
|
+
- lib/playwright/keyboard_impl.rb
|
223
|
+
- lib/playwright/mouse_impl.rb
|
220
224
|
- lib/playwright/playwright_api.rb
|
221
225
|
- lib/playwright/select_option_values.rb
|
222
226
|
- lib/playwright/timeout_settings.rb
|
227
|
+
- lib/playwright/touchscreen_impl.rb
|
223
228
|
- lib/playwright/transport.rb
|
224
229
|
- lib/playwright/url_matcher.rb
|
225
230
|
- lib/playwright/utils.rb
|
@@ -228,6 +233,7 @@ files:
|
|
228
233
|
- lib/playwright_api/accessibility.rb
|
229
234
|
- lib/playwright_api/android.rb
|
230
235
|
- lib/playwright_api/android_device.rb
|
236
|
+
- lib/playwright_api/android_input.rb
|
231
237
|
- lib/playwright_api/binding_call.rb
|
232
238
|
- lib/playwright_api/browser.rb
|
233
239
|
- lib/playwright_api/browser_context.rb
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module Playwright
|
2
|
-
class InputType
|
3
|
-
def initialize(channel)
|
4
|
-
@channel = channel
|
5
|
-
end
|
6
|
-
end
|
7
|
-
|
8
|
-
# namespace declaration
|
9
|
-
module InputTypes ; end
|
10
|
-
|
11
|
-
def self.define_input_type(class_name, &block)
|
12
|
-
klass = Class.new(InputType)
|
13
|
-
klass.class_eval(&block) if block
|
14
|
-
InputTypes.const_set(class_name, klass)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
# load subclasses
|
19
|
-
Dir[File.join(__dir__, 'input_types', '*.rb')].each { |f| require f }
|