playwright-ruby-client 0.7.1 → 1.14.beta1

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.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +26 -0
  3. data/documentation/docs/api/accessibility.md +52 -1
  4. data/documentation/docs/api/browser.md +8 -2
  5. data/documentation/docs/api/browser_context.md +28 -0
  6. data/documentation/docs/api/browser_type.md +1 -0
  7. data/documentation/docs/api/download.md +97 -0
  8. data/documentation/docs/api/element_handle.md +38 -4
  9. data/documentation/docs/api/experimental/android_device.md +1 -0
  10. data/documentation/docs/api/frame.md +89 -17
  11. data/documentation/docs/api/keyboard.md +11 -20
  12. data/documentation/docs/api/locator.md +650 -0
  13. data/documentation/docs/api/page.md +135 -19
  14. data/documentation/docs/api/response.md +16 -0
  15. data/documentation/docs/api/touchscreen.md +8 -0
  16. data/documentation/docs/api/worker.md +37 -0
  17. data/documentation/docs/article/guides/inspector.md +31 -0
  18. data/documentation/docs/article/guides/playwright_on_alpine_linux.md +91 -0
  19. data/documentation/docs/article/guides/semi_automation.md +5 -1
  20. data/documentation/docs/include/api_coverage.md +77 -14
  21. data/lib/playwright.rb +36 -4
  22. data/lib/playwright/accessibility_impl.rb +50 -0
  23. data/lib/playwright/channel_owners/artifact.rb +4 -0
  24. data/lib/playwright/channel_owners/browser_context.rb +77 -3
  25. data/lib/playwright/channel_owners/element_handle.rb +11 -4
  26. data/lib/playwright/channel_owners/frame.rb +107 -34
  27. data/lib/playwright/channel_owners/page.rb +163 -55
  28. data/lib/playwright/channel_owners/response.rb +8 -0
  29. data/lib/playwright/channel_owners/worker.rb +23 -0
  30. data/lib/playwright/connection.rb +2 -4
  31. data/lib/playwright/{download.rb → download_impl.rb} +5 -1
  32. data/lib/playwright/javascript/expression.rb +5 -4
  33. data/lib/playwright/locator_impl.rb +314 -0
  34. data/lib/playwright/route_handler_entry.rb +3 -2
  35. data/lib/playwright/timeout_settings.rb +4 -4
  36. data/lib/playwright/touchscreen_impl.rb +7 -0
  37. data/lib/playwright/transport.rb +0 -1
  38. data/lib/playwright/url_matcher.rb +12 -2
  39. data/lib/playwright/version.rb +2 -2
  40. data/lib/playwright/web_socket_client.rb +164 -0
  41. data/lib/playwright/web_socket_transport.rb +104 -0
  42. data/lib/playwright_api/accessibility.rb +1 -1
  43. data/lib/playwright_api/android_device.rb +6 -5
  44. data/lib/playwright_api/browser.rb +10 -4
  45. data/lib/playwright_api/browser_context.rb +12 -7
  46. data/lib/playwright_api/browser_type.rb +2 -1
  47. data/lib/playwright_api/cdp_session.rb +6 -6
  48. data/lib/playwright_api/download.rb +70 -0
  49. data/lib/playwright_api/element_handle.rb +38 -18
  50. data/lib/playwright_api/frame.rb +95 -44
  51. data/lib/playwright_api/locator.rb +509 -0
  52. data/lib/playwright_api/page.rb +102 -49
  53. data/lib/playwright_api/response.rb +10 -0
  54. data/lib/playwright_api/touchscreen.rb +1 -1
  55. data/lib/playwright_api/worker.rb +13 -3
  56. metadata +17 -7
@@ -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
- resp = @channel.send_message_to_server('querySelector', selector: selector)
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 dispatch_event(selector, type, eventInit: nil, timeout: nil)
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(selector, value, noWaitAfter: nil, timeout: nil)
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 set_input_files(selector, files, noWaitAfter: nil, timeout: nil)
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 = { files: file_payloads, selector: selector, noWaitAfter: noWaitAfter, timeout: timeout }.compact
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
@@ -510,6 +579,10 @@ module Playwright
510
579
  nil
511
580
  end
512
581
 
582
+ def wait_for_timeout(timeout)
583
+ sleep(timeout / 1000.0)
584
+ end
585
+
513
586
  def wait_for_function(pageFunction, arg: nil, polling: nil, timeout: nil)
514
587
  if polling.is_a?(String) && polling != 'raf'
515
588
  raise ArgumentError.new("Unknown polling option: #{polling}")
@@ -9,7 +9,7 @@ module Playwright
9
9
  private def after_initialize
10
10
  @browser_context = @parent
11
11
  @timeout_settings = TimeoutSettings.new(@browser_context.send(:_timeout_settings))
12
- @accessibility = Accessibility.new(@channel)
12
+ @accessibility = AccessibilityImpl.new(@channel)
13
13
  @keyboard = KeyboardImpl.new(@channel)
14
14
  @mouse = MouseImpl.new(@channel)
15
15
  @touchscreen = TouchscreenImpl.new(@channel)
@@ -21,8 +21,9 @@ module Playwright
21
21
  }
22
22
  end
23
23
  @closed = false
24
+ @workers = Set.new
24
25
  @bindings = {}
25
- @routes = Set.new
26
+ @routes = []
26
27
 
27
28
  @main_frame = ChannelOwners::Frame.from(@initializer['mainFrame'])
28
29
  @main_frame.send(:update_page_from_page, self)
@@ -66,7 +67,7 @@ module Playwright
66
67
  })
67
68
  @channel.on('worker', ->(params) {
68
69
  worker = ChannelOwners::Worker.from(params['worker'])
69
- # on_worker(worker)
70
+ on_worker(worker)
70
71
  })
71
72
  end
72
73
 
@@ -110,9 +111,16 @@ module Playwright
110
111
  @browser_context.send(:on_binding, binding_call)
111
112
  end
112
113
 
114
+ private def on_worker(worker)
115
+ worker.page = self
116
+ @workers << worker
117
+ emit(Events::Page::Worker, worker)
118
+ end
119
+
113
120
  private def on_close
114
121
  @closed = true
115
122
  @browser_context.send(:remove_page, self)
123
+ @browser_context.send(:remove_background_page, self)
116
124
  emit(Events::Page::Close)
117
125
  end
118
126
 
@@ -124,7 +132,7 @@ module Playwright
124
132
  end
125
133
 
126
134
  private def on_download(params)
127
- download = Download.new(
135
+ download = DownloadImpl.new(
128
136
  page: self,
129
137
  url: params['url'],
130
138
  suggested_filename: params['suggestedFilename'],
@@ -184,15 +192,8 @@ module Playwright
184
192
  if name
185
193
  @frames.find { |f| f.name == name }
186
194
  elsif url
187
- # ref: https://github.com/microsoft/playwright-python/blob/c4320c27cb080b385a5e45be46baa3cb7a9409ff/playwright/_impl/_helper.py#L104
188
- case url
189
- when String
190
- @frames.find { |f| f.url == url }
191
- when Regexp
192
- @frames.find { |f| url.match?(f.url) }
193
- else
194
- raise NotImplementedError.new('Page#frame with url is not completely implemented yet')
195
- end
195
+ matcher = UrlMatcher.new(url, base_url: @browser_context.send(:base_url))
196
+ @frames.find { |f| matcher.match?(f.url) }
196
197
  else
197
198
  raise ArgumentError.new('Either name or url matcher should be specified')
198
199
  end
@@ -212,44 +213,48 @@ module Playwright
212
213
  @channel.send_message_to_server('setDefaultTimeoutNoReply', timeout: timeout)
213
214
  end
214
215
 
215
- def query_selector(selector)
216
- @main_frame.query_selector(selector)
216
+ def query_selector(selector, strict: nil)
217
+ @main_frame.query_selector(selector, strict: strict)
217
218
  end
218
219
 
219
220
  def query_selector_all(selector)
220
221
  @main_frame.query_selector_all(selector)
221
222
  end
222
223
 
223
- def wait_for_selector(selector, state: nil, timeout: nil)
224
- @main_frame.wait_for_selector(selector, state: state, timeout: timeout)
224
+ def wait_for_selector(selector, state: nil, strict: nil, timeout: nil)
225
+ @main_frame.wait_for_selector(selector, state: state, strict: strict, timeout: timeout)
225
226
  end
226
227
 
227
- def checked?(selector, timeout: nil)
228
- @main_frame.checked?(selector, timeout: timeout)
228
+ def checked?(selector, strict: nil, timeout: nil)
229
+ @main_frame.checked?(selector, strict: strict, timeout: timeout)
229
230
  end
230
231
 
231
- def disabled?(selector, timeout: nil)
232
- @main_frame.disabled?(selector, timeout: timeout)
232
+ def disabled?(selector, strict: nil, timeout: nil)
233
+ @main_frame.disabled?(selector, strict: strict, timeout: timeout)
233
234
  end
234
235
 
235
- def editable?(selector, timeout: nil)
236
- @main_frame.editable?(selector, timeout: timeout)
236
+ def editable?(selector, strict: nil, timeout: nil)
237
+ @main_frame.editable?(selector, strict: strict, timeout: timeout)
237
238
  end
238
239
 
239
- def enabled?(selector, timeout: nil)
240
- @main_frame.enabled?(selector, timeout: timeout)
240
+ def enabled?(selector, strict: nil, timeout: nil)
241
+ @main_frame.enabled?(selector, strict: strict, timeout: timeout)
241
242
  end
242
243
 
243
- def hidden?(selector, timeout: nil)
244
- @main_frame.hidden?(selector, timeout: timeout)
244
+ def hidden?(selector, strict: nil, timeout: nil)
245
+ @main_frame.hidden?(selector, strict: strict, timeout: timeout)
245
246
  end
246
247
 
247
- def visible?(selector, timeout: nil)
248
- @main_frame.visible?(selector, timeout: timeout)
248
+ def visible?(selector, strict: nil, timeout: nil)
249
+ @main_frame.visible?(selector, strict: strict, timeout: timeout)
249
250
  end
250
251
 
251
- def dispatch_event(selector, type, eventInit: nil, timeout: nil)
252
- @main_frame.dispatch_event(selector, type, eventInit: eventInit, timeout: timeout)
252
+ def locator(selector)
253
+ @main_frame.locator(selector)
254
+ end
255
+
256
+ def dispatch_event(selector, type, eventInit: nil, strict: nil, timeout: nil)
257
+ @main_frame.dispatch_event(selector, type, eventInit: eventInit, strict: strict, timeout: timeout)
253
258
  end
254
259
 
255
260
  def evaluate(pageFunction, arg: nil)
@@ -260,8 +265,8 @@ module Playwright
260
265
  @main_frame.evaluate_handle(pageFunction, arg: arg)
261
266
  end
262
267
 
263
- def eval_on_selector(selector, pageFunction, arg: nil)
264
- @main_frame.eval_on_selector(selector, pageFunction, arg: arg)
268
+ def eval_on_selector(selector, pageFunction, arg: nil, strict: nil)
269
+ @main_frame.eval_on_selector(selector, pageFunction, arg: arg, strict: strict)
265
270
  end
266
271
 
267
272
  def eval_on_selector_all(selector, pageFunction, arg: nil)
@@ -377,8 +382,8 @@ module Playwright
377
382
  end
378
383
 
379
384
  def route(url, handler)
380
- entry = RouteHandlerEntry.new(url, handler)
381
- @routes << entry
385
+ entry = RouteHandlerEntry.new(url, @browser_context.send(:base_url), handler)
386
+ @routes.unshift(entry)
382
387
  if @routes.count >= 1
383
388
  @channel.send_message_to_server('setNetworkInterceptionEnabled', enabled: true)
384
389
  end
@@ -446,6 +451,7 @@ module Playwright
446
451
  modifiers: nil,
447
452
  noWaitAfter: nil,
448
453
  position: nil,
454
+ strict: nil,
449
455
  timeout: nil,
450
456
  trial: nil)
451
457
 
@@ -458,11 +464,31 @@ module Playwright
458
464
  modifiers: modifiers,
459
465
  noWaitAfter: noWaitAfter,
460
466
  position: position,
467
+ strict: strict,
461
468
  timeout: timeout,
462
469
  trial: trial,
463
470
  )
464
471
  end
465
472
 
473
+ def drag_and_drop(
474
+ source,
475
+ target,
476
+ force: nil,
477
+ noWaitAfter: nil,
478
+ strict: nil,
479
+ timeout: nil,
480
+ trial: nil)
481
+
482
+ @main_frame.drag_and_drop(
483
+ source,
484
+ target,
485
+ force: force,
486
+ noWaitAfter: noWaitAfter,
487
+ strict: strict,
488
+ timeout: timeout,
489
+ trial: trial)
490
+ end
491
+
466
492
  def dblclick(
467
493
  selector,
468
494
  button: nil,
@@ -471,6 +497,7 @@ module Playwright
471
497
  modifiers: nil,
472
498
  noWaitAfter: nil,
473
499
  position: nil,
500
+ strict: nil,
474
501
  timeout: nil,
475
502
  trial: nil)
476
503
  @main_frame.dblclick(
@@ -481,6 +508,7 @@ module Playwright
481
508
  modifiers: modifiers,
482
509
  noWaitAfter: noWaitAfter,
483
510
  position: position,
511
+ strict: strict,
484
512
  timeout: timeout,
485
513
  trial: trial,
486
514
  )
@@ -492,6 +520,7 @@ module Playwright
492
520
  modifiers: nil,
493
521
  noWaitAfter: nil,
494
522
  position: nil,
523
+ strict: nil,
495
524
  timeout: nil,
496
525
  trial: nil)
497
526
  @main_frame.tap_point(
@@ -500,33 +529,46 @@ module Playwright
500
529
  modifiers: modifiers,
501
530
  noWaitAfter: noWaitAfter,
502
531
  position: position,
532
+ strict: strict,
503
533
  timeout: timeout,
504
534
  trial: trial,
505
535
  )
506
536
  end
507
537
 
508
- def fill(selector, value, noWaitAfter: nil, timeout: nil)
509
- @main_frame.fill(selector, value, noWaitAfter: noWaitAfter, timeout: timeout)
538
+ def fill(
539
+ selector,
540
+ value,
541
+ force: nil,
542
+ noWaitAfter: nil,
543
+ strict: nil,
544
+ timeout: nil)
545
+ @main_frame.fill(
546
+ selector,
547
+ value,
548
+ force: force,
549
+ noWaitAfter: noWaitAfter,
550
+ strict: strict,
551
+ timeout: timeout)
510
552
  end
511
553
 
512
- def focus(selector, timeout: nil)
513
- @main_frame.focus(selector, timeout: timeout)
554
+ def focus(selector, strict: nil, timeout: nil)
555
+ @main_frame.focus(selector, strict: strict, timeout: timeout)
514
556
  end
515
557
 
516
- def text_content(selector, timeout: nil)
517
- @main_frame.text_content(selector, timeout: timeout)
558
+ def text_content(selector, strict: nil, timeout: nil)
559
+ @main_frame.text_content(selector, strict: strict, timeout: timeout)
518
560
  end
519
561
 
520
- def inner_text(selector, timeout: nil)
521
- @main_frame.inner_text(selector, timeout: timeout)
562
+ def inner_text(selector, strict: nil, timeout: nil)
563
+ @main_frame.inner_text(selector, strict: strict, timeout: timeout)
522
564
  end
523
565
 
524
- def inner_html(selector, timeout: nil)
525
- @main_frame.inner_html(selector, timeout: timeout)
566
+ def inner_html(selector, strict: nil, timeout: nil)
567
+ @main_frame.inner_html(selector, strict: strict, timeout: timeout)
526
568
  end
527
569
 
528
- def get_attribute(selector, name, timeout: nil)
529
- @main_frame.get_attribute(selector, name, timeout: timeout)
570
+ def get_attribute(selector, name, strict: nil, timeout: nil)
571
+ @main_frame.get_attribute(selector, name, strict: strict, timeout: timeout)
530
572
  end
531
573
 
532
574
  def hover(
@@ -534,6 +576,7 @@ module Playwright
534
576
  force: nil,
535
577
  modifiers: nil,
536
578
  position: nil,
579
+ strict: nil,
537
580
  timeout: nil,
538
581
  trial: nil)
539
582
  @main_frame.hover(
@@ -541,6 +584,7 @@ module Playwright
541
584
  force: force,
542
585
  modifiers: modifiers,
543
586
  position: position,
587
+ strict: strict,
544
588
  timeout: timeout,
545
589
  trial: trial,
546
590
  )
@@ -552,7 +596,9 @@ module Playwright
552
596
  index: nil,
553
597
  value: nil,
554
598
  label: nil,
599
+ force: nil,
555
600
  noWaitAfter: nil,
601
+ strict: nil,
556
602
  timeout: nil)
557
603
  @main_frame.select_option(
558
604
  selector,
@@ -560,13 +606,24 @@ module Playwright
560
606
  index: index,
561
607
  value: value,
562
608
  label: label,
609
+ force: force,
563
610
  noWaitAfter: noWaitAfter,
611
+ strict: strict,
564
612
  timeout: timeout,
565
613
  )
566
614
  end
567
615
 
568
- def set_input_files(selector, files, noWaitAfter: nil, timeout: nil)
569
- @main_frame.set_input_files(selector, files, noWaitAfter: noWaitAfter, timeout: timeout)
616
+ def input_value(selector, strict: nil, timeout: nil)
617
+ @main_frame.input_value(selector, strict: strict, timeout: timeout)
618
+ end
619
+
620
+ def set_input_files(selector, files, noWaitAfter: nil, strict: nil,timeout: nil)
621
+ @main_frame.set_input_files(
622
+ selector,
623
+ files,
624
+ noWaitAfter: noWaitAfter,
625
+ strict: strict,
626
+ timeout: timeout)
570
627
  end
571
628
 
572
629
  def type(
@@ -574,9 +631,16 @@ module Playwright
574
631
  text,
575
632
  delay: nil,
576
633
  noWaitAfter: nil,
634
+ strict: nil,
577
635
  timeout: nil)
578
636
 
579
- @main_frame.type(selector, text, delay: delay, noWaitAfter: noWaitAfter, timeout: timeout)
637
+ @main_frame.type(
638
+ selector,
639
+ text,
640
+ delay: delay,
641
+ noWaitAfter: noWaitAfter,
642
+ strict: strict,
643
+ timeout: timeout)
580
644
  end
581
645
 
582
646
  def press(
@@ -584,9 +648,16 @@ module Playwright
584
648
  key,
585
649
  delay: nil,
586
650
  noWaitAfter: nil,
651
+ strict: nil,
587
652
  timeout: nil)
588
653
 
589
- @main_frame.press(selector, key, delay: delay, noWaitAfter: noWaitAfter, timeout: timeout)
654
+ @main_frame.press(
655
+ selector,
656
+ key,
657
+ delay: delay,
658
+ noWaitAfter: noWaitAfter,
659
+ strict: strict,
660
+ timeout: timeout)
590
661
  end
591
662
 
592
663
  def check(
@@ -594,10 +665,18 @@ module Playwright
594
665
  force: nil,
595
666
  noWaitAfter: nil,
596
667
  position: nil,
668
+ strict: nil,
597
669
  timeout: nil,
598
670
  trial: nil)
599
671
 
600
- @main_frame.check(selector, force: force, noWaitAfter: noWaitAfter, position: position, timeout: timeout, trial: trial)
672
+ @main_frame.check(
673
+ selector,
674
+ force: force,
675
+ noWaitAfter: noWaitAfter,
676
+ position: position,
677
+ strict: strict,
678
+ timeout: timeout,
679
+ trial: trial)
601
680
  end
602
681
 
603
682
  def uncheck(
@@ -605,16 +684,36 @@ module Playwright
605
684
  force: nil,
606
685
  noWaitAfter: nil,
607
686
  position: nil,
687
+ strict: nil,
608
688
  timeout: nil,
609
689
  trial: nil)
610
690
 
611
- @main_frame.uncheck(selector, force: force, noWaitAfter: noWaitAfter, position: position, timeout: timeout, trial: trial)
691
+ @main_frame.uncheck(
692
+ selector,
693
+ force: force,
694
+ noWaitAfter: noWaitAfter,
695
+ position: position,
696
+ strict: strict,
697
+ timeout: timeout,
698
+ trial: trial)
699
+ end
700
+
701
+ def wait_for_timeout(timeout)
702
+ @main_frame.wait_for_timeout(timeout)
612
703
  end
613
704
 
614
705
  def wait_for_function(pageFunction, arg: nil, polling: nil, timeout: nil)
615
706
  @main_frame.wait_for_function(pageFunction, arg: arg, polling: polling, timeout: timeout)
616
707
  end
617
708
 
709
+ def workers
710
+ @workers.to_a
711
+ end
712
+
713
+ def pause
714
+ @browser_context.send(:pause)
715
+ end
716
+
618
717
  def pdf(
619
718
  displayHeaderFooter: nil,
620
719
  footerTemplate: nil,
@@ -748,7 +847,7 @@ module Playwright
748
847
  predicate =
749
848
  case urlOrPredicate
750
849
  when String, Regexp
751
- url_matcher = UrlMatcher.new(urlOrPredicate)
850
+ url_matcher = UrlMatcher.new(urlOrPredicate, base_url: @browser_context.send(:base_url))
752
851
  -> (req){ url_matcher.match?(req.url) }
753
852
  when Proc
754
853
  urlOrPredicate
@@ -767,7 +866,7 @@ module Playwright
767
866
  predicate =
768
867
  case urlOrPredicate
769
868
  when String, Regexp
770
- url_matcher = UrlMatcher.new(urlOrPredicate)
869
+ url_matcher = UrlMatcher.new(urlOrPredicate, base_url: @browser_context.send(:base_url))
771
870
  -> (req){ url_matcher.match?(req.url) }
772
871
  when Proc
773
872
  urlOrPredicate
@@ -782,6 +881,10 @@ module Playwright
782
881
  expect_event(Events::Page::WebSocket, predicate: predicate, timeout: timeout, &block)
783
882
  end
784
883
 
884
+ def expect_worker(predicate: nil, timeout: nil, &block)
885
+ expect_event(Events::Page::Worker, predicate: predicate, timeout: timeout, &block)
886
+ end
887
+
785
888
  # called from Frame with send(:timeout_settings)
786
889
  private def timeout_settings
787
890
  @timeout_settings
@@ -792,6 +895,11 @@ module Playwright
792
895
  @bindings.key?(name)
793
896
  end
794
897
 
898
+ # called from Worker#on_close
899
+ private def remove_worker(worker)
900
+ @workers.delete(worker)
901
+ end
902
+
795
903
  # Expose guid for library developers.
796
904
  # Not intended to be used by users.
797
905
  def guid