playwright-ruby-client 0.7.0 → 0.9.0
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 +26 -0
- data/documentation/docs/api/browser.md +18 -2
- data/documentation/docs/api/browser_context.md +10 -0
- data/documentation/docs/api/browser_type.md +1 -0
- data/documentation/docs/api/cdp_session.md +41 -1
- data/documentation/docs/api/download.md +97 -0
- data/documentation/docs/api/element_handle.md +38 -4
- data/documentation/docs/api/experimental/android_device.md +1 -0
- data/documentation/docs/api/frame.md +78 -17
- data/documentation/docs/api/keyboard.md +11 -20
- data/documentation/docs/api/locator.md +650 -0
- data/documentation/docs/api/page.md +107 -19
- data/documentation/docs/api/response.md +16 -0
- data/documentation/docs/article/guides/inspector.md +31 -0
- data/documentation/docs/article/guides/playwright_on_alpine_linux.md +91 -0
- data/documentation/docs/article/guides/rails_integration.md +1 -1
- data/documentation/docs/article/guides/semi_automation.md +5 -1
- data/documentation/docs/include/api_coverage.md +70 -7
- data/lib/playwright.rb +36 -4
- data/lib/playwright/channel_owners/artifact.rb +4 -0
- data/lib/playwright/channel_owners/browser.rb +5 -0
- data/lib/playwright/channel_owners/browser_context.rb +37 -3
- data/lib/playwright/channel_owners/cdp_session.rb +19 -0
- data/lib/playwright/channel_owners/element_handle.rb +11 -4
- data/lib/playwright/channel_owners/frame.rb +103 -34
- data/lib/playwright/channel_owners/page.rb +140 -53
- data/lib/playwright/channel_owners/response.rb +9 -1
- data/lib/playwright/connection.rb +2 -4
- data/lib/playwright/{download.rb → download_impl.rb} +5 -1
- data/lib/playwright/javascript/expression.rb +5 -4
- data/lib/playwright/locator_impl.rb +314 -0
- data/lib/playwright/route_handler_entry.rb +3 -2
- data/lib/playwright/timeout_settings.rb +4 -4
- data/lib/playwright/transport.rb +0 -1
- data/lib/playwright/url_matcher.rb +12 -2
- data/lib/playwright/version.rb +2 -2
- data/lib/playwright/web_socket_client.rb +164 -0
- data/lib/playwright/web_socket_transport.rb +104 -0
- data/lib/playwright_api/android.rb +6 -6
- data/lib/playwright_api/android_device.rb +10 -9
- data/lib/playwright_api/browser.rb +17 -11
- data/lib/playwright_api/browser_context.rb +14 -9
- data/lib/playwright_api/browser_type.rb +8 -7
- data/lib/playwright_api/cdp_session.rb +30 -8
- data/lib/playwright_api/console_message.rb +6 -6
- data/lib/playwright_api/dialog.rb +6 -6
- data/lib/playwright_api/download.rb +70 -0
- data/lib/playwright_api/element_handle.rb +44 -24
- data/lib/playwright_api/frame.rb +100 -49
- data/lib/playwright_api/js_handle.rb +6 -6
- data/lib/playwright_api/locator.rb +509 -0
- data/lib/playwright_api/page.rb +110 -57
- data/lib/playwright_api/playwright.rb +6 -6
- data/lib/playwright_api/request.rb +6 -6
- data/lib/playwright_api/response.rb +15 -10
- data/lib/playwright_api/route.rb +6 -6
- data/lib/playwright_api/selectors.rb +6 -6
- data/lib/playwright_api/web_socket.rb +6 -6
- data/lib/playwright_api/worker.rb +6 -6
- metadata +15 -5
@@ -202,4 +202,4 @@ end
|
|
202
202
|
|
203
203
|
* Playwright doesn't allow clicking invisible DOM elements or moving elements. `click` sometimes doesn't work as Selenium does. See the detail in https://playwright.dev/docs/actionability/
|
204
204
|
* `current_window.maximize` and `current_window.fullscreen` work only on headful (non-headless) mode, as selenium driver does.
|
205
|
-
* `Capybara::Node::Element#drag_to` does not accept `html5` parameter.
|
205
|
+
* `Capybara::Node::Element#drag_to` does not accept `html5` parameter. HTML5 drag and drop is not fully supported in Playwright.
|
@@ -1,3 +1,7 @@
|
|
1
|
+
---
|
2
|
+
sidebar_position: 5
|
3
|
+
---
|
4
|
+
|
1
5
|
# Semi-automation
|
2
6
|
|
3
7
|
Playwright Browser context is isolated and not persisted by default. But we can also use persistent browser context using [BrowserType#launch_persistent_context](/docs/api/browser_type#launch_persistent_context).
|
@@ -10,7 +14,7 @@ Keep in mind repeatedly that persistent browser context is NOT RECOMMENDED for m
|
|
10
14
|
|
11
15
|
## Pause automation for manual operation
|
12
16
|
|
13
|
-
|
17
|
+
We can simply use `binding.pry` (with `pry-byebug` installed).
|
14
18
|
|
15
19
|
```ruby {4}
|
16
20
|
playwright.chromium.launch_persistent_context('./data/', headless: false) do |context|
|
@@ -26,6 +26,8 @@
|
|
26
26
|
* json
|
27
27
|
* ok
|
28
28
|
* request
|
29
|
+
* security_details
|
30
|
+
* server_addr
|
29
31
|
* status
|
30
32
|
* status_text
|
31
33
|
* text
|
@@ -91,6 +93,7 @@
|
|
91
93
|
* hover
|
92
94
|
* inner_html
|
93
95
|
* inner_text
|
96
|
+
* input_value
|
94
97
|
* checked?
|
95
98
|
* disabled?
|
96
99
|
* editable?
|
@@ -134,6 +137,7 @@
|
|
134
137
|
* content
|
135
138
|
* dblclick
|
136
139
|
* dispatch_event
|
140
|
+
* drag_and_drop
|
137
141
|
* eval_on_selector
|
138
142
|
* eval_on_selector_all
|
139
143
|
* evaluate
|
@@ -146,6 +150,7 @@
|
|
146
150
|
* hover
|
147
151
|
* inner_html
|
148
152
|
* inner_text
|
153
|
+
* input_value
|
149
154
|
* checked?
|
150
155
|
* detached?
|
151
156
|
* disabled?
|
@@ -153,6 +158,7 @@
|
|
153
158
|
* enabled?
|
154
159
|
* hidden?
|
155
160
|
* visible?
|
161
|
+
* locator
|
156
162
|
* name
|
157
163
|
* page
|
158
164
|
* parent_frame
|
@@ -200,6 +206,17 @@
|
|
200
206
|
* message
|
201
207
|
* type
|
202
208
|
|
209
|
+
## Download
|
210
|
+
|
211
|
+
* cancel
|
212
|
+
* delete
|
213
|
+
* failure
|
214
|
+
* page
|
215
|
+
* path
|
216
|
+
* save_as
|
217
|
+
* suggested_filename
|
218
|
+
* url
|
219
|
+
|
203
220
|
## Page
|
204
221
|
|
205
222
|
* add_init_script
|
@@ -213,6 +230,7 @@
|
|
213
230
|
* context
|
214
231
|
* dblclick
|
215
232
|
* dispatch_event
|
233
|
+
* drag_and_drop
|
216
234
|
* emulate_media
|
217
235
|
* eval_on_selector
|
218
236
|
* eval_on_selector_all
|
@@ -231,6 +249,7 @@
|
|
231
249
|
* hover
|
232
250
|
* inner_html
|
233
251
|
* inner_text
|
252
|
+
* input_value
|
234
253
|
* checked?
|
235
254
|
* closed?
|
236
255
|
* disabled?
|
@@ -238,9 +257,10 @@
|
|
238
257
|
* enabled?
|
239
258
|
* hidden?
|
240
259
|
* visible?
|
260
|
+
* locator
|
241
261
|
* main_frame
|
242
262
|
* opener
|
243
|
-
*
|
263
|
+
* pause
|
244
264
|
* pdf
|
245
265
|
* press
|
246
266
|
* query_selector
|
@@ -273,7 +293,7 @@
|
|
273
293
|
* expect_navigation
|
274
294
|
* expect_popup
|
275
295
|
* expect_request
|
276
|
-
*
|
296
|
+
* expect_request_finished
|
277
297
|
* expect_response
|
278
298
|
* wait_for_selector
|
279
299
|
* ~~wait_for_timeout~~
|
@@ -300,7 +320,7 @@
|
|
300
320
|
* expose_binding
|
301
321
|
* expose_function
|
302
322
|
* grant_permissions
|
303
|
-
*
|
323
|
+
* new_cdp_session
|
304
324
|
* new_page
|
305
325
|
* pages
|
306
326
|
* route
|
@@ -317,17 +337,17 @@
|
|
317
337
|
* ~~wait_for_event~~
|
318
338
|
* tracing
|
319
339
|
|
320
|
-
##
|
340
|
+
## CDPSession
|
321
341
|
|
322
|
-
*
|
323
|
-
*
|
342
|
+
* detach
|
343
|
+
* send_message
|
324
344
|
|
325
345
|
## Browser
|
326
346
|
|
327
347
|
* close
|
328
348
|
* contexts
|
329
349
|
* connected?
|
330
|
-
*
|
350
|
+
* new_browser_cdp_session
|
331
351
|
* new_context
|
332
352
|
* new_page
|
333
353
|
* start_tracing
|
@@ -357,6 +377,49 @@
|
|
357
377
|
* start
|
358
378
|
* stop
|
359
379
|
|
380
|
+
## Locator
|
381
|
+
|
382
|
+
* all_inner_texts
|
383
|
+
* all_text_contents
|
384
|
+
* bounding_box
|
385
|
+
* check
|
386
|
+
* click
|
387
|
+
* count
|
388
|
+
* dblclick
|
389
|
+
* dispatch_event
|
390
|
+
* element_handle
|
391
|
+
* element_handles
|
392
|
+
* evaluate
|
393
|
+
* evaluate_all
|
394
|
+
* evaluate_handle
|
395
|
+
* fill
|
396
|
+
* first
|
397
|
+
* focus
|
398
|
+
* get_attribute
|
399
|
+
* hover
|
400
|
+
* inner_html
|
401
|
+
* inner_text
|
402
|
+
* input_value
|
403
|
+
* checked?
|
404
|
+
* disabled?
|
405
|
+
* editable?
|
406
|
+
* enabled?
|
407
|
+
* hidden?
|
408
|
+
* visible?
|
409
|
+
* last
|
410
|
+
* locator
|
411
|
+
* nth
|
412
|
+
* press
|
413
|
+
* screenshot
|
414
|
+
* scroll_into_view_if_needed
|
415
|
+
* select_option
|
416
|
+
* select_text
|
417
|
+
* set_input_files
|
418
|
+
* tap_point
|
419
|
+
* text_content
|
420
|
+
* type
|
421
|
+
* uncheck
|
422
|
+
|
360
423
|
## Android
|
361
424
|
|
362
425
|
* devices
|
data/lib/playwright.rb
CHANGED
@@ -17,7 +17,6 @@ require 'playwright/utils'
|
|
17
17
|
require 'playwright/api_implementation'
|
18
18
|
require 'playwright/channel'
|
19
19
|
require 'playwright/channel_owner'
|
20
|
-
require 'playwright/download'
|
21
20
|
require 'playwright/http_headers'
|
22
21
|
require 'playwright/input_files'
|
23
22
|
require 'playwright/connection'
|
@@ -59,7 +58,8 @@ module Playwright
|
|
59
58
|
# and we *must* call execution.stop on the end.
|
60
59
|
# The instance of playwright is available by calling execution.playwright
|
61
60
|
module_function def create(playwright_cli_executable_path:, &block)
|
62
|
-
|
61
|
+
transport = Transport.new(playwright_cli_executable_path: playwright_cli_executable_path)
|
62
|
+
connection = Connection.new(transport)
|
63
63
|
connection.async_run
|
64
64
|
|
65
65
|
execution =
|
@@ -82,7 +82,39 @@ module Playwright
|
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
|
-
|
86
|
-
|
85
|
+
# Connects to Playwright server, launched by `npx playwright run-server` via WebSocket transport.
|
86
|
+
#
|
87
|
+
# Playwright.connect_to_playwright_server(...) do |playwright|
|
88
|
+
# browser = playwright.chromium.launch
|
89
|
+
# ...
|
90
|
+
# end
|
91
|
+
#
|
92
|
+
# @experimental
|
93
|
+
module_function def connect_to_playwright_server(ws_endpoint, &block)
|
94
|
+
require 'playwright/web_socket_client'
|
95
|
+
require 'playwright/web_socket_transport'
|
96
|
+
|
97
|
+
transport = WebSocketTransport.new(ws_endpoint: ws_endpoint)
|
98
|
+
connection = Connection.new(transport)
|
99
|
+
connection.async_run
|
100
|
+
|
101
|
+
execution =
|
102
|
+
begin
|
103
|
+
playwright = connection.wait_for_object_with_known_name('Playwright')
|
104
|
+
Execution.new(connection, PlaywrightApi.wrap(playwright))
|
105
|
+
rescue
|
106
|
+
connection.stop
|
107
|
+
raise
|
108
|
+
end
|
109
|
+
|
110
|
+
if block
|
111
|
+
begin
|
112
|
+
block.call(execution.playwright)
|
113
|
+
ensure
|
114
|
+
execution.stop
|
115
|
+
end
|
116
|
+
else
|
117
|
+
execution
|
118
|
+
end
|
87
119
|
end
|
88
120
|
end
|
@@ -67,6 +67,11 @@ module Playwright
|
|
67
67
|
@initializer['version']
|
68
68
|
end
|
69
69
|
|
70
|
+
def new_browser_cdp_session
|
71
|
+
resp = @channel.send_message_to_server('newBrowserCDPSession')
|
72
|
+
ChannelOwners::CDPSession.from(resp)
|
73
|
+
end
|
74
|
+
|
70
75
|
def start_tracing(page: nil, categories: nil, path: nil, screenshots: nil)
|
71
76
|
params = {
|
72
77
|
page: page&.channel,
|
@@ -8,7 +8,7 @@ module Playwright
|
|
8
8
|
|
9
9
|
private def after_initialize
|
10
10
|
@pages = Set.new
|
11
|
-
@routes =
|
11
|
+
@routes = []
|
12
12
|
@bindings = {}
|
13
13
|
@timeout_settings = TimeoutSettings.new
|
14
14
|
|
@@ -98,6 +98,11 @@ module Playwright
|
|
98
98
|
page&.emit(Events::Page::Response, response)
|
99
99
|
end
|
100
100
|
|
101
|
+
def new_cdp_session(page)
|
102
|
+
resp = @channel.send_message_to_server('newCDPSession', page: page.channel)
|
103
|
+
ChannelOwners::CDPSession.from(resp)
|
104
|
+
end
|
105
|
+
|
101
106
|
def set_default_navigation_timeout(timeout)
|
102
107
|
@timeout_settings.default_navigation_timeout = timeout
|
103
108
|
@channel.send_message_to_server('setDefaultNavigationTimeoutNoReply', timeout: timeout)
|
@@ -205,8 +210,8 @@ module Playwright
|
|
205
210
|
end
|
206
211
|
|
207
212
|
def route(url, handler)
|
208
|
-
entry = RouteHandlerEntry.new(url, handler)
|
209
|
-
@routes
|
213
|
+
entry = RouteHandlerEntry.new(url, base_url, handler)
|
214
|
+
@routes.unshift(entry)
|
210
215
|
if @routes.count >= 1
|
211
216
|
@channel.send_message_to_server('setNetworkInterceptionEnabled', enabled: true)
|
212
217
|
end
|
@@ -245,7 +250,32 @@ module Playwright
|
|
245
250
|
raise unless safe_close_error?(err)
|
246
251
|
end
|
247
252
|
|
253
|
+
# REMARK: enable_debug_console is playwright-ruby-client specific method.
|
254
|
+
def enable_debug_console!
|
255
|
+
# Ruby is not supported in Playwright officially,
|
256
|
+
# and causes error:
|
257
|
+
#
|
258
|
+
# Error:
|
259
|
+
# ===============================
|
260
|
+
# Unsupported language: 'ruby'
|
261
|
+
# ===============================
|
262
|
+
#
|
263
|
+
# So, launch inspector as Python app.
|
264
|
+
# NOTE: This should be used only for Page#pause at this moment.
|
265
|
+
@channel.send_message_to_server('recorderSupplementEnable', language: :python)
|
266
|
+
@debug_console_enabled = true
|
267
|
+
end
|
268
|
+
|
269
|
+
class DebugConsoleNotEnabledError < StandardError
|
270
|
+
def initialize
|
271
|
+
super('Debug console should be enabled in advance, by calling `browser_context.enable_debug_console!`')
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
248
275
|
def pause
|
276
|
+
unless @debug_console_enabled
|
277
|
+
raise DebugConsoleNotEnabledError.new
|
278
|
+
end
|
249
279
|
@channel.send_message_to_server('pause')
|
250
280
|
end
|
251
281
|
|
@@ -270,5 +300,9 @@ module Playwright
|
|
270
300
|
private def has_record_video_option?
|
271
301
|
@options.key?(:recordVideo)
|
272
302
|
end
|
303
|
+
|
304
|
+
private def base_url
|
305
|
+
@options[:baseURL]
|
306
|
+
end
|
273
307
|
end
|
274
308
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Playwright
|
2
|
+
define_channel_owner :CDPSession do
|
3
|
+
private def after_initialize
|
4
|
+
@channel.on('event', method(:on_event))
|
5
|
+
end
|
6
|
+
|
7
|
+
private def on_event(params)
|
8
|
+
emit(params['method'], params['params'])
|
9
|
+
end
|
10
|
+
|
11
|
+
def send_message(method, params: {})
|
12
|
+
@channel.send_message_to_server('send', method: method, params: params)
|
13
|
+
end
|
14
|
+
|
15
|
+
def detach
|
16
|
+
@channel.send_message_to_server('detach')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -146,6 +146,7 @@ module Playwright
|
|
146
146
|
index: nil,
|
147
147
|
value: nil,
|
148
148
|
label: nil,
|
149
|
+
force: nil,
|
149
150
|
noWaitAfter: nil,
|
150
151
|
timeout: nil)
|
151
152
|
base_params = SelectOptionValues.new(
|
@@ -154,7 +155,7 @@ module Playwright
|
|
154
155
|
value: value,
|
155
156
|
label: label,
|
156
157
|
).as_params
|
157
|
-
params = base_params.merge({ noWaitAfter: noWaitAfter, timeout: timeout }.compact)
|
158
|
+
params = base_params.merge({ force: force, noWaitAfter: noWaitAfter, timeout: timeout }.compact)
|
158
159
|
@channel.send_message_to_server('selectOption', params)
|
159
160
|
end
|
160
161
|
|
@@ -179,9 +180,10 @@ module Playwright
|
|
179
180
|
nil
|
180
181
|
end
|
181
182
|
|
182
|
-
def fill(value, noWaitAfter: nil, timeout: nil)
|
183
|
+
def fill(value, force: nil, noWaitAfter: nil, timeout: nil)
|
183
184
|
params = {
|
184
185
|
value: value,
|
186
|
+
force: force,
|
185
187
|
noWaitAfter: noWaitAfter,
|
186
188
|
timeout: timeout,
|
187
189
|
}.compact
|
@@ -190,13 +192,18 @@ module Playwright
|
|
190
192
|
nil
|
191
193
|
end
|
192
194
|
|
193
|
-
def select_text(timeout: nil)
|
194
|
-
params = { timeout: timeout }.compact
|
195
|
+
def select_text(force: nil, timeout: nil)
|
196
|
+
params = { force: force, timeout: timeout }.compact
|
195
197
|
@channel.send_message_to_server('selectText', params)
|
196
198
|
|
197
199
|
nil
|
198
200
|
end
|
199
201
|
|
202
|
+
def input_value(timeout: nil)
|
203
|
+
params = { timeout: timeout }.compact
|
204
|
+
@channel.send_message_to_server('inputValue', params)
|
205
|
+
end
|
206
|
+
|
200
207
|
def set_input_files(files, noWaitAfter: nil, timeout: nil)
|
201
208
|
file_payloads = InputFiles.new(files).as_params
|
202
209
|
params = { files: file_payloads, noWaitAfter: noWaitAfter, timeout: timeout }.compact
|
@@ -71,7 +71,7 @@ module Playwright
|
|
71
71
|
|
72
72
|
predicate =
|
73
73
|
if url
|
74
|
-
matcher = UrlMatcher.new(url)
|
74
|
+
matcher = UrlMatcher.new(url, base_url: @page.context.send(:base_url))
|
75
75
|
->(event) { event['error'] || matcher.match?(event['url']) }
|
76
76
|
else
|
77
77
|
->(_) { true }
|
@@ -99,7 +99,7 @@ module Playwright
|
|
99
99
|
end
|
100
100
|
|
101
101
|
def wait_for_url(url, timeout: nil, waitUntil: nil)
|
102
|
-
matcher = UrlMatcher.new(url)
|
102
|
+
matcher = UrlMatcher.new(url, base_url: @page.context.send(:base_url))
|
103
103
|
if matcher.match?(@url)
|
104
104
|
wait_for_load_state(state: waitUntil, timeout: timeout)
|
105
105
|
else
|
@@ -139,8 +139,12 @@ module Playwright
|
|
139
139
|
JavaScript::Expression.new(pageFunction, arg).evaluate_handle(@channel)
|
140
140
|
end
|
141
141
|
|
142
|
-
def query_selector(selector)
|
143
|
-
|
142
|
+
def query_selector(selector, strict: nil)
|
143
|
+
params = {
|
144
|
+
selector: selector,
|
145
|
+
strict: strict,
|
146
|
+
}.compact
|
147
|
+
resp = @channel.send_message_to_server('querySelector', params)
|
144
148
|
ChannelOwners::ElementHandle.from_nullable(resp)
|
145
149
|
end
|
146
150
|
|
@@ -150,48 +154,53 @@ module Playwright
|
|
150
154
|
end
|
151
155
|
end
|
152
156
|
|
153
|
-
def wait_for_selector(selector, state: nil, timeout: nil)
|
154
|
-
params = { selector: selector, state: state, timeout: timeout }.compact
|
157
|
+
def wait_for_selector(selector, state: nil, strict: nil, timeout: nil)
|
158
|
+
params = { selector: selector, state: state, strict: strict, timeout: timeout }.compact
|
155
159
|
resp = @channel.send_message_to_server('waitForSelector', params)
|
156
160
|
|
157
161
|
ChannelOwners::ElementHandle.from_nullable(resp)
|
158
162
|
end
|
159
163
|
|
160
|
-
def checked?(selector, timeout: nil)
|
161
|
-
params = { selector: selector, timeout: timeout }.compact
|
164
|
+
def checked?(selector, strict: nil, timeout: nil)
|
165
|
+
params = { selector: selector, strict: strict, timeout: timeout }.compact
|
162
166
|
@channel.send_message_to_server('isChecked', params)
|
163
167
|
end
|
164
168
|
|
165
|
-
def disabled?(selector, timeout: nil)
|
166
|
-
params = { selector: selector, timeout: timeout }.compact
|
169
|
+
def disabled?(selector, strict: nil, timeout: nil)
|
170
|
+
params = { selector: selector, strict: strict, timeout: timeout }.compact
|
167
171
|
@channel.send_message_to_server('isDisabled', params)
|
168
172
|
end
|
169
173
|
|
170
|
-
def editable?(selector, timeout: nil)
|
171
|
-
params = { selector: selector, timeout: timeout }.compact
|
174
|
+
def editable?(selector, strict: nil, timeout: nil)
|
175
|
+
params = { selector: selector, strict: strict, timeout: timeout }.compact
|
172
176
|
@channel.send_message_to_server('isEditable', params)
|
173
177
|
end
|
174
178
|
|
175
|
-
def enabled?(selector, timeout: nil)
|
176
|
-
params = { selector: selector, timeout: timeout }.compact
|
179
|
+
def enabled?(selector, strict: nil, timeout: nil)
|
180
|
+
params = { selector: selector, strict: strict, timeout: timeout }.compact
|
177
181
|
@channel.send_message_to_server('isEnabled', params)
|
178
182
|
end
|
179
183
|
|
180
|
-
def hidden?(selector, timeout: nil)
|
181
|
-
params = { selector: selector, timeout: timeout }.compact
|
184
|
+
def hidden?(selector, strict: nil, timeout: nil)
|
185
|
+
params = { selector: selector, strict: strict, timeout: timeout }.compact
|
182
186
|
@channel.send_message_to_server('isHidden', params)
|
183
187
|
end
|
184
188
|
|
185
|
-
def visible?(selector, timeout: nil)
|
186
|
-
params = { selector: selector, timeout: timeout }.compact
|
189
|
+
def visible?(selector, strict: nil, timeout: nil)
|
190
|
+
params = { selector: selector, strict: strict, timeout: timeout }.compact
|
187
191
|
@channel.send_message_to_server('isVisible', params)
|
188
192
|
end
|
189
193
|
|
190
|
-
def
|
194
|
+
def locator(selector)
|
195
|
+
LocatorImpl.new(frame: self, timeout_settings: @page.send(:timeout_settings), selector: selector)
|
196
|
+
end
|
197
|
+
|
198
|
+
def dispatch_event(selector, type, eventInit: nil, strict: nil, timeout: nil)
|
191
199
|
params = {
|
192
200
|
selector: selector,
|
193
201
|
type: type,
|
194
202
|
eventInit: JavaScript::ValueSerializer.new(eventInit).serialize,
|
203
|
+
strict: strict,
|
195
204
|
timeout: timeout,
|
196
205
|
}.compact
|
197
206
|
@channel.send_message_to_server('dispatchEvent', params)
|
@@ -199,8 +208,8 @@ module Playwright
|
|
199
208
|
nil
|
200
209
|
end
|
201
210
|
|
202
|
-
def eval_on_selector(selector, pageFunction, arg: nil)
|
203
|
-
JavaScript::Expression.new(pageFunction, arg).eval_on_selector(@channel, selector)
|
211
|
+
def eval_on_selector(selector, pageFunction, arg: nil, strict: nil)
|
212
|
+
JavaScript::Expression.new(pageFunction, arg).eval_on_selector(@channel, selector, strict: strict)
|
204
213
|
end
|
205
214
|
|
206
215
|
def eval_on_selector_all(selector, pageFunction, arg: nil)
|
@@ -273,6 +282,7 @@ module Playwright
|
|
273
282
|
modifiers: nil,
|
274
283
|
noWaitAfter: nil,
|
275
284
|
position: nil,
|
285
|
+
strict: nil,
|
276
286
|
timeout: nil,
|
277
287
|
trial: nil)
|
278
288
|
|
@@ -285,6 +295,7 @@ module Playwright
|
|
285
295
|
modifiers: modifiers,
|
286
296
|
noWaitAfter: noWaitAfter,
|
287
297
|
position: position,
|
298
|
+
strict: strict,
|
288
299
|
timeout: timeout,
|
289
300
|
trial: trial,
|
290
301
|
}.compact
|
@@ -293,6 +304,28 @@ module Playwright
|
|
293
304
|
nil
|
294
305
|
end
|
295
306
|
|
307
|
+
def drag_and_drop(
|
308
|
+
source,
|
309
|
+
target,
|
310
|
+
force: nil,
|
311
|
+
noWaitAfter: nil,
|
312
|
+
strict: nil,
|
313
|
+
timeout: nil,
|
314
|
+
trial: nil)
|
315
|
+
params = {
|
316
|
+
source: source,
|
317
|
+
target: target,
|
318
|
+
force: force,
|
319
|
+
noWaitAfter: noWaitAfter,
|
320
|
+
strict: strict,
|
321
|
+
timeout: timeout,
|
322
|
+
trial: trial,
|
323
|
+
}.compact
|
324
|
+
@channel.send_message_to_server('dragAndDrop', params)
|
325
|
+
|
326
|
+
nil
|
327
|
+
end
|
328
|
+
|
296
329
|
def dblclick(
|
297
330
|
selector,
|
298
331
|
button: nil,
|
@@ -301,6 +334,7 @@ module Playwright
|
|
301
334
|
modifiers: nil,
|
302
335
|
noWaitAfter: nil,
|
303
336
|
position: nil,
|
337
|
+
strict: nil,
|
304
338
|
timeout: nil,
|
305
339
|
trial: nil)
|
306
340
|
|
@@ -312,6 +346,7 @@ module Playwright
|
|
312
346
|
modifiers: modifiers,
|
313
347
|
noWaitAfter: noWaitAfter,
|
314
348
|
position: position,
|
349
|
+
strict: strict,
|
315
350
|
timeout: timeout,
|
316
351
|
trial: trial,
|
317
352
|
}.compact
|
@@ -326,6 +361,7 @@ module Playwright
|
|
326
361
|
modifiers: nil,
|
327
362
|
noWaitAfter: nil,
|
328
363
|
position: nil,
|
364
|
+
strict: nil,
|
329
365
|
timeout: nil,
|
330
366
|
trial: nil)
|
331
367
|
params = {
|
@@ -334,6 +370,7 @@ module Playwright
|
|
334
370
|
modifiers: modifiers,
|
335
371
|
noWaitAfter: noWaitAfter,
|
336
372
|
position: position,
|
373
|
+
strict: strict,
|
337
374
|
timeout: timeout,
|
338
375
|
trial: trial,
|
339
376
|
}.compact
|
@@ -342,11 +379,19 @@ module Playwright
|
|
342
379
|
nil
|
343
380
|
end
|
344
381
|
|
345
|
-
def fill(
|
382
|
+
def fill(
|
383
|
+
selector,
|
384
|
+
value,
|
385
|
+
force: nil,
|
386
|
+
noWaitAfter: nil,
|
387
|
+
strict: nil,
|
388
|
+
timeout: nil)
|
346
389
|
params = {
|
347
390
|
selector: selector,
|
348
391
|
value: value,
|
392
|
+
force: force,
|
349
393
|
noWaitAfter: noWaitAfter,
|
394
|
+
strict: strict,
|
350
395
|
timeout: timeout,
|
351
396
|
}.compact
|
352
397
|
@channel.send_message_to_server('fill', params)
|
@@ -354,31 +399,32 @@ module Playwright
|
|
354
399
|
nil
|
355
400
|
end
|
356
401
|
|
357
|
-
def focus(selector, timeout: nil)
|
358
|
-
params = { selector: selector, timeout: timeout }.compact
|
402
|
+
def focus(selector, strict: nil, timeout: nil)
|
403
|
+
params = { selector: selector, strict: strict, timeout: timeout }.compact
|
359
404
|
@channel.send_message_to_server('focus', params)
|
360
405
|
nil
|
361
406
|
end
|
362
407
|
|
363
|
-
def text_content(selector, timeout: nil)
|
364
|
-
params = { selector: selector, timeout: timeout }.compact
|
408
|
+
def text_content(selector, strict: nil, timeout: nil)
|
409
|
+
params = { selector: selector, strict: strict, timeout: timeout }.compact
|
365
410
|
@channel.send_message_to_server('textContent', params)
|
366
411
|
end
|
367
412
|
|
368
|
-
def inner_text(selector, timeout: nil)
|
369
|
-
params = { selector: selector, timeout: timeout }.compact
|
413
|
+
def inner_text(selector, strict: nil, timeout: nil)
|
414
|
+
params = { selector: selector, strict: strict, timeout: timeout }.compact
|
370
415
|
@channel.send_message_to_server('innerText', params)
|
371
416
|
end
|
372
417
|
|
373
|
-
def inner_html(selector, timeout: nil)
|
374
|
-
params = { selector: selector, timeout: timeout }.compact
|
418
|
+
def inner_html(selector, strict: nil, timeout: nil)
|
419
|
+
params = { selector: selector, strict: strict, timeout: timeout }.compact
|
375
420
|
@channel.send_message_to_server('innerHTML', params)
|
376
421
|
end
|
377
422
|
|
378
|
-
def get_attribute(selector, name, timeout: nil)
|
423
|
+
def get_attribute(selector, name, strict: nil, timeout: nil)
|
379
424
|
params = {
|
380
425
|
selector: selector,
|
381
426
|
name: name,
|
427
|
+
strict: strict,
|
382
428
|
timeout: timeout,
|
383
429
|
}.compact
|
384
430
|
@channel.send_message_to_server('getAttribute', params)
|
@@ -389,6 +435,7 @@ module Playwright
|
|
389
435
|
force: nil,
|
390
436
|
modifiers: nil,
|
391
437
|
position: nil,
|
438
|
+
strict: nil,
|
392
439
|
timeout: nil,
|
393
440
|
trial: nil)
|
394
441
|
params = {
|
@@ -396,6 +443,7 @@ module Playwright
|
|
396
443
|
force: force,
|
397
444
|
modifiers: modifiers,
|
398
445
|
position: position,
|
446
|
+
strict: strict,
|
399
447
|
timeout: timeout,
|
400
448
|
trial: trial,
|
401
449
|
}.compact
|
@@ -410,7 +458,9 @@ module Playwright
|
|
410
458
|
index: nil,
|
411
459
|
value: nil,
|
412
460
|
label: nil,
|
461
|
+
force: nil,
|
413
462
|
noWaitAfter: nil,
|
463
|
+
strict: nil,
|
414
464
|
timeout: nil)
|
415
465
|
base_params = SelectOptionValues.new(
|
416
466
|
element: element,
|
@@ -418,13 +468,24 @@ module Playwright
|
|
418
468
|
value: value,
|
419
469
|
label: label,
|
420
470
|
).as_params
|
421
|
-
params = base_params.merge({ selector: selector, noWaitAfter: noWaitAfter, timeout: timeout }.compact)
|
471
|
+
params = base_params.merge({ selector: selector, force: force, noWaitAfter: noWaitAfter, strict: strict, timeout: timeout }.compact)
|
422
472
|
@channel.send_message_to_server('selectOption', params)
|
423
473
|
end
|
424
474
|
|
425
|
-
def
|
475
|
+
def input_value(selector, strict: nil, timeout: nil)
|
476
|
+
params = { selector: selector, strict: strict, timeout: timeout }.compact
|
477
|
+
@channel.send_message_to_server('inputValue', params)
|
478
|
+
end
|
479
|
+
|
480
|
+
def set_input_files(selector, files, noWaitAfter: nil, strict: nil, timeout: nil)
|
426
481
|
file_payloads = InputFiles.new(files).as_params
|
427
|
-
params = {
|
482
|
+
params = {
|
483
|
+
files: file_payloads,
|
484
|
+
selector: selector,
|
485
|
+
noWaitAfter: noWaitAfter,
|
486
|
+
strict: strict,
|
487
|
+
timeout: timeout,
|
488
|
+
}.compact
|
428
489
|
@channel.send_message_to_server('setInputFiles', params)
|
429
490
|
|
430
491
|
nil
|
@@ -435,6 +496,7 @@ module Playwright
|
|
435
496
|
text,
|
436
497
|
delay: nil,
|
437
498
|
noWaitAfter: nil,
|
499
|
+
strict: nil,
|
438
500
|
timeout: nil)
|
439
501
|
|
440
502
|
params = {
|
@@ -442,6 +504,7 @@ module Playwright
|
|
442
504
|
text: text,
|
443
505
|
delay: delay,
|
444
506
|
noWaitAfter: noWaitAfter,
|
507
|
+
strict: strict,
|
445
508
|
timeout: timeout,
|
446
509
|
}.compact
|
447
510
|
@channel.send_message_to_server('type', params)
|
@@ -454,6 +517,7 @@ module Playwright
|
|
454
517
|
key,
|
455
518
|
delay: nil,
|
456
519
|
noWaitAfter: nil,
|
520
|
+
strict: nil,
|
457
521
|
timeout: nil)
|
458
522
|
|
459
523
|
params = {
|
@@ -461,6 +525,7 @@ module Playwright
|
|
461
525
|
key: key,
|
462
526
|
delay: delay,
|
463
527
|
noWaitAfter: noWaitAfter,
|
528
|
+
strict: strict,
|
464
529
|
timeout: timeout,
|
465
530
|
}.compact
|
466
531
|
@channel.send_message_to_server('press', params)
|
@@ -473,6 +538,7 @@ module Playwright
|
|
473
538
|
force: nil,
|
474
539
|
noWaitAfter: nil,
|
475
540
|
position: nil,
|
541
|
+
strict: nil,
|
476
542
|
timeout: nil,
|
477
543
|
trial: nil)
|
478
544
|
|
@@ -481,6 +547,7 @@ module Playwright
|
|
481
547
|
force: force,
|
482
548
|
noWaitAfter: noWaitAfter,
|
483
549
|
position: position,
|
550
|
+
strict: strict,
|
484
551
|
timeout: timeout,
|
485
552
|
trial: trial,
|
486
553
|
}.compact
|
@@ -494,6 +561,7 @@ module Playwright
|
|
494
561
|
force: nil,
|
495
562
|
noWaitAfter: nil,
|
496
563
|
position: nil,
|
564
|
+
strict: nil,
|
497
565
|
timeout: nil,
|
498
566
|
trial: nil)
|
499
567
|
|
@@ -502,6 +570,7 @@ module Playwright
|
|
502
570
|
force: force,
|
503
571
|
noWaitAfter: noWaitAfter,
|
504
572
|
position: position,
|
573
|
+
strict: strict,
|
505
574
|
timeout: timeout,
|
506
575
|
trial: trial,
|
507
576
|
}.compact
|