capybara 3.39.2 → 3.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 (60) hide show
  1. checksums.yaml +4 -4
  2. data/History.md +22 -0
  3. data/README.md +173 -29
  4. data/lib/capybara/helpers.rb +1 -1
  5. data/lib/capybara/minitest/spec.rb +16 -4
  6. data/lib/capybara/minitest.rb +14 -1
  7. data/lib/capybara/node/matchers.rb +25 -0
  8. data/lib/capybara/node/whitespace_normalizer.rb +5 -5
  9. data/lib/capybara/queries/selector_query.rb +2 -1
  10. data/lib/capybara/rack_test/browser.rb +3 -2
  11. data/lib/capybara/rack_test/node.rb +5 -12
  12. data/lib/capybara/registration_container.rb +2 -2
  13. data/lib/capybara/registrations/drivers.rb +1 -1
  14. data/lib/capybara/registrations/servers.rb +8 -7
  15. data/lib/capybara/result.rb +2 -2
  16. data/lib/capybara/rspec/matchers/have_selector.rb +4 -12
  17. data/lib/capybara/rspec/matchers.rb +7 -2
  18. data/lib/capybara/selector/css.rb +5 -5
  19. data/lib/capybara/selector/definition/table.rb +1 -1
  20. data/lib/capybara/selector/definition/table_row.rb +2 -2
  21. data/lib/capybara/selector.rb +251 -0
  22. data/lib/capybara/selenium/driver.rb +11 -51
  23. data/lib/capybara/selenium/driver_specializations/firefox_driver.rb +1 -6
  24. data/lib/capybara/selenium/node.rb +4 -31
  25. data/lib/capybara/selenium/nodes/chrome_node.rb +3 -19
  26. data/lib/capybara/selenium/nodes/edge_node.rb +0 -16
  27. data/lib/capybara/server/animation_disabler.rb +1 -1
  28. data/lib/capybara/server.rb +1 -1
  29. data/lib/capybara/session.rb +3 -2
  30. data/lib/capybara/spec/session/all_spec.rb +1 -1
  31. data/lib/capybara/spec/session/click_link_spec.rb +1 -1
  32. data/lib/capybara/spec/session/find_spec.rb +8 -0
  33. data/lib/capybara/spec/session/has_element_spec.rb +47 -0
  34. data/lib/capybara/spec/session/has_table_spec.rb +13 -2
  35. data/lib/capybara/spec/session/node_spec.rb +6 -0
  36. data/lib/capybara/spec/session/node_wrapper_spec.rb +1 -1
  37. data/lib/capybara/spec/session/uncheck_spec.rb +1 -1
  38. data/lib/capybara/spec/spec_helper.rb +2 -2
  39. data/lib/capybara/spec/test_app.rb +1 -1
  40. data/lib/capybara/spec/views/form.erb +5 -0
  41. data/lib/capybara/spec/views/with_html.erb +2 -0
  42. data/lib/capybara/version.rb +1 -1
  43. data/lib/capybara.rb +7 -6
  44. data/spec/minitest_spec.rb +8 -1
  45. data/spec/result_spec.rb +9 -0
  46. data/spec/rspec/shared_spec_matchers.rb +26 -2
  47. data/spec/rspec_spec.rb +1 -1
  48. data/spec/sauce_spec_chrome.rb +1 -1
  49. data/spec/selector_spec.rb +1 -1
  50. data/spec/selenium_spec_chrome.rb +7 -5
  51. data/spec/selenium_spec_chrome_remote.rb +0 -5
  52. data/spec/selenium_spec_edge.rb +11 -4
  53. data/spec/selenium_spec_firefox.rb +4 -3
  54. data/spec/selenium_spec_firefox_remote.rb +2 -3
  55. data/spec/server_spec.rb +12 -0
  56. data/spec/shared_selenium_session.rb +0 -2
  57. data/spec/spec_helper.rb +2 -2
  58. metadata +25 -32
  59. data/lib/capybara/selenium/logger_suppressor.rb +0 -44
  60. data/lib/capybara/selenium/patches/action_pauser.rb +0 -26
data/spec/server_spec.rb CHANGED
@@ -118,6 +118,18 @@ RSpec.describe Capybara::Server do
118
118
  Capybara.server = :default
119
119
  end
120
120
 
121
+ it 'should not emit any warnings when booting puma' do
122
+ Capybara.server = :puma
123
+ app_proc = proc { |_env| [200, {}, ['Hello Puma!']] }
124
+ require 'puma'
125
+
126
+ expect do
127
+ described_class.new(app_proc).boot
128
+ end.not_to output.to_stderr
129
+ ensure
130
+ Capybara.server = :default
131
+ end
132
+
121
133
  it 'should support SSL' do
122
134
  key = File.join(Dir.pwd, 'spec', 'fixtures', 'key.pem')
123
135
  cert = File.join(Dir.pwd, 'spec', 'fixtures', 'certificate.pem')
@@ -281,8 +281,6 @@ RSpec.shared_examples 'Capybara::Session' do |session, mode|
281
281
  end
282
282
 
283
283
  it 'returns a shadow root' do
284
- skip 'Not supported with this Selenium version' if selenium_lt?('4.1', session)
285
- pending "Geckodriver doesn't fully support shadow root yet" if firefox?(session)
286
284
  session.visit('/with_shadow')
287
285
  shadow = session.find(:css, '#shadow_host')
288
286
  element = session.evaluate_script('arguments[0].shadowRoot', shadow)
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'rspec/expectations'
4
- require 'webdrivers' if ENV.fetch('CI', nil) || ENV.fetch('WEBDRIVERS', nil)
4
+ require 'webdrivers' if ENV.fetch('WEBDRIVERS', nil)
5
5
  require 'selenium_statistics'
6
6
  if ENV['TRAVIS']
7
7
  require 'coveralls'
@@ -114,7 +114,7 @@ module Capybara
114
114
  mod = mod::Service if ::Selenium::WebDriver::Service.respond_to? :driver_path
115
115
  path = mod.driver_path
116
116
  path = path.call if path.respond_to? :call
117
- $stdout.puts `#{path.gsub(' ', '\ ')} --version`
117
+ $stdout.puts `#{path.gsub(' ', '\ ')} --version` if path
118
118
  end
119
119
  end
120
120
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capybara
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.39.2
4
+ version: 3.40.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Walpole
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-06-10 00:00:00.000000000 Z
12
+ date: 2024-01-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: addressable
@@ -59,14 +59,14 @@ dependencies:
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: '1.8'
62
+ version: '1.11'
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '1.8'
69
+ version: '1.11'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rack
72
72
  requirement: !ruby/object:Gem::Requirement
@@ -241,6 +241,20 @@ dependencies:
241
241
  - - ">="
242
242
  - !ruby/object:Gem::Version
243
243
  version: '0'
244
+ - !ruby/object:Gem::Dependency
245
+ name: rackup
246
+ requirement: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ type: :development
252
+ prerelease: false
253
+ version_requirements: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - ">="
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
244
258
  - !ruby/object:Gem::Dependency
245
259
  name: rake
246
260
  requirement: !ruby/object:Gem::Requirement
@@ -385,22 +399,16 @@ dependencies:
385
399
  name: selenium-webdriver
386
400
  requirement: !ruby/object:Gem::Requirement
387
401
  requirements:
388
- - - ">="
389
- - !ruby/object:Gem::Version
390
- version: 3.142.7
391
- - - "<"
402
+ - - "~>"
392
403
  - !ruby/object:Gem::Version
393
- version: '5.0'
404
+ version: '4.8'
394
405
  type: :development
395
406
  prerelease: false
396
407
  version_requirements: !ruby/object:Gem::Requirement
397
408
  requirements:
398
- - - ">="
399
- - !ruby/object:Gem::Version
400
- version: 3.142.7
401
- - - "<"
409
+ - - "~>"
402
410
  - !ruby/object:Gem::Version
403
- version: '5.0'
411
+ version: '4.8'
404
412
  - !ruby/object:Gem::Dependency
405
413
  name: sinatra
406
414
  requirement: !ruby/object:Gem::Requirement
@@ -429,20 +437,6 @@ dependencies:
429
437
  - - ">="
430
438
  - !ruby/object:Gem::Version
431
439
  version: '0'
432
- - !ruby/object:Gem::Dependency
433
- name: webdrivers
434
- requirement: !ruby/object:Gem::Requirement
435
- requirements:
436
- - - ">="
437
- - !ruby/object:Gem::Version
438
- version: 3.6.0
439
- type: :development
440
- prerelease: false
441
- version_requirements: !ruby/object:Gem::Requirement
442
- requirements:
443
- - - ">="
444
- - !ruby/object:Gem::Version
445
- version: 3.6.0
446
440
  - !ruby/object:Gem::Dependency
447
441
  name: yard
448
442
  requirement: !ruby/object:Gem::Requirement
@@ -577,14 +571,12 @@ files:
577
571
  - lib/capybara/selenium/extensions/html5_drag.rb
578
572
  - lib/capybara/selenium/extensions/modifier_keys_stack.rb
579
573
  - lib/capybara/selenium/extensions/scroll.rb
580
- - lib/capybara/selenium/logger_suppressor.rb
581
574
  - lib/capybara/selenium/node.rb
582
575
  - lib/capybara/selenium/nodes/chrome_node.rb
583
576
  - lib/capybara/selenium/nodes/edge_node.rb
584
577
  - lib/capybara/selenium/nodes/firefox_node.rb
585
578
  - lib/capybara/selenium/nodes/ie_node.rb
586
579
  - lib/capybara/selenium/nodes/safari_node.rb
587
- - lib/capybara/selenium/patches/action_pauser.rb
588
580
  - lib/capybara/selenium/patches/atoms.rb
589
581
  - lib/capybara/selenium/patches/is_displayed.rb
590
582
  - lib/capybara/selenium/patches/logs.rb
@@ -654,6 +646,7 @@ files:
654
646
  - lib/capybara/spec/session/has_button_spec.rb
655
647
  - lib/capybara/spec/session/has_css_spec.rb
656
648
  - lib/capybara/spec/session/has_current_path_spec.rb
649
+ - lib/capybara/spec/session/has_element_spec.rb
657
650
  - lib/capybara/spec/session/has_field_spec.rb
658
651
  - lib/capybara/spec/session/has_link_spec.rb
659
652
  - lib/capybara/spec/session/has_none_selectors_spec.rb
@@ -799,14 +792,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
799
792
  requirements:
800
793
  - - ">="
801
794
  - !ruby/object:Gem::Version
802
- version: 2.7.0
795
+ version: 3.0.0
803
796
  required_rubygems_version: !ruby/object:Gem::Requirement
804
797
  requirements:
805
798
  - - ">="
806
799
  - !ruby/object:Gem::Version
807
800
  version: '0'
808
801
  requirements: []
809
- rubygems_version: 3.3.7
802
+ rubygems_version: 3.4.19
810
803
  signing_key:
811
804
  specification_version: 4
812
805
  summary: Capybara aims to simplify the process of integration testing Rack applications,
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Capybara
4
- module Selenium
5
- module DeprecationSuppressor
6
- def initialize(...)
7
- @suppress_for_capybara = false
8
- super
9
- end
10
-
11
- def deprecate(*args, **opts, &block)
12
- return if @suppress_for_capybara
13
-
14
- if opts.empty?
15
- super(*args, &block) # support Selenium 3
16
- else
17
- super
18
- end
19
- end
20
-
21
- def warn(*args, **opts)
22
- super unless @suppress_for_capybara
23
- end
24
-
25
- def suppress_deprecations
26
- prev_suppress_for_capybara, @suppress_for_capybara = @suppress_for_capybara, true
27
- yield
28
- ensure
29
- @suppress_for_capybara = prev_suppress_for_capybara
30
- end
31
- end
32
-
33
- module ErrorSuppressor
34
- def for_code(...)
35
- ::Selenium::WebDriver.logger.suppress_deprecations do
36
- super
37
- end
38
- end
39
- end
40
- end
41
- end
42
-
43
- Selenium::WebDriver::Logger.prepend Capybara::Selenium::DeprecationSuppressor
44
- Selenium::WebDriver::Error.singleton_class.prepend Capybara::Selenium::ErrorSuppressor
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActionPauser
4
- def initialize(mouse, keyboard)
5
- super
6
- @devices[:pauser] = Pauser.new
7
- end
8
-
9
- def pause(duration)
10
- @actions << [:pauser, :pause, [duration]]
11
- self
12
- end
13
-
14
- class Pauser
15
- def pause(duration)
16
- sleep duration
17
- end
18
- end
19
-
20
- private_constant :Pauser
21
- end
22
-
23
- if defined?(Selenium::WebDriver::VERSION) && (Gem::Version.new(Selenium::WebDriver::VERSION) < Gem::Version.new('4')) &&
24
- defined?(Selenium::WebDriver::ActionBuilder)
25
- Selenium::WebDriver::ActionBuilder.prepend(ActionPauser)
26
- end