capybara-playwright-driver 0.5.4 → 0.5.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a279b6e3fb53216312d0acfb25cab1b393a122f777c65729df720b77f6bd0a17
4
- data.tar.gz: 21f8543b574eeebe80fe02261020aa6430a4aa4a280718d1deb2fcd7cde24f1e
3
+ metadata.gz: 518d6724c448e420fa844cbd57d30859ad8cc8bdc20348c9d9dc5ffdf819866f
4
+ data.tar.gz: 61ca17f8d89db0c48b4fe5a95b57462b389f2307e9185108779d5bcb5cb075b2
5
5
  SHA512:
6
- metadata.gz: c0107a7bc12828a7022a4dbe12d371c8a38a58a98a136bb819cbff329b9c949ea785fdafdd8ed45ff2eb9aa176df7c962737aa1139cebe921e1458c3d56817da
7
- data.tar.gz: cbe1c778c7996168db5e0d67e9869afc267ffff30c7c686f9ccc03c87ff1afa98eb21d4b77e5fcc3098c762b1fad255f9cd066b9b9e59b7e456838c4be97ef76
6
+ metadata.gz: a873fe231de97cdcc86a541c3eb462b438cafe4d8582f2e3050b3e75e60d7dc8b79420dd81dbcf746ce637f5f834636c35f43b0534b3638d78ca67f4bdc91656
7
+ data.tar.gz: f4455bf145a28e9e102ff21b0f75fbfe026d1d0f888d55b874bdc6d38bec287a4fd1e6402d3623154c10f18377a3fa2bfdf383e1c8bc0bb888eb5712f9123211
data/Gemfile CHANGED
@@ -6,3 +6,14 @@ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
6
 
7
7
  # Specify your gem's dependencies in capybara-playwright.gemspec
8
8
  gemspec
9
+
10
+ gem 'allure-rspec'
11
+ gem 'bundler'
12
+ gem 'launchy', '>= 2.0.4'
13
+ gem 'pry-byebug'
14
+ gem 'rack-test_server'
15
+ gem 'rake', '~> 13.0.3'
16
+ gem 'rspec', '~> 3.11.0'
17
+ gem 'rubocop-rspec'
18
+ gem 'sinatra', '>= 1.4.0'
19
+ gem 'webrick'
@@ -28,14 +28,4 @@ Gem::Specification.new do |spec|
28
28
  spec.add_dependency 'addressable'
29
29
  spec.add_dependency 'capybara'
30
30
  spec.add_dependency 'playwright-ruby-client', '>= 1.16.0'
31
- spec.add_development_dependency 'allure-rspec'
32
- spec.add_development_dependency 'bundler'
33
- spec.add_development_dependency 'launchy', '>= 2.0.4'
34
- spec.add_development_dependency 'pry-byebug'
35
- spec.add_development_dependency 'rack-test_server'
36
- spec.add_development_dependency 'rake', '~> 13.0.3'
37
- spec.add_development_dependency 'rspec', '~> 3.11.0'
38
- spec.add_development_dependency 'rubocop-rspec'
39
- spec.add_development_dependency 'sinatra', '>= 1.4.0'
40
- spec.add_development_dependency 'webrick'
41
31
  end
@@ -15,8 +15,9 @@ module Capybara
15
15
 
16
16
  class NoSuchWindowError < StandardError ; end
17
17
 
18
- def initialize(driver:, playwright_browser:, page_options:, record_video: false, callback_on_save_trace: nil, default_timeout: nil, default_navigation_timeout: nil)
18
+ def initialize(driver:, internal_logger:, playwright_browser:, page_options:, record_video: false, callback_on_save_trace: nil, default_timeout: nil, default_navigation_timeout: nil)
19
19
  @driver = driver
20
+ @internal_logger = internal_logger
20
21
  @playwright_browser = playwright_browser
21
22
  @page_options = page_options
22
23
  if record_video
@@ -36,6 +37,7 @@ module Capybara
36
37
  unless @playwright_page
37
38
  @playwright_page = page
38
39
  end
40
+ page.send(:_update_internal_logger, @internal_logger)
39
41
  })
40
42
  if @callback_on_save_trace
41
43
  browser_context.tracing.start(screenshots: true, snapshots: true)
@@ -95,7 +97,7 @@ module Capybara
95
97
  def find_xpath(query, **options)
96
98
  assert_page_alive {
97
99
  @playwright_page.capybara_current_frame.query_selector_all("xpath=#{query}").map do |el|
98
- Node.new(@driver, @playwright_page, el)
100
+ Node.new(@driver, @internal_logger, @playwright_page, el)
99
101
  end
100
102
  }
101
103
  end
@@ -103,7 +105,7 @@ module Capybara
103
105
  def find_css(query, **options)
104
106
  assert_page_alive {
105
107
  @playwright_page.capybara_current_frame.query_selector_all(query).map do |el|
106
- Node.new(@driver, @playwright_page, el)
108
+ Node.new(@driver, @internal_logger, @playwright_page, el)
107
109
  end
108
110
  }
109
111
  end
@@ -185,7 +187,7 @@ module Capybara
185
187
  def active_element
186
188
  el = @playwright_page.capybara_current_frame.evaluate_handle('() => document.activeElement')
187
189
  if el
188
- Node.new(@driver, @playwright_page, el)
190
+ Node.new(@driver, @internal_logger, @playwright_page, el)
189
191
  else
190
192
  nil
191
193
  end
@@ -252,7 +254,7 @@ module Capybara
252
254
  /Cannot find context with specified id/,
253
255
  /Unable to adopt element handle from a different document/
254
256
  # ignore error for retry
255
- puts "[WARNING] #{err.message}"
257
+ @internal_logger.warn(err.message)
256
258
  else
257
259
  raise
258
260
  end
@@ -324,7 +326,7 @@ module Capybara
324
326
  end
325
327
 
326
328
  def maximize_window(handle)
327
- puts "[WARNING] maximize_window is not supported in Playwright driver"
329
+ @internal_logger.warn("maximize_window is not supported in Playwright driver")
328
330
  # incomplete in Playwright
329
331
  # ref: https://github.com/twalpole/apparition/blob/11aca464b38b77585191b7e302be2e062bdd369d/lib/capybara/apparition/page.rb#L346
330
332
  on_window(handle) do |page|
@@ -334,7 +336,7 @@ module Capybara
334
336
  end
335
337
 
336
338
  def fullscreen_window(handle)
337
- puts "[WARNING] fullscreen_window is not supported in Playwright driver"
339
+ @internal_logger.warn("fullscreen_window is not supported in Playwright driver")
338
340
  # incomplete in Playwright
339
341
  # ref: https://github.com/twalpole/apparition/blob/11aca464b38b77585191b7e302be2e062bdd369d/lib/capybara/apparition/page.rb#L341
340
342
  on_window(handle) do |page|
@@ -375,7 +377,7 @@ module Capybara
375
377
  [key, wrap_node(value)]
376
378
  end.to_h
377
379
  when ::Playwright::ElementHandle
378
- Node.new(@driver, @playwright_page, arg)
380
+ Node.new(@driver, @internal_logger, @playwright_page, arg)
379
381
  when ::Playwright::JSHandle
380
382
  obj_type, is_array = arg.evaluate('obj => [typeof obj, Array.isArray(obj)]')
381
383
  if obj_type == 'object'
@@ -20,6 +20,7 @@ module Capybara
20
20
  headless: nil,
21
21
  ignoreDefaultArgs: nil,
22
22
  proxy: nil,
23
+ reducedMotion: nil,
23
24
  slowMo: nil,
24
25
  # timeout: nil,
25
26
  tracesDir: nil,
@@ -18,6 +18,7 @@ module Capybara
18
18
  if options[:default_navigation_timeout].is_a?(Numeric)
19
19
  @default_navigation_timeout = options[:default_navigation_timeout] * 1000
20
20
  end
21
+ @internal_logger = options[:logger] || default_logger
21
22
  end
22
23
 
23
24
  def wait?; true; end
@@ -26,6 +27,7 @@ module Capybara
26
27
  private def browser
27
28
  @browser ||= ::Capybara::Playwright::Browser.new(
28
29
  driver: self,
30
+ internal_logger: @internal_logger,
29
31
  playwright_browser: playwright_browser,
30
32
  page_options: @page_options.value,
31
33
  record_video: callback_on_save_screenrecord?,
@@ -52,6 +54,27 @@ module Capybara
52
54
  @browser_runner.start
53
55
  end
54
56
 
57
+ private def default_logger
58
+ if defined?(Rails)
59
+ Rails.logger
60
+ else
61
+ PutsLogger.new
62
+ end
63
+ end
64
+
65
+ # Since existing user already monkey-patched Kernel#puts,
66
+ # (https://gist.github.com/searls/9caa12f66c45a72e379e7bfe4c48405b)
67
+ # Logger.new(STDOUT) should be avoided to use.
68
+ class PutsLogger
69
+ def info(message)
70
+ puts "[INFO] #{message}"
71
+ end
72
+
73
+ def warn(message)
74
+ puts "[WARNING] #{message}"
75
+ end
76
+ end
77
+
55
78
  private def quit
56
79
  @playwright_browser&.close
57
80
  @playwright_browser = nil
@@ -67,8 +67,9 @@ module Capybara
67
67
  # selenium: https://github.com/teamcapybara/capybara/blob/master/lib/capybara/selenium/node.rb
68
68
  # apparition: https://github.com/twalpole/apparition/blob/master/lib/capybara/apparition/node.rb
69
69
  class Node < ::Capybara::Driver::Node
70
- def initialize(driver, page, element)
70
+ def initialize(driver, internal_logger, page, element)
71
71
  super(driver, element)
72
+ @internal_logger = internal_logger
72
73
  @page = page
73
74
  @element = element
74
75
  end
@@ -212,15 +213,16 @@ module Capybara
212
213
  end
213
214
  end
214
215
 
215
- settable_class.new(@element, capybara_default_wait_time).set(value, **options)
216
+ settable_class.new(@element, capybara_default_wait_time, @internal_logger).set(value, **options)
216
217
  rescue ::Playwright::TimeoutError => err
217
218
  raise NotActionableError.new(err)
218
219
  end
219
220
 
220
221
  class Settable
221
- def initialize(element, timeout)
222
+ def initialize(element, timeout, internal_logger)
222
223
  @element = element
223
224
  @timeout = timeout
225
+ @internal_logger = internal_logger
224
226
  end
225
227
  end
226
228
 
@@ -252,7 +254,7 @@ module Capybara
252
254
  rescue ::Playwright::TimeoutError
253
255
  raise if @element.editable?
254
256
 
255
- puts "[INFO] Node#set: element is not editable. #{@element}"
257
+ @internal_logger.info("Node#set: element is not editable. #{@element}")
256
258
  end
257
259
  end
258
260
 
@@ -924,7 +926,7 @@ module Capybara
924
926
  # Node.new(@driver, @page, @element.evaluate_handle('el => el.shadowRoot'))
925
927
  #
926
928
  # does not work well because of the Playwright Error 'Element is not attached to the DOM'
927
- ShadowRootNode.new(@driver, @page, @element)
929
+ ShadowRootNode.new(@driver, @internal_logger, @page, @element)
928
930
  end
929
931
 
930
932
  def inspect
@@ -940,7 +942,7 @@ module Capybara
940
942
  def find_xpath(query, **options)
941
943
  assert_element_not_stale {
942
944
  @element.query_selector_all("xpath=#{query}").map do |el|
943
- Node.new(@driver, @page, el)
945
+ Node.new(@driver, @internal_logger, @page, el)
944
946
  end
945
947
  }
946
948
  end
@@ -948,7 +950,7 @@ module Capybara
948
950
  def find_css(query, **options)
949
951
  assert_element_not_stale {
950
952
  @element.query_selector_all(query).map do |el|
951
- Node.new(@driver, @page, el)
953
+ Node.new(@driver, @internal_logger, @page, el)
952
954
  end
953
955
  }
954
956
  end
@@ -12,6 +12,10 @@ module Capybara
12
12
  capybara_initialize
13
13
  end
14
14
 
15
+ private def _update_internal_logger(internal_logger)
16
+ @internal_logger = internal_logger
17
+ end
18
+
15
19
  private def capybara_initialize
16
20
  @capybara_all_responses = {}
17
21
  @capybara_last_response = nil
@@ -44,7 +48,7 @@ module Capybara
44
48
  end
45
49
 
46
50
  private def capybara_on_unexpected_modal(dialog)
47
- puts "[WARNING] Unexpected modal - \"#{dialog.message}\""
51
+ @internal_logger.warn "Unexpected modal - \"#{dialog.message}\""
48
52
  if dialog.type == 'beforeunload'
49
53
  dialog.accept_async
50
54
  else
@@ -99,7 +103,7 @@ module Capybara
99
103
  message_promise.fulfill(message)
100
104
  acceptor.handle(dialog)
101
105
  else
102
- message_promise.reject(Capybara::ModalNotFound.new("Dialog message=\"#{message}\" dowsn't match"))
106
+ message_promise.reject(Capybara::ModalNotFound.new("Dialog message=\"#{message}\" doesn't match"))
103
107
  dialog.dismiss
104
108
  end
105
109
  }
@@ -125,7 +129,7 @@ module Capybara
125
129
  if matcher.matches?(message)
126
130
  message_promise.fulfill(message)
127
131
  else
128
- message_promise.reject(Capybara::ModalNotFound.new("Dialog message=\"#{message}\" dowsn't match"))
132
+ message_promise.reject(Capybara::ModalNotFound.new("Dialog message=\"#{message}\" doesn't match"))
129
133
  end
130
134
  dialog.dismiss
131
135
  }
@@ -3,7 +3,7 @@ require_relative './node'
3
3
  module Capybara
4
4
  module Playwright
5
5
  class ShadowRootNode < Node
6
- def initialize(driver, page, element)
6
+ def initialize(driver, internal_logger, page, element)
7
7
  super
8
8
  @shadow_roow_element = element.evaluate_handle('el => el.shadowRoot')
9
9
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Capybara
4
4
  module Playwright
5
- VERSION = '0.5.4'
5
+ VERSION = '0.5.5'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capybara-playwright-driver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.4
4
+ version: 0.5.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - YusukeIwaki
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-12-21 00:00:00.000000000 Z
11
+ date: 2025-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -52,147 +52,7 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.16.0
55
- - !ruby/object:Gem::Dependency
56
- name: allure-rspec
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: bundler
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: launchy
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: 2.0.4
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: 2.0.4
97
- - !ruby/object:Gem::Dependency
98
- name: pry-byebug
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: rack-test_server
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: rake
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: 13.0.3
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: 13.0.3
139
- - !ruby/object:Gem::Dependency
140
- name: rspec
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: 3.11.0
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: 3.11.0
153
- - !ruby/object:Gem::Dependency
154
- name: rubocop-rspec
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- version: '0'
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: '0'
167
- - !ruby/object:Gem::Dependency
168
- name: sinatra
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- version: 1.4.0
174
- type: :development
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - ">="
179
- - !ruby/object:Gem::Version
180
- version: 1.4.0
181
- - !ruby/object:Gem::Dependency
182
- name: webrick
183
- requirement: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - ">="
186
- - !ruby/object:Gem::Version
187
- version: '0'
188
- type: :development
189
- prerelease: false
190
- version_requirements: !ruby/object:Gem::Requirement
191
- requirements:
192
- - - ">="
193
- - !ruby/object:Gem::Version
194
- version: '0'
195
- description:
55
+ description:
196
56
  email:
197
57
  - q7w8e9w8q7w8e9@yahoo.co.jp
198
58
  executables: []
@@ -226,7 +86,7 @@ homepage: https://github.com/YusukeIwaki/capybara-playwright-driver
226
86
  licenses:
227
87
  - MIT
228
88
  metadata: {}
229
- post_install_message:
89
+ post_install_message:
230
90
  rdoc_options: []
231
91
  require_paths:
232
92
  - lib
@@ -242,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
242
102
  version: '0'
243
103
  requirements: []
244
104
  rubygems_version: 3.5.22
245
- signing_key:
105
+ signing_key:
246
106
  specification_version: 4
247
107
  summary: Playwright driver for Capybara
248
108
  test_files: []