playwright-ruby-client 1.42.0 → 1.43.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 +2 -2
- data/documentation/docs/api/browser_context.md +22 -10
- data/documentation/docs/api/frame_locator.md +26 -4
- data/documentation/docs/api/locator.md +22 -0
- data/documentation/docs/api/page.md +10 -8
- data/documentation/docs/article/guides/download_playwright_driver.md +7 -10
- data/documentation/docs/article/guides/playwright_on_alpine_linux.md +3 -1
- data/documentation/docs/include/api_coverage.md +2 -0
- data/documentation/docusaurus.config.js +6 -0
- data/documentation/package.json +2 -2
- data/documentation/yarn.lock +1732 -1815
- data/lib/playwright/channel_owners/browser_context.rb +31 -2
- data/lib/playwright/channel_owners/js_handle.rb +4 -0
- data/lib/playwright/channel_owners/request.rb +1 -1
- data/lib/playwright/connection.rb +3 -0
- data/lib/playwright/frame_locator_impl.rb +8 -0
- data/lib/playwright/locator_impl.rb +8 -0
- data/lib/playwright/transport.rb +6 -0
- data/lib/playwright/version.rb +2 -2
- data/lib/playwright/waiter.rb +4 -6
- data/lib/playwright/web_socket_transport.rb +8 -0
- data/lib/playwright.rb +1 -1
- data/lib/playwright_api/android.rb +6 -6
- data/lib/playwright_api/android_device.rb +6 -6
- data/lib/playwright_api/api_request_context.rb +6 -6
- data/lib/playwright_api/browser.rb +6 -6
- data/lib/playwright_api/browser_context.rb +24 -14
- data/lib/playwright_api/browser_type.rb +6 -6
- data/lib/playwright_api/cdp_session.rb +6 -6
- data/lib/playwright_api/dialog.rb +6 -6
- data/lib/playwright_api/element_handle.rb +6 -6
- data/lib/playwright_api/frame.rb +6 -6
- data/lib/playwright_api/frame_locator.rb +23 -4
- data/lib/playwright_api/js_handle.rb +6 -6
- data/lib/playwright_api/locator.rb +19 -0
- data/lib/playwright_api/page.rb +26 -22
- data/lib/playwright_api/playwright.rb +6 -6
- data/lib/playwright_api/request.rb +6 -6
- data/lib/playwright_api/response.rb +6 -6
- data/lib/playwright_api/route.rb +6 -6
- data/lib/playwright_api/selectors.rb +6 -6
- data/lib/playwright_api/tracing.rb +6 -6
- data/lib/playwright_api/web_socket.rb +6 -6
- data/lib/playwright_api/worker.rb +6 -6
- data/sig/playwright.rbs +3 -1
- metadata +3 -3
@@ -267,8 +267,37 @@ module Playwright
|
|
267
267
|
@channel.send_message_to_server('addCookies', cookies: cookies)
|
268
268
|
end
|
269
269
|
|
270
|
-
def clear_cookies
|
271
|
-
|
270
|
+
def clear_cookies(domain: nil, name: nil, path: nil)
|
271
|
+
params = {}
|
272
|
+
|
273
|
+
case name
|
274
|
+
when String
|
275
|
+
params[:name] = name
|
276
|
+
when Regexp
|
277
|
+
regex = JavaScript::Regex.new(name)
|
278
|
+
params[:nameRegexSource] = regex.source
|
279
|
+
params[:nameRegexFlags] = regex.flag
|
280
|
+
end
|
281
|
+
|
282
|
+
case domain
|
283
|
+
when String
|
284
|
+
params[:domain] = domain
|
285
|
+
when Regexp
|
286
|
+
regex = JavaScript::Regex.new(domain)
|
287
|
+
params[:domainRegexSource] = regex.source
|
288
|
+
params[:domainRegexFlags] = regex.flag
|
289
|
+
end
|
290
|
+
|
291
|
+
case path
|
292
|
+
when String
|
293
|
+
params[:path] = path
|
294
|
+
when Regexp
|
295
|
+
regex = JavaScript::Regex.new(path)
|
296
|
+
params[:pathRegexSource] = regex.source
|
297
|
+
params[:pathRegexFlags] = regex.flag
|
298
|
+
end
|
299
|
+
|
300
|
+
@channel.send_message_to_server('clearCookies', params)
|
272
301
|
end
|
273
302
|
|
274
303
|
def grant_permissions(permissions, origin: nil)
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module Playwright
|
2
2
|
define_channel_owner :JSHandle do
|
3
|
+
include Utils::Errors::TargetClosedErrorMethods
|
4
|
+
|
3
5
|
private def after_initialize
|
4
6
|
@preview = @initializer['preview']
|
5
7
|
@channel.on('previewUpdated', method(:on_preview_updated))
|
@@ -37,6 +39,8 @@ module Playwright
|
|
37
39
|
|
38
40
|
def dispose
|
39
41
|
@channel.send_message_to_server('dispose')
|
42
|
+
rescue => err
|
43
|
+
raise if !target_closed_error?(err)
|
40
44
|
end
|
41
45
|
|
42
46
|
def json_value
|
@@ -62,7 +62,7 @@ module Playwright
|
|
62
62
|
content_type = headers['content-type']
|
63
63
|
return unless content_type
|
64
64
|
|
65
|
-
if content_type
|
65
|
+
if content_type.include?("application/x-www-form-urlencoded")
|
66
66
|
URI.decode_www_form(data).to_h
|
67
67
|
else
|
68
68
|
JSON.parse(data)
|
@@ -26,6 +26,14 @@ module Playwright
|
|
26
26
|
hasText: hasText)
|
27
27
|
end
|
28
28
|
|
29
|
+
def owner
|
30
|
+
LocatorImpl.new(
|
31
|
+
frame: @frame,
|
32
|
+
timeout_settings: @timeout_settings,
|
33
|
+
selector: @frame_selector,
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
29
37
|
def frame_locator(selector)
|
30
38
|
FrameLocatorImpl.new(
|
31
39
|
frame: @frame,
|
@@ -233,6 +233,14 @@ module Playwright
|
|
233
233
|
@frame.query_selector_all(@selector)
|
234
234
|
end
|
235
235
|
|
236
|
+
def content_frame
|
237
|
+
FrameLocatorImpl.new(
|
238
|
+
frame: @frame,
|
239
|
+
timeout_settings: @timeout_settings,
|
240
|
+
frame_selector: @selector,
|
241
|
+
)
|
242
|
+
end
|
243
|
+
|
236
244
|
def filter(has: nil, hasNot: nil, hasNotText: nil, hasText: nil)
|
237
245
|
LocatorImpl.new(
|
238
246
|
frame: @frame,
|
data/lib/playwright/transport.rb
CHANGED
@@ -18,6 +18,10 @@ module Playwright
|
|
18
18
|
@on_message = block
|
19
19
|
end
|
20
20
|
|
21
|
+
def on_driver_closed(&block)
|
22
|
+
@on_driver_closed = block
|
23
|
+
end
|
24
|
+
|
21
25
|
def on_driver_crashed(&block)
|
22
26
|
@on_driver_crashed = block
|
23
27
|
end
|
@@ -83,6 +87,7 @@ module Playwright
|
|
83
87
|
end
|
84
88
|
rescue IOError
|
85
89
|
# disconnected by remote.
|
90
|
+
@on_driver_closed&.call
|
86
91
|
end
|
87
92
|
|
88
93
|
def handle_stderr
|
@@ -106,6 +111,7 @@ module Playwright
|
|
106
111
|
end
|
107
112
|
rescue IOError
|
108
113
|
# disconnected by remote.
|
114
|
+
@on_driver_closed&.call
|
109
115
|
end
|
110
116
|
|
111
117
|
def debug_send_message(message)
|
data/lib/playwright/version.rb
CHANGED
data/lib/playwright/waiter.rb
CHANGED
@@ -81,19 +81,17 @@ module Playwright
|
|
81
81
|
|
82
82
|
private def fulfill(result)
|
83
83
|
cleanup
|
84
|
-
|
85
|
-
|
86
|
-
end
|
84
|
+
return if @result.resolved?
|
85
|
+
@result.fulfill(result)
|
87
86
|
wait_for_event_info_after
|
88
87
|
end
|
89
88
|
|
90
89
|
private def reject(error)
|
91
90
|
cleanup
|
91
|
+
return if @result.resolved?
|
92
92
|
klass = error.is_a?(TimeoutError) ? TimeoutError : Error
|
93
93
|
ex = klass.new(message: "#{error.message}#{format_log_recording(@logs)}")
|
94
|
-
|
95
|
-
@result.reject(ex)
|
96
|
-
end
|
94
|
+
@result.reject(ex)
|
97
95
|
wait_for_event_info_after(error: ex)
|
98
96
|
end
|
99
97
|
|
@@ -15,6 +15,10 @@ module Playwright
|
|
15
15
|
@on_message = block
|
16
16
|
end
|
17
17
|
|
18
|
+
def on_driver_closed(&block)
|
19
|
+
@on_driver_closed = block
|
20
|
+
end
|
21
|
+
|
18
22
|
def on_driver_crashed(&block)
|
19
23
|
@on_driver_crashed = block
|
20
24
|
end
|
@@ -76,6 +80,10 @@ module Playwright
|
|
76
80
|
|
77
81
|
ws.start
|
78
82
|
@ws = promise.value!
|
83
|
+
@ws.on_close do |reason, code|
|
84
|
+
puts "[WebSocketTransport] closed with code: #{code}, reason: #{reason}"
|
85
|
+
@on_driver_closed&.call(reason, code)
|
86
|
+
end
|
79
87
|
@ws.on_error do |error|
|
80
88
|
puts "[WebSocketTransport] error: #{error}"
|
81
89
|
@on_driver_crashed&.call
|
data/lib/playwright.rb
CHANGED
@@ -181,7 +181,7 @@ module Playwright
|
|
181
181
|
|
182
182
|
# Connects to Playwright server, launched by `npx playwright launch-server chromium` or `playwright.chromium.launchServer()`
|
183
183
|
#
|
184
|
-
# Playwright.
|
184
|
+
# Playwright.connect_to_android_server('ws://....') do |browser|
|
185
185
|
# page = browser.new_page
|
186
186
|
# ...
|
187
187
|
# end
|
@@ -40,20 +40,20 @@ module Playwright
|
|
40
40
|
|
41
41
|
# -- inherited from EventEmitter --
|
42
42
|
# @nodoc
|
43
|
-
def
|
44
|
-
event_emitter_proxy.
|
43
|
+
def on(event, callback)
|
44
|
+
event_emitter_proxy.on(event, callback)
|
45
45
|
end
|
46
46
|
|
47
47
|
# -- inherited from EventEmitter --
|
48
48
|
# @nodoc
|
49
|
-
def
|
50
|
-
event_emitter_proxy.
|
49
|
+
def off(event, callback)
|
50
|
+
event_emitter_proxy.off(event, callback)
|
51
51
|
end
|
52
52
|
|
53
53
|
# -- inherited from EventEmitter --
|
54
54
|
# @nodoc
|
55
|
-
def
|
56
|
-
event_emitter_proxy.
|
55
|
+
def once(event, callback)
|
56
|
+
event_emitter_proxy.once(event, callback)
|
57
57
|
end
|
58
58
|
|
59
59
|
private def event_emitter_proxy
|
@@ -205,20 +205,20 @@ module Playwright
|
|
205
205
|
|
206
206
|
# -- inherited from EventEmitter --
|
207
207
|
# @nodoc
|
208
|
-
def
|
209
|
-
event_emitter_proxy.
|
208
|
+
def on(event, callback)
|
209
|
+
event_emitter_proxy.on(event, callback)
|
210
210
|
end
|
211
211
|
|
212
212
|
# -- inherited from EventEmitter --
|
213
213
|
# @nodoc
|
214
|
-
def
|
215
|
-
event_emitter_proxy.
|
214
|
+
def off(event, callback)
|
215
|
+
event_emitter_proxy.off(event, callback)
|
216
216
|
end
|
217
217
|
|
218
218
|
# -- inherited from EventEmitter --
|
219
219
|
# @nodoc
|
220
|
-
def
|
221
|
-
event_emitter_proxy.
|
220
|
+
def once(event, callback)
|
221
|
+
event_emitter_proxy.once(event, callback)
|
222
222
|
end
|
223
223
|
|
224
224
|
private def event_emitter_proxy
|
@@ -280,20 +280,20 @@ module Playwright
|
|
280
280
|
|
281
281
|
# -- inherited from EventEmitter --
|
282
282
|
# @nodoc
|
283
|
-
def
|
284
|
-
event_emitter_proxy.
|
283
|
+
def on(event, callback)
|
284
|
+
event_emitter_proxy.on(event, callback)
|
285
285
|
end
|
286
286
|
|
287
287
|
# -- inherited from EventEmitter --
|
288
288
|
# @nodoc
|
289
|
-
def
|
290
|
-
event_emitter_proxy.
|
289
|
+
def off(event, callback)
|
290
|
+
event_emitter_proxy.off(event, callback)
|
291
291
|
end
|
292
292
|
|
293
293
|
# -- inherited from EventEmitter --
|
294
294
|
# @nodoc
|
295
|
-
def
|
296
|
-
event_emitter_proxy.
|
295
|
+
def once(event, callback)
|
296
|
+
event_emitter_proxy.once(event, callback)
|
297
297
|
end
|
298
298
|
|
299
299
|
private def event_emitter_proxy
|
@@ -202,20 +202,20 @@ module Playwright
|
|
202
202
|
|
203
203
|
# -- inherited from EventEmitter --
|
204
204
|
# @nodoc
|
205
|
-
def
|
206
|
-
event_emitter_proxy.
|
205
|
+
def on(event, callback)
|
206
|
+
event_emitter_proxy.on(event, callback)
|
207
207
|
end
|
208
208
|
|
209
209
|
# -- inherited from EventEmitter --
|
210
210
|
# @nodoc
|
211
|
-
def
|
212
|
-
event_emitter_proxy.
|
211
|
+
def off(event, callback)
|
212
|
+
event_emitter_proxy.off(event, callback)
|
213
213
|
end
|
214
214
|
|
215
215
|
# -- inherited from EventEmitter --
|
216
216
|
# @nodoc
|
217
|
-
def
|
218
|
-
event_emitter_proxy.
|
217
|
+
def once(event, callback)
|
218
|
+
event_emitter_proxy.once(event, callback)
|
219
219
|
end
|
220
220
|
|
221
221
|
private def event_emitter_proxy
|
@@ -81,9 +81,19 @@ module Playwright
|
|
81
81
|
end
|
82
82
|
|
83
83
|
#
|
84
|
-
#
|
85
|
-
|
86
|
-
|
84
|
+
# Removes cookies from context. Accepts optional filter.
|
85
|
+
#
|
86
|
+
# **Usage**
|
87
|
+
#
|
88
|
+
# ```python sync
|
89
|
+
# context.clear_cookies()
|
90
|
+
# context.clear_cookies(name="session-id")
|
91
|
+
# context.clear_cookies(domain="my-origin.com")
|
92
|
+
# context.clear_cookies(path="/api/v1")
|
93
|
+
# context.clear_cookies(name="session-id", domain="my-origin.com")
|
94
|
+
# ```
|
95
|
+
def clear_cookies(domain: nil, name: nil, path: nil)
|
96
|
+
wrap_impl(@impl.clear_cookies(domain: unwrap_impl(domain), name: unwrap_impl(name), path: unwrap_impl(path)))
|
87
97
|
end
|
88
98
|
|
89
99
|
#
|
@@ -438,6 +448,11 @@ module Playwright
|
|
438
448
|
raise NotImplementedError.new('wait_for_event is not implemented yet.')
|
439
449
|
end
|
440
450
|
|
451
|
+
# @nodoc
|
452
|
+
def owner_page=(req)
|
453
|
+
wrap_impl(@impl.owner_page=(unwrap_impl(req)))
|
454
|
+
end
|
455
|
+
|
441
456
|
# @nodoc
|
442
457
|
def pause
|
443
458
|
wrap_impl(@impl.pause)
|
@@ -448,11 +463,6 @@ module Playwright
|
|
448
463
|
wrap_impl(@impl.options=(unwrap_impl(req)))
|
449
464
|
end
|
450
465
|
|
451
|
-
# @nodoc
|
452
|
-
def owner_page=(req)
|
453
|
-
wrap_impl(@impl.owner_page=(unwrap_impl(req)))
|
454
|
-
end
|
455
|
-
|
456
466
|
# @nodoc
|
457
467
|
def enable_debug_console!
|
458
468
|
wrap_impl(@impl.enable_debug_console!)
|
@@ -465,20 +475,20 @@ module Playwright
|
|
465
475
|
|
466
476
|
# -- inherited from EventEmitter --
|
467
477
|
# @nodoc
|
468
|
-
def
|
469
|
-
event_emitter_proxy.
|
478
|
+
def on(event, callback)
|
479
|
+
event_emitter_proxy.on(event, callback)
|
470
480
|
end
|
471
481
|
|
472
482
|
# -- inherited from EventEmitter --
|
473
483
|
# @nodoc
|
474
|
-
def
|
475
|
-
event_emitter_proxy.
|
484
|
+
def off(event, callback)
|
485
|
+
event_emitter_proxy.off(event, callback)
|
476
486
|
end
|
477
487
|
|
478
488
|
# -- inherited from EventEmitter --
|
479
489
|
# @nodoc
|
480
|
-
def
|
481
|
-
event_emitter_proxy.
|
490
|
+
def once(event, callback)
|
491
|
+
event_emitter_proxy.once(event, callback)
|
482
492
|
end
|
483
493
|
|
484
494
|
private def event_emitter_proxy
|
@@ -176,20 +176,20 @@ module Playwright
|
|
176
176
|
|
177
177
|
# -- inherited from EventEmitter --
|
178
178
|
# @nodoc
|
179
|
-
def
|
180
|
-
event_emitter_proxy.
|
179
|
+
def on(event, callback)
|
180
|
+
event_emitter_proxy.on(event, callback)
|
181
181
|
end
|
182
182
|
|
183
183
|
# -- inherited from EventEmitter --
|
184
184
|
# @nodoc
|
185
|
-
def
|
186
|
-
event_emitter_proxy.
|
185
|
+
def off(event, callback)
|
186
|
+
event_emitter_proxy.off(event, callback)
|
187
187
|
end
|
188
188
|
|
189
189
|
# -- inherited from EventEmitter --
|
190
190
|
# @nodoc
|
191
|
-
def
|
192
|
-
event_emitter_proxy.
|
191
|
+
def once(event, callback)
|
192
|
+
event_emitter_proxy.once(event, callback)
|
193
193
|
end
|
194
194
|
|
195
195
|
private def event_emitter_proxy
|
@@ -34,20 +34,20 @@ module Playwright
|
|
34
34
|
|
35
35
|
# -- inherited from EventEmitter --
|
36
36
|
# @nodoc
|
37
|
-
def
|
38
|
-
event_emitter_proxy.
|
37
|
+
def on(event, callback)
|
38
|
+
event_emitter_proxy.on(event, callback)
|
39
39
|
end
|
40
40
|
|
41
41
|
# -- inherited from EventEmitter --
|
42
42
|
# @nodoc
|
43
|
-
def
|
44
|
-
event_emitter_proxy.
|
43
|
+
def off(event, callback)
|
44
|
+
event_emitter_proxy.off(event, callback)
|
45
45
|
end
|
46
46
|
|
47
47
|
# -- inherited from EventEmitter --
|
48
48
|
# @nodoc
|
49
|
-
def
|
50
|
-
event_emitter_proxy.
|
49
|
+
def once(event, callback)
|
50
|
+
event_emitter_proxy.once(event, callback)
|
51
51
|
end
|
52
52
|
|
53
53
|
private def event_emitter_proxy
|
@@ -70,20 +70,20 @@ module Playwright
|
|
70
70
|
|
71
71
|
# -- inherited from EventEmitter --
|
72
72
|
# @nodoc
|
73
|
-
def
|
74
|
-
event_emitter_proxy.
|
73
|
+
def on(event, callback)
|
74
|
+
event_emitter_proxy.on(event, callback)
|
75
75
|
end
|
76
76
|
|
77
77
|
# -- inherited from EventEmitter --
|
78
78
|
# @nodoc
|
79
|
-
def
|
80
|
-
event_emitter_proxy.
|
79
|
+
def off(event, callback)
|
80
|
+
event_emitter_proxy.off(event, callback)
|
81
81
|
end
|
82
82
|
|
83
83
|
# -- inherited from EventEmitter --
|
84
84
|
# @nodoc
|
85
|
-
def
|
86
|
-
event_emitter_proxy.
|
85
|
+
def once(event, callback)
|
86
|
+
event_emitter_proxy.once(event, callback)
|
87
87
|
end
|
88
88
|
|
89
89
|
private def event_emitter_proxy
|
@@ -575,20 +575,20 @@ module Playwright
|
|
575
575
|
|
576
576
|
# -- inherited from EventEmitter --
|
577
577
|
# @nodoc
|
578
|
-
def
|
579
|
-
event_emitter_proxy.
|
578
|
+
def on(event, callback)
|
579
|
+
event_emitter_proxy.on(event, callback)
|
580
580
|
end
|
581
581
|
|
582
582
|
# -- inherited from EventEmitter --
|
583
583
|
# @nodoc
|
584
|
-
def
|
585
|
-
event_emitter_proxy.
|
584
|
+
def off(event, callback)
|
585
|
+
event_emitter_proxy.off(event, callback)
|
586
586
|
end
|
587
587
|
|
588
588
|
# -- inherited from EventEmitter --
|
589
589
|
# @nodoc
|
590
|
-
def
|
591
|
-
event_emitter_proxy.
|
590
|
+
def once(event, callback)
|
591
|
+
event_emitter_proxy.once(event, callback)
|
592
592
|
end
|
593
593
|
|
594
594
|
private def event_emitter_proxy
|
data/lib/playwright_api/frame.rb
CHANGED
@@ -1049,20 +1049,20 @@ module Playwright
|
|
1049
1049
|
|
1050
1050
|
# -- inherited from EventEmitter --
|
1051
1051
|
# @nodoc
|
1052
|
-
def
|
1053
|
-
event_emitter_proxy.
|
1052
|
+
def on(event, callback)
|
1053
|
+
event_emitter_proxy.on(event, callback)
|
1054
1054
|
end
|
1055
1055
|
|
1056
1056
|
# -- inherited from EventEmitter --
|
1057
1057
|
# @nodoc
|
1058
|
-
def
|
1059
|
-
event_emitter_proxy.
|
1058
|
+
def off(event, callback)
|
1059
|
+
event_emitter_proxy.off(event, callback)
|
1060
1060
|
end
|
1061
1061
|
|
1062
1062
|
# -- inherited from EventEmitter --
|
1063
1063
|
# @nodoc
|
1064
|
-
def
|
1065
|
-
event_emitter_proxy.
|
1064
|
+
def once(event, callback)
|
1065
|
+
event_emitter_proxy.once(event, callback)
|
1066
1066
|
end
|
1067
1067
|
|
1068
1068
|
private def event_emitter_proxy
|
@@ -21,11 +21,11 @@ module Playwright
|
|
21
21
|
#
|
22
22
|
# **Converting Locator to FrameLocator**
|
23
23
|
#
|
24
|
-
# If you have a `Locator` object pointing to an `iframe` it can be converted to `FrameLocator` using [
|
24
|
+
# If you have a `Locator` object pointing to an `iframe` it can be converted to `FrameLocator` using [`method: Locator.contentFrame`].
|
25
25
|
#
|
26
|
-
#
|
27
|
-
#
|
28
|
-
#
|
26
|
+
# **Converting FrameLocator to Locator**
|
27
|
+
#
|
28
|
+
# If you have a `FrameLocator` object it can be converted to `Locator` pointing to the same `iframe` using [`method: FrameLocator.owner`].
|
29
29
|
class FrameLocator < PlaywrightApi
|
30
30
|
|
31
31
|
#
|
@@ -255,5 +255,24 @@ module Playwright
|
|
255
255
|
def nth(index)
|
256
256
|
wrap_impl(@impl.nth(unwrap_impl(index)))
|
257
257
|
end
|
258
|
+
|
259
|
+
#
|
260
|
+
# Returns a `Locator` object pointing to the same `iframe` as this frame locator.
|
261
|
+
#
|
262
|
+
# Useful when you have a `FrameLocator` object obtained somewhere, and later on would like to interact with the `iframe` element.
|
263
|
+
#
|
264
|
+
# For a reverse operation, use [`method: Locator.contentFrame`].
|
265
|
+
#
|
266
|
+
# **Usage**
|
267
|
+
#
|
268
|
+
# ```python sync
|
269
|
+
# frame_locator = page.frame_locator("iframe[name=\"embedded\"]")
|
270
|
+
# # ...
|
271
|
+
# locator = frame_locator.owner
|
272
|
+
# expect(locator).to_be_visible()
|
273
|
+
# ```
|
274
|
+
def owner
|
275
|
+
wrap_impl(@impl.owner)
|
276
|
+
end
|
258
277
|
end
|
259
278
|
end
|
@@ -100,20 +100,20 @@ module Playwright
|
|
100
100
|
|
101
101
|
# -- inherited from EventEmitter --
|
102
102
|
# @nodoc
|
103
|
-
def
|
104
|
-
event_emitter_proxy.
|
103
|
+
def on(event, callback)
|
104
|
+
event_emitter_proxy.on(event, callback)
|
105
105
|
end
|
106
106
|
|
107
107
|
# -- inherited from EventEmitter --
|
108
108
|
# @nodoc
|
109
|
-
def
|
110
|
-
event_emitter_proxy.
|
109
|
+
def off(event, callback)
|
110
|
+
event_emitter_proxy.off(event, callback)
|
111
111
|
end
|
112
112
|
|
113
113
|
# -- inherited from EventEmitter --
|
114
114
|
# @nodoc
|
115
|
-
def
|
116
|
-
event_emitter_proxy.
|
115
|
+
def once(event, callback)
|
116
|
+
event_emitter_proxy.once(event, callback)
|
117
117
|
end
|
118
118
|
|
119
119
|
private def event_emitter_proxy
|
@@ -325,6 +325,25 @@ module Playwright
|
|
325
325
|
wrap_impl(@impl.element_handles)
|
326
326
|
end
|
327
327
|
|
328
|
+
#
|
329
|
+
# Returns a `FrameLocator` object pointing to the same `iframe` as this locator.
|
330
|
+
#
|
331
|
+
# Useful when you have a `Locator` object obtained somewhere, and later on would like to interact with the content inside the frame.
|
332
|
+
#
|
333
|
+
# For a reverse operation, use [`method: FrameLocator.owner`].
|
334
|
+
#
|
335
|
+
# **Usage**
|
336
|
+
#
|
337
|
+
# ```python sync
|
338
|
+
# locator = page.locator("iframe[name=\"embedded\"]")
|
339
|
+
# # ...
|
340
|
+
# frame_locator = locator.content_frame
|
341
|
+
# frame_locator.get_by_role("button").click()
|
342
|
+
# ```
|
343
|
+
def content_frame
|
344
|
+
wrap_impl(@impl.content_frame)
|
345
|
+
end
|
346
|
+
|
328
347
|
#
|
329
348
|
# Execute JavaScript code in the page, taking the matching element as an argument.
|
330
349
|
#
|