playwright-ruby-client 1.39.0 → 1.40.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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/documentation/docs/api/api_request_context.md +1 -2
  3. data/documentation/docs/api/browser.md +10 -14
  4. data/documentation/docs/api/browser_context.md +32 -51
  5. data/documentation/docs/api/browser_type.md +8 -12
  6. data/documentation/docs/api/dialog.md +15 -18
  7. data/documentation/docs/api/download.md +10 -12
  8. data/documentation/docs/api/element_handle.md +9 -7
  9. data/documentation/docs/api/frame.md +28 -55
  10. data/documentation/docs/api/locator.md +24 -23
  11. data/documentation/docs/api/locator_assertions.md +652 -0
  12. data/documentation/docs/api/page.md +53 -103
  13. data/documentation/docs/api/playwright.md +20 -23
  14. data/documentation/docs/api/selectors.md +29 -34
  15. data/documentation/docs/article/guides/rails_integration.md +80 -51
  16. data/documentation/docs/article/guides/rspec_integration.md +59 -0
  17. data/documentation/docs/include/api_coverage.md +43 -0
  18. data/documentation/docusaurus.config.js +1 -1
  19. data/documentation/package.json +7 -7
  20. data/documentation/yarn.lock +4641 -5023
  21. data/lib/playwright/api_response_impl.rb +2 -2
  22. data/lib/playwright/channel.rb +1 -1
  23. data/lib/playwright/channel_owners/api_request_context.rb +12 -3
  24. data/lib/playwright/channel_owners/browser.rb +11 -7
  25. data/lib/playwright/channel_owners/browser_context.rb +35 -15
  26. data/lib/playwright/channel_owners/frame.rb +38 -14
  27. data/lib/playwright/channel_owners/page.rb +29 -16
  28. data/lib/playwright/channel_owners/web_socket.rb +8 -13
  29. data/lib/playwright/connection.rb +18 -2
  30. data/lib/playwright/errors.rb +22 -2
  31. data/lib/playwright/input_files.rb +4 -4
  32. data/lib/playwright/javascript/value_serializer.rb +1 -1
  33. data/lib/playwright/locator_assertions_impl.rb +417 -0
  34. data/lib/playwright/locator_impl.rb +24 -5
  35. data/lib/playwright/test.rb +68 -0
  36. data/lib/playwright/utils.rb +3 -10
  37. data/lib/playwright/version.rb +2 -2
  38. data/lib/playwright/waiter.rb +146 -0
  39. data/lib/playwright.rb +1 -1
  40. data/lib/playwright_api/api_request_context.rb +1 -2
  41. data/lib/playwright_api/browser.rb +2 -2
  42. data/lib/playwright_api/browser_context.rb +3 -3
  43. data/lib/playwright_api/browser_type.rb +2 -1
  44. data/lib/playwright_api/download.rb +1 -2
  45. data/lib/playwright_api/element_handle.rb +4 -1
  46. data/lib/playwright_api/frame.rb +4 -1
  47. data/lib/playwright_api/locator.rb +9 -1
  48. data/lib/playwright_api/locator_assertions.rb +561 -0
  49. data/lib/playwright_api/page.rb +16 -13
  50. data/lib/playwright_api/request.rb +4 -4
  51. data/lib/playwright_api/worker.rb +4 -4
  52. data/sig/playwright.rbs +48 -5
  53. metadata +9 -4
  54. data/lib/playwright/wait_helper.rb +0 -73
data/sig/playwright.rbs CHANGED
@@ -242,7 +242,7 @@ module Playwright
242
242
  def delete: -> void
243
243
  def failure: -> (nil | String)
244
244
  def page: -> Page
245
- def path: -> (nil | (String | File))
245
+ def path: -> (String | File)
246
246
  def save_as: ((String | File) path) -> void
247
247
  def suggested_filename: -> String
248
248
  def url: -> String
@@ -255,7 +255,7 @@ module Playwright
255
255
  def bring_to_front: -> void
256
256
  def check: (String selector, ?force: bool, ?noWaitAfter: bool, ?position: Hash[untyped, untyped], ?strict: bool, ?timeout: Float, ?trial: bool) -> void
257
257
  def click: (String selector, ?button: ("left" | "right" | "middle"), ?clickCount: Integer, ?delay: Float, ?force: bool, ?modifiers: Array[untyped], ?noWaitAfter: bool, ?position: Hash[untyped, untyped], ?strict: bool, ?timeout: Float, ?trial: bool) -> void
258
- def close: (?runBeforeUnload: bool) -> void
258
+ def close: (?reason: String, ?runBeforeUnload: bool) -> void
259
259
  def content: -> String
260
260
  def context: -> BrowserContext
261
261
  def dblclick: (String selector, ?button: ("left" | "right" | "middle"), ?delay: Float, ?force: bool, ?modifiers: Array[untyped], ?noWaitAfter: bool, ?position: Hash[untyped, untyped], ?strict: bool, ?timeout: Float, ?trial: bool) -> void
@@ -361,7 +361,7 @@ module Playwright
361
361
  def browser: -> (nil | Browser)
362
362
  def clear_cookies: -> void
363
363
  def clear_permissions: -> void
364
- def close: -> void
364
+ def close: (?reason: String) -> void
365
365
  def cookies: (?urls: (String | Array[untyped])) -> Array[untyped]
366
366
  def expose_binding: (String name, function callback, ?handle: bool) -> void
367
367
  def expose_function: (String name, function callback) -> void
@@ -399,7 +399,7 @@ module Playwright
399
399
 
400
400
  class Browser
401
401
  def browser_type: -> BrowserType
402
- def close: -> void
402
+ def close: (?reason: String) -> void
403
403
  def contexts: -> Array[untyped]
404
404
  def connected?: -> bool
405
405
  def new_browser_cdp_session: -> CDPSession
@@ -414,7 +414,7 @@ module Playwright
414
414
  def connect_over_cdp: (String endpointURL, ?headers: Hash[untyped, untyped], ?slowMo: Float, ?timeout: Float) ?{ (untyped) -> untyped } -> Browser
415
415
  def executable_path: -> String
416
416
  def launch: (?args: Array[untyped], ?channel: String, ?chromiumSandbox: bool, ?devtools: bool, ?downloadsPath: (String | File), ?env: Hash[untyped, untyped], ?executablePath: (String | File), ?firefoxUserPrefs: Hash[untyped, untyped], ?handleSIGHUP: bool, ?handleSIGINT: bool, ?handleSIGTERM: bool, ?headless: bool, ?ignoreDefaultArgs: (bool | Array[untyped]), ?proxy: Hash[untyped, untyped], ?slowMo: Float, ?timeout: Float, ?tracesDir: (String | File)) ?{ (Browser) -> untyped } -> Browser
417
- def launch_persistent_context: ((String | File) userDataDir, ?acceptDownloads: bool, ?args: Array[untyped], ?baseURL: String, ?bypassCSP: bool, ?channel: String, ?chromiumSandbox: bool, ?colorScheme: ("light" | "dark" | "no-preference" | "null"), ?deviceScaleFactor: Float, ?devtools: bool, ?downloadsPath: (String | File), ?env: Hash[untyped, untyped], ?executablePath: (String | File), ?extraHTTPHeaders: Hash[untyped, untyped], ?forcedColors: ("active" | "none" | "null"), ?geolocation: Hash[untyped, untyped], ?handleSIGHUP: bool, ?handleSIGINT: bool, ?handleSIGTERM: bool, ?hasTouch: bool, ?headless: bool, ?httpCredentials: Hash[untyped, untyped], ?ignoreDefaultArgs: (bool | Array[untyped]), ?ignoreHTTPSErrors: bool, ?isMobile: bool, ?javaScriptEnabled: bool, ?locale: String, ?noViewport: bool, ?offline: bool, ?permissions: Array[untyped], ?proxy: Hash[untyped, untyped], ?record_har_content: ("omit" | "embed" | "attach"), ?record_har_mode: ("full" | "minimal"), ?record_har_omit_content: bool, ?record_har_path: (String | File), ?record_har_url_filter: (String | Regexp), ?record_video_dir: (String | File), ?record_video_size: Hash[untyped, untyped], ?reducedMotion: ("reduce" | "no-preference" | "null"), ?screen: Hash[untyped, untyped], ?serviceWorkers: ("allow" | "block"), ?slowMo: Float, ?strictSelectors: bool, ?timeout: Float, ?timezoneId: String, ?tracesDir: (String | File), ?userAgent: String, ?viewport: (nil | Hash[untyped, untyped])) ?{ (untyped) -> untyped } -> BrowserContext
417
+ def launch_persistent_context: ((String | File) userDataDir, ?acceptDownloads: bool, ?args: Array[untyped], ?baseURL: String, ?bypassCSP: bool, ?channel: String, ?chromiumSandbox: bool, ?colorScheme: ("light" | "dark" | "no-preference" | "null"), ?deviceScaleFactor: Float, ?devtools: bool, ?downloadsPath: (String | File), ?env: Hash[untyped, untyped], ?executablePath: (String | File), ?extraHTTPHeaders: Hash[untyped, untyped], ?firefoxUserPrefs: Hash[untyped, untyped], ?forcedColors: ("active" | "none" | "null"), ?geolocation: Hash[untyped, untyped], ?handleSIGHUP: bool, ?handleSIGINT: bool, ?handleSIGTERM: bool, ?hasTouch: bool, ?headless: bool, ?httpCredentials: Hash[untyped, untyped], ?ignoreDefaultArgs: (bool | Array[untyped]), ?ignoreHTTPSErrors: bool, ?isMobile: bool, ?javaScriptEnabled: bool, ?locale: String, ?noViewport: bool, ?offline: bool, ?permissions: Array[untyped], ?proxy: Hash[untyped, untyped], ?record_har_content: ("omit" | "embed" | "attach"), ?record_har_mode: ("full" | "minimal"), ?record_har_omit_content: bool, ?record_har_path: (String | File), ?record_har_url_filter: (String | Regexp), ?record_video_dir: (String | File), ?record_video_size: Hash[untyped, untyped], ?reducedMotion: ("reduce" | "no-preference" | "null"), ?screen: Hash[untyped, untyped], ?serviceWorkers: ("allow" | "block"), ?slowMo: Float, ?strictSelectors: bool, ?timeout: Float, ?timezoneId: String, ?tracesDir: (String | File), ?userAgent: String, ?viewport: (nil | Hash[untyped, untyped])) ?{ (untyped) -> untyped } -> BrowserContext
418
418
  def name: -> String
419
419
  end
420
420
 
@@ -538,6 +538,49 @@ module Playwright
538
538
  def put: (String url, ?data: (String | String | untyped), ?failOnStatusCode: bool, ?form: Hash[untyped, untyped], ?headers: Hash[untyped, untyped], ?ignoreHTTPSErrors: bool, ?maxRedirects: Integer, ?multipart: Hash[untyped, untyped], ?params: Hash[untyped, untyped], ?timeout: Float) -> APIResponse
539
539
  end
540
540
 
541
+ class LocatorAssertions
542
+ def not_to_be_attached: (?attached: bool, ?timeout: Float) -> void
543
+ def not_to_be_checked: (?timeout: Float) -> void
544
+ def not_to_be_disabled: (?timeout: Float) -> void
545
+ def not_to_be_editable: (?editable: bool, ?timeout: Float) -> void
546
+ def not_to_be_empty: (?timeout: Float) -> void
547
+ def not_to_be_enabled: (?enabled: bool, ?timeout: Float) -> void
548
+ def not_to_be_focused: (?timeout: Float) -> void
549
+ def not_to_be_hidden: (?timeout: Float) -> void
550
+ def not_to_be_in_viewport: (?ratio: Float, ?timeout: Float) -> void
551
+ def not_to_be_visible: (?timeout: Float, ?visible: bool) -> void
552
+ def not_to_contain_text: ((String | Regexp | Array[untyped] | Array[untyped] | Array[untyped]) expected, ?ignoreCase: bool, ?timeout: Float, ?useInnerText: bool) -> void
553
+ def not_to_have_attribute: (String name, (String | Regexp) value, ?timeout: Float) -> void
554
+ def not_to_have_class: ((String | Regexp | Array[untyped] | Array[untyped] | Array[untyped]) expected, ?timeout: Float) -> void
555
+ def not_to_have_count: (Integer count, ?timeout: Float) -> void
556
+ def not_to_have_css: (String name, (String | Regexp) value, ?timeout: Float) -> void
557
+ def not_to_have_id: ((String | Regexp) id, ?timeout: Float) -> void
558
+ def not_to_have_js_property: (String name, untyped value, ?timeout: Float) -> void
559
+ def not_to_have_text: ((String | Regexp | Array[untyped] | Array[untyped] | Array[untyped]) expected, ?ignoreCase: bool, ?timeout: Float, ?useInnerText: bool) -> void
560
+ def not_to_have_value: ((String | Regexp) value, ?timeout: Float) -> void
561
+ def not_to_have_values: ((Array[untyped] | Array[untyped] | Array[untyped]) values, ?timeout: Float) -> void
562
+ def to_be_attached: (?attached: bool, ?timeout: Float) -> void
563
+ def to_be_checked: (?checked: bool, ?timeout: Float) -> void
564
+ def to_be_disabled: (?timeout: Float) -> void
565
+ def to_be_editable: (?editable: bool, ?timeout: Float) -> void
566
+ def to_be_empty: (?timeout: Float) -> void
567
+ def to_be_enabled: (?enabled: bool, ?timeout: Float) -> void
568
+ def to_be_focused: (?timeout: Float) -> void
569
+ def to_be_hidden: (?timeout: Float) -> void
570
+ def to_be_in_viewport: (?ratio: Float, ?timeout: Float) -> void
571
+ def to_be_visible: (?timeout: Float, ?visible: bool) -> void
572
+ def to_contain_text: ((String | Regexp | Array[untyped] | Array[untyped] | Array[untyped]) expected, ?ignoreCase: bool, ?timeout: Float, ?useInnerText: bool) -> void
573
+ def to_have_attribute: (String name, (String | Regexp) value, ?ignoreCase: bool, ?timeout: Float) -> void
574
+ def to_have_class: ((String | Regexp | Array[untyped] | Array[untyped] | Array[untyped]) expected, ?timeout: Float) -> void
575
+ def to_have_count: (Integer count, ?timeout: Float) -> void
576
+ def to_have_css: (String name, (String | Regexp) value, ?timeout: Float) -> void
577
+ def to_have_id: ((String | Regexp) id, ?timeout: Float) -> void
578
+ def to_have_js_property: (String name, untyped value, ?timeout: Float) -> void
579
+ def to_have_text: ((String | Regexp | Array[untyped] | Array[untyped] | Array[untyped]) expected, ?ignoreCase: bool, ?timeout: Float, ?useInnerText: bool) -> void
580
+ def to_have_value: ((String | Regexp) value, ?timeout: Float) -> void
581
+ def to_have_values: ((Array[untyped] | Array[untyped] | Array[untyped]) values, ?timeout: Float) -> void
582
+ end
583
+
541
584
  class Android
542
585
  def devices: (?host: String, ?omitDriverInstall: bool, ?port: Integer) -> Array[untyped]
543
586
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: playwright-ruby-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.39.0
4
+ version: 1.40.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - YusukeIwaki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-10-28 00:00:00.000000000 Z
11
+ date: 2023-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -233,6 +233,7 @@ files:
233
233
  - documentation/docs/api/js_handle.md
234
234
  - documentation/docs/api/keyboard.md
235
235
  - documentation/docs/api/locator.md
236
+ - documentation/docs/api/locator_assertions.md
236
237
  - documentation/docs/api/mouse.md
237
238
  - documentation/docs/api/page.md
238
239
  - documentation/docs/api/playwright.md
@@ -254,6 +255,7 @@ files:
254
255
  - documentation/docs/article/guides/rails_integration.md
255
256
  - documentation/docs/article/guides/rails_integration_with_null_driver.md
256
257
  - documentation/docs/article/guides/recording_video.md
258
+ - documentation/docs/article/guides/rspec_integration.md
257
259
  - documentation/docs/article/guides/semi_automation.md
258
260
  - documentation/docs/article/guides/use_storage_state.md
259
261
  - documentation/docs/include/api_coverage.md
@@ -326,6 +328,7 @@ files:
326
328
  - lib/playwright/javascript/value_serializer.rb
327
329
  - lib/playwright/javascript/visitor_info.rb
328
330
  - lib/playwright/keyboard_impl.rb
331
+ - lib/playwright/locator_assertions_impl.rb
329
332
  - lib/playwright/locator_impl.rb
330
333
  - lib/playwright/locator_utils.rb
331
334
  - lib/playwright/mouse_impl.rb
@@ -333,6 +336,7 @@ files:
333
336
  - lib/playwright/raw_headers.rb
334
337
  - lib/playwright/route_handler.rb
335
338
  - lib/playwright/select_option_values.rb
339
+ - lib/playwright/test.rb
336
340
  - lib/playwright/timeout_settings.rb
337
341
  - lib/playwright/touchscreen_impl.rb
338
342
  - lib/playwright/transport.rb
@@ -340,7 +344,7 @@ files:
340
344
  - lib/playwright/utils.rb
341
345
  - lib/playwright/version.rb
342
346
  - lib/playwright/video.rb
343
- - lib/playwright/wait_helper.rb
347
+ - lib/playwright/waiter.rb
344
348
  - lib/playwright/web_socket_client.rb
345
349
  - lib/playwright/web_socket_transport.rb
346
350
  - lib/playwright_api/accessibility.rb
@@ -366,6 +370,7 @@ files:
366
370
  - lib/playwright_api/js_handle.rb
367
371
  - lib/playwright_api/keyboard.rb
368
372
  - lib/playwright_api/locator.rb
373
+ - lib/playwright_api/locator_assertions.rb
369
374
  - lib/playwright_api/mouse.rb
370
375
  - lib/playwright_api/page.rb
371
376
  - lib/playwright_api/playwright.rb
@@ -401,5 +406,5 @@ requirements: []
401
406
  rubygems_version: 3.3.26
402
407
  signing_key:
403
408
  specification_version: 4
404
- summary: The Ruby binding of playwright driver 1.39.0
409
+ summary: The Ruby binding of playwright driver 1.40.1
405
410
  test_files: []
@@ -1,73 +0,0 @@
1
- module Playwright
2
- # ref: https://github.com/microsoft/playwright-python/blob/30946ae3099d51f9b7f355f9ae7e8c04d748ce36/playwright/_impl/_wait_helper.py
3
- # ref: https://github.com/microsoft/playwright/blob/01fb3a6045cbdb4b5bcba0809faed85bd917ab87/src/client/waiter.ts#L21
4
- class WaitHelper
5
- def initialize
6
- @promise = Concurrent::Promises.resolvable_future
7
- @registered_listeners = Set.new
8
- end
9
-
10
- def reject_on_event(emitter, event, error, predicate: nil)
11
- listener = -> (*args) {
12
- if !predicate || predicate.call(*args)
13
- reject(error)
14
- end
15
- }
16
- emitter.on(event, listener)
17
- @registered_listeners << [emitter, event, listener]
18
-
19
- self
20
- end
21
-
22
- def reject_on_timeout(timeout_ms, message)
23
- return if timeout_ms <= 0
24
-
25
- Concurrent::Promises.schedule(timeout_ms / 1000.0) do
26
- reject(TimeoutError.new(message: message))
27
- end
28
-
29
- self
30
- end
31
-
32
- # @param [Playwright::EventEmitter]
33
- # @param
34
- def wait_for_event(emitter, event, predicate: nil)
35
- listener = -> (*args) {
36
- begin
37
- if !predicate || predicate.call(*args)
38
- fulfill(*args)
39
- end
40
- rescue => err
41
- reject(err)
42
- end
43
- }
44
- emitter.on(event, listener)
45
- @registered_listeners << [emitter, event, listener]
46
-
47
- self
48
- end
49
-
50
- attr_reader :promise
51
-
52
- private def cleanup
53
- @registered_listeners.each do |emitter, event, listener|
54
- emitter.off(event, listener)
55
- end
56
- @registered_listeners.clear
57
- end
58
-
59
- private def fulfill(*args)
60
- cleanup
61
- unless @promise.resolved?
62
- @promise.fulfill(args.first)
63
- end
64
- end
65
-
66
- private def reject(error)
67
- cleanup
68
- unless @promise.resolved?
69
- @promise.reject(error)
70
- end
71
- end
72
- end
73
- end